/* * PostScript pen handling * * Copyright 1998 Huw D M Davies * */ #include "pen.h" #include "psdrv.h" #include "debugtools.h" DEFAULT_DEBUG_CHANNEL(psdrv); static char PEN_dash[] = "50 30"; /* ----- ----- ----- */ static char PEN_dot[] = "20"; /* -- -- -- -- -- -- */ static char PEN_dashdot[] = "40 30 20 30"; /* ---- -- ---- -- */ static char PEN_dashdotdot[] = "40 20 20 20 20 20"; /* ---- -- -- ---- */ static char PEN_alternate[] = "1"; /*********************************************************************** * PSDRV_PEN_SelectObject */ extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen ) { HPEN prevpen = dc->hPen; PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev; TRACE("hpen = %08x colour = %08lx\n", hpen, pen->logpen.lopnColor); dc->hPen = hpen; physDev->pen.width = INTERNAL_XWSTODS(dc, pen->logpen.lopnWidth.x); if(physDev->pen.width < 0) physDev->pen.width = -physDev->pen.width; PSDRV_CreateColor(physDev, &physDev->pen.color, pen->logpen.lopnColor); physDev->pen.style = pen->logpen.lopnStyle & PS_STYLE_MASK; switch(physDev->pen.style) { case PS_DASH: physDev->pen.dash = PEN_dash; break; case PS_DOT: physDev->pen.dash = PEN_dot; break; case PS_DASHDOT: physDev->pen.dash = PEN_dashdot; break; case PS_DASHDOTDOT: physDev->pen.dash = PEN_dashdotdot; break; case PS_ALTERNATE: physDev->pen.dash = PEN_alternate; break; default: physDev->pen.dash = NULL; } if ((physDev->pen.width > 1) && (physDev->pen.dash != NULL)) { physDev->pen.style = PS_SOLID; physDev->pen.dash = NULL; } physDev->pen.set = FALSE; return prevpen; } /********************************************************************** * * PSDRV_SetPen * */ BOOL PSDRV_SetPen(DC *dc) { PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev; if (physDev->pen.style != PS_NULL) { PSDRV_WriteSetColor(dc, &physDev->pen.color); if(!physDev->pen.set) { PSDRV_WriteSetPen(dc); physDev->pen.set = TRUE; } } return TRUE; }