Nikolay Sivov : dwrite/arabic: Mark glyphs with assigned action as unsafe to break.
Alexandre Julliard
julliard at winehq.org
Thu Feb 11 15:37:14 CST 2021
Module: wine
Branch: master
Commit: 8c4b47c6f94054b60c3830ee76edd81886375365
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8c4b47c6f94054b60c3830ee76edd81886375365
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Feb 11 11:10:20 2021 +0300
dwrite/arabic: Mark glyphs with assigned action as unsafe to break.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dwrite/dwrite_private.h | 2 ++
dlls/dwrite/opentype.c | 2 +-
dlls/dwrite/shapers/arabic.c | 7 ++++++-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h
index e03ad6c6c6d..fa82a8d4376 100644
--- a/dlls/dwrite/dwrite_private.h
+++ b/dlls/dwrite/dwrite_private.h
@@ -690,6 +690,8 @@ extern void opentype_layout_apply_gpos_features(struct scriptshaping_context *co
extern BOOL opentype_layout_check_feature(struct scriptshaping_context *context, unsigned int script_index,
unsigned int language_index, struct shaping_feature *feature, unsigned int glyph_count,
const UINT16 *glyphs, UINT8 *feature_applies) DECLSPEC_HIDDEN;
+extern void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start,
+ unsigned int end) DECLSPEC_HIDDEN;
extern BOOL opentype_has_vertical_variants(struct dwrite_fontface *fontface) DECLSPEC_HIDDEN;
extern HRESULT opentype_get_vertical_glyph_variants(struct dwrite_fontface *fontface, unsigned int glyph_count,
const UINT16 *nominal_glyphs, UINT16 *glyphs) DECLSPEC_HIDDEN;
diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c
index 515d2440fcf..afae1b69d07 100644
--- a/dlls/dwrite/opentype.c
+++ b/dlls/dwrite/opentype.c
@@ -5127,7 +5127,7 @@ static BOOL opentype_layout_context_match_input(const struct match_context *mc,
}
/* Marks text segment as unsafe to break between [start, end) glyphs. */
-static void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start,
+void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start,
unsigned int end)
{
unsigned int i;
diff --git a/dlls/dwrite/shapers/arabic.c b/dlls/dwrite/shapers/arabic.c
index cc598f834e5..720f18915a4 100644
--- a/dlls/dwrite/shapers/arabic.c
+++ b/dlls/dwrite/shapers/arabic.c
@@ -174,7 +174,12 @@ static void arabic_setup_masks(struct scriptshaping_context *context,
/* Unaffected glyphs get action NONE with zero mask. */
for (i = 0; i < context->glyph_count; ++i)
- context->glyph_infos[i].mask |= masks[arabic_get_shaping_action(context, i)];
+ {
+ enum arabic_shaping_action action = arabic_get_shaping_action(context, i);
+ if (action != NONE)
+ opentype_layout_unsafe_to_break(context, i, i + 1);
+ context->glyph_infos[i].mask |= masks[action];
+ }
}
const struct shaper arabic_shaper =
More information about the wine-cvs
mailing list