diff --git a/c++/freetype/src/freetypeview.cpp b/c++/freetype/src/freetypeview.cpp index bf4941a..856321e 100644 --- a/c++/freetype/src/freetypeview.cpp +++ b/c++/freetype/src/freetypeview.cpp @@ -29,7 +29,7 @@ FreeTypeView::FreeTypeView(): set_size_request(400, 400); - params.family = "Ani"; + params.family = "DjVu"; params.bold = false; params.italic = false; params.size = 12; @@ -53,7 +53,7 @@ FreeTypeView::FreeTypeView(): //params.text = "1\n2\n3\n"; params.alignment = -1; - params.justify = true; + params.justify = false; params.wrap_width = 600; params.alignment_by_origin = true; diff --git a/c++/freetype/src/labpangorenderer.cpp b/c++/freetype/src/labpangorenderer.cpp index 36e901f..fe01c72 100644 --- a/c++/freetype/src/labpangorenderer.cpp +++ b/c++/freetype/src/labpangorenderer.cpp @@ -112,17 +112,27 @@ lab_pango_renderer_draw_glyph( const IntPair2 surface_bounds( IntVector2(0, 0), IntVector2(params.surface->width(), params.surface->height()) ); - const Vector3 pos = params.matrix*Vector3(x, y, 1); + + FT_Face face = pango_fc_font_lock_face((PangoFcFont*)font); + + // find glyph center for proper scaling + Vector2 origin; + FT_Set_Transform(face, nullptr, nullptr); + if (!FT_Load_Glyph(face, glyph, FT_LOAD_NO_HINTING)) { + const FT_Glyph_Metrics &metrics = face->glyph->metrics; + origin = Vector2(metrics.horiBearingX - metrics.vertBearingX, 0)/64; + } + // prepare transformation + const Vector2 pos = (params.matrix*Vector3(x + origin.x, y + origin.y, 1)).vec2() + - params.glyph_matrix*origin; const int fx = (int)round(pos.x*64); const int fy = (int)round(pos.y*64); int ix = fx / 64; int iy = fy / 64; - FT_Vector vec = {}; vec.x = fx % 64; vec.y = fy % 64; - if (params.hinting) { if (vec.x >= 32) ++ix; if (vec.y >= 32) ++iy; @@ -137,7 +147,7 @@ lab_pango_renderer_draw_glyph( mat.yx = (int)round(-params.glyph_matrix.m01*65536); mat.yy = (int)round( params.glyph_matrix.m11*65536); - FT_Face face = pango_fc_font_lock_face((PangoFcFont*)font); + // draw FT_Set_Transform(face, &mat, &vec); if (!FT_Load_Glyph(face, glyph, params.hinting ? FT_LOAD_DEFAULT : FT_LOAD_NO_HINTING)) { const FT_Glyph_Metrics &metrics = face->glyph->metrics; @@ -170,6 +180,7 @@ lab_pango_renderer_draw_glyph( } } } + pango_fc_font_unlock_face((PangoFcFont*)font); }