dwrite: Use separate argument for cache key for get_bbox/get_bitmap calls.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
74e951a73e
commit
4ae2058e0b
|
@ -444,7 +444,6 @@ extern HRESULT bidi_computelevels(const WCHAR*,UINT32,UINT8,UINT8*,UINT8*) DECLS
|
|||
|
||||
struct dwrite_glyphbitmap
|
||||
{
|
||||
void *key;
|
||||
DWORD simulations;
|
||||
float emsize;
|
||||
BOOL nohint;
|
||||
|
@ -735,8 +734,8 @@ struct font_backend_funcs
|
|||
UINT16 (CDECL *get_glyph_count)(font_object_handle object);
|
||||
INT32 (CDECL *get_glyph_advance)(font_object_handle object, float em_size, UINT16 glyph,
|
||||
DWRITE_MEASURING_MODE measuring_mode, BOOL *has_contours);
|
||||
void (CDECL *get_glyph_bbox)(struct dwrite_glyphbitmap *bitmap_desc);
|
||||
BOOL (CDECL *get_glyph_bitmap)(struct dwrite_glyphbitmap *bitmap_desc);
|
||||
void (CDECL *get_glyph_bbox)(void *key, struct dwrite_glyphbitmap *bitmap_desc);
|
||||
BOOL (CDECL *get_glyph_bitmap)(void *key, struct dwrite_glyphbitmap *bitmap_desc);
|
||||
void (CDECL *get_design_glyph_metrics)(font_object_handle object, UINT16 upem, UINT16 ascent, unsigned int simulations,
|
||||
UINT16 glyph, DWRITE_GLYPH_METRICS *metrics);
|
||||
};
|
||||
|
@ -744,4 +743,4 @@ struct font_backend_funcs
|
|||
extern void init_font_backend(void) DECLSPEC_HIDDEN;
|
||||
extern void release_font_backend(void) DECLSPEC_HIDDEN;
|
||||
|
||||
extern void dwrite_fontface_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap) DECLSPEC_HIDDEN;
|
||||
extern void dwrite_fontface_get_glyph_bbox(IDWriteFontFace *fontface, struct dwrite_glyphbitmap *bitmap) DECLSPEC_HIDDEN;
|
||||
|
|
|
@ -47,9 +47,9 @@ static const FLOAT RECOMMENDED_NATURAL_PPEM = 20.0f;
|
|||
|
||||
static const struct font_backend_funcs *font_funcs;
|
||||
|
||||
void dwrite_fontface_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap)
|
||||
void dwrite_fontface_get_glyph_bbox(IDWriteFontFace *fontface, struct dwrite_glyphbitmap *bitmap)
|
||||
{
|
||||
font_funcs->get_glyph_bbox(bitmap);
|
||||
font_funcs->get_glyph_bbox(fontface, bitmap);
|
||||
}
|
||||
|
||||
struct cache_key
|
||||
|
@ -5836,7 +5836,6 @@ static void glyphrunanalysis_get_texturebounds(struct dwrite_glyphrunanalysis *a
|
|||
WARN("failed to get IDWriteFontFace4, 0x%08x\n", hr);
|
||||
|
||||
memset(&glyph_bitmap, 0, sizeof(glyph_bitmap));
|
||||
glyph_bitmap.key = fontface;
|
||||
glyph_bitmap.simulations = IDWriteFontFace4_GetSimulations(fontface);
|
||||
glyph_bitmap.emsize = analysis->run.fontEmSize;
|
||||
glyph_bitmap.nohint = is_natural_rendering_mode(analysis->rendering_mode);
|
||||
|
@ -5848,7 +5847,7 @@ static void glyphrunanalysis_get_texturebounds(struct dwrite_glyphrunanalysis *a
|
|||
UINT32 bitmap_size;
|
||||
|
||||
glyph_bitmap.glyph = analysis->run.glyphIndices[i];
|
||||
font_funcs->get_glyph_bbox(&glyph_bitmap);
|
||||
font_funcs->get_glyph_bbox(fontface, &glyph_bitmap);
|
||||
|
||||
bitmap_size = get_glyph_bitmap_pitch(analysis->rendering_mode, bbox->right - bbox->left) *
|
||||
(bbox->bottom - bbox->top);
|
||||
|
@ -5927,7 +5926,6 @@ static HRESULT glyphrunanalysis_render(struct dwrite_glyphrunanalysis *analysis)
|
|||
origin.x = origin.y = 0.0f;
|
||||
|
||||
memset(&glyph_bitmap, 0, sizeof(glyph_bitmap));
|
||||
glyph_bitmap.key = fontface;
|
||||
glyph_bitmap.simulations = IDWriteFontFace4_GetSimulations(fontface);
|
||||
glyph_bitmap.emsize = analysis->run.fontEmSize;
|
||||
glyph_bitmap.nohint = is_natural_rendering_mode(analysis->rendering_mode);
|
||||
|
@ -5948,7 +5946,7 @@ static HRESULT glyphrunanalysis_render(struct dwrite_glyphrunanalysis *analysis)
|
|||
BOOL is_1bpp;
|
||||
|
||||
glyph_bitmap.glyph = analysis->run.glyphIndices[i];
|
||||
font_funcs->get_glyph_bbox(&glyph_bitmap);
|
||||
font_funcs->get_glyph_bbox(fontface, &glyph_bitmap);
|
||||
|
||||
if (IsRectEmpty(bbox))
|
||||
continue;
|
||||
|
@ -5958,7 +5956,7 @@ static HRESULT glyphrunanalysis_render(struct dwrite_glyphrunanalysis *analysis)
|
|||
|
||||
glyph_bitmap.pitch = get_glyph_bitmap_pitch(analysis->rendering_mode, width);
|
||||
memset(src, 0, height * glyph_bitmap.pitch);
|
||||
is_1bpp = font_funcs->get_glyph_bitmap(&glyph_bitmap);
|
||||
is_1bpp = font_funcs->get_glyph_bitmap(fontface, &glyph_bitmap);
|
||||
|
||||
OffsetRect(bbox, analysis->origins[i].x, analysis->origins[i].y);
|
||||
|
||||
|
|
|
@ -572,7 +572,7 @@ static BOOL is_face_scalable(void *key)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL get_glyph_transform(struct dwrite_glyphbitmap *bitmap, FT_Matrix *ret)
|
||||
static BOOL get_glyph_transform(void *key, struct dwrite_glyphbitmap *bitmap, FT_Matrix *ret)
|
||||
{
|
||||
FT_Matrix m;
|
||||
|
||||
|
@ -583,7 +583,7 @@ static BOOL get_glyph_transform(struct dwrite_glyphbitmap *bitmap, FT_Matrix *re
|
|||
|
||||
/* Some fonts provide mostly bitmaps and very few outlines, for example for .notdef.
|
||||
Disable transform if that's the case. */
|
||||
if (!is_face_scalable(bitmap->key) || (!bitmap->m && bitmap->simulations == 0))
|
||||
if (!is_face_scalable(key) || (!bitmap->m && !bitmap->simulations))
|
||||
return FALSE;
|
||||
|
||||
if (bitmap->simulations & DWRITE_FONT_SIMULATIONS_OBLIQUE) {
|
||||
|
@ -602,7 +602,7 @@ static BOOL get_glyph_transform(struct dwrite_glyphbitmap *bitmap, FT_Matrix *re
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void CDECL freetype_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap)
|
||||
static void CDECL freetype_get_glyph_bbox(void *key, struct dwrite_glyphbitmap *bitmap)
|
||||
{
|
||||
FTC_ImageTypeRec imagetype;
|
||||
FT_BBox bbox = { 0 };
|
||||
|
@ -612,9 +612,9 @@ static void CDECL freetype_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap)
|
|||
|
||||
RtlEnterCriticalSection(&freetype_cs);
|
||||
|
||||
needs_transform = get_glyph_transform(bitmap, &m);
|
||||
needs_transform = get_glyph_transform(key, bitmap, &m);
|
||||
|
||||
imagetype.face_id = bitmap->key;
|
||||
imagetype.face_id = key;
|
||||
imagetype.width = 0;
|
||||
imagetype.height = bitmap->emsize;
|
||||
imagetype.flags = needs_transform ? FT_LOAD_NO_BITMAP : FT_LOAD_DEFAULT;
|
||||
|
@ -734,7 +734,7 @@ static BOOL freetype_get_aa_glyph_bitmap(struct dwrite_glyphbitmap *bitmap, FT_G
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL CDECL freetype_get_glyph_bitmap(struct dwrite_glyphbitmap *bitmap)
|
||||
static BOOL CDECL freetype_get_glyph_bitmap(void *key, struct dwrite_glyphbitmap *bitmap)
|
||||
{
|
||||
FTC_ImageTypeRec imagetype;
|
||||
BOOL needs_transform;
|
||||
|
@ -744,9 +744,9 @@ static BOOL CDECL freetype_get_glyph_bitmap(struct dwrite_glyphbitmap *bitmap)
|
|||
|
||||
RtlEnterCriticalSection(&freetype_cs);
|
||||
|
||||
needs_transform = get_glyph_transform(bitmap, &m);
|
||||
needs_transform = get_glyph_transform(key, bitmap, &m);
|
||||
|
||||
imagetype.face_id = bitmap->key;
|
||||
imagetype.face_id = key;
|
||||
imagetype.width = 0;
|
||||
imagetype.height = bitmap->emsize;
|
||||
imagetype.flags = needs_transform ? FT_LOAD_NO_BITMAP : FT_LOAD_DEFAULT;
|
||||
|
@ -865,12 +865,12 @@ static INT32 CDECL null_get_glyph_advance(font_object_handle object, float emsiz
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void CDECL null_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap)
|
||||
static void CDECL null_get_glyph_bbox(void *key, struct dwrite_glyphbitmap *bitmap)
|
||||
{
|
||||
SetRectEmpty(&bitmap->bbox);
|
||||
}
|
||||
|
||||
static BOOL CDECL null_get_glyph_bitmap(struct dwrite_glyphbitmap *bitmap)
|
||||
static BOOL CDECL null_get_glyph_bitmap(void *key, struct dwrite_glyphbitmap *bitmap)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -3945,7 +3945,6 @@ static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout
|
|||
glyph_run.glyphOffsets = ®ular->run.glyphOffsets[start_glyph];
|
||||
|
||||
memset(&glyph_bitmap, 0, sizeof(glyph_bitmap));
|
||||
glyph_bitmap.key = glyph_run.fontFace;
|
||||
glyph_bitmap.simulations = IDWriteFontFace_GetSimulations(glyph_run.fontFace);
|
||||
glyph_bitmap.emsize = glyph_run.fontEmSize;
|
||||
glyph_bitmap.nohint = layout->measuringmode == DWRITE_MEASURING_MODE_NATURAL;
|
||||
|
@ -3967,7 +3966,7 @@ static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout
|
|||
D2D1_RECT_F glyph_bbox;
|
||||
|
||||
glyph_bitmap.glyph = glyph_run.glyphIndices[i];
|
||||
dwrite_fontface_get_glyph_bbox(&glyph_bitmap);
|
||||
dwrite_fontface_get_glyph_bbox(glyph_run.fontFace, &glyph_bitmap);
|
||||
|
||||
glyph_bbox.left = bbox->left;
|
||||
glyph_bbox.top = bbox->top;
|
||||
|
|
Loading…
Reference in New Issue