From 1e1825bf47aa29968f75a78305d4541ce2c9d40c Mon Sep 17 00:00:00 2001 From: ebraminio Date: Sat, 17 Dec 2016 10:30:40 +0330 Subject: [PATCH] [dwrite] Provide an experimental API for justification (#279) --- src/hb-directwrite.cc | 48 ++++++++++++++++++++++++++++++++++++++++-------- src/hb-directwrite.h | 4 ++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/hb-directwrite.cc b/src/hb-directwrite.cc index d26b298..b5c1113 100644 --- a/src/hb-directwrite.cc +++ b/src/hb-directwrite.cc @@ -209,8 +209,8 @@ _hb_directwrite_shaper_face_data_destroy(hb_directwrite_shaper_face_data_t *data data->fontFile->Release (); if (data->dwriteFactory) { if (data->fontFileLoader) - data->dwriteFactory->UnregisterFontFileLoader(data->fontFileLoader); - data->dwriteFactory->Release(); + data->dwriteFactory->UnregisterFontFileLoader (data->fontFileLoader); + data->dwriteFactory->Release (); } if (data->fontFileLoader) delete data->fontFileLoader; @@ -542,12 +542,13 @@ static inline uint32_t hb_uint32_swap (const uint32_t v) * shaper */ -hb_bool_t -_hb_directwrite_shape(hb_shape_plan_t *shape_plan, +static hb_bool_t +_hb_directwrite_shape_full(hb_shape_plan_t *shape_plan, hb_font_t *font, hb_buffer_t *buffer, const hb_feature_t *features, - unsigned int num_features) + unsigned int num_features, + float lineWidth) { hb_face_t *face = font->face; hb_directwrite_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face); @@ -728,9 +729,6 @@ retry_getglyphs: return false; } - // TODO: get lineWith from somewhere - float lineWidth = 0; - IDWriteTextAnalyzer1* analyzer1; analyzer->QueryInterface (&analyzer1); @@ -900,3 +898,37 @@ retry_getglyphs: /* Wow, done! */ return true; } + +hb_bool_t +_hb_directwrite_shape(hb_shape_plan_t *shape_plan, + hb_font_t *font, + hb_buffer_t *buffer, + const hb_feature_t *features, + unsigned int num_features) +{ + return _hb_directwrite_shape_full(shape_plan, font, buffer, + features, num_features, 0); +} + +/* + * Public [experimental] API + */ + +hb_bool_t +hb_shape_dwrite_experimental_width(hb_font_t *font, + hb_buffer_t *buffer, + const hb_feature_t *features, + unsigned int num_features, + float width) +{ + static char *shapers = "directwrite"; + hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, + &buffer->props, features, num_features, &shapers); + hb_bool_t res = _hb_directwrite_shape_full (shape_plan, font, buffer, + features, num_features, width); + + if (res) + buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS; + + return res; +} diff --git a/src/hb-directwrite.h b/src/hb-directwrite.h index 0e1b479..0eb116f 100644 --- a/src/hb-directwrite.h +++ b/src/hb-directwrite.h @@ -29,6 +29,10 @@ HB_BEGIN_DECLS +HB_EXTERN hb_bool_t +hb_shape_dwrite_experimental_width(hb_font_t *font, hb_buffer_t *buffer, + const hb_feature_t *features, unsigned int num_features, float width); + HB_END_DECLS #endif /* HB_DIRECTWRITE_H */ -- 2.7.4