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
f1796a94
Commit
f1796a94
authored
Aug 29, 2011
by
Aric Stewart
Committed by
Alexandre Julliard
Aug 29, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
usp10: Modify ScriptStringOut to paint the string item by item.
parent
a7071662
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
80 additions
and
43 deletions
+80
-43
usp10.c
dlls/usp10/usp10.c
+80
-43
No files found.
dlls/usp10/usp10.c
View file @
f1796a94
...
@@ -1021,6 +1021,81 @@ error:
...
@@ -1021,6 +1021,81 @@ error:
return
hr
;
return
hr
;
}
}
static
HRESULT
SS_ItemOut
(
SCRIPT_STRING_ANALYSIS
ssa
,
int
iX
,
int
iY
,
int
iItem
,
int
cStart
,
int
cEnd
,
UINT
uOptions
,
const
RECT
*
prc
,
BOOL
fDisabled
)
{
StringAnalysis
*
analysis
;
int
off_x
=
0
;
HRESULT
hr
;
INT
runStart
,
runEnd
;
INT
iGlyph
,
cGlyphs
;
TRACE
(
"(%p,%d,%d,%d,%d,%d, 0x%1x, %d)
\n
"
,
ssa
,
iX
,
iY
,
iItem
,
cStart
,
cEnd
,
uOptions
,
fDisabled
);
if
(
!
(
analysis
=
ssa
))
return
E_INVALIDARG
;
if
((
cStart
>=
0
&&
analysis
->
pItem
[
iItem
+
1
].
iCharPos
<=
cStart
)
||
(
cEnd
>=
0
&&
analysis
->
pItem
[
iItem
].
iCharPos
>=
cEnd
))
return
S_OK
;
uOptions
|=
ETO_GLYPH_INDEX
;
analysis
->
pItem
[
0
].
a
.
fNoGlyphIndex
=
FALSE
;
/* say that we have glyphs */
if
(
cStart
>=
0
&&
analysis
->
pItem
[
iItem
+
1
].
iCharPos
>
cStart
&&
analysis
->
pItem
[
iItem
].
iCharPos
<=
cStart
)
runStart
=
cStart
-
analysis
->
pItem
[
iItem
].
iCharPos
;
else
runStart
=
0
;
if
(
cEnd
>=
0
&&
analysis
->
pItem
[
iItem
+
1
].
iCharPos
>
cEnd
&&
analysis
->
pItem
[
iItem
].
iCharPos
<=
cEnd
)
runEnd
=
(
cEnd
-
1
)
-
analysis
->
pItem
[
iItem
].
iCharPos
;
else
runEnd
=
(
analysis
->
pItem
[
iItem
+
1
].
iCharPos
-
analysis
->
pItem
[
iItem
].
iCharPos
)
-
1
;
if
(
analysis
->
pItem
[
iItem
].
a
.
fRTL
)
{
if
(
cEnd
>=
0
&&
cEnd
<
analysis
->
pItem
[
iItem
+
1
].
iCharPos
)
ScriptStringCPtoX
(
ssa
,
cEnd
,
FALSE
,
&
off_x
);
else
ScriptStringCPtoX
(
ssa
,
analysis
->
pItem
[
iItem
+
1
].
iCharPos
-
1
,
TRUE
,
&
off_x
);
}
else
{
if
(
cStart
>=
0
&&
runStart
)
ScriptStringCPtoX
(
ssa
,
cStart
,
FALSE
,
&
off_x
);
else
ScriptStringCPtoX
(
ssa
,
analysis
->
pItem
[
iItem
].
iCharPos
,
FALSE
,
&
off_x
);
}
if
(
analysis
->
pItem
[
iItem
].
a
.
fRTL
)
iGlyph
=
analysis
->
glyphs
[
iItem
].
pwLogClust
[
runEnd
];
else
iGlyph
=
analysis
->
glyphs
[
iItem
].
pwLogClust
[
runStart
];
if
(
analysis
->
pItem
[
iItem
].
a
.
fRTL
)
cGlyphs
=
analysis
->
glyphs
[
iItem
].
pwLogClust
[
runStart
]
-
iGlyph
;
else
cGlyphs
=
analysis
->
glyphs
[
iItem
].
pwLogClust
[
runEnd
]
-
iGlyph
;
cGlyphs
++
;
hr
=
ScriptTextOut
(
analysis
->
hdc
,
(
SCRIPT_CACHE
*
)
&
analysis
->
sc
,
iX
+
off_x
,
iY
,
uOptions
,
prc
,
&
analysis
->
pItem
[
iItem
].
a
,
NULL
,
0
,
&
analysis
->
glyphs
[
iItem
].
glyphs
[
iGlyph
],
cGlyphs
,
&
analysis
->
glyphs
[
iItem
].
piAdvance
[
iGlyph
],
NULL
,
&
analysis
->
glyphs
[
iItem
].
pGoffset
[
iGlyph
]);
TRACE
(
"ScriptTextOut hr=%08x
\n
"
,
hr
);
return
hr
;
}
/***********************************************************************
/***********************************************************************
* ScriptStringOut (USP10.@)
* ScriptStringOut (USP10.@)
*
*
...
@@ -1052,8 +1127,7 @@ HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,
...
@@ -1052,8 +1127,7 @@ HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,
BOOL
fDisabled
)
BOOL
fDisabled
)
{
{
StringAnalysis
*
analysis
;
StringAnalysis
*
analysis
;
WORD
*
glyphs
;
int
item
;
int
item
,
cnt
,
x
;
HRESULT
hr
;
HRESULT
hr
;
TRACE
(
"(%p,%d,%d,0x%1x,%p,%d,%d,%d)
\n
"
,
TRACE
(
"(%p,%d,%d,0x%1x,%p,%d,%d,%d)
\n
"
,
...
@@ -1061,51 +1135,14 @@ HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,
...
@@ -1061,51 +1135,14 @@ HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,
if
(
!
(
analysis
=
ssa
))
return
E_INVALIDARG
;
if
(
!
(
analysis
=
ssa
))
return
E_INVALIDARG
;
/*
* Get storage for the output buffer for the consolidated strings
*/
cnt
=
0
;
for
(
item
=
0
;
item
<
analysis
->
numItems
;
item
++
)
for
(
item
=
0
;
item
<
analysis
->
numItems
;
item
++
)
{
{
cnt
+=
analysis
->
glyphs
[
item
].
numGlyphs
;
hr
=
SS_ItemOut
(
ssa
,
iX
,
iY
,
analysis
->
logical2visual
[
item
],
-
1
,
-
1
,
uOptions
,
prc
,
fDisabled
);
if
(
FAILED
(
hr
))
return
hr
;
}
}
if
(
!
(
glyphs
=
heap_alloc
(
sizeof
(
WCHAR
)
*
cnt
)))
return
E_OUTOFMEMORY
;
/*
* ScriptStringOut only processes glyphs hence set ETO_GLYPH_INDEX
*/
uOptions
|=
ETO_GLYPH_INDEX
;
analysis
->
pItem
[
0
].
a
.
fNoGlyphIndex
=
FALSE
;
/* say that we have glyphs */
TRACE
(
"numItems %d
\n
"
,
analysis
->
numItems
);
return
S_OK
;
/*
* Copy the string items into the output buffer
*/
cnt
=
0
;
for
(
item
=
0
;
item
<
analysis
->
numItems
;
item
++
)
{
memcpy
(
&
glyphs
[
cnt
],
analysis
->
glyphs
[
analysis
->
logical2visual
[
item
]].
glyphs
,
sizeof
(
WCHAR
)
*
analysis
->
glyphs
[
analysis
->
logical2visual
[
item
]].
numGlyphs
);
TRACE
(
"Item %d, Glyphs %d "
,
analysis
->
logical2visual
[
item
],
analysis
->
glyphs
[
analysis
->
logical2visual
[
item
]].
numGlyphs
);
for
(
x
=
cnt
;
x
<
analysis
->
glyphs
[
analysis
->
logical2visual
[
item
]].
numGlyphs
+
cnt
;
x
++
)
TRACE
(
"%04x"
,
glyphs
[
x
]);
TRACE
(
"
\n
"
);
cnt
+=
analysis
->
glyphs
[
analysis
->
logical2visual
[
item
]].
numGlyphs
;
/* point to the end of the copied text */
}
hr
=
ScriptTextOut
(
analysis
->
hdc
,
(
SCRIPT_CACHE
*
)
&
analysis
->
sc
,
iX
,
iY
,
uOptions
,
prc
,
&
analysis
->
pItem
->
a
,
NULL
,
0
,
glyphs
,
cnt
,
analysis
->
glyphs
->
piAdvance
,
NULL
,
analysis
->
glyphs
->
pGoffset
);
TRACE
(
"ScriptTextOut hr=%08x
\n
"
,
hr
);
/*
* Free the output buffer and script cache
*/
heap_free
(
glyphs
);
return
hr
;
}
}
/***********************************************************************
/***********************************************************************
...
...
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