Commit 60e43964 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

add dummy layoutText method

parent 7eaf63cb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ add_library(signaltk STATIC
    src/signaltk/plot/series.cc
    src/signaltk/plot/timedomain.cc
    src/signaltk/plot/plot_api.cc
    src/signaltk/text/text_layout.cc
    src/signaltk/text/text_shaper.cc
    src/signaltk/util/random.cc
    src/signaltk/util/bufferutil.cc
+3 −1
Original line number Diff line number Diff line
@@ -19,7 +19,9 @@ struct Context {
};

enum Status : int {
  OK, ERROR
  OK,
  ERROR,
  ERROR_NOT_IMPLEMENTED
};

struct Command {
+3 −2
Original line number Diff line number Diff line
@@ -54,9 +54,10 @@ Status Rasterizer::drawTextGlyphs(
  }

  auto cairo_font = cairo_ft_font_face_create_for_ft_face(ft_font, 0);
  auto cairo_glyphs = static_cast<cairo_glyph_t*>(malloc(sizeof(cairo_glyph_t) * glyph_count));
  auto cairo_glyphs = cairo_glyph_allocate(glyph_count);

  for (int i = 0; i < glyph_count; ++i) {
    printf("render glyph @ %f, %f\n", glyphs[i].x, glyphs[i].y);
    cairo_glyphs[i].index = glyphs[i].codepoint;
    cairo_glyphs[i].x = glyphs[i].x;
    cairo_glyphs[i].y = glyphs[i].y;
@@ -67,7 +68,7 @@ Status Rasterizer::drawTextGlyphs(
  cairo_set_font_size(ctx, font_info.font_size);
  cairo_show_glyphs(ctx, cairo_glyphs, glyph_count);

  free(cairo_glyphs);
  cairo_glyph_free(cairo_glyphs);
  FT_Done_Face(ft_font);

  return OK;
+11 −10
Original line number Diff line number Diff line
@@ -9,11 +9,13 @@
 */
#include <signaltk/core/text.h>
#include <signaltk/text/text_shaper.h>
#include <signaltk/text/text_layout.h>
#include <signaltk/core/layer.h>

namespace signaltk {

TextStyle::TextStyle() :
    direction(TextDirection::LTR),
    halign(TextHAlign::LEFT),
    valign(TextVAlign::CENTER),
    font_size(32) {}
@@ -29,21 +31,20 @@ Status drawText(

  FontInfo font_info {
    .font_file = "/Library/Fonts/Arial.ttf",
    .font_size = 42
    .font_size = 16
  };

  std::vector<GlyphPlacement> glyphs;
  auto rc = layer->text_shaper.shapeText(
  auto rc = text::layoutText(
      text,
      x,
      y,
      font_info,
      [&glyphs] (const text::TextShaper::GlyphPlacement& gi) {
         GlyphPlacement g;
         glyphs.emplace_back(GlyphPlacement {
           .codepoint = gi.codepoint,
           .x = 100,
           .y = 100
         });
      });
      text_style.direction,
      text_style.halign,
      text_style.valign,
      &layer->text_shaper,
      [&glyphs] (const GlyphPlacement& g) { glyphs.emplace_back(g); });

  if (rc != OK) {
    return rc;
+11 −0
Original line number Diff line number Diff line
@@ -14,6 +14,10 @@
namespace signaltk {
class Layer;

enum class TextDirection {
  LTR, RTL
};

enum class TextHAlign {
  LEFT, CENTER, RIGHT
};
@@ -24,6 +28,7 @@ enum class TextVAlign {

struct TextStyle {
  TextStyle();
  TextDirection direction;
  TextHAlign halign;
  TextVAlign valign;
  double font_size;
@@ -34,6 +39,12 @@ struct FontInfo {
  double font_size;
};

struct GlyphInfo {
  uint32_t codepoint;
  double advance_y;
  double advance_x;
};

struct GlyphPlacement {
  uint32_t codepoint;
  double x;
Loading