diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-05-07 04:06:29 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-05-07 04:06:29 +0000 |
commit | 1a9eb53c12b49c53aaaf56ef40220c28bd13df84 (patch) | |
tree | fd8a5035b8606576ef7c9b9fa2366d4f7880b94e /modules/basic/basic.c | |
parent | adf1db25a516e1a8b02b89de216e2b42ef1d7639 (diff) | |
download | pango-1a9eb53c12b49c53aaaf56ef40220c28bd13df84.tar.gz |
When handling overstrikes, try to guess a bit better how overstrike glyphs
Sun May 7 00:00:00 2000 Owen Taylor <otaylor@redhat.com>
* modules/basic/basic.c (basic_engine_shape): When
handling overstrikes, try to guess a bit better
how overstrike glyphs are positioned in the font.
(Now works with more of glyphs from clearlyu, though
not the Hebrew accents in that font)
* examples/HELLO.utf8: Insert tab characters to
keep the columns in the right order for either
global direction. Insert left-to-right marks in
a few places to keep leading and trailing punctuation
in the right place.
* modules/basic/basic.c (basic_engine_shape): Don't
show RLM and LRM
* pango/glyphstring.c (pango_glyph_string_extents): Use
the logical width set in the glyph string rather than
that from the font's metrics.
* pango/pangox.c (pango_x_render): Treat glyph index
0 as special - representing invisible, 0 size
character. We need this sometimes, and it is
easier and faster to have this special case
than to shape a space.
* pango/pango-context.c (pango_itemize): Put
tabs into separate items. (Sort of lame hack,
we do this to make line breaking with tab
handling simpler)
* examples/viewer.c (checkbutton_toggled): Notify
all the layouts that the context has changed so
the RTL base dir change actually takes effect.
Diffstat (limited to 'modules/basic/basic.c')
-rw-r--r-- | modules/basic/basic.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/modules/basic/basic.c b/modules/basic/basic.c index 6c851228..e78aa384 100644 --- a/modules/basic/basic.c +++ b/modules/basic/basic.c @@ -401,16 +401,9 @@ basic_engine_shape (PangoFont *font, input = buf; } - if (wc == 0x200B) /* Zero-width space */ + if (wc == 0x200B || wc == 0x200E || wc == 0x200F) /* Zero-width characters */ { - index = find_char (cache, font, ' ', input); - if (index) - { - set_glyph (font, glyphs, i, p - text, index); - glyphs->glyphs[i].geometry.width = 0; - } - else - set_glyph (font, glyphs, i, p - text, pango_x_get_unknown_glyph (font)); + set_glyph (font, glyphs, i, p - text, 0); } else { @@ -423,10 +416,19 @@ basic_engine_shape (PangoFont *font, { if (i > 0) { + PangoRectangle logical_rect, ink_rect; + glyphs->glyphs[i].geometry.width = MAX (glyphs->glyphs[i-1].geometry.width, glyphs->glyphs[i].geometry.width); glyphs->glyphs[i-1].geometry.width = 0; glyphs->log_clusters[i] = glyphs->log_clusters[i-1]; + + /* Some heuristics to try to guess how overstrike glyphs are + * done and compensate + */ + pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, &ink_rect, &logical_rect); + if (logical_rect.width == 0 && ink_rect.x == 0) + glyphs->glyphs[i].geometry.x_offset = (glyphs->glyphs[i].geometry.width - ink_rect.width) / 2; } } } |