"Evan Stade" estade@gmail.com writes:
I'm only pretty sure this patch is correct. Specifically, note that there are now HeapAlloc()s in X11DRV_SelectPen that rely on X11DRV_SelectPen being called again to free. So what is supposed to happen is that X11DRV_SelectPen called with some dash style will free the last "dashes" array, and possibly allocate a new one. So this method requires DeleteDC to call something along the lines of
SelectObject( hdc, GetStockObject(BLACK_PEN) );
The dash array is always small, there's no reason to allocate it on the heap, you can store an array in the pen object. Also there shouldn't be any need to store the 'ext' flag if you take it into account when building the array.
+#define COPY_DASHDATA(ext, name) \
- if(ext){ \
physDev->pen.dash_len = sizeof(EXTPEN_##name)/sizeof(*EXTPEN_##name); \
physDev->pen.dashes = HeapAlloc(GetProcessHeap(), 0, physDev->pen.dash_len); \
memcpy(physDev->pen.dashes, EXTPEN_##name, physDev->pen.dash_len);} \
- else { \
physDev->pen.dash_len = sizeof(PEN_##name)/sizeof(*PEN_##name); \
physDev->pen.dashes = HeapAlloc(GetProcessHeap(), 0, physDev->pen.dash_len);\
memcpy(physDev->pen.dashes, PEN_##name, physDev->pen.dash_len);}
That macro is ugly, please avoid it.
The dash array is always small, there's no reason to allocate it on the heap, you can store an array in the pen object.
Ok
Also there shouldn't be any need to store the 'ext' flag if you take it into account when building the array.
You need that flag to help choosing between LineOnOffDash and LineDoubleDash in X11DRV_SetupGCForPen.