diff options
Diffstat (limited to 'cd/src/win32/cdwin.c')
-rwxr-xr-x | cd/src/win32/cdwin.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/cd/src/win32/cdwin.c b/cd/src/win32/cdwin.c index 371bb6d..313e833 100755 --- a/cd/src/win32/cdwin.c +++ b/cd/src/win32/cdwin.c @@ -575,6 +575,12 @@ static void cdstipple(cdCtxCanvas* ctxcanvas, int w, int h, const unsigned char DeleteObject(hBitmap); } +static void set_dib_res(cdwDIB* dib, cdCtxCanvas* ctxcanvas) +{ + dib->bmih->biXPelsPerMeter = (LONG)(ctxcanvas->canvas->xres*1000); + dib->bmih->biYPelsPerMeter = (LONG)(ctxcanvas->canvas->yres*1000); +} + static void cdpattern(cdCtxCanvas* ctxcanvas, int w, int h, const long int *colors) { cdwDIB dib; @@ -589,6 +595,9 @@ static void cdpattern(cdCtxCanvas* ctxcanvas, int w, int h, const long int *colo if (!cdwCreateDIB(&dib)) return; + /* trying to preserve pattern size during printing */ + set_dib_res(&dib, ctxcanvas); + cdwDIBEncodePattern(&dib, colors); hBrush = CreateDIBPatternBrushPt(dib.dib, DIB_RGB_COLORS); cdwKillDIB(&dib); @@ -997,8 +1006,6 @@ static void sTextOutBlt(cdCtxCanvas* ctxcanvas, int px, int py, const char* s, i /* calcula o alinhamento da imagem no canvas */ if (ctxcanvas->canvas->text_orientation != 0) { - double d = sqrt(wt*wt + ht*ht); - switch (ctxcanvas->canvas->text_alignment) { case CD_CENTER: @@ -1034,20 +1041,20 @@ static void sTextOutBlt(cdCtxCanvas* ctxcanvas, int px, int py, const char* s, i px_off = (int)(wt/2 * cos_teta); break; case CD_NORTH_EAST: - py_off = (int)(h/2); - px_off = - (int)(sqrt(d*d - h*h)/2); - break; - case CD_NORTH_WEST: - py_off = (int)(sqrt(d*d - w*w)/2); - px_off = - (int)(w/2); + py_off = (int)(ht/2 * cos_teta + wt/2 * sin_teta); + px_off = (int)(ht/2 * sin_teta - wt/2 * cos_teta); break; case CD_SOUTH_WEST: - py_off = - (int)(h/2); - px_off = (int)(sqrt(d*d - h*h)/2); + py_off = - (int)(ht/2 * cos_teta + wt/2 * sin_teta); + px_off = - (int)(ht/2 * sin_teta - wt/2 * cos_teta); + break; + case CD_NORTH_WEST: + py_off = (int)(ht/2 * cos_teta - wt/2 * sin_teta); + px_off = (int)(ht/2 * sin_teta + wt/2 * cos_teta); break; case CD_SOUTH_EAST: - py_off = - (int)(sqrt(d*d - w*w)/2); - px_off = (int)(w/2); + py_off = - (int)(ht/2 * cos_teta - wt/2 * sin_teta); + px_off = - (int)(ht/2 * sin_teta + wt/2 * cos_teta); break; } } @@ -1095,7 +1102,7 @@ static void sTextOutBlt(cdCtxCanvas* ctxcanvas, int px, int py, const char* s, i case CD_CENTER: case CD_EAST: case CD_WEST: - py_off = py; + py_off = 0; break; } } @@ -2366,3 +2373,9 @@ void cdwInitTable(cdCanvas* canvas) if (ctxcanvas->wtype == CDW_EMF) canvas->cxPutImageRectRGBA = cdputimagerectrgba; } + +int cdBaseDriver(void) +{ + return CD_BASE_WIN; +} + |