Re: PangoGlyphString + PangoLayout?



Would it be possible for somebody to provide an example or a link to
example of how to use pango_module_register()? I tried looking for any
example, but was not able to find one. I am new at using pango and
from very beginning I see a lack of any examples of how to actualy use
it.

2012/3/6 Behdad Esfahbod <behdad behdad org>:
> You have a better luck just copying basic-fc.c and modifying it, and either
> installing your module on the system or register it using pango_module_register().
>
> behdad
>
> On 03/01/2012 08:28 AM, Mindaugas Jaunius wrote:
>> Hi,
>>
>> To be able to fully control open type font features (liga, smcp, ssup)
>> I ended up using PangoOTBuffer not just PangoLayout. No the problem I
>> run into is that the output of PangoOTBuffer is PangoGlyphString. The
>> only function I found to show it is pango_cairo_show_glyph_string(cr,
>> font, glyphString), but this function shows the full PangoGlyphString
>> in one line and does not create a wraping paragraph on PangoLayout. No
>> is there a way to give my PangoGlyphString from PangoOTBuffer to
>> PangoLayout?
>>
>> Below is some code of how I am using PangoOTBuffer now. Mainly I used
>> code from pango modules class basic-fc.c as an example. Any comments
>> and critiques on the code are welcomed.
>>
>> const char foo[] = "ffi ff fl Wa VA";
>>
>> static const PangoOTFeatureMap gsub_features[] =
>> {
>>   {"ccmp", PANGO_OT_ALL_GLYPHS},
>>   {"locl", PANGO_OT_ALL_GLYPHS},
>>   {"liga", PANGO_OT_ALL_GLYPHS},
>>   {"clig", PANGO_OT_ALL_GLYPHS}
>> };
>>
>> static const PangoOTFeatureMap gpos_features[] =
>> {
>>   {"kern", PANGO_OT_ALL_GLYPHS},
>>   {"mark", PANGO_OT_ALL_GLYPHS},
>>   {"mkmk", PANGO_OT_ALL_GLYPHS}
>> };
>>
>> cairo_t *cr = cairo_create(surface);
>> cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); // sets the background color to white
>> cairo_paint(cr);
>>
>> PangoLayout *layout; // layout for a paragraph of text
>> layout = pango_cairo_create_layout(cr);
>>
>> PangoFontDescription *descFont;
>> pango_layout_set_text(layout, foo, -1);
>> pango_layout_set_width(layout, width * PANGO_SCALE);
>> descFont = pango_font_description_from_string("Fedra Serif Pro A Book 20");
>> pango_layout_set_font_description(layout, descFont);
>> pango_font_description_free(descFont);
>>
>> cairo_move_to(cr, 20, 40);
>> cairo_set_line_width(cr, 1.0); // sets the line width, default is 2.0
>>
>> cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); // set the colour to black
>>
>> pango_cairo_update_layout(cr, layout); // update layout
>>
>> PangoLayoutIter *iter = NULL;
>> iter = pango_layout_get_iter(layout);
>>
>> PangoLayoutRun *run = NULL;
>> run = pango_layout_iter_get_run_readonly(iter);
>>
>> PangoFont *font = run->item->analysis.font; // get PangoFont of Fedra Serif
>>
>> PangoFcFont *fc_font = PANGO_FC_FONT(font);
>>
>> PangoOTBuffer *otBuffer;
>> otBuffer = pango_ot_buffer_new(fc_font);
>>
>> glong n_chars = g_utf8_strlen(foo, strlen(foo));
>> PangoGlyphString *glyphs = pango_glyph_string_new();
>>
>> const char *p = foo;
>> int cluster = 0;
>> int i;
>> FT_Face face;
>> PangoOTRulesetDescription desc;
>> const PangoOTRuleset *ruleset;
>>
>> face = pango_fc_font_lock_face(fc_font);
>> if (!face) {
>> LOGE("Can not lock fc font face");
>> }
>>
>> // add all glyphs to otBuffer
>> for (i = 0; i < n_chars; i++) {
>> gunichar wc;
>> PangoGlyph glyph;
>>
>> wc = g_utf8_get_char(p);
>>
>> if (g_unichar_type(wc) != G_UNICODE_NON_SPACING_MARK)
>>       cluster = p - foo1;
>>
>> if (pango_is_zero_width(wc))
>>       glyph = PANGO_GLYPH_EMPTY;
>> else {
>>       gunichar c = wc;
>>
>>       if (run->item->analysis.level % 2)
>>               g_unichar_get_mirror_char(c, &c);
>>
>>       glyph = pango_fc_font_get_glyph(fc_font, c);
>> }
>>
>> if (!glyph)
>>       glyph = PANGO_GET_UNKNOWN_GLYPH(wc);
>>
>> pango_ot_buffer_add_glyph(otBuffer, glyph, 0, cluster);
>>
>> p = g_utf8_next_char(p);
>> }
>>
>> // apply open type features
>> desc.script = run->item->analysis.script;
>> desc.language = run->item->analysis.language;
>> desc.n_static_gsub_features = G_N_ELEMENTS(gsub_features);
>> desc.static_gsub_features = gsub_features;
>> desc.n_static_gpos_features = G_N_ELEMENTS(gpos_features);
>> desc.static_gpos_features = gpos_features;
>> desc.n_other_features = 0;
>> desc.other_features = NULL;
>>
>> ruleset = pango_ot_ruleset_get_for_description(pango_ot_info_get(face), &desc);
>>
>> pango_ot_ruleset_substitute(ruleset, otBuffer);
>> pango_ot_ruleset_position(ruleset, otBuffer);
>>
>> // output from otBuffer to PangoGlyphString
>> pango_ot_buffer_output(otBuffer, glyphs);
>>
>> pango_cairo_show_glyph_string(cr, font, glyphs);
>>
>> -mindaugas
>> _______________________________________________
>> gtk-i18n-list mailing list
>> gtk-i18n-list gnome org
>> http://mail.gnome.org/mailman/listinfo/gtk-i18n-list
>>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]