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 <[email protected]>: > 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 >> [email protected] >> http://mail.gnome.org/mailman/listinfo/gtk-i18n-list >> _______________________________________________ gtk-i18n-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtk-i18n-list
