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
1d4fcc02
Commit
1d4fcc02
authored
Dec 11, 2009
by
Hans Leidekker
Committed by
Alexandre Julliard
Dec 11, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Implement WineEngGetCharABCWidthsFloat and forward GetCharABCWidthsFloat to it.
parent
49675df9
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
17 deletions
+63
-17
font.c
dlls/gdi32/font.c
+23
-17
freetype.c
dlls/gdi32/freetype.c
+38
-0
gdi_private.h
dlls/gdi32/gdi_private.h
+2
-0
No files found.
dlls/gdi32/font.c
View file @
1d4fcc02
...
...
@@ -2908,34 +2908,40 @@ BOOL WINAPI GetCharABCWidthsFloatA( HDC hdc, UINT first, UINT last, LPABCFLOAT a
* RETURNS
* Success: TRUE
* Failure: FALSE
*
* BUGS
* Only works with TrueType fonts. It also doesn't return real
* floats but converted integers because it's implemented on
* top of GetCharABCWidthsW.
*/
BOOL
WINAPI
GetCharABCWidthsFloatW
(
HDC
hdc
,
UINT
first
,
UINT
last
,
LPABCFLOAT
abcf
)
{
ABC
*
abc
,
*
abc_base
;
unsigned
int
i
,
size
=
sizeof
(
ABC
)
*
(
last
-
first
+
1
);
BOOL
ret
;
UINT
i
;
BOOL
ret
=
FALSE
;
DC
*
dc
=
get_dc_ptr
(
hdc
);
TRACE
(
"%p, %d, %d, %p
\n
"
,
hdc
,
first
,
last
,
abcf
);
if
(
!
dc
)
return
FALSE
;
TRACE
(
"%p, %d, %d, %p - partial stub
\n
"
,
hdc
,
first
,
last
,
abcf
);
if
(
!
abcf
)
{
release_dc_ptr
(
dc
);
return
FALSE
;
}
abc
=
abc_base
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
!
abc
)
return
FALSE
;
if
(
dc
->
gdiFont
)
ret
=
WineEngGetCharABCWidthsFloat
(
dc
->
gdiFont
,
first
,
last
,
abcf
);
else
FIXME
(
"stub
\n
"
);
ret
=
GetCharABCWidthsW
(
hdc
,
first
,
last
,
abc
);
if
(
ret
)
{
for
(
i
=
first
;
i
<=
last
;
i
++
,
abc
++
,
abcf
++
)
/* convert device units to logical */
for
(
i
=
first
;
i
<=
last
;
i
++
,
abcf
++
)
{
abcf
->
abcfA
=
abc
->
abcA
;
abcf
->
abcfB
=
abc
->
abcB
;
abcf
->
abcfC
=
abc
->
abcC
;
abcf
->
abcfA
=
abc
f
->
abcfA
*
dc
->
xformVport2World
.
eM11
;
abcf
->
abcfB
=
abc
f
->
abcfB
*
dc
->
xformVport2World
.
eM11
;
abcf
->
abcfC
=
abc
f
->
abcfC
*
dc
->
xformVport2World
.
eM11
;
}
}
HeapFree
(
GetProcessHeap
(),
0
,
abc_base
);
release_dc_ptr
(
dc
);
return
ret
;
}
...
...
dlls/gdi32/freetype.c
View file @
1d4fcc02
...
...
@@ -5913,6 +5913,38 @@ BOOL WineEngGetCharABCWidths(GdiFont *font, UINT firstChar, UINT lastChar,
}
/*************************************************************
* WineEngGetCharABCWidthsFloat
*
*/
BOOL
WineEngGetCharABCWidthsFloat
(
GdiFont
*
font
,
UINT
first
,
UINT
last
,
LPABCFLOAT
buffer
)
{
static
const
MAT2
identity
=
{{
0
,
1
},
{
0
,
0
},
{
0
,
0
},
{
0
,
1
}};
UINT
c
;
GLYPHMETRICS
gm
;
FT_UInt
glyph_index
;
GdiFont
*
linked_font
;
TRACE
(
"%p, %d, %d, %p
\n
"
,
font
,
first
,
last
,
buffer
);
GDI_CheckNotLock
();
EnterCriticalSection
(
&
freetype_cs
);
for
(
c
=
first
;
c
<=
last
;
c
++
)
{
get_glyph_index_linked
(
font
,
c
,
&
linked_font
,
&
glyph_index
);
WineEngGetGlyphOutline
(
linked_font
,
glyph_index
,
GGO_METRICS
|
GGO_GLYPH_INDEX
,
&
gm
,
0
,
NULL
,
&
identity
);
buffer
[
c
-
first
].
abcfA
=
FONT_GM
(
linked_font
,
glyph_index
)
->
lsb
;
buffer
[
c
-
first
].
abcfB
=
FONT_GM
(
linked_font
,
glyph_index
)
->
bbx
;
buffer
[
c
-
first
].
abcfC
=
FONT_GM
(
linked_font
,
glyph_index
)
->
adv
-
FONT_GM
(
linked_font
,
glyph_index
)
->
lsb
-
FONT_GM
(
linked_font
,
glyph_index
)
->
bbx
;
}
LeaveCriticalSection
(
&
freetype_cs
);
return
TRUE
;
}
/*************************************************************
* WineEngGetCharABCWidthsI
*
*/
...
...
@@ -6605,6 +6637,12 @@ BOOL WineEngGetCharABCWidths(GdiFont *font, UINT firstChar, UINT lastChar,
return
FALSE
;
}
BOOL
WineEngGetCharABCWidthsFloat
(
GdiFont
*
font
,
UINT
first
,
UINT
last
,
LPABCFLOAT
buffer
)
{
ERR
(
"called but we don't have FreeType
\n
"
);
return
FALSE
;
}
BOOL
WineEngGetCharABCWidthsI
(
GdiFont
*
font
,
UINT
firstChar
,
UINT
count
,
LPWORD
pgi
,
LPABC
buffer
)
{
...
...
dlls/gdi32/gdi_private.h
View file @
1d4fcc02
...
...
@@ -412,6 +412,8 @@ extern BOOL WineEngDestroyFontInstance(HFONT handle) DECLSPEC_HIDDEN;
extern
DWORD
WineEngEnumFonts
(
LPLOGFONTW
,
FONTENUMPROCW
,
LPARAM
)
DECLSPEC_HIDDEN
;
extern
BOOL
WineEngGetCharABCWidths
(
GdiFont
*
font
,
UINT
firstChar
,
UINT
lastChar
,
LPABC
buffer
)
DECLSPEC_HIDDEN
;
extern
BOOL
WineEngGetCharABCWidthsFloat
(
GdiFont
*
font
,
UINT
firstChar
,
UINT
lastChar
,
LPABCFLOAT
buffer
)
DECLSPEC_HIDDEN
;
extern
BOOL
WineEngGetCharABCWidthsI
(
GdiFont
*
font
,
UINT
firstChar
,
UINT
count
,
LPWORD
pgi
,
LPABC
buffer
)
DECLSPEC_HIDDEN
;
extern
BOOL
WineEngGetCharWidth
(
GdiFont
*
,
UINT
,
UINT
,
LPINT
)
DECLSPEC_HIDDEN
;
...
...
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