Module: wine Branch: master Commit: 3a0d08d23338f50a5f8ba3906ebd7787fb7ee834 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3a0d08d23338f50a5f8ba3906...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Aug 3 12:56:01 2021 +0200
gdi32: Store window origin 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 | 24 +++++------------------- dlls/gdi32/gdidc.c | 11 +++++++++++ dlls/gdi32/mapping.c | 12 ++++++------ dlls/gdi32/ntgdi_private.h | 1 - include/ntgdi.h | 1 + 5 files changed, 23 insertions(+), 26 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index cf060f8da3b..4d80ffdc449 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -71,8 +71,8 @@ static inline DC *get_dc_obj( HDC hdc ) */ static void set_initial_dc_state( DC *dc ) { - dc->wnd_org.x = 0; - dc->wnd_org.y = 0; + dc->attr->wnd_org.x = 0; + dc->attr->wnd_org.y = 0; dc->wnd_ext.cx = 1; dc->wnd_ext.cy = 1; dc->attr->vport_org.x = 0; @@ -327,8 +327,8 @@ static void construct_window_to_viewport(DC *dc, XFORM *xform) xform->eM12 = 0.0; xform->eM21 = 0.0; xform->eM22 = scaleY; - xform->eDx = (double)dc->attr->vport_org.x - scaleX * (double)dc->wnd_org.x; - xform->eDy = (double)dc->attr->vport_org.y - scaleY * (double)dc->wnd_org.y; + xform->eDx = (double)dc->attr->vport_org.x - scaleX * (double)dc->attr->wnd_org.x; + xform->eDy = (double)dc->attr->vport_org.y - scaleY * (double)dc->attr->wnd_org.y; if (dc->attr->layout & LAYOUT_RTL) xform->eDx = dc->attr->vis_rect.right - dc->attr->vis_rect.left - 1 - xform->eDx; } @@ -424,7 +424,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level ) dc->xformWorld2Vport = dcs->xformWorld2Vport; dc->xformVport2World = dcs->xformVport2World; dc->vport2WorldValid = dcs->vport2WorldValid; - dc->wnd_org = dcs->wnd_org; + dc->attr->wnd_org = dcs->attr->wnd_org; dc->wnd_ext = dcs->wnd_ext; dc->attr->vport_org = dcs->attr->vport_org; dc->attr->vport_ext = dcs->attr->vport_ext; @@ -553,7 +553,6 @@ INT WINAPI NtGdiSaveDC( HDC hdc ) newdc->xformWorld2Vport = dc->xformWorld2Vport; newdc->xformVport2World = dc->xformVport2World; newdc->vport2WorldValid = dc->vport2WorldValid; - newdc->wnd_org = dc->wnd_org; newdc->wnd_ext = dc->wnd_ext; newdc->virtual_res = dc->virtual_res; newdc->virtual_size = dc->virtual_size; @@ -1302,19 +1301,6 @@ BOOL WINAPI GetWindowExtEx( HDC hdc, LPSIZE size ) }
-/*********************************************************************** - * GetWindowOrgEx (GDI32.@) - */ -BOOL WINAPI GetWindowOrgEx( HDC hdc, LPPOINT pt ) -{ - DC * dc = get_dc_ptr( hdc ); - if (!dc) return FALSE; - *pt = dc->wnd_org; - release_dc_ptr( dc ); - return TRUE; -} - - /*********************************************************************** * SetLayout (GDI32.@) * diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 0b8586e8463..06d8e3f807f 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -342,6 +342,17 @@ BOOL WINAPI GetDCOrgEx( HDC hdc, POINT *point ) return TRUE; }
+/*********************************************************************** + * GetWindowOrgEx (GDI32.@) + */ +BOOL WINAPI GetWindowOrgEx( HDC hdc, POINT *point ) +{ + DC_ATTR *dc_attr; + if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; + *point = dc_attr->wnd_org; + return TRUE; +} + /*********************************************************************** * GetViewportExtEx (GDI32.@) */ diff --git a/dlls/gdi32/mapping.c b/dlls/gdi32/mapping.c index d3d7ee60255..a385bf7eac5 100644 --- a/dlls/gdi32/mapping.c +++ b/dlls/gdi32/mapping.c @@ -103,10 +103,10 @@ BOOL CDECL nulldrv_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DC *dc = get_nulldrv_dc( dev );
if (pt) - *pt = dc->wnd_org; + *pt = dc->attr->wnd_org;
- dc->wnd_org.x += x; - dc->wnd_org.y += y; + dc->attr->wnd_org.x += x; + dc->attr->wnd_org.y += y; DC_UpdateXforms( dc ); return TRUE; } @@ -262,10 +262,10 @@ BOOL CDECL nulldrv_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DC *dc = get_nulldrv_dc( dev );
if (pt) - *pt = dc->wnd_org; + *pt = dc->attr->wnd_org;
- dc->wnd_org.x = x; - dc->wnd_org.y = y; + dc->attr->wnd_org.x = x; + dc->attr->wnd_org.y = y; DC_UpdateXforms( dc ); return TRUE; } diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h index a966aaeb637..6cd18b20b0b 100644 --- a/dlls/gdi32/ntgdi_private.h +++ b/dlls/gdi32/ntgdi_private.h @@ -87,7 +87,6 @@ typedef struct tagDC BOOL bounds_enabled:1; /* bounds tracking is enabled */ BOOL path_open:1; /* path is currently open (only for saved DCs) */
- POINT wnd_org; /* Window origin */ SIZE wnd_ext; /* Window extent */ SIZE virtual_res; /* Initially HORZRES,VERTRES. Changed by SetVirtualResolution */ SIZE virtual_size; /* Initially HORZSIZE,VERTSIZE. Changed by SetVirtualResolution */ diff --git a/include/ntgdi.h b/include/ntgdi.h index e2500d924a3..1bef584a719 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -116,6 +116,7 @@ typedef struct DC_ATTR INT map_mode; RECT vis_rect; /* visible rectangle in screen coords */ FLOAT miter_limit; + POINT wnd_org; /* window origin */ POINT vport_org; /* viewport origin */ SIZE vport_ext; /* viewport extent */ void *emf;