Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
80b7134b
Commit
80b7134b
authored
Jun 20, 2007
by
Misha Koshelev
Committed by
Alexandre Julliard
Jun 21, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Set current position properly after ArcTo.
parent
c0ddd5e3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
31 deletions
+17
-31
painting.c
dlls/gdi32/painting.c
+16
-30
path.c
dlls/gdi32/tests/path.c
+1
-1
No files found.
dlls/gdi32/painting.c
View file @
80b7134b
...
...
@@ -113,6 +113,13 @@ BOOL WINAPI ArcTo( HDC hdc,
INT
xstart
,
INT
ystart
,
INT
xend
,
INT
yend
)
{
double
width
=
fabs
(
right
-
left
),
height
=
fabs
(
bottom
-
top
),
xradius
=
width
/
2
,
yradius
=
height
/
2
,
xcenter
=
right
>
left
?
left
+
xradius
:
right
+
xradius
,
ycenter
=
bottom
>
top
?
top
+
yradius
:
bottom
+
yradius
,
angle
;
BOOL
result
;
DC
*
dc
=
DC_GetDCUpdate
(
hdc
);
if
(
!
dc
)
return
FALSE
;
...
...
@@ -120,40 +127,19 @@ BOOL WINAPI ArcTo( HDC hdc,
if
(
dc
->
funcs
->
pArcTo
)
result
=
dc
->
funcs
->
pArcTo
(
dc
->
physDev
,
left
,
top
,
right
,
bottom
,
xstart
,
ystart
,
xend
,
yend
);
else
else
/* We'll draw a line from the current position to the starting point of the arc, then draw the arc */
{
double
width
=
fabs
(
right
-
left
),
height
=
fabs
(
bottom
-
top
),
xradius
=
width
/
2
,
yradius
=
height
/
2
,
xcenter
=
right
>
left
?
left
+
xradius
:
right
+
xradius
,
ycenter
=
bottom
>
top
?
top
+
yradius
:
bottom
+
yradius
;
/*
* Else emulate it.
* According to the documentation, a line is drawn from the current
* position to the starting point of the arc.
*/
double
angle
=
atan2
(
((
ystart
-
ycenter
)
/
height
),
((
xstart
-
xcenter
)
/
width
));
angle
=
atan2
(((
ystart
-
ycenter
)
/
height
),
((
xstart
-
xcenter
)
/
width
));
LineTo
(
hdc
,
GDI_ROUND
(
xcenter
+
(
cos
(
angle
)
*
xradius
)),
GDI_ROUND
(
ycenter
+
(
sin
(
angle
)
*
yradius
)));
/*
* Then the arc is drawn.
*/
result
=
Arc
(
hdc
,
left
,
top
,
right
,
bottom
,
xstart
,
ystart
,
xend
,
yend
);
/*
* If no error occurred, the current position is moved to the ending
* point of the arc.
*/
if
(
result
)
{
angle
=
atan2
(
((
yend
-
ycenter
)
/
height
),
((
xend
-
xcenter
)
/
width
));
MoveToEx
(
hdc
,
GDI_ROUND
(
xcenter
+
(
cos
(
angle
)
*
xradius
)),
GDI_ROUND
(
ycenter
+
(
sin
(
angle
)
*
yradius
)),
NULL
);
}
}
if
(
result
)
{
angle
=
atan2
(((
yend
-
ycenter
)
/
height
),
((
xend
-
xcenter
)
/
width
));
dc
->
CursPosX
=
GDI_ROUND
(
xcenter
+
(
cos
(
angle
)
*
xradius
));
dc
->
CursPosY
=
GDI_ROUND
(
ycenter
+
(
sin
(
angle
)
*
yradius
));
}
GDI_ReleaseObj
(
hdc
);
return
result
;
...
...
dlls/gdi32/tests/path.c
View file @
80b7134b
...
...
@@ -203,7 +203,7 @@ static const path_test_t arcto_path[] = {
{
399
,
263
,
PT_BEZIERTO
,
0
,
0
},
/* 8 */
{
389
,
275
,
PT_BEZIERTO
,
0
,
0
},
/* 9 */
{
370
,
285
,
PT_BEZIERTO
,
0
,
0
},
/* 10 */
{
363
,
277
,
PT_LINETO
,
1
,
0
},
/* 11 */
{
363
,
277
,
PT_LINETO
,
0
,
0
},
/* 11 */
{
380
,
270
,
PT_BEZIERTO
,
1
,
0
},
/* 12 */
{
389
,
260
,
PT_BEZIERTO
,
0
,
0
},
/* 13 */
{
389
,
250
,
PT_BEZIERTO
,
0
,
0
},
/* 14 */
...
...
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