From 8f27fbb1a88a1197a95792bfe327473293cca223 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Wed, 10 Apr 2019 16:20:37 +0800 Subject: [PATCH] debug and tune --- src/font/unicode-script.c | 14 +++++++++----- src/newgdi/layout-utils.c | 3 +++ src/newgdi/layout.c | 2 +- src/newgdi/shape-glyphs-complex.c | 1 + 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/font/unicode-script.c b/src/font/unicode-script.c index 3b17bce7..11f342dc 100644 --- a/src/font/unicode-script.c +++ b/src/font/unicode-script.c @@ -659,8 +659,9 @@ GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script, BOOL vertical, * * Wide characters are always upright. */ - if (!vertical || wide) + if (!vertical || wide) { return base_gravity; + } /* If here, we have a narrow character in a vertical gravity setting. * Resolve depending on the hint. @@ -668,13 +669,16 @@ GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script, BOOL vertical, switch (hint) { default: case GLYPH_GRAVITY_POLICY_NATURAL: - if (props.vert_dir == VERTICAL_DIRECTION_NONE) + if (props.vert_dir == VERTICAL_DIRECTION_NONE) { return GLYPH_GRAVITY_SOUTH; - if ((base_gravity == GLYPH_GRAVITY_EAST) ^ - (props.vert_dir == VERTICAL_DIRECTION_BTT)) + } + if (((base_gravity == GLYPH_GRAVITY_EAST) ^ + (props.vert_dir == VERTICAL_DIRECTION_BTT)) + || props.wide) return GLYPH_GRAVITY_SOUTH; - else + else { return GLYPH_GRAVITY_NORTH; + } case GLYPH_GRAVITY_POLICY_STRONG: return base_gravity; diff --git a/src/newgdi/layout-utils.c b/src/newgdi/layout-utils.c index bc354c2f..e0333cdc 100644 --- a/src/newgdi/layout-utils.c +++ b/src/newgdi/layout-utils.c @@ -139,6 +139,8 @@ static GlyphOrient resolve_glyph_orient(const LAYOUT* layout, trun->flags & TEXTRUN_FLAG_UPRIGHT, layout->grv_base, layout->grv_plc); + assert(gravity != GLYPH_GRAVITY_NORTH); + return (GlyphOrient)gravity; } @@ -162,6 +164,7 @@ static void resolve_layout_run_dir(const LAYOUT* layout, break; case GLYPH_GRAVITY_NORTH: lrun->el++; + assert(0); break; case GLYPH_GRAVITY_EAST: lrun->el += 1; diff --git a/src/newgdi/layout.c b/src/newgdi/layout.c index f2e70319..6b83d504 100644 --- a/src/newgdi/layout.c +++ b/src/newgdi/layout.c @@ -598,7 +598,7 @@ static GlyphString* shape_run(LAYOUTLINE *line, LayoutState *state, shape_space(layout, lrun, glyphs); } else { - if (state->shape_set) + if (MG_UNLIKELY(state->shape_set)) shape_shape(layout->truns->ucs + lrun->si, lrun->len, &state->shape_ink_rect, &state->shape_logical_rect, glyphs); diff --git a/src/newgdi/shape-glyphs-complex.c b/src/newgdi/shape-glyphs-complex.c index 7db69940..cc7d2ed7 100644 --- a/src/newgdi/shape-glyphs-complex.c +++ b/src/newgdi/shape-glyphs-complex.c @@ -210,6 +210,7 @@ static BOOL shape_layout_run(SEInstance* inst, } hb_buffer_set_direction(hb_buf, run->dir + HB_DIRECTION_LTR); + hb_buffer_set_script(hb_buf, ScriptTypeToISO15924(run->st)); hb_buffer_set_language(hb_buf, hb_language_from_string(LanguageCodeToISO639s1(run->lc), -1));