Dmitry Timoshkov : gdi: A better workaround for extended user style
pens.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 9 06:29:09 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 434a60ba1df0d8a124e9a09802a466d0492fd1d4
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=434a60ba1df0d8a124e9a09802a466d0492fd1d4
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Thu Mar 9 15:12:43 2006 +0800
gdi: A better workaround for extended user style pens.
---
dlls/gdi/enhmfdrv/objects.c | 23 ++++++++++++++---------
dlls/gdi/mfdrv/objects.c | 23 ++++++++++++++---------
dlls/wineps/pen.c | 23 ++++++++++++++---------
dlls/x11drv/pen.c | 23 ++++++++++++++---------
4 files changed, 56 insertions(+), 36 deletions(-)
diff --git a/dlls/gdi/enhmfdrv/objects.c b/dlls/gdi/enhmfdrv/objects.c
index 9d8b14d..ad84301 100644
--- a/dlls/gdi/enhmfdrv/objects.c
+++ b/dlls/gdi/enhmfdrv/objects.c
@@ -401,16 +401,21 @@ static HPEN EMFDRV_CreatePenIndirect(PHY
if (!GetObjectW( hPen, sizeof(emr.lopn), &emr.lopn ))
{
/* must be an extended pen */
- EXTLOGPEN elp;
- if (!GetObjectW( hPen, sizeof(elp), &elp ))
- {
- FIXME("extended pen %p not supported\n", hPen);
- return 0;
- }
- emr.lopn.lopnStyle = elp.elpPenStyle;
- emr.lopn.lopnWidth.x = elp.elpWidth;
+ EXTLOGPEN *elp;
+ INT size = GetObjectW( hPen, 0, NULL );
+
+ if (!size) return 0;
+
+ elp = HeapAlloc( GetProcessHeap(), 0, size );
+
+ GetObjectW( hPen, size, elp );
+ /* FIXME: add support for user style pens */
+ emr.lopn.lopnStyle = elp->elpPenStyle;
+ emr.lopn.lopnWidth.x = elp->elpWidth;
emr.lopn.lopnWidth.y = 0;
- emr.lopn.lopnColor = elp.elpColor;
+ emr.lopn.lopnColor = elp->elpColor;
+
+ HeapFree( GetProcessHeap(), 0, elp );
}
emr.emr.iType = EMR_CREATEPEN;
diff --git a/dlls/gdi/mfdrv/objects.c b/dlls/gdi/mfdrv/objects.c
index e0859ac..a7bc229 100644
--- a/dlls/gdi/mfdrv/objects.c
+++ b/dlls/gdi/mfdrv/objects.c
@@ -406,16 +406,21 @@ HPEN MFDRV_SelectPen( PHYSDEV dev, HPEN
if (!GetObject16( HPEN_16(hpen), sizeof(logpen), &logpen ))
{
/* must be an extended pen */
- EXTLOGPEN elp;
- if (!GetObjectW( hpen, sizeof(elp), &elp ))
- {
- FIXME("extended pen %p not supported\n", hpen);
- return 0;
- }
- logpen.lopnStyle = elp.elpPenStyle;
- logpen.lopnWidth.x = elp.elpWidth;
+ EXTLOGPEN *elp;
+ INT size = GetObjectW( hpen, 0, NULL );
+
+ if (!size) return 0;
+
+ elp = HeapAlloc( GetProcessHeap(), 0, size );
+
+ GetObjectW( hpen, size, elp );
+ /* FIXME: add support for user style pens */
+ logpen.lopnStyle = elp->elpPenStyle;
+ logpen.lopnWidth.x = elp->elpWidth;
logpen.lopnWidth.y = 0;
- logpen.lopnColor = elp.elpColor;
+ logpen.lopnColor = elp->elpColor;
+
+ HeapFree( GetProcessHeap(), 0, elp );
}
index = MFDRV_CreatePenIndirect( dev, hpen, &logpen );
diff --git a/dlls/wineps/pen.c b/dlls/wineps/pen.c
index 6944635..60e41ac 100644
--- a/dlls/wineps/pen.c
+++ b/dlls/wineps/pen.c
@@ -44,16 +44,21 @@ HPEN PSDRV_SelectPen( PSDRV_PDEVICE *phy
if (!GetObjectW( hpen, sizeof(logpen), &logpen ))
{
/* must be an extended pen */
- EXTLOGPEN elp;
- if (!GetObjectW( hpen, sizeof(elp), &elp ))
- {
- FIXME("extended pen %p not supported\n", hpen);
- return 0;
- }
- logpen.lopnStyle = elp.elpPenStyle;
- logpen.lopnWidth.x = elp.elpWidth;
+ EXTLOGPEN *elp;
+ INT size = GetObjectW( hpen, 0, NULL );
+
+ if (!size) return 0;
+
+ elp = HeapAlloc( GetProcessHeap(), 0, size );
+
+ GetObjectW( hpen, size, elp );
+ /* FIXME: add support for user style pens */
+ logpen.lopnStyle = elp->elpPenStyle;
+ logpen.lopnWidth.x = elp->elpWidth;
logpen.lopnWidth.y = 0;
- logpen.lopnColor = elp.elpColor;
+ logpen.lopnColor = elp->elpColor;
+
+ HeapFree( GetProcessHeap(), 0, elp );
}
TRACE("hpen = %p colour = %08lx\n", hpen, logpen.lopnColor);
diff --git a/dlls/x11drv/pen.c b/dlls/x11drv/pen.c
index 26cffce..c0af04e 100644
--- a/dlls/x11drv/pen.c
+++ b/dlls/x11drv/pen.c
@@ -41,16 +41,21 @@ HPEN X11DRV_SelectPen( X11DRV_PDEVICE *p
if (!GetObjectW( hpen, sizeof(logpen), &logpen ))
{
/* must be an extended pen */
- EXTLOGPEN elp;
- if (!GetObjectW( hpen, sizeof(elp), &elp ))
- {
- FIXME("extended pen %p not supported\n", hpen);
- return 0;
- }
- logpen.lopnStyle = elp.elpPenStyle;
- logpen.lopnWidth.x = elp.elpWidth;
+ EXTLOGPEN *elp;
+ INT size = GetObjectW( hpen, 0, NULL );
+
+ if (!size) return 0;
+
+ elp = HeapAlloc( GetProcessHeap(), 0, size );
+
+ GetObjectW( hpen, size, elp );
+ /* FIXME: add support for user style pens */
+ logpen.lopnStyle = elp->elpPenStyle;
+ logpen.lopnWidth.x = elp->elpWidth;
logpen.lopnWidth.y = 0;
- logpen.lopnColor = elp.elpColor;
+ logpen.lopnColor = elp->elpColor;
+
+ HeapFree( GetProcessHeap(), 0, elp );
}
physDev->pen.style = logpen.lopnStyle & PS_STYLE_MASK;
More information about the wine-cvs
mailing list