>From b4421d62d6b8524defc3f473b1bcc4b4c0960280 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Tue, 15 Feb 2011 00:21:30 -0600 Subject: winex11.drv: Add on-screen PS_USERSTYLE support to pens MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1.7.3.4" This is a multi-part message in MIME format. --------------1.7.3.4 Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: 8bit Addresses the on-screen part of bug #26091. --- dlls/winex11.drv/pen.c | 28 +++++++++++++--------------- 1 files changed, 13 insertions(+), 15 deletions(-) --------------1.7.3.4 Content-Type: text/x-patch; name="0001-winex11.drv-Add-on-screen-PS_USERSTYLE-support-to-pens.txt" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="0001-winex11.drv-Add-on-screen-PS_USERSTYLE-support-to-pens.txt" diff --git a/dlls/winex11.drv/pen.c b/dlls/winex11.drv/pen.c index 45a1f6f..0279e16 100644 --- a/dlls/winex11.drv/pen.c +++ b/dlls/winex11.drv/pen.c @@ -42,29 +42,23 @@ HPEN X11DRV_SelectPen( PHYSDEV dev, HPEN hpen ) X11DRV_PDEVICE *physDev = get_x11drv_dev( dev ); LOGPEN logpen; int i; + EXTLOGPEN *elp = NULL; + INT size = GetObjectW( hpen, 0, NULL ); - if (!GetObjectW( hpen, sizeof(logpen), &logpen )) - { - /* must be an extended pen */ - EXTLOGPEN *elp; - INT size = GetObjectW( hpen, 0, NULL ); - - if (!size) return 0; - + if (!size) return 0; + else if (size == sizeof(logpen)) { + GetObjectW( hpen, sizeof(logpen), &logpen ); + physDev->pen.ext = 0; + } else { physDev->pen.ext = 1; 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; - - HeapFree( GetProcessHeap(), 0, elp ); } - else - physDev->pen.ext = 0; physDev->pen.style = logpen.lopnStyle & PS_STYLE_MASK; physDev->pen.type = logpen.lopnStyle & PS_TYPE_MASK; @@ -109,8 +103,10 @@ HPEN X11DRV_SelectPen( PHYSDEV dev, HPEN hpen ) memcpy(physDev->pen.dashes, PEN_alternate, physDev->pen.dash_len); break; case PS_USERSTYLE: - FIXME("PS_USERSTYLE is not supported\n"); - /* fall through */ + physDev->pen.dash_len = min(elp->elpNumEntries, MAX_DASHLEN); + for(i = 0; i < physDev->pen.dash_len ; i++) + physDev->pen.dashes[i] = min(elp->elpStyleEntry[i], 255); + break; default: physDev->pen.dash_len = 0; break; @@ -120,6 +116,8 @@ HPEN X11DRV_SelectPen( PHYSDEV dev, HPEN hpen ) for(i = 0; i < physDev->pen.dash_len; i++) physDev->pen.dashes[i] *= (physDev->pen.width ? physDev->pen.width : 1); + if (elp) HeapFree( GetProcessHeap(), 0, elp ); + return hpen; } --------------1.7.3.4--