Module: wine Branch: master Commit: c752e84543e6c96a06eb8bd61aaad9891200addf URL: https://gitlab.winehq.org/wine/wine/-/commit/c752e84543e6c96a06eb8bd61aaad98...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Apr 21 21:31:41 2023 +0200
gdi32: Use EMR_REALIZEPALETTE to record RealizePalette.
---
dlls/gdi32/dc.c | 4 ++++ dlls/gdi32/emfdc.c | 14 ++++++++++++++ dlls/gdi32/gdi_private.h | 1 + 3 files changed, 19 insertions(+)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 44dd9b9373d..8fa30884baf 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -2153,7 +2153,11 @@ HPALETTE WINAPI SelectPalette( HDC hdc, HPALETTE palette, BOOL force_background */ UINT WINAPI RealizePalette( HDC hdc ) { + DC_ATTR *dc_attr; + if (is_meta_dc( hdc )) return METADC_RealizePalette( hdc ); + if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; + if (dc_attr->emf && !EMFDC_RealizePalette( dc_attr )) return 0; return pfnRealizePalette( hdc ); }
diff --git a/dlls/gdi32/emfdc.c b/dlls/gdi32/emfdc.c index bf35450cfb3..f3ee0e3611c 100644 --- a/dlls/gdi32/emfdc.c +++ b/dlls/gdi32/emfdc.c @@ -696,6 +696,20 @@ BOOL EMFDC_SelectPalette( DC_ATTR *dc_attr, HPALETTE palette ) return emfdc_record( emf, &emr.emr ); }
+BOOL EMFDC_RealizePalette( DC_ATTR *dc_attr ) +{ + HPALETTE palette = GetCurrentObject( dc_attr_handle( dc_attr ), OBJ_PAL ); + struct emf *emf = get_dc_emf( dc_attr ); + EMRREALIZEPALETTE emr; + + if (palette == GetStockObject( DEFAULT_PALETTE )) + return TRUE; + + emr.emr.iType = EMR_REALIZEPALETTE; + emr.emr.nSize = sizeof(emr); + return emfdc_record( emf, &emr.emr ); +} + BOOL EMFDC_SelectObject( DC_ATTR *dc_attr, HGDIOBJ obj ) { switch (gdi_handle_type( obj )) diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index da4c951eb00..4a9c70dcbc3 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -225,6 +225,7 @@ extern BOOL EMFDC_PolyPolygon( DC_ATTR *dc_attr, const POINT *points, const INT extern BOOL EMFDC_Polygon( DC_ATTR *dc_attr, const POINT *points, INT count ) DECLSPEC_HIDDEN; extern BOOL EMFDC_Polyline( DC_ATTR *dc_attr, const POINT *points, INT count) DECLSPEC_HIDDEN; extern BOOL EMFDC_PolylineTo( DC_ATTR *dc_attr, const POINT *points, INT count ) DECLSPEC_HIDDEN; +extern BOOL EMFDC_RealizePalette( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN; extern BOOL EMFDC_Rectangle( DC_ATTR *dc_attr, INT left, INT top, INT right, INT bottom) DECLSPEC_HIDDEN; extern BOOL EMFDC_RestoreDC( DC_ATTR *dc_attr, INT level ) DECLSPEC_HIDDEN;