Module: wine Branch: master Commit: 85e934e4b8f8578dc9486cc39a481e31418b4ce5 URL: https://source.winehq.org/git/wine.git/?a=commit;h=85e934e4b8f8578dc9486cc39...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Jul 28 11:40:15 2021 +0200
gdi32: Store arc direction in DC_ATTR.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/dc.c | 25 ++++--------------------- dlls/gdi32/dibdrv/graphics.c | 8 ++++---- dlls/gdi32/gdidc.c | 9 +++++++++ dlls/gdi32/ntgdi_private.h | 1 - dlls/gdi32/path.c | 14 +++++++------- include/ntgdi.h | 1 + 6 files changed, 25 insertions(+), 33 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 71d27c03e4f..55b48b2be5f 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -102,7 +102,7 @@ static void set_initial_dc_state( DC *dc ) dc->attr->graphics_mode = GM_COMPATIBLE; dc->attr->cur_pos.x = 0; dc->attr->cur_pos.y = 0; - dc->ArcDirection = AD_COUNTERCLOCKWISE; + dc->attr->arc_direction = AD_COUNTERCLOCKWISE; dc->xformWorld2Wnd.eM11 = 1.0f; dc->xformWorld2Wnd.eM12 = 0.0f; dc->xformWorld2Wnd.eM21 = 0.0f; @@ -409,7 +409,6 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev ) newdc->breakExtra = dc->breakExtra; newdc->breakRem = dc->breakRem; newdc->MapMode = dc->MapMode; - newdc->ArcDirection = dc->ArcDirection; newdc->xformWorld2Wnd = dc->xformWorld2Wnd; newdc->xformWorld2Vport = dc->xformWorld2Vport; newdc->xformVport2World = dc->xformVport2World; @@ -486,7 +485,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level ) dc->MapMode = dcs->MapMode; dc->attr->graphics_mode = dcs->attr->graphics_mode; dc->attr->cur_pos = dcs->attr->cur_pos; - dc->ArcDirection = dcs->ArcDirection; + dc->attr->arc_direction = dcs->attr->arc_direction; dc->xformWorld2Wnd = dcs->xformWorld2Wnd; dc->xformWorld2Vport = dcs->xformWorld2Vport; dc->xformVport2World = dcs->xformVport2World; @@ -991,22 +990,6 @@ INT WINAPI SetGraphicsMode( HDC hdc, INT mode ) }
-/*********************************************************************** - * GetArcDirection (GDI32.@) - */ -INT WINAPI GetArcDirection( HDC hdc ) -{ - INT ret = 0; - DC * dc = get_dc_ptr( hdc ); - if (dc) - { - ret = dc->ArcDirection; - release_dc_ptr( dc ); - } - return ret; -} - - /*********************************************************************** * SetArcDirection (GDI32.@) */ @@ -1027,8 +1010,8 @@ INT WINAPI SetArcDirection( HDC hdc, INT dir ) dir = physdev->funcs->pSetArcDirection( physdev, dir ); if (dir) { - ret = dc->ArcDirection; - dc->ArcDirection = dir; + ret = dc->attr->arc_direction; + dc->attr->arc_direction = dir; } release_dc_ptr( dc ); } diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c index 3eb9c5184a4..30ffad70b02 100644 --- a/dlls/gdi32/dibdrv/graphics.c +++ b/dlls/gdi32/dibdrv/graphics.c @@ -347,9 +347,9 @@ static BOOL draw_arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom, { points[0] = dc->attr->cur_pos; lp_to_dp( dc, points, 1 ); - count = 1 + get_arc_points( dc->ArcDirection, &rect, pt[0], pt[1], points + 1 ); + count = 1 + get_arc_points( dc->attr->arc_direction, &rect, pt[0], pt[1], points + 1 ); } - else count = get_arc_points( dc->ArcDirection, &rect, pt[0], pt[1], points ); + else count = get_arc_points( dc->attr->arc_direction, &rect, pt[0], pt[1], points );
if (extra_lines == 2) { @@ -1396,7 +1396,7 @@ BOOL CDECL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bott rect.bottom--; reset_dash_origin(pdev);
- if (dc->ArcDirection == AD_CLOCKWISE) + if (dc->attr->arc_direction == AD_CLOCKWISE) { /* 4 pts going clockwise starting from bottom-right */ pts[0].x = pts[3].x = rect.right; @@ -1493,7 +1493,7 @@ BOOL CDECL dibdrv_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bott
count = ellipse_first_quadrant( ellipse_width, ellipse_height, points );
- if (dc->ArcDirection == AD_CLOCKWISE) + if (dc->attr->arc_direction == AD_CLOCKWISE) { for (i = 0; i < count; i++) { diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 3a4e6e48899..7f8af0552bf 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -124,6 +124,15 @@ INT WINAPI GetGraphicsMode( HDC hdc ) return dc_attr ? dc_attr->graphics_mode : 0; }
+/*********************************************************************** + * GetArcDirection (GDI32.@) + */ +INT WINAPI GetArcDirection( HDC hdc ) +{ + DC_ATTR *dc_attr = get_dc_attr( hdc ); + return dc_attr ? dc_attr->arc_direction : 0; +} + /*********************************************************************** * GetLayout (GDI32.@) */ diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h index 110fc622d03..0f01102ed9d 100644 --- a/dlls/gdi32/ntgdi_private.h +++ b/dlls/gdi32/ntgdi_private.h @@ -129,7 +129,6 @@ typedef struct tagDC INT breakRem; /* breakTotalExtra % breakCount */ INT MapMode; ABORTPROC pAbortProc; /* AbortProc for Printing */ - INT ArcDirection; XFORM xformWorld2Wnd; /* World-to-window transformation */ XFORM xformWorld2Vport; /* World-to-viewport transformation */ XFORM xformVport2World; /* Inverse of the above transformation */ diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c index ff3ab04480c..8761723f62e 100644 --- a/dlls/gdi32/path.c +++ b/dlls/gdi32/path.c @@ -893,7 +893,7 @@ static BOOL CDECL pathdrv_Rectangle( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2 points[2].x = corners[0].x; points[2].y = corners[1].y; points[3] = corners[1]; - if (dc->ArcDirection == AD_CLOCKWISE) reverse_points( points, 4 ); + if (dc->attr->arc_direction == AD_CLOCKWISE) reverse_points( points, 4 );
if (!(type = add_points( physdev->path, points, 4, PT_LINETO ))) return FALSE; type[0] = PT_MOVETO; @@ -968,7 +968,7 @@ static BOOL CDECL pathdrv_RoundRect( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2 points[15].x = corners[1].x; points[15].y = corners[1].y - GDI_ROUND( height );
- if (dc->ArcDirection == AD_CLOCKWISE) reverse_points( points, 16 ); + if (dc->attr->arc_direction == AD_CLOCKWISE) reverse_points( points, 16 ); if (!(type = add_points( physdev->path, points, 16, PT_BEZIERTO ))) return FALSE; type[0] = PT_MOVETO; type[4] = type[8] = type[12] = PT_LINETO; @@ -1026,7 +1026,7 @@ static BOOL CDECL pathdrv_Ellipse( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2 ) points[12].x = corners[1].x; points[12].y = corners[1].y - GDI_ROUND( height );
- if (dc->ArcDirection == AD_CLOCKWISE) reverse_points( points, 13 ); + if (dc->attr->arc_direction == AD_CLOCKWISE) reverse_points( points, 13 ); if (!(type = add_points( physdev->path, points, 13, PT_BEZIERTO ))) return FALSE; type[0] = PT_MOVETO; close_figure( physdev->path ); @@ -1206,7 +1206,7 @@ static BOOL CDECL pathdrv_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bo { DC *dc = get_physdev_dc( dev ); return PATH_Arc( dev, left, top, right, bottom, xstart, ystart, xend, yend, - dc->ArcDirection, 0 ); + dc->attr->arc_direction, 0 ); }
@@ -1218,7 +1218,7 @@ static BOOL CDECL pathdrv_ArcTo( PHYSDEV dev, INT left, INT top, INT right, INT { DC *dc = get_physdev_dc( dev ); return PATH_Arc( dev, left, top, right, bottom, xstart, ystart, xend, yend, - dc->ArcDirection, -1 ); + dc->attr->arc_direction, -1 ); }
@@ -1230,7 +1230,7 @@ static BOOL CDECL pathdrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT { DC *dc = get_physdev_dc( dev ); return PATH_Arc( dev, left, top, right, bottom, xstart, ystart, xend, yend, - dc->ArcDirection, 1 ); + dc->attr->arc_direction, 1 ); }
@@ -1242,7 +1242,7 @@ static BOOL CDECL pathdrv_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bo { DC *dc = get_physdev_dc( dev ); return PATH_Arc( dev, left, top, right, bottom, xstart, ystart, xend, yend, - dc->ArcDirection, 2 ); + dc->attr->arc_direction, 2 ); }
diff --git a/include/ntgdi.h b/include/ntgdi.h index c1221d7995b..ba9d1fe7a00 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -103,6 +103,7 @@ typedef struct DC_ATTR COLORREF text_color; POINT cur_pos; INT graphics_mode; + INT arc_direction; DWORD layout; WORD text_align; WORD background_mode;