Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
4ae2058e
Commit
4ae2058e
authored
Dec 07, 2021
by
Nikolay Sivov
Committed by
Alexandre Julliard
Dec 07, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
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
>
parent
74e951a7
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
23 deletions
+19
-23
dwrite_private.h
dlls/dwrite/dwrite_private.h
+3
-4
font.c
dlls/dwrite/font.c
+5
-7
freetype.c
dlls/dwrite/freetype.c
+10
-10
layout.c
dlls/dwrite/layout.c
+1
-2
No files found.
dlls/dwrite/dwrite_private.h
View file @
4ae2058e
...
...
@@ -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
;
dlls/dwrite/font.c
View file @
4ae2058e
...
...
@@ -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
.
0
f
;
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
);
...
...
dlls/dwrite/freetype.c
View file @
4ae2058e
...
...
@@ -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
;
}
...
...
dlls/dwrite/layout.c
View file @
4ae2058e
...
...
@@ -3945,7 +3945,6 @@ static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout
glyph_run
.
glyphOffsets
=
&
regular
->
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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment