Allocate DC objects on the process heap, and removed WIN_DC_INFO
structure (based on a patch by Ken Coleman).
This commit is contained in:
parent
47f5f0006a
commit
2239abb9f9
|
@ -22,13 +22,12 @@
|
|||
#include "winreg.h"
|
||||
#include "debugtools.h"
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "callback.h"
|
||||
#include "options.h"
|
||||
#include "heap.h"
|
||||
#include "file.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(print)
|
||||
DEFAULT_DEBUG_CHANNEL(print);
|
||||
|
||||
static char PrinterModel[] = "Printer Model";
|
||||
static char DefaultDevMode[] = "Default DevMode";
|
||||
|
@ -242,7 +241,7 @@ BOOL16 WINAPI QueryAbort16(HDC16 hdc, INT16 reserved)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (dc->w.pAbortProc) ret = dc->w.pAbortProc(hdc, 0);
|
||||
if (dc->pAbortProc) ret = dc->pAbortProc(hdc, 0);
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
}
|
||||
|
@ -270,8 +269,8 @@ INT WINAPI SetAbortProc(HDC hdc, ABORTPROC abrtprc)
|
|||
{
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
if(dc->w.pAbortProc) THUNK_Free((FARPROC)dc->w.pAbortProc);
|
||||
dc->w.pAbortProc = abrtprc;
|
||||
if(dc->pAbortProc) THUNK_Free((FARPROC)dc->pAbortProc);
|
||||
dc->pAbortProc = abrtprc;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "config.h"
|
||||
#include "debugtools.h"
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "windef.h"
|
||||
#include "winerror.h"
|
||||
#include "wine_gl.h"
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
|
||||
#include "bitmap.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "ttydrv.h"
|
||||
#include "winbase.h"
|
||||
#include "debugtools.h"
|
||||
|
@ -124,7 +124,7 @@ HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap
|
|||
|
||||
TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
|
||||
|
||||
if(!(dc->w.flags & DC_MEMORY))
|
||||
if(!(dc->flags & DC_MEMORY))
|
||||
return 0;
|
||||
|
||||
/* Assure that the bitmap device dependent */
|
||||
|
@ -136,14 +136,14 @@ HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap
|
|||
return 0;
|
||||
}
|
||||
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = bitmap->bitmap.bmWidth;
|
||||
dc->w.totalExtent.bottom = bitmap->bitmap.bmHeight;
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = bitmap->bitmap.bmWidth;
|
||||
dc->totalExtent.bottom = bitmap->bitmap.bmHeight;
|
||||
|
||||
/* FIXME: Should be done in the common code instead */
|
||||
if(dc->w.hVisRgn) {
|
||||
SetRectRgn(dc->w.hVisRgn, 0, 0,
|
||||
if(dc->hVisRgn) {
|
||||
SetRectRgn(dc->hVisRgn, 0, 0,
|
||||
bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight);
|
||||
} else {
|
||||
HRGN hrgn;
|
||||
|
@ -151,11 +151,11 @@ HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap
|
|||
if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
|
||||
return 0;
|
||||
|
||||
dc->w.hVisRgn = hrgn;
|
||||
dc->hVisRgn = hrgn;
|
||||
}
|
||||
|
||||
hPreviousBitmap = dc->w.hBitmap;
|
||||
dc->w.hBitmap = hbitmap;
|
||||
hPreviousBitmap = dc->hBitmap;
|
||||
dc->hBitmap = hbitmap;
|
||||
|
||||
return hPreviousBitmap;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
#include "gdi.h"
|
||||
#include "bitmap.h"
|
||||
#include "dc.h"
|
||||
#include "palette.h"
|
||||
#include "ttydrv.h"
|
||||
#include "winbase.h"
|
||||
|
@ -214,36 +213,36 @@ BOOL TTYDRV_DC_CreateDC(DC *dc, LPCSTR driver, LPCSTR device,
|
|||
}
|
||||
physDev = (TTYDRV_PDEVICE *) dc->physDev;
|
||||
|
||||
dc->w.devCaps = &TTYDRV_DC_DevCaps;
|
||||
dc->devCaps = &TTYDRV_DC_DevCaps;
|
||||
|
||||
if(dc->w.flags & DC_MEMORY){
|
||||
if(dc->flags & DC_MEMORY){
|
||||
physDev->window = NULL;
|
||||
physDev->cellWidth = 1;
|
||||
physDev->cellHeight = 1;
|
||||
|
||||
TTYDRV_DC_CreateBitmap(dc->w.hBitmap);
|
||||
bmp = (BITMAPOBJ *) GDI_GetObjPtr(dc->w.hBitmap, BITMAP_MAGIC);
|
||||
TTYDRV_DC_CreateBitmap(dc->hBitmap);
|
||||
bmp = (BITMAPOBJ *) GDI_GetObjPtr(dc->hBitmap, BITMAP_MAGIC);
|
||||
|
||||
dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
dc->bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->w.totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
dc->hVisRgn = CreateRectRgnIndirect( &dc->totalExtent );
|
||||
|
||||
GDI_ReleaseObj( dc->w.hBitmap );
|
||||
GDI_ReleaseObj( dc->hBitmap );
|
||||
} else {
|
||||
physDev->window = TTYDRV_GetRootWindow();
|
||||
physDev->cellWidth = cell_width;
|
||||
physDev->cellHeight = cell_height;
|
||||
|
||||
dc->w.bitsPerPixel = 1;
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = cell_width * screen_cols;
|
||||
dc->w.totalExtent.bottom = cell_height * screen_rows;
|
||||
dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
|
||||
dc->bitsPerPixel = 1;
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = cell_width * screen_cols;
|
||||
dc->totalExtent.bottom = cell_height * screen_rows;
|
||||
dc->hVisRgn = CreateRectRgnIndirect( &dc->totalExtent );
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include "wine/winestring.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
#include "ttydrv.h"
|
||||
|
@ -84,10 +84,10 @@ BOOL TTYDRV_DC_LineTo(DC *dc, INT x, INT y)
|
|||
if(!physDev->window)
|
||||
return FALSE;
|
||||
|
||||
row1 = (dc->w.DCOrgY + XLPTODP(dc, dc->w.CursPosY)) / physDev->cellHeight;
|
||||
col1 = (dc->w.DCOrgX + XLPTODP(dc, dc->w.CursPosX)) / physDev->cellWidth;
|
||||
row2 = (dc->w.DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
|
||||
col2 = (dc->w.DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
|
||||
row1 = (dc->DCOrgY + XLPTODP(dc, dc->CursPosY)) / physDev->cellHeight;
|
||||
col1 = (dc->DCOrgX + XLPTODP(dc, dc->CursPosX)) / physDev->cellWidth;
|
||||
row2 = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
|
||||
col2 = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
|
||||
|
||||
if(row1 > row2) {
|
||||
INT tmp = row1;
|
||||
|
@ -195,10 +195,10 @@ BOOL TTYDRV_DC_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
if(!physDev->window)
|
||||
return FALSE;
|
||||
|
||||
row1 = (dc->w.DCOrgY + XLPTODP(dc, top)) / physDev->cellHeight;
|
||||
col1 = (dc->w.DCOrgX + XLPTODP(dc, left)) / physDev->cellWidth;
|
||||
row2 = (dc->w.DCOrgY + XLPTODP(dc, bottom)) / physDev->cellHeight;
|
||||
col2 = (dc->w.DCOrgX + XLPTODP(dc, right)) / physDev->cellWidth;
|
||||
row1 = (dc->DCOrgY + XLPTODP(dc, top)) / physDev->cellHeight;
|
||||
col1 = (dc->DCOrgX + XLPTODP(dc, left)) / physDev->cellWidth;
|
||||
row2 = (dc->DCOrgY + XLPTODP(dc, bottom)) / physDev->cellHeight;
|
||||
col2 = (dc->DCOrgX + XLPTODP(dc, right)) / physDev->cellWidth;
|
||||
|
||||
if(row1 > row2) {
|
||||
INT tmp = row1;
|
||||
|
@ -259,8 +259,8 @@ COLORREF TTYDRV_DC_SetBkColor(DC *dc, COLORREF color)
|
|||
|
||||
TRACE("(%p, 0x%08lx)\n", dc, color);
|
||||
|
||||
oldColor = dc->w.backgroundColor;
|
||||
dc->w.backgroundColor = color;
|
||||
oldColor = dc->backgroundColor;
|
||||
dc->backgroundColor = color;
|
||||
|
||||
return oldColor;
|
||||
}
|
||||
|
@ -279,8 +279,8 @@ COLORREF TTYDRV_DC_SetPixel(DC *dc, INT x, INT y, COLORREF color)
|
|||
if(!physDev->window)
|
||||
return FALSE;
|
||||
|
||||
row = (dc->w.DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
|
||||
col = (dc->w.DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
|
||||
row = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
|
||||
col = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
|
||||
|
||||
mvwaddch(physDev->window, row, col, ACS_BULLET);
|
||||
wrefresh(physDev->window);
|
||||
|
@ -302,8 +302,8 @@ COLORREF TTYDRV_DC_SetTextColor(DC *dc, COLORREF color)
|
|||
|
||||
TRACE("(%p, 0x%08lx)\n", dc, color);
|
||||
|
||||
oldColor = dc->w.textColor;
|
||||
dc->w.textColor = color;
|
||||
oldColor = dc->textColor;
|
||||
dc->textColor = color;
|
||||
|
||||
return oldColor;
|
||||
}
|
||||
|
@ -373,25 +373,25 @@ BOOL TTYDRV_DC_ExtTextOut(DC *dc, INT x, INT y, UINT flags,
|
|||
return FALSE;
|
||||
|
||||
/* FIXME: Is this really correct? */
|
||||
if(dc->w.textAlign & TA_UPDATECP) {
|
||||
x = dc->w.CursPosX;
|
||||
y = dc->w.CursPosY;
|
||||
if(dc->textAlign & TA_UPDATECP) {
|
||||
x = dc->CursPosX;
|
||||
y = dc->CursPosY;
|
||||
}
|
||||
|
||||
x = XLPTODP(dc, x);
|
||||
y = YLPTODP(dc, y);
|
||||
|
||||
row = (dc->w.DCOrgY + y) / physDev->cellHeight;
|
||||
col = (dc->w.DCOrgX + x) / physDev->cellWidth;
|
||||
row = (dc->DCOrgY + y) / physDev->cellHeight;
|
||||
col = (dc->DCOrgX + x) / physDev->cellWidth;
|
||||
ascii = HeapAlloc( GetProcessHeap(), 0, count+1 );
|
||||
lstrcpynWtoA(ascii, str, count+1);
|
||||
mvwaddnstr(physDev->window, row, col, ascii, count);
|
||||
HeapFree( GetProcessHeap(), 0, ascii );
|
||||
wrefresh(physDev->window);
|
||||
|
||||
if(dc->w.textAlign & TA_UPDATECP) {
|
||||
dc->w.CursPosX += count * physDev->cellWidth;
|
||||
dc->w.CursPosY += physDev->cellHeight;
|
||||
if(dc->textAlign & TA_UPDATECP) {
|
||||
dc->CursPosX += count * physDev->cellWidth;
|
||||
dc->CursPosY += physDev->cellHeight;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "bitmap.h"
|
||||
#include "brush.h"
|
||||
#include "dc.h"
|
||||
#include "font.h"
|
||||
#include "gdi.h"
|
||||
#include "pen.h"
|
||||
|
@ -30,8 +29,8 @@ static HBRUSH TTYDRV_DC_BRUSH_SelectObject(DC *dc, HBRUSH hbrush, BRUSHOBJ *brus
|
|||
|
||||
TRACE("(%p, 0x%04x, %p)\n", dc, hbrush, brush);
|
||||
|
||||
hPreviousBrush = dc->w.hBrush;
|
||||
dc->w.hBrush = hbrush;
|
||||
hPreviousBrush = dc->hBrush;
|
||||
dc->hBrush = hbrush;
|
||||
|
||||
return hPreviousBrush;
|
||||
}
|
||||
|
@ -45,8 +44,8 @@ static HFONT TTYDRV_DC_FONT_SelectObject(DC* dc, HFONT hfont, FONTOBJ *font)
|
|||
|
||||
TRACE("(%p, 0x%04x, %p)\n", dc, hfont, font);
|
||||
|
||||
hPreviousFont = dc->w.hFont;
|
||||
dc->w.hFont = hfont;
|
||||
hPreviousFont = dc->hFont;
|
||||
dc->hFont = hfont;
|
||||
|
||||
return hPreviousFont;
|
||||
}
|
||||
|
@ -60,8 +59,8 @@ static HPEN TTYDRV_DC_PEN_SelectObject(DC *dc, HBRUSH hpen, PENOBJ *pen)
|
|||
|
||||
TRACE("(%p, 0x%04x, %p)\n", dc, hpen, pen);
|
||||
|
||||
hPreviousPen = dc->w.hPen;
|
||||
dc->w.hPen = hpen;
|
||||
hPreviousPen = dc->hPen;
|
||||
dc->hPen = hpen;
|
||||
|
||||
return hPreviousPen;
|
||||
}
|
||||
|
|
|
@ -40,8 +40,6 @@ struct DIDEVICEOBJECTDATA;
|
|||
* TTY GDI driver
|
||||
*/
|
||||
|
||||
extern struct tagGDI_DRIVER TTYDRV_GDI_Driver;
|
||||
|
||||
extern BOOL TTYDRV_GDI_Initialize(void);
|
||||
extern void TTYDRV_GDI_Finalize(void);
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include "class.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "ttydrv.h"
|
||||
#include "win.h"
|
||||
|
@ -232,15 +232,15 @@ void TTYDRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigi
|
|||
|
||||
/* FIXME: Should be done in the common code instead */
|
||||
if(!wndPtr) {
|
||||
dc->w.DCOrgX = 0;
|
||||
dc->w.DCOrgY = 0;
|
||||
dc->DCOrgX = 0;
|
||||
dc->DCOrgY = 0;
|
||||
} else {
|
||||
if(flags & DCX_WINDOW) {
|
||||
dc->w.DCOrgX = wndPtr->rectWindow.left;
|
||||
dc->w.DCOrgY = wndPtr->rectWindow.top;
|
||||
dc->DCOrgX = wndPtr->rectWindow.left;
|
||||
dc->DCOrgY = wndPtr->rectWindow.top;
|
||||
} else {
|
||||
dc->w.DCOrgX = wndPtr->rectClient.left;
|
||||
dc->w.DCOrgY = wndPtr->rectClient.top;
|
||||
dc->DCOrgX = wndPtr->rectClient.left;
|
||||
dc->DCOrgY = wndPtr->rectClient.top;
|
||||
}
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
|
|
@ -18,11 +18,11 @@ DEFAULT_DEBUG_CHANNEL(psdrv)
|
|||
*/
|
||||
HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush, BRUSHOBJ * brush )
|
||||
{
|
||||
HBRUSH prevbrush = dc->w.hBrush;
|
||||
HBRUSH prevbrush = dc->hBrush;
|
||||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
|
||||
TRACE("hbrush = %08x\n", hbrush);
|
||||
dc->w.hBrush = hbrush;
|
||||
dc->hBrush = hbrush;
|
||||
|
||||
switch(brush->logbrush.lbStyle) {
|
||||
|
||||
|
@ -62,7 +62,7 @@ static BOOL PSDRV_SetBrush(DC *dc)
|
|||
{
|
||||
BOOL ret = TRUE;
|
||||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
BRUSHOBJ *brush = (BRUSHOBJ *)GDI_GetObjPtr( dc->w.hBrush, BRUSH_MAGIC );
|
||||
BRUSHOBJ *brush = (BRUSHOBJ *)GDI_GetObjPtr( dc->hBrush, BRUSH_MAGIC );
|
||||
|
||||
if(!brush) {
|
||||
ERR("Can't get BRUSHOBJ\n");
|
||||
|
@ -84,7 +84,7 @@ static BOOL PSDRV_SetBrush(DC *dc)
|
|||
|
||||
}
|
||||
physDev->brush.set = TRUE;
|
||||
GDI_ReleaseObj( dc->w.hBrush );
|
||||
GDI_ReleaseObj( dc->hBrush );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -124,7 +124,7 @@ static BOOL PSDRV_Clip(DC *dc, BOOL EO)
|
|||
BOOL PSDRV_Brush(DC *dc, BOOL EO)
|
||||
{
|
||||
BOOL ret = TRUE;
|
||||
BRUSHOBJ *brush = (BRUSHOBJ *)GDI_GetObjPtr( dc->w.hBrush, BRUSH_MAGIC );
|
||||
BRUSHOBJ *brush = (BRUSHOBJ *)GDI_GetObjPtr( dc->hBrush, BRUSH_MAGIC );
|
||||
PSDRV_PDEVICE *physDev = dc->physDev;
|
||||
|
||||
if(!brush) {
|
||||
|
@ -224,7 +224,7 @@ BOOL PSDRV_Brush(DC *dc, BOOL EO)
|
|||
break;
|
||||
}
|
||||
|
||||
GDI_ReleaseObj( dc->w.hBrush );
|
||||
GDI_ReleaseObj( dc->hBrush );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,12 +23,12 @@ VOID PSDRV_SetDeviceClipping( DC *dc )
|
|||
|
||||
TRACE("hdc=%04x\n", dc->hSelf);
|
||||
|
||||
if (dc->w.hGCClipRgn == 0) {
|
||||
if (dc->hGCClipRgn == 0) {
|
||||
ERR("Rgn is 0. Please report this.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
size = GetRegionData(dc->w.hGCClipRgn, 0, NULL);
|
||||
size = GetRegionData(dc->hGCClipRgn, 0, NULL);
|
||||
if(!size) {
|
||||
ERR("Invalid region\n");
|
||||
return;
|
||||
|
@ -40,7 +40,7 @@ VOID PSDRV_SetDeviceClipping( DC *dc )
|
|||
return;
|
||||
}
|
||||
|
||||
GetRegionData(dc->w.hGCClipRgn, size, rgndata);
|
||||
GetRegionData(dc->hGCClipRgn, size, rgndata);
|
||||
|
||||
PSDRV_WriteInitClip(dc);
|
||||
|
||||
|
|
|
@ -109,8 +109,8 @@ COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color )
|
|||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
COLORREF oldColor;
|
||||
|
||||
oldColor = dc->w.backgroundColor;
|
||||
dc->w.backgroundColor = color;
|
||||
oldColor = dc->backgroundColor;
|
||||
dc->backgroundColor = color;
|
||||
|
||||
PSDRV_CreateColor(physDev, &physDev->bkColor, color);
|
||||
|
||||
|
@ -126,8 +126,8 @@ COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color )
|
|||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
COLORREF oldColor;
|
||||
|
||||
oldColor = dc->w.textColor;
|
||||
dc->w.textColor = color;
|
||||
oldColor = dc->textColor;
|
||||
dc->textColor = color;
|
||||
|
||||
PSDRV_CreateColor(physDev, &physDev->font.color, color);
|
||||
physDev->font.set = FALSE;
|
||||
|
|
|
@ -27,8 +27,8 @@ INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput,
|
|||
physDev->job.banding = TRUE;
|
||||
r->left = 0;
|
||||
r->top = 0;
|
||||
r->right = dc->w.devCaps->horzRes;
|
||||
r->bottom = dc->w.devCaps->vertRes;
|
||||
r->right = dc->devCaps->horzRes;
|
||||
r->bottom = dc->devCaps->vertRes;
|
||||
TRACE("NEXTBAND returning %d,%d - %d,%d\n", r->left,
|
||||
r->top, r->right, r->bottom );
|
||||
return 1;
|
||||
|
@ -127,8 +127,8 @@ INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput,
|
|||
{
|
||||
POINT16 *p = (POINT16 *)PTR_SEG_TO_LIN(lpOutData);
|
||||
|
||||
p->x = dc->w.devCaps->horzRes;
|
||||
p->y = dc->w.devCaps->vertRes;
|
||||
p->x = dc->devCaps->horzRes;
|
||||
p->y = dc->devCaps->vertRes;
|
||||
TRACE("GETPHYSPAGESIZE: returning %dx%d\n", p->x, p->y);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -8,11 +8,10 @@
|
|||
#include "winspool.h"
|
||||
#include "psdrv.h"
|
||||
#include "debugtools.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "winerror.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(psdrv)
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(psdrv);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -21,7 +20,7 @@ DEFAULT_DEBUG_CHANNEL(psdrv)
|
|||
HFONT16 PSDRV_FONT_SelectObject( DC * dc, HFONT16 hfont,
|
||||
FONTOBJ *font )
|
||||
{
|
||||
HFONT16 prevfont = dc->w.hFont;
|
||||
HFONT16 prevfont = dc->hFont;
|
||||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
LOGFONT16 *lf = &(font->logfont);
|
||||
BOOL bd = FALSE, it = FALSE;
|
||||
|
@ -34,7 +33,7 @@ HFONT16 PSDRV_FONT_SelectObject( DC * dc, HFONT16 hfont,
|
|||
TRACE("FaceName = '%s' Height = %d Italic = %d Weight = %d\n",
|
||||
lf->lfFaceName, lf->lfHeight, lf->lfItalic, lf->lfWeight);
|
||||
|
||||
dc->w.hFont = hfont;
|
||||
dc->hFont = hfont;
|
||||
|
||||
if(lf->lfItalic)
|
||||
it = TRUE;
|
||||
|
@ -143,8 +142,8 @@ HFONT16 PSDRV_FONT_SelectObject( DC * dc, HFONT16 hfont,
|
|||
physDev->font.tm.tmPitchAndFamily |= TMPF_DEVICE;
|
||||
physDev->font.tm.tmCharSet = ANSI_CHARSET;
|
||||
physDev->font.tm.tmOverhang = 0;
|
||||
physDev->font.tm.tmDigitizedAspectX = dc->w.devCaps->logPixelsY;
|
||||
physDev->font.tm.tmDigitizedAspectY = dc->w.devCaps->logPixelsX;
|
||||
physDev->font.tm.tmDigitizedAspectX = dc->devCaps->logPixelsY;
|
||||
physDev->font.tm.tmDigitizedAspectY = dc->devCaps->logPixelsX;
|
||||
|
||||
physDev->font.set = FALSE;
|
||||
|
||||
|
@ -301,8 +300,8 @@ static UINT PSDRV_GetFontMetric(HDC hdc, AFM *pafm, NEWTEXTMETRIC16 *pTM,
|
|||
pTM->tmDescent = -pafm->Descender * scale;
|
||||
pTM->tmInternalLeading = (pafm->FullAscender - pafm->Ascender) * scale;
|
||||
pTM->tmMaxCharWidth = pafm->CharWidths[77] * scale;
|
||||
pTM->tmDigitizedAspectX = dc->w.devCaps->logPixelsY;
|
||||
pTM->tmDigitizedAspectY = dc->w.devCaps->logPixelsX;
|
||||
pTM->tmDigitizedAspectX = dc->devCaps->logPixelsY;
|
||||
pTM->tmDigitizedAspectY = dc->devCaps->logPixelsX;
|
||||
|
||||
*(INT*)&pTM->tmFirstChar = 32;
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@ BOOL PSDRV_LineTo(DC *dc, INT x, INT y)
|
|||
TRACE("%d %d\n", x, y);
|
||||
|
||||
PSDRV_SetPen(dc);
|
||||
PSDRV_WriteMoveTo(dc, XLPTODP(dc, dc->w.CursPosX),
|
||||
YLPTODP(dc, dc->w.CursPosY));
|
||||
PSDRV_WriteMoveTo(dc, XLPTODP(dc, dc->CursPosX),
|
||||
YLPTODP(dc, dc->CursPosY));
|
||||
PSDRV_WriteLineTo(dc, XLPTODP(dc, x), YLPTODP(dc, y));
|
||||
PSDRV_DrawLine(dc);
|
||||
|
||||
|
@ -259,7 +259,7 @@ BOOL PSDRV_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
|
|||
PSDRV_WriteClosePath(dc);
|
||||
}
|
||||
|
||||
if(dc->w.polyFillMode == ALTERNATE)
|
||||
if(dc->polyFillMode == ALTERNATE)
|
||||
PSDRV_Brush(dc, 1);
|
||||
else /* WINDING */
|
||||
PSDRV_Brush(dc, 0);
|
||||
|
|
|
@ -347,12 +347,12 @@ static BOOL PSDRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
|||
|
||||
/* etc */
|
||||
|
||||
dc->w.devCaps = devCaps;
|
||||
dc->devCaps = devCaps;
|
||||
|
||||
dc->w.hVisRgn = CreateRectRgn(0, 0, dc->w.devCaps->horzRes,
|
||||
dc->w.devCaps->vertRes);
|
||||
dc->hVisRgn = CreateRectRgn(0, 0, dc->devCaps->horzRes,
|
||||
dc->devCaps->vertRes);
|
||||
|
||||
dc->w.hFont = PSDRV_DefaultFont;
|
||||
dc->hFont = PSDRV_DefaultFont;
|
||||
physDev->job.output = output ?
|
||||
HEAP_strdupA( PSDRV_Heap, 0, output ) :
|
||||
HEAP_strdupA( PSDRV_Heap, 0, "LPT1:" ); /* HACK */
|
||||
|
@ -372,7 +372,7 @@ static BOOL PSDRV_DeleteDC( DC *dc )
|
|||
|
||||
HeapFree( PSDRV_Heap, 0, physDev->Devmode );
|
||||
HeapFree( PSDRV_Heap, 0, physDev->job.output );
|
||||
HeapFree( PSDRV_Heap, 0, (void *)dc->w.devCaps );
|
||||
HeapFree( PSDRV_Heap, 0, (void *)dc->devCaps );
|
||||
HeapFree( PSDRV_Heap, 0, physDev );
|
||||
dc->physDev = NULL;
|
||||
|
||||
|
|
|
@ -22,11 +22,11 @@ static char PEN_alternate[] = "1";
|
|||
*/
|
||||
extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen )
|
||||
{
|
||||
HPEN prevpen = dc->w.hPen;
|
||||
HPEN prevpen = dc->hPen;
|
||||
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||||
|
||||
TRACE("hpen = %08x colour = %08lx\n", hpen, pen->logpen.lopnColor);
|
||||
dc->w.hPen = hpen;
|
||||
dc->hPen = hpen;
|
||||
|
||||
physDev->pen.width = XLSTODS(dc, pen->logpen.lopnWidth.x);
|
||||
if(physDev->pen.width < 0)
|
||||
|
|
|
@ -310,12 +310,12 @@ INT PSDRV_WriteHeader( DC *dc, LPCSTR title )
|
|||
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||
/* BBox co-ords are in default user co-ord system so urx < ury even in
|
||||
landscape mode */
|
||||
urx = (int) (dc->w.devCaps->vertSize * 72.0 / 25.4);
|
||||
ury = (int) (dc->w.devCaps->horzSize * 72.0 / 25.4);
|
||||
urx = (int) (dc->devCaps->vertSize * 72.0 / 25.4);
|
||||
ury = (int) (dc->devCaps->horzSize * 72.0 / 25.4);
|
||||
orient = "Landscape";
|
||||
} else {
|
||||
urx = (int) (dc->w.devCaps->horzSize * 72.0 / 25.4);
|
||||
ury = (int) (dc->w.devCaps->vertSize * 72.0 / 25.4);
|
||||
urx = (int) (dc->devCaps->horzSize * 72.0 / 25.4);
|
||||
ury = (int) (dc->devCaps->vertSize * 72.0 / 25.4);
|
||||
orient = "Portrait";
|
||||
}
|
||||
|
||||
|
@ -440,8 +440,8 @@ INT PSDRV_WriteNewPage( DC *dc )
|
|||
|
||||
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||
if(physDev->pi->ppd->LandscapeOrientation == -90) {
|
||||
xtrans = dc->w.devCaps->vertRes;
|
||||
ytrans = dc->w.devCaps->horzRes;
|
||||
xtrans = dc->devCaps->vertRes;
|
||||
ytrans = dc->devCaps->horzRes;
|
||||
rotation = 90;
|
||||
} else {
|
||||
xtrans = ytrans = 0;
|
||||
|
@ -449,12 +449,12 @@ INT PSDRV_WriteNewPage( DC *dc )
|
|||
}
|
||||
} else {
|
||||
xtrans = 0;
|
||||
ytrans = dc->w.devCaps->vertRes;
|
||||
ytrans = dc->devCaps->vertRes;
|
||||
rotation = 0;
|
||||
}
|
||||
|
||||
sprintf(buf, psnewpage, name, physDev->job.PageNo,
|
||||
dc->w.devCaps->logPixelsX, dc->w.devCaps->logPixelsY,
|
||||
dc->devCaps->logPixelsX, dc->devCaps->logPixelsY,
|
||||
xtrans, ytrans, rotation);
|
||||
|
||||
if( WriteSpool16( physDev->job.hJob, buf, strlen(buf) ) !=
|
||||
|
@ -957,8 +957,8 @@ BOOL PSDRV_WritePatternDict(DC *dc, BITMAP *bm, BYTE *bits)
|
|||
sprintf(buf, start, w, h, w, h);
|
||||
PSDRV_WriteSpool(dc, buf, strlen(buf));
|
||||
PSDRV_WriteIndexColorSpaceBegin(dc, 1);
|
||||
map[0] = dc->w.textColor;
|
||||
map[1] = dc->w.backgroundColor;
|
||||
map[0] = dc->textColor;
|
||||
map[1] = dc->backgroundColor;
|
||||
PSDRV_WriteRGB(dc, map, 2);
|
||||
PSDRV_WriteIndexColorSpaceEnd(dc);
|
||||
ptr = buf;
|
||||
|
|
|
@ -87,9 +87,9 @@ static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if(dc->w.textAlign & TA_UPDATECP) {
|
||||
x = dc->w.CursPosX;
|
||||
y = dc->w.CursPosY;
|
||||
if(dc->textAlign & TA_UPDATECP) {
|
||||
x = dc->CursPosX;
|
||||
y = dc->CursPosY;
|
||||
}
|
||||
|
||||
x = XLPTODP(dc, x);
|
||||
|
@ -99,10 +99,10 @@ static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
|
|||
sz.cx = XLSTODS(dc, sz.cx);
|
||||
sz.cy = YLSTODS(dc, sz.cy);
|
||||
|
||||
switch(dc->w.textAlign & (TA_LEFT | TA_CENTER | TA_RIGHT) ) {
|
||||
switch(dc->textAlign & (TA_LEFT | TA_CENTER | TA_RIGHT) ) {
|
||||
case TA_LEFT:
|
||||
if(dc->w.textAlign & TA_UPDATECP)
|
||||
dc->w.CursPosX = XDPTOLP(dc, x + sz.cx);
|
||||
if(dc->textAlign & TA_UPDATECP)
|
||||
dc->CursPosX = XDPTOLP(dc, x + sz.cx);
|
||||
break;
|
||||
|
||||
case TA_CENTER:
|
||||
|
@ -111,12 +111,12 @@ static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
|
|||
|
||||
case TA_RIGHT:
|
||||
x -= sz.cx;
|
||||
if(dc->w.textAlign & TA_UPDATECP)
|
||||
dc->w.CursPosX = XDPTOLP(dc, x);
|
||||
if(dc->textAlign & TA_UPDATECP)
|
||||
dc->CursPosX = XDPTOLP(dc, x);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(dc->w.textAlign & (TA_TOP | TA_BASELINE | TA_BOTTOM) ) {
|
||||
switch(dc->textAlign & (TA_TOP | TA_BASELINE | TA_BOTTOM) ) {
|
||||
case TA_TOP:
|
||||
y += physDev->font.tm.tmAscent;
|
||||
break;
|
||||
|
@ -132,7 +132,7 @@ static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
|
|||
memcpy(strbuf, str, count * sizeof(WCHAR));
|
||||
*(strbuf + count) = '\0';
|
||||
|
||||
if ((dc->w.backgroundMode != TRANSPARENT) && (bDrawBackground != FALSE))
|
||||
if ((dc->backgroundMode != TRANSPARENT) && (bDrawBackground != FALSE))
|
||||
{
|
||||
PSDRV_WriteGSave(dc);
|
||||
PSDRV_WriteNewPath(dc);
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright 1993, 1994 Alexandre Julliard
|
||||
*/
|
||||
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(bitblt);
|
||||
|
@ -67,8 +67,8 @@ BOOL WINAPI BitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
|
|||
{
|
||||
dcSrc = DC_GetDCPtr( hdcSrc );
|
||||
TRACE("hdcSrc=%04x %d,%d %d bpp->hdcDest=%04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->w.bitsPerPixel : 0,
|
||||
hdcDst, xDst, yDst, width, height, dcDst->w.bitsPerPixel, rop);
|
||||
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->bitsPerPixel : 0,
|
||||
hdcDst, xDst, yDst, width, height, dcDst->bitsPerPixel, rop);
|
||||
if (dcDst->funcs->pBitBlt)
|
||||
ret = dcDst->funcs->pBitBlt( dcDst, xDst, yDst, width, height,
|
||||
dcSrc, xSrc, ySrc, rop );
|
||||
|
@ -112,8 +112,8 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst,
|
|||
|
||||
TRACE("%04x %d,%d %dx%dx%d -> %04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||
dcSrc ? dcSrc->w.bitsPerPixel : 0, hdcDst, xDst, yDst,
|
||||
widthDst, heightDst, dcDst->w.bitsPerPixel, rop );
|
||||
dcSrc ? dcSrc->bitsPerPixel : 0, hdcDst, xDst, yDst,
|
||||
widthDst, heightDst, dcDst->bitsPerPixel, rop );
|
||||
|
||||
if (dcSrc) {
|
||||
if (dcDst->funcs->pStretchBlt)
|
||||
|
|
|
@ -8,12 +8,11 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "enhmetafiledrv.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(enhmetafile)
|
||||
DEFAULT_DEBUG_CHANNEL(enhmetafile);
|
||||
|
||||
/**********************************************************************
|
||||
* EMFDRV_MoveToEx
|
||||
|
@ -48,10 +47,10 @@ EMFDRV_LineTo( DC *dc, INT x, INT y )
|
|||
if(!EMFDRV_WriteRecord( dc, &emr.emr ))
|
||||
return FALSE;
|
||||
|
||||
bounds.left = min(x, dc->w.CursPosX);
|
||||
bounds.top = min(y, dc->w.CursPosY);
|
||||
bounds.right = max(x, dc->w.CursPosX);
|
||||
bounds.bottom = max(y, dc->w.CursPosY);
|
||||
bounds.left = min(x, dc->CursPosX);
|
||||
bounds.top = min(y, dc->CursPosY);
|
||||
bounds.right = max(x, dc->CursPosX);
|
||||
bounds.bottom = max(y, dc->CursPosY);
|
||||
|
||||
EMFDRV_UpdateBBox( dc, &bounds );
|
||||
|
||||
|
@ -77,7 +76,7 @@ EMFDRV_ArcChordPie( DC *dc, INT left, INT top, INT right, INT bottom,
|
|||
if(left > right) {temp = left; left = right; right = temp;}
|
||||
if(top > bottom) {temp = top; top = bottom; bottom = temp;}
|
||||
|
||||
if(dc->w.GraphicsMode == GM_COMPATIBLE) {
|
||||
if(dc->GraphicsMode == GM_COMPATIBLE) {
|
||||
right--;
|
||||
bottom--;
|
||||
}
|
||||
|
@ -212,7 +211,7 @@ EMFDRV_Ellipse( DC *dc, INT left, INT top, INT right, INT bottom )
|
|||
if(left > right) {temp = left; left = right; right = temp;}
|
||||
if(top > bottom) {temp = top; top = bottom; bottom = temp;}
|
||||
|
||||
if(dc->w.GraphicsMode == GM_COMPATIBLE) {
|
||||
if(dc->GraphicsMode == GM_COMPATIBLE) {
|
||||
right--;
|
||||
bottom--;
|
||||
}
|
||||
|
@ -244,7 +243,7 @@ EMFDRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
if(left > right) {temp = left; left = right; right = temp;}
|
||||
if(top > bottom) {temp = top; top = bottom; bottom = temp;}
|
||||
|
||||
if(dc->w.GraphicsMode == GM_COMPATIBLE) {
|
||||
if(dc->GraphicsMode == GM_COMPATIBLE) {
|
||||
right--;
|
||||
bottom--;
|
||||
}
|
||||
|
@ -275,7 +274,7 @@ EMFDRV_RoundRect( DC *dc, INT left, INT top, INT right,
|
|||
if(left > right) {temp = left; left = right; right = temp;}
|
||||
if(top > bottom) {temp = top; top = bottom; bottom = temp;}
|
||||
|
||||
if(dc->w.GraphicsMode == GM_COMPATIBLE) {
|
||||
if(dc->GraphicsMode == GM_COMPATIBLE) {
|
||||
right--;
|
||||
bottom--;
|
||||
}
|
||||
|
|
|
@ -4,9 +4,11 @@
|
|||
* Copyright 1999 Huw D M Davies
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "wingdi.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "global.h"
|
||||
#include "enhmetafile.h"
|
||||
|
@ -14,9 +16,7 @@
|
|||
#include "wine/winestring.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(enhmetafile)
|
||||
DEFAULT_DEBUG_CHANNEL(enhmetafile);
|
||||
|
||||
static const DC_FUNCTIONS EMFDRV_Funcs =
|
||||
{
|
||||
|
|
|
@ -129,8 +129,8 @@ static HBRUSH EMFDRV_BRUSH_SelectObject(DC *dc, HBRUSH hBrush )
|
|||
if(!EMFDRV_WriteRecord( dc, &emr.emr ))
|
||||
return FALSE;
|
||||
|
||||
hOldBrush = dc->w.hBrush;
|
||||
dc->w.hBrush = hBrush;
|
||||
hOldBrush = dc->hBrush;
|
||||
dc->hBrush = hBrush;
|
||||
return hOldBrush;
|
||||
}
|
||||
|
||||
|
@ -210,8 +210,8 @@ static HFONT EMFDRV_FONT_SelectObject( DC * dc, HFONT hFont )
|
|||
if(!EMFDRV_WriteRecord( dc, &emr.emr ))
|
||||
return FALSE;
|
||||
|
||||
hOldFont = dc->w.hFont;
|
||||
dc->w.hFont = hFont;
|
||||
hOldFont = dc->hFont;
|
||||
dc->hFont = hFont;
|
||||
return hOldFont;
|
||||
}
|
||||
|
||||
|
@ -271,8 +271,8 @@ static HPEN EMFDRV_PEN_SelectObject(DC *dc, HPEN hPen )
|
|||
if(!EMFDRV_WriteRecord( dc, &emr.emr ))
|
||||
return FALSE;
|
||||
|
||||
hOldPen = dc->w.hPen;
|
||||
dc->w.hPen = hPen;
|
||||
hOldPen = dc->hPen;
|
||||
dc->hPen = hPen;
|
||||
return hOldPen;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "ldt.h"
|
||||
#include "dc.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(driver);
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
* Copyright 1993 Alexandre Julliard
|
||||
*/
|
||||
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(gdi)
|
||||
DEFAULT_DEBUG_CHANNEL(gdi);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -17,10 +17,10 @@ DEFAULT_DEBUG_CHANNEL(gdi)
|
|||
*/
|
||||
void MAPPING_FixIsotropic( DC * dc )
|
||||
{
|
||||
double xdim = (double)dc->vportExtX * dc->w.devCaps->horzSize /
|
||||
(dc->w.devCaps->horzRes * dc->wndExtX);
|
||||
double ydim = (double)dc->vportExtY * dc->w.devCaps->vertSize /
|
||||
(dc->w.devCaps->vertRes * dc->wndExtY);
|
||||
double xdim = (double)dc->vportExtX * dc->devCaps->horzSize /
|
||||
(dc->devCaps->horzRes * dc->wndExtX);
|
||||
double ydim = (double)dc->vportExtY * dc->devCaps->vertSize /
|
||||
(dc->devCaps->vertRes * dc->wndExtY);
|
||||
if (xdim > ydim)
|
||||
{
|
||||
dc->vportExtX = dc->vportExtX * fabs( ydim / xdim );
|
||||
|
@ -134,7 +134,7 @@ INT WINAPI SetMapMode( HDC hdc, INT mode )
|
|||
|
||||
TRACE("%04x %d\n", hdc, mode );
|
||||
|
||||
prevMode = dc->w.MapMode;
|
||||
prevMode = dc->MapMode;
|
||||
switch(mode)
|
||||
{
|
||||
case MM_TEXT:
|
||||
|
@ -146,38 +146,38 @@ INT WINAPI SetMapMode( HDC hdc, INT mode )
|
|||
|
||||
case MM_LOMETRIC:
|
||||
case MM_ISOTROPIC:
|
||||
dc->wndExtX = dc->w.devCaps->horzSize;
|
||||
dc->wndExtY = dc->w.devCaps->vertSize;
|
||||
dc->vportExtX = dc->w.devCaps->horzRes / 10;
|
||||
dc->vportExtY = dc->w.devCaps->vertRes / -10;
|
||||
dc->wndExtX = dc->devCaps->horzSize;
|
||||
dc->wndExtY = dc->devCaps->vertSize;
|
||||
dc->vportExtX = dc->devCaps->horzRes / 10;
|
||||
dc->vportExtY = dc->devCaps->vertRes / -10;
|
||||
break;
|
||||
|
||||
case MM_HIMETRIC:
|
||||
dc->wndExtX = dc->w.devCaps->horzSize * 10;
|
||||
dc->wndExtY = dc->w.devCaps->vertSize * 10;
|
||||
dc->vportExtX = dc->w.devCaps->horzRes / 10;
|
||||
dc->vportExtY = dc->w.devCaps->vertRes / -10;
|
||||
dc->wndExtX = dc->devCaps->horzSize * 10;
|
||||
dc->wndExtY = dc->devCaps->vertSize * 10;
|
||||
dc->vportExtX = dc->devCaps->horzRes / 10;
|
||||
dc->vportExtY = dc->devCaps->vertRes / -10;
|
||||
break;
|
||||
|
||||
case MM_LOENGLISH:
|
||||
dc->wndExtX = dc->w.devCaps->horzSize;
|
||||
dc->wndExtY = dc->w.devCaps->vertSize;
|
||||
dc->vportExtX = 254L * dc->w.devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->w.devCaps->vertRes / 1000;
|
||||
dc->wndExtX = dc->devCaps->horzSize;
|
||||
dc->wndExtY = dc->devCaps->vertSize;
|
||||
dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
|
||||
break;
|
||||
|
||||
case MM_HIENGLISH:
|
||||
dc->wndExtX = dc->w.devCaps->horzSize * 10;
|
||||
dc->wndExtY = dc->w.devCaps->vertSize * 10;
|
||||
dc->vportExtX = 254L * dc->w.devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->w.devCaps->vertRes / 1000;
|
||||
dc->wndExtX = dc->devCaps->horzSize * 10;
|
||||
dc->wndExtY = dc->devCaps->vertSize * 10;
|
||||
dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
|
||||
break;
|
||||
|
||||
case MM_TWIPS:
|
||||
dc->wndExtX = 144L * dc->w.devCaps->horzSize / 10;
|
||||
dc->wndExtY = 144L * dc->w.devCaps->vertSize / 10;
|
||||
dc->vportExtX = 254L * dc->w.devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->w.devCaps->vertRes / 1000;
|
||||
dc->wndExtX = 144L * dc->devCaps->horzSize / 10;
|
||||
dc->wndExtY = 144L * dc->devCaps->vertSize / 10;
|
||||
dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
|
||||
dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
|
||||
break;
|
||||
|
||||
case MM_ANISOTROPIC:
|
||||
|
@ -186,7 +186,7 @@ INT WINAPI SetMapMode( HDC hdc, INT mode )
|
|||
default:
|
||||
goto done;
|
||||
}
|
||||
dc->w.MapMode = mode;
|
||||
dc->MapMode = mode;
|
||||
DC_UpdateXforms( dc );
|
||||
done:
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -235,7 +235,7 @@ BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size )
|
|||
size->cx = dc->vportExtX;
|
||||
size->cy = dc->vportExtY;
|
||||
}
|
||||
if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
|
||||
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
|
||||
goto done;
|
||||
if (!x || !y)
|
||||
{
|
||||
|
@ -244,7 +244,7 @@ BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size )
|
|||
}
|
||||
dc->vportExtX = x;
|
||||
dc->vportExtY = y;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
done:
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -342,7 +342,7 @@ BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size )
|
|||
size->cx = dc->wndExtX;
|
||||
size->cy = dc->wndExtY;
|
||||
}
|
||||
if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
|
||||
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
|
||||
goto done;
|
||||
if (!x || !y)
|
||||
{
|
||||
|
@ -351,7 +351,7 @@ BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size )
|
|||
}
|
||||
dc->wndExtX = x;
|
||||
dc->wndExtY = y;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
done:
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -551,7 +551,7 @@ BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom,
|
|||
size->cx = dc->vportExtX;
|
||||
size->cy = dc->vportExtY;
|
||||
}
|
||||
if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
|
||||
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
|
||||
goto done;
|
||||
if (!xNum || !xDenom || !xNum || !yDenom)
|
||||
{
|
||||
|
@ -562,7 +562,7 @@ BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom,
|
|||
dc->vportExtY = (dc->vportExtY * yNum) / yDenom;
|
||||
if (dc->vportExtX == 0) dc->vportExtX = 1;
|
||||
if (dc->vportExtY == 0) dc->vportExtY = 1;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
done:
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -616,7 +616,7 @@ BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT xNum, INT xDenom,
|
|||
size->cx = dc->wndExtX;
|
||||
size->cy = dc->wndExtY;
|
||||
}
|
||||
if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
|
||||
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
|
||||
goto done;
|
||||
if (!xNum || !xDenom || !xNum || !yDenom)
|
||||
{
|
||||
|
@ -627,7 +627,7 @@ BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT xNum, INT xDenom,
|
|||
dc->wndExtY = (dc->wndExtY * yNum) / yDenom;
|
||||
if (dc->wndExtX == 0) dc->wndExtX = 1;
|
||||
if (dc->wndExtY == 0) dc->wndExtY = 1;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
done:
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
|
|
@ -37,7 +37,7 @@ BOOL MFDRV_BitBlt( DC *dcDst, INT xDst, INT yDst, INT width, INT height,
|
|||
METARECORD *mr;
|
||||
BITMAP16 BM;
|
||||
|
||||
GetObject16(dcSrc->w.hBitmap, sizeof(BITMAP16), &BM);
|
||||
GetObject16(dcSrc->hBitmap, sizeof(BITMAP16), &BM);
|
||||
len = sizeof(METARECORD) + 12 * sizeof(INT16) + BM.bmWidthBytes * BM.bmHeight;
|
||||
if (!(mr = HeapAlloc(GetProcessHeap(), 0, len)))
|
||||
return FALSE;
|
||||
|
@ -48,7 +48,7 @@ BOOL MFDRV_BitBlt( DC *dcDst, INT xDst, INT yDst, INT width, INT height,
|
|||
*(mr->rdParm +10) = BM.bmPlanes;
|
||||
*(mr->rdParm +11) = BM.bmBitsPixel;
|
||||
TRACE("len = %ld rop=%lx \n",len,rop);
|
||||
if (GetBitmapBits(dcSrc->w.hBitmap,BM.bmWidthBytes * BM.bmHeight,
|
||||
if (GetBitmapBits(dcSrc->hBitmap,BM.bmWidthBytes * BM.bmHeight,
|
||||
mr->rdParm +12))
|
||||
{
|
||||
mr->rdSize = len / sizeof(INT16);
|
||||
|
@ -90,7 +90,7 @@ BOOL MFDRV_StretchBlt( DC *dcDst, INT xDst, INT yDst, INT widthDst,
|
|||
LPBITMAPINFOHEADER lpBMI;
|
||||
WORD nBPP;
|
||||
#endif
|
||||
GetObject16(dcSrc->w.hBitmap, sizeof(BITMAP16), &BM);
|
||||
GetObject16(dcSrc->hBitmap, sizeof(BITMAP16), &BM);
|
||||
#ifdef STRETCH_VIA_DIB
|
||||
nBPP = BM.bmPlanes * BM.bmBitsPixel;
|
||||
len = sizeof(METARECORD) + 10 * sizeof(INT16)
|
||||
|
@ -129,7 +129,7 @@ BOOL MFDRV_StretchBlt( DC *dcDst, INT xDst, INT yDst, INT widthDst,
|
|||
*(mr->rdParm +13) = BM.bmPlanes;
|
||||
*(mr->rdParm +14) = BM.bmBitsPixel;
|
||||
TRACE("len = %ld rop=%lx \n",len,rop);
|
||||
if (GetBitmapBits( dcSrc->w.hBitmap, BM.bmWidthBytes * BM.bmHeight,
|
||||
if (GetBitmapBits( dcSrc->hBitmap, BM.bmWidthBytes * BM.bmHeight,
|
||||
mr->rdParm +15))
|
||||
#endif
|
||||
{
|
||||
|
|
|
@ -8,13 +8,12 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "region.h"
|
||||
#include "metafiledrv.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(metafile)
|
||||
DEFAULT_DEBUG_CHANNEL(metafile);
|
||||
|
||||
/**********************************************************************
|
||||
* MFDRV_MoveToEx
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
|
||||
#include "windef.h"
|
||||
#include "wine/winbase16.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "global.h"
|
||||
#include "metafile.h"
|
||||
#include "metafiledrv.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(metafile)
|
||||
DEFAULT_DEBUG_CHANNEL(metafile);
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
*/
|
||||
INT MFDRV_SetMapMode( DC *dc, INT mode )
|
||||
{
|
||||
INT prevMode = dc->w.MapMode;
|
||||
INT prevMode = dc->MapMode;
|
||||
MFDRV_MetaParam1( dc, META_SETMAPMODE, mode );
|
||||
return prevMode;
|
||||
}
|
||||
|
|
|
@ -184,7 +184,7 @@ static BOOL MFDRV_CreateFontIndirect(DC *dc, HFONT16 hFont, LOGFONT16 *logfont)
|
|||
static HFONT16 MFDRV_FONT_SelectObject( DC * dc, HFONT16 hfont,
|
||||
FONTOBJ * font )
|
||||
{
|
||||
HFONT16 prevHandle = dc->w.hFont;
|
||||
HFONT16 prevHandle = dc->hFont;
|
||||
if (MFDRV_CreateFontIndirect(dc, hfont, &(font->logfont)))
|
||||
return prevHandle;
|
||||
return 0;
|
||||
|
@ -219,7 +219,7 @@ static BOOL MFDRV_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen)
|
|||
static HPEN MFDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen )
|
||||
{
|
||||
LOGPEN16 logpen;
|
||||
HPEN prevHandle = dc->w.hPen;
|
||||
HPEN prevHandle = dc->hPen;
|
||||
|
||||
logpen.lopnStyle = pen->logpen.lopnStyle;
|
||||
logpen.lopnWidth.x = pen->logpen.lopnWidth.x;
|
||||
|
|
|
@ -9,15 +9,15 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dc.h"
|
||||
#include "windef.h"
|
||||
#include "wingdi.h"
|
||||
#include "winerror.h"
|
||||
#include "gdi.h"
|
||||
#include "bitmap.h"
|
||||
#include "heap.h"
|
||||
#include "region.h"
|
||||
#include "path.h"
|
||||
#include "debugtools.h"
|
||||
#include "winerror.h"
|
||||
#include "windef.h"
|
||||
#include "wingdi.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(gdi);
|
||||
|
||||
|
@ -41,13 +41,13 @@ BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
|
|||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_LineTo(dc, x, y);
|
||||
else
|
||||
ret = dc->funcs->pLineTo && dc->funcs->pLineTo(dc,x,y);
|
||||
if(ret) {
|
||||
dc->w.CursPosX = x;
|
||||
dc->w.CursPosY = y;
|
||||
dc->CursPosX = x;
|
||||
dc->CursPosY = y;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -92,13 +92,13 @@ BOOL WINAPI MoveToEx( HDC hdc, INT x, INT y, LPPOINT pt )
|
|||
if(!dc) return FALSE;
|
||||
|
||||
if(pt) {
|
||||
pt->x = dc->w.CursPosX;
|
||||
pt->y = dc->w.CursPosY;
|
||||
pt->x = dc->CursPosX;
|
||||
pt->y = dc->CursPosY;
|
||||
}
|
||||
dc->w.CursPosX = x;
|
||||
dc->w.CursPosY = y;
|
||||
dc->CursPosX = x;
|
||||
dc->CursPosY = y;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path)) ret = PATH_MoveTo(dc);
|
||||
if(PATH_IsPathOpen(dc->path)) ret = PATH_MoveTo(dc);
|
||||
else if (dc->funcs->pMoveToEx) ret = dc->funcs->pMoveToEx(dc,x,y,pt);
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -129,7 +129,7 @@ BOOL WINAPI Arc( HDC hdc, INT left, INT top, INT right,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc, left, top, right, bottom, xstart, ystart, xend, yend,0);
|
||||
else if (dc->funcs->pArc)
|
||||
ret = dc->funcs->pArc(dc,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
|
@ -201,7 +201,7 @@ BOOL WINAPI Pie( HDC hdc, INT left, INT top,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc,left,top,right,bottom,xstart,ystart,xend,yend,2);
|
||||
else if(dc->funcs->pPie)
|
||||
ret = dc->funcs->pPie(dc,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
|
@ -233,7 +233,7 @@ BOOL WINAPI Chord( HDC hdc, INT left, INT top,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc,left,top,right,bottom,xstart,ystart,xend,yend,1);
|
||||
else if(dc->funcs->pChord)
|
||||
ret = dc->funcs->pChord(dc,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
|
@ -263,7 +263,7 @@ BOOL WINAPI Ellipse( HDC hdc, INT left, INT top,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Ellipse(dc,left,top,right,bottom);
|
||||
else if (dc->funcs->pEllipse)
|
||||
ret = dc->funcs->pEllipse(dc,left,top,right,bottom);
|
||||
|
@ -293,7 +293,7 @@ BOOL WINAPI Rectangle( HDC hdc, INT left, INT top,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Rectangle(dc, left, top, right, bottom);
|
||||
else if (dc->funcs->pRectangle)
|
||||
ret = dc->funcs->pRectangle(dc,left,top,right,bottom);
|
||||
|
@ -324,7 +324,7 @@ BOOL WINAPI RoundRect( HDC hdc, INT left, INT top, INT right,
|
|||
|
||||
if (dc)
|
||||
{
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_RoundRect(dc,left,top,right,bottom,ell_width,ell_height);
|
||||
else if (dc->funcs->pRoundRect)
|
||||
ret = dc->funcs->pRoundRect(dc,left,top,right,bottom,ell_width,ell_height);
|
||||
|
@ -717,7 +717,7 @@ BOOL WINAPI Polyline( HDC hdc, const POINT* pt, INT count )
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if (PATH_IsPathOpen(dc->w.path)) ret = PATH_Polyline(dc, pt, count);
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_Polyline(dc, pt, count);
|
||||
else if (dc->funcs->pPolyline) ret = dc->funcs->pPolyline(dc,pt,count);
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
|
@ -734,7 +734,7 @@ BOOL WINAPI PolylineTo( HDC hdc, const POINT* pt, DWORD cCount )
|
|||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_PolylineTo(dc, pt, cCount);
|
||||
|
||||
else if(dc->funcs->pPolylineTo)
|
||||
|
@ -745,16 +745,16 @@ BOOL WINAPI PolylineTo( HDC hdc, const POINT* pt, DWORD cCount )
|
|||
sizeof(POINT) * (cCount + 1) );
|
||||
if (pts)
|
||||
{
|
||||
pts[0].x = dc->w.CursPosX;
|
||||
pts[0].y = dc->w.CursPosY;
|
||||
pts[0].x = dc->CursPosX;
|
||||
pts[0].y = dc->CursPosY;
|
||||
memcpy( pts + 1, pt, sizeof(POINT) * cCount );
|
||||
ret = Polyline( hdc, pts, cCount + 1 );
|
||||
HeapFree( GetProcessHeap(), 0, pts );
|
||||
}
|
||||
}
|
||||
if(ret) {
|
||||
dc->w.CursPosX = pt[cCount-1].x;
|
||||
dc->w.CursPosY = pt[cCount-1].y;
|
||||
dc->CursPosX = pt[cCount-1].x;
|
||||
dc->CursPosY = pt[cCount-1].y;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -787,7 +787,7 @@ BOOL WINAPI Polygon( HDC hdc, const POINT* pt, INT count )
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if (PATH_IsPathOpen(dc->w.path)) ret = PATH_Polygon(dc, pt, count);
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_Polygon(dc, pt, count);
|
||||
else if (dc->funcs->pPolygon) ret = dc->funcs->pPolygon(dc,pt,count);
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
|
@ -836,7 +836,7 @@ BOOL WINAPI PolyPolygon( HDC hdc, const POINT* pt, const INT* counts,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if (PATH_IsPathOpen(dc->w.path)) ret = PATH_PolyPolygon(dc, pt, counts, polygons);
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_PolyPolygon(dc, pt, counts, polygons);
|
||||
else if (dc->funcs->pPolyPolygon) ret = dc->funcs->pPolyPolygon(dc,pt,counts,polygons);
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
|
@ -853,7 +853,7 @@ BOOL WINAPI PolyPolyline( HDC hdc, const POINT* pt, const DWORD* counts,
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (dc)
|
||||
{
|
||||
if (PATH_IsPathOpen(dc->w.path)) ret = PATH_PolyPolyline(dc, pt, counts, polylines);
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_PolyPolyline(dc, pt, counts, polylines);
|
||||
else if (dc->funcs->pPolyPolyline) ret = dc->funcs->pPolyPolyline(dc,pt,counts,polylines);
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
|
@ -955,7 +955,7 @@ BOOL WINAPI PolyBezier( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_PolyBezier(dc, lppt, cPoints);
|
||||
else if (dc->funcs->pPolyBezier)
|
||||
ret = dc->funcs->pPolyBezier(dc, lppt, cPoints);
|
||||
|
@ -994,7 +994,7 @@ BOOL WINAPI PolyBezierTo( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->w.path))
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_PolyBezierTo(dc, lppt, cPoints);
|
||||
else if(dc->funcs->pPolyBezierTo)
|
||||
ret = dc->funcs->pPolyBezierTo(dc, lppt, cPoints);
|
||||
|
@ -1002,15 +1002,15 @@ BOOL WINAPI PolyBezierTo( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
POINT *pt;
|
||||
pt = HeapAlloc( GetProcessHeap(), 0, sizeof(POINT) * (cPoints + 1) );
|
||||
if(!pt) return FALSE;
|
||||
pt[0].x = dc->w.CursPosX;
|
||||
pt[0].y = dc->w.CursPosY;
|
||||
pt[0].x = dc->CursPosX;
|
||||
pt[0].y = dc->CursPosY;
|
||||
memcpy(pt + 1, lppt, sizeof(POINT) * cPoints);
|
||||
ret = PolyBezier(dc->hSelf, pt, cPoints+1);
|
||||
HeapFree( GetProcessHeap(), 0, pt );
|
||||
}
|
||||
if(ret) {
|
||||
dc->w.CursPosX = lppt[cPoints-1].x;
|
||||
dc->w.CursPosY = lppt[cPoints-1].y;
|
||||
dc->CursPosX = lppt[cPoints-1].x;
|
||||
dc->CursPosY = lppt[cPoints-1].y;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -1096,8 +1096,8 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
}
|
||||
|
||||
/* if no moveto occurs, we will close the figure here */
|
||||
lastmove.x = dc->w.CursPosX;
|
||||
lastmove.y = dc->w.CursPosY;
|
||||
lastmove.x = dc->CursPosX;
|
||||
lastmove.y = dc->CursPosY;
|
||||
|
||||
/* now let's draw */
|
||||
for( i = 0; i < cCount; i++ )
|
||||
|
@ -1105,8 +1105,8 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
if( lpbTypes[i] == PT_MOVETO )
|
||||
{
|
||||
MoveToEx( hdc, lppt[i].x, lppt[i].y, NULL );
|
||||
lastmove.x = dc->w.CursPosX;
|
||||
lastmove.y = dc->w.CursPosY;
|
||||
lastmove.x = dc->CursPosX;
|
||||
lastmove.y = dc->CursPosY;
|
||||
}
|
||||
else if( lpbTypes[i] & PT_LINETO )
|
||||
LineTo( hdc, lppt[i].x, lppt[i].y );
|
||||
|
@ -1120,7 +1120,7 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
|
||||
if( lpbTypes[i] & PT_CLOSEFIGURE )
|
||||
{
|
||||
if( PATH_IsPathOpen( dc->w.path ) )
|
||||
if( PATH_IsPathOpen( dc->path ) )
|
||||
CloseFigure( hdc );
|
||||
else
|
||||
LineTo( hdc, lastmove.x, lastmove.y );
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
#include "wingdi.h"
|
||||
#include "winerror.h"
|
||||
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
#include "path.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(gdi)
|
||||
DEFAULT_DEBUG_CHANNEL(gdi);
|
||||
|
||||
/* Notes on the implementation
|
||||
*
|
||||
|
@ -104,14 +104,14 @@ BOOL WINAPI BeginPath(HDC hdc)
|
|||
else
|
||||
{
|
||||
/* If path is already open, do nothing */
|
||||
if(dc->w.path.state != PATH_Open)
|
||||
if(dc->path.state != PATH_Open)
|
||||
{
|
||||
/* Make sure that path is empty */
|
||||
PATH_EmptyPath(&dc->w.path);
|
||||
PATH_EmptyPath(&dc->path);
|
||||
|
||||
/* Initialize variables for new path */
|
||||
dc->w.path.newStroke=TRUE;
|
||||
dc->w.path.state=PATH_Open;
|
||||
dc->path.newStroke=TRUE;
|
||||
dc->path.state=PATH_Open;
|
||||
}
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -143,13 +143,13 @@ BOOL WINAPI EndPath(HDC hdc)
|
|||
else
|
||||
{
|
||||
/* Check that path is currently being constructed */
|
||||
if(dc->w.path.state!=PATH_Open)
|
||||
if(dc->path.state!=PATH_Open)
|
||||
{
|
||||
SetLastError(ERROR_CAN_NOT_COMPLETE);
|
||||
ret = FALSE;
|
||||
}
|
||||
/* Set flag to indicate that path is finished */
|
||||
else dc->w.path.state=PATH_Closed;
|
||||
else dc->path.state=PATH_Closed;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -187,7 +187,7 @@ BOOL WINAPI AbortPath( HDC hdc )
|
|||
if(dc->funcs->pAbortPath)
|
||||
ret = dc->funcs->pAbortPath(dc);
|
||||
else /* Remove all entries from the path */
|
||||
PATH_EmptyPath( &dc->w.path );
|
||||
PATH_EmptyPath( &dc->path );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
}
|
||||
|
@ -219,7 +219,7 @@ BOOL WINAPI CloseFigure(HDC hdc)
|
|||
else
|
||||
{
|
||||
/* Check that path is open */
|
||||
if(dc->w.path.state!=PATH_Open)
|
||||
if(dc->path.state!=PATH_Open)
|
||||
{
|
||||
SetLastError(ERROR_CAN_NOT_COMPLETE);
|
||||
ret = FALSE;
|
||||
|
@ -229,10 +229,10 @@ BOOL WINAPI CloseFigure(HDC hdc)
|
|||
/* FIXME: Shouldn't we draw a line to the beginning of the
|
||||
figure? */
|
||||
/* Set PT_CLOSEFIGURE on the last entry and start a new stroke */
|
||||
if(dc->w.path.numEntriesUsed)
|
||||
if(dc->path.numEntriesUsed)
|
||||
{
|
||||
dc->w.path.pFlags[dc->w.path.numEntriesUsed-1]|=PT_CLOSEFIGURE;
|
||||
dc->w.path.newStroke=TRUE;
|
||||
dc->path.pFlags[dc->path.numEntriesUsed-1]|=PT_CLOSEFIGURE;
|
||||
dc->path.newStroke=TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ INT WINAPI GetPath(HDC hdc, LPPOINT pPoints, LPBYTE pTypes,
|
|||
|
||||
if(!dc) return -1;
|
||||
|
||||
pPath = &dc->w.path;
|
||||
pPath = &dc->path;
|
||||
|
||||
/* Check that path is closed */
|
||||
if(pPath->state!=PATH_Closed)
|
||||
|
@ -326,7 +326,7 @@ HRGN WINAPI PathToRegion(HDC hdc)
|
|||
/* Get pointer to path */
|
||||
if(!dc) return -1;
|
||||
|
||||
pPath = &dc->w.path;
|
||||
pPath = &dc->path;
|
||||
|
||||
/* Check that path is closed */
|
||||
if(pPath->state!=PATH_Closed) SetLastError(ERROR_CAN_NOT_COMPLETE);
|
||||
|
@ -361,7 +361,7 @@ static BOOL PATH_FillPath(DC *dc, GdiPath *pPath)
|
|||
}
|
||||
|
||||
/* Construct a region from the path and fill it */
|
||||
if(PATH_PathToRegion(pPath, dc->w.polyFillMode, &hrgn))
|
||||
if(PATH_PathToRegion(pPath, dc->polyFillMode, &hrgn))
|
||||
{
|
||||
/* Since PaintRgn interprets the region as being in logical coordinates
|
||||
* but the points we store for the path are already in device
|
||||
|
@ -436,12 +436,12 @@ BOOL WINAPI FillPath(HDC hdc)
|
|||
bRet = dc->funcs->pFillPath(dc);
|
||||
else
|
||||
{
|
||||
bRet = PATH_FillPath(dc, &dc->w.path);
|
||||
bRet = PATH_FillPath(dc, &dc->path);
|
||||
if(bRet)
|
||||
{
|
||||
/* FIXME: Should the path be emptied even if conversion
|
||||
failed? */
|
||||
PATH_EmptyPath(&dc->w.path);
|
||||
PATH_EmptyPath(&dc->path);
|
||||
}
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -474,7 +474,7 @@ BOOL WINAPI SelectClipPath(HDC hdc, INT iMode)
|
|||
success = dc->funcs->pSelectClipPath(dc, iMode);
|
||||
else
|
||||
{
|
||||
pPath = &dc->w.path;
|
||||
pPath = &dc->path;
|
||||
|
||||
/* Check that path is closed */
|
||||
if(pPath->state!=PATH_Closed)
|
||||
|
@ -566,7 +566,7 @@ BOOL PATH_AssignGdiPath(GdiPath *pPathDest, const GdiPath *pPathSrc)
|
|||
*/
|
||||
BOOL PATH_MoveTo(DC *dc)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
|
||||
/* Check that path is open */
|
||||
if(pPath->state!=PATH_Open)
|
||||
|
@ -588,7 +588,7 @@ BOOL PATH_MoveTo(DC *dc)
|
|||
*/
|
||||
BOOL PATH_LineTo(DC *dc, INT x, INT y)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT point, pointCurPos;
|
||||
|
||||
/* Check that path is open */
|
||||
|
@ -605,8 +605,8 @@ BOOL PATH_LineTo(DC *dc, INT x, INT y)
|
|||
if(pPath->newStroke)
|
||||
{
|
||||
pPath->newStroke=FALSE;
|
||||
pointCurPos.x = dc->w.CursPosX;
|
||||
pointCurPos.y = dc->w.CursPosY;
|
||||
pointCurPos.x = dc->CursPosX;
|
||||
pointCurPos.y = dc->CursPosY;
|
||||
if(!LPtoDP(dc->hSelf, &pointCurPos, 1))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, &pointCurPos, PT_MOVETO))
|
||||
|
@ -628,7 +628,7 @@ BOOL PATH_LineTo(DC *dc, INT x, INT y)
|
|||
*/
|
||||
BOOL PATH_RoundRect(DC *dc, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT ell_height)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT corners[2], pointTemp;
|
||||
FLOAT_POINT ellCorners[2];
|
||||
|
||||
|
@ -685,7 +685,7 @@ BOOL PATH_RoundRect(DC *dc, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT e
|
|||
*/
|
||||
BOOL PATH_Rectangle(DC *dc, INT x1, INT y1, INT x2, INT y2)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT corners[2], pointTemp;
|
||||
|
||||
/* Check that path is open */
|
||||
|
@ -751,7 +751,7 @@ BOOL PATH_Ellipse(DC *dc, INT x1, INT y1, INT x2, INT y2)
|
|||
BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
||||
INT xStart, INT yStart, INT xEnd, INT yEnd, INT lines)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
double angleStart, angleEnd, angleStartQuadrant, angleEndQuadrant=0.0;
|
||||
/* Initialize angleEndQuadrant to silence gcc's warning */
|
||||
double x, y;
|
||||
|
@ -807,7 +807,7 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
|||
angleEnd=atan2(y, x);
|
||||
|
||||
/* Make sure the end angle is "on the right side" of the start angle */
|
||||
if(dc->w.ArcDirection==AD_CLOCKWISE)
|
||||
if(dc->ArcDirection==AD_CLOCKWISE)
|
||||
{
|
||||
if(angleEnd<=angleStart)
|
||||
{
|
||||
|
@ -825,7 +825,7 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
|||
}
|
||||
|
||||
/* In GM_COMPATIBLE, don't include bottom and right edges */
|
||||
if(dc->w.GraphicsMode==GM_COMPATIBLE)
|
||||
if(dc->GraphicsMode==GM_COMPATIBLE)
|
||||
{
|
||||
corners[1].x--;
|
||||
corners[1].y--;
|
||||
|
@ -841,7 +841,7 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
|||
if(start)
|
||||
{
|
||||
angleStartQuadrant=angleStart;
|
||||
if(dc->w.ArcDirection==AD_CLOCKWISE)
|
||||
if(dc->ArcDirection==AD_CLOCKWISE)
|
||||
angleEndQuadrant=(floor(angleStart/M_PI_2)+1.0)*M_PI_2;
|
||||
else
|
||||
angleEndQuadrant=(ceil(angleStart/M_PI_2)-1.0)*M_PI_2;
|
||||
|
@ -849,16 +849,16 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
|||
else
|
||||
{
|
||||
angleStartQuadrant=angleEndQuadrant;
|
||||
if(dc->w.ArcDirection==AD_CLOCKWISE)
|
||||
if(dc->ArcDirection==AD_CLOCKWISE)
|
||||
angleEndQuadrant+=M_PI_2;
|
||||
else
|
||||
angleEndQuadrant-=M_PI_2;
|
||||
}
|
||||
|
||||
/* Have we reached the last part of the arc? */
|
||||
if((dc->w.ArcDirection==AD_CLOCKWISE &&
|
||||
if((dc->ArcDirection==AD_CLOCKWISE &&
|
||||
angleEnd<angleEndQuadrant) ||
|
||||
(dc->w.ArcDirection==AD_COUNTERCLOCKWISE &&
|
||||
(dc->ArcDirection==AD_COUNTERCLOCKWISE &&
|
||||
angleEnd>angleEndQuadrant))
|
||||
{
|
||||
/* Adjust the end angle for this quadrant */
|
||||
|
@ -891,7 +891,7 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
|||
|
||||
BOOL PATH_PolyBezierTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT i;
|
||||
|
||||
|
@ -903,8 +903,8 @@ BOOL PATH_PolyBezierTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
if(pPath->newStroke)
|
||||
{
|
||||
pPath->newStroke=FALSE;
|
||||
pt.x = dc->w.CursPosX;
|
||||
pt.y = dc->w.CursPosY;
|
||||
pt.x = dc->CursPosX;
|
||||
pt.y = dc->CursPosY;
|
||||
if(!LPtoDP(dc->hSelf, &pt, 1))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, &pt, PT_MOVETO))
|
||||
|
@ -922,7 +922,7 @@ BOOL PATH_PolyBezierTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
|
||||
BOOL PATH_PolyBezier(DC *dc, const POINT *pts, DWORD cbPoints)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT i;
|
||||
|
||||
|
@ -941,7 +941,7 @@ BOOL PATH_PolyBezier(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
|
||||
BOOL PATH_Polyline(DC *dc, const POINT *pts, DWORD cbPoints)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT i;
|
||||
|
||||
|
@ -960,7 +960,7 @@ BOOL PATH_Polyline(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
|
||||
BOOL PATH_PolylineTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT i;
|
||||
|
||||
|
@ -972,8 +972,8 @@ BOOL PATH_PolylineTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
if(pPath->newStroke)
|
||||
{
|
||||
pPath->newStroke=FALSE;
|
||||
pt.x = dc->w.CursPosX;
|
||||
pt.y = dc->w.CursPosY;
|
||||
pt.x = dc->CursPosX;
|
||||
pt.y = dc->CursPosY;
|
||||
if(!LPtoDP(dc->hSelf, &pt, 1))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, &pt, PT_MOVETO))
|
||||
|
@ -993,7 +993,7 @@ BOOL PATH_PolylineTo(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
|
||||
BOOL PATH_Polygon(DC *dc, const POINT *pts, DWORD cbPoints)
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT i;
|
||||
|
||||
|
@ -1015,7 +1015,7 @@ BOOL PATH_Polygon(DC *dc, const POINT *pts, DWORD cbPoints)
|
|||
BOOL PATH_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
|
||||
UINT polygons )
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt, startpt;
|
||||
INT poly, point, i;
|
||||
|
||||
|
@ -1040,7 +1040,7 @@ BOOL PATH_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
|
|||
BOOL PATH_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
|
||||
DWORD polylines )
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
POINT pt;
|
||||
INT poly, point, i;
|
||||
|
||||
|
@ -1094,7 +1094,7 @@ static BOOL PATH_CheckCorners(DC *dc, POINT corners[], INT x1, INT y1, INT x2, I
|
|||
}
|
||||
|
||||
/* In GM_COMPATIBLE, don't include bottom and right edges */
|
||||
if(dc->w.GraphicsMode==GM_COMPATIBLE)
|
||||
if(dc->GraphicsMode==GM_COMPATIBLE)
|
||||
{
|
||||
corners[1].x--;
|
||||
corners[1].y--;
|
||||
|
@ -1452,7 +1452,7 @@ BOOL WINAPI FlattenPath(HDC hdc)
|
|||
if(dc->funcs->pFlattenPath) ret = dc->funcs->pFlattenPath(dc);
|
||||
else
|
||||
{
|
||||
GdiPath *pPath = &dc->w.path;
|
||||
GdiPath *pPath = &dc->path;
|
||||
if(pPath->state != PATH_Closed)
|
||||
ret = PATH_FlattenPath(pPath);
|
||||
}
|
||||
|
@ -1538,9 +1538,9 @@ BOOL WINAPI StrokeAndFillPath(HDC hdc)
|
|||
bRet = dc->funcs->pStrokeAndFillPath(dc);
|
||||
else
|
||||
{
|
||||
bRet = PATH_FillPath(dc, &dc->w.path);
|
||||
if(bRet) bRet = PATH_StrokePath(dc, &dc->w.path);
|
||||
if(bRet) PATH_EmptyPath(&dc->w.path);
|
||||
bRet = PATH_FillPath(dc, &dc->path);
|
||||
if(bRet) bRet = PATH_StrokePath(dc, &dc->path);
|
||||
if(bRet) PATH_EmptyPath(&dc->path);
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return bRet;
|
||||
|
@ -1574,7 +1574,7 @@ BOOL WINAPI StrokePath(HDC hdc)
|
|||
bRet = dc->funcs->pStrokePath(dc);
|
||||
else
|
||||
{
|
||||
pPath = &dc->w.path;
|
||||
pPath = &dc->path;
|
||||
bRet = PATH_StrokePath(dc, pPath);
|
||||
PATH_EmptyPath(pPath);
|
||||
}
|
||||
|
|
|
@ -16,10 +16,10 @@ HBRUSH WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush,
|
|||
BRUSHOBJ * brush )
|
||||
{
|
||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||
HBRUSH16 prevHandle = dc->w.hBrush;
|
||||
HBRUSH16 prevHandle = dc->hBrush;
|
||||
int nSize;
|
||||
LOGBRUSH16 lBrush16;
|
||||
dc->w.hBrush = hbrush;
|
||||
dc->hBrush = hbrush;
|
||||
lBrush16.lbStyle = brush->logbrush.lbStyle;
|
||||
lBrush16.lbColor = brush->logbrush.lbColor;
|
||||
lBrush16.lbHatch = brush->logbrush.lbHatch;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "module.h"
|
||||
#include "font.h"
|
||||
#include "heap.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(win16drv);
|
||||
|
@ -74,10 +74,10 @@ BOOL WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRICA *metrics )
|
|||
HFONT WIN16DRV_FONT_SelectObject( DC * dc, HFONT hfont, FONTOBJ * font)
|
||||
{
|
||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||
HPEN prevHandle = dc->w.hFont;
|
||||
HPEN prevHandle = dc->hFont;
|
||||
int nSize;
|
||||
|
||||
dc->w.hFont = hfont;
|
||||
dc->hFont = hfont;
|
||||
|
||||
TRACE("WIN16DRV_FONT_SelectObject '%s' h=%d\n",
|
||||
font->logfont.lfFaceName, font->logfont.lfHeight);
|
||||
|
|
|
@ -19,11 +19,11 @@ WIN16DRV_MoveToEx(DC *dc,INT x,INT y,LPPOINT pt)
|
|||
{
|
||||
if (pt)
|
||||
{
|
||||
pt->x = dc->w.CursPosX;
|
||||
pt->y = dc->w.CursPosY;
|
||||
pt->x = dc->CursPosX;
|
||||
pt->y = dc->CursPosY;
|
||||
}
|
||||
dc->w.CursPosX = x;
|
||||
dc->w.CursPosY = y;
|
||||
dc->CursPosX = x;
|
||||
dc->CursPosY = y;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -36,18 +36,18 @@ WIN16DRV_LineTo( DC *dc, INT x, INT y )
|
|||
BOOL bRet ;
|
||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||
POINT16 points[2];
|
||||
points[0].x = dc->w.DCOrgX + XLPTODP( dc, dc->w.CursPosX );
|
||||
points[0].y = dc->w.DCOrgY + YLPTODP( dc, dc->w.CursPosY );
|
||||
points[1].x = dc->w.DCOrgX + XLPTODP( dc, x );
|
||||
points[1].y = dc->w.DCOrgY + YLPTODP( dc, y );
|
||||
points[0].x = dc->DCOrgX + XLPTODP( dc, dc->CursPosX );
|
||||
points[0].y = dc->DCOrgY + YLPTODP( dc, dc->CursPosY );
|
||||
points[1].x = dc->DCOrgX + XLPTODP( dc, x );
|
||||
points[1].y = dc->DCOrgY + YLPTODP( dc, y );
|
||||
bRet = PRTDRV_Output(physDev->segptrPDEVICE,
|
||||
OS_POLYLINE, 2, points,
|
||||
physDev->PenInfo,
|
||||
NULL,
|
||||
win16drv_SegPtr_DrawMode, dc->w.hClipRgn);
|
||||
win16drv_SegPtr_DrawMode, dc->hClipRgn);
|
||||
|
||||
dc->w.CursPosX = x;
|
||||
dc->w.CursPosY = y;
|
||||
dc->CursPosX = x;
|
||||
dc->CursPosY = y;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ WIN16DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
POINT16 points[2];
|
||||
|
||||
TRACE("In WIN16DRV_Rectangle, x %d y %d DCOrgX %d y %d\n",
|
||||
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
||||
left, top, dc->DCOrgX, dc->DCOrgY);
|
||||
TRACE("In WIN16DRV_Rectangle, VPortOrgX %d y %d\n",
|
||||
dc->vportOrgX, dc->vportOrgY);
|
||||
points[0].x = XLPTODP(dc, left);
|
||||
|
@ -75,7 +75,7 @@ WIN16DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
OS_RECTANGLE, 2, points,
|
||||
physDev->PenInfo,
|
||||
physDev->BrushInfo,
|
||||
win16drv_SegPtr_DrawMode, dc->w.hClipRgn);
|
||||
win16drv_SegPtr_DrawMode, dc->hClipRgn);
|
||||
return bRet;
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,7 @@ WIN16DRV_Polygon(DC *dc, const POINT* pt, INT count )
|
|||
OS_WINDPOLYGON, count, points,
|
||||
physDev->PenInfo,
|
||||
physDev->BrushInfo,
|
||||
win16drv_SegPtr_DrawMode, dc->w.hClipRgn);
|
||||
win16drv_SegPtr_DrawMode, dc->hClipRgn);
|
||||
HeapFree( GetProcessHeap(), 0, points );
|
||||
return bRet;
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ WIN16DRV_Polyline(DC *dc, const POINT* pt, INT count )
|
|||
OS_POLYLINE, count, points,
|
||||
physDev->PenInfo,
|
||||
NULL,
|
||||
win16drv_SegPtr_DrawMode, dc->w.hClipRgn);
|
||||
win16drv_SegPtr_DrawMode, dc->hClipRgn);
|
||||
HeapFree( GetProcessHeap(), 0, points );
|
||||
return bRet;
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ WIN16DRV_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
BOOL bRet = 0;
|
||||
POINT16 points[2];
|
||||
TRACE("In WIN16DRV_Ellipse, x %d y %d DCOrgX %d y %d\n",
|
||||
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
||||
left, top, dc->DCOrgX, dc->DCOrgY);
|
||||
TRACE("In WIN16DRV_Ellipse, VPortOrgX %d y %d\n",
|
||||
dc->vportOrgX, dc->vportOrgY);
|
||||
points[0].x = XLPTODP(dc, left);
|
||||
|
@ -172,7 +172,7 @@ WIN16DRV_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
OS_ELLIPSE, 2, points,
|
||||
physDev->PenInfo,
|
||||
physDev->BrushInfo,
|
||||
win16drv_SegPtr_DrawMode, dc->w.hClipRgn);
|
||||
win16drv_SegPtr_DrawMode, dc->hClipRgn);
|
||||
return bRet;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,8 @@
|
|||
#include "font.h"
|
||||
#include "options.h"
|
||||
#include "debugtools.h"
|
||||
#include "dc.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(win16drv)
|
||||
DEFAULT_DEBUG_CHANNEL(win16drv);
|
||||
|
||||
#define SUPPORT_REALIZED_FONTS 1
|
||||
#include "pshpack1.h"
|
||||
|
@ -243,19 +242,19 @@ BOOL WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
|||
wRet = PRTDRV_Enable(printerDevCaps, GETGDIINFO, device, driver, output,NULL);
|
||||
|
||||
/* Add this to the DC */
|
||||
dc->w.devCaps = printerDevCaps;
|
||||
dc->w.hVisRgn = CreateRectRgn(0, 0, dc->w.devCaps->horzRes, dc->w.devCaps->vertRes);
|
||||
dc->w.bitsPerPixel = dc->w.devCaps->bitsPixel;
|
||||
dc->devCaps = printerDevCaps;
|
||||
dc->hVisRgn = CreateRectRgn(0, 0, dc->devCaps->horzRes, dc->devCaps->vertRes);
|
||||
dc->bitsPerPixel = dc->devCaps->bitsPixel;
|
||||
|
||||
TRACE("Got devcaps width %d height %d bits %d planes %d\n",
|
||||
dc->w.devCaps->horzRes, dc->w.devCaps->vertRes,
|
||||
dc->w.devCaps->bitsPixel, dc->w.devCaps->planes);
|
||||
dc->devCaps->horzRes, dc->devCaps->vertRes,
|
||||
dc->devCaps->bitsPixel, dc->devCaps->planes);
|
||||
|
||||
/* Now we allocate enough memory for the PDEVICE structure */
|
||||
/* The size of this varies between printer drivers */
|
||||
/* This PDEVICE is used by the printer DRIVER not by the GDI so must */
|
||||
/* be accessable from 16 bit code */
|
||||
nPDEVICEsize = dc->w.devCaps->pdeviceSize + sizeof(PDEVICE_HEADER);
|
||||
nPDEVICEsize = dc->devCaps->pdeviceSize + sizeof(PDEVICE_HEADER);
|
||||
|
||||
/* TTD Shouldn't really do pointer arithmetic on segment points */
|
||||
physDev->segptrPDEVICE = WIN16_GlobalLock16(GlobalAlloc16(GHND, nPDEVICEsize))+sizeof(PDEVICE_HEADER);
|
||||
|
|
|
@ -17,10 +17,10 @@ DEFAULT_DEBUG_CHANNEL(win16drv)
|
|||
HPEN WIN16DRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen )
|
||||
{
|
||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||
HPEN prevHandle = dc->w.hPen;
|
||||
HPEN prevHandle = dc->hPen;
|
||||
int nSize;
|
||||
LOGPEN16 lPen16;
|
||||
dc->w.hPen = hpen;
|
||||
dc->hPen = hpen;
|
||||
TRACE("In WIN16DRV_PEN_SelectObject\n");
|
||||
lPen16.lopnStyle = pen->logpen.lopnStyle;
|
||||
lPen16.lopnWidth.x = pen->logpen.lopnWidth.x;
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include "win16drv.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
#include "winbase.h"
|
||||
|
@ -45,8 +44,8 @@ BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
clipRect.left = 0;
|
||||
clipRect.top = 0;
|
||||
|
||||
clipRect.right = dc->w.devCaps->horzRes;
|
||||
clipRect.bottom = dc->w.devCaps->vertRes;
|
||||
clipRect.right = dc->devCaps->horzRes;
|
||||
clipRect.bottom = dc->devCaps->vertRes;
|
||||
if (lprect) {
|
||||
opaqueRect.left = lprect->left;
|
||||
opaqueRect.top = lprect->top;
|
||||
|
@ -55,11 +54,11 @@ BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
lpOpaqueRect = &opaqueRect;
|
||||
}
|
||||
|
||||
TRACE("textalign = %d\n", dc->w.textAlign);
|
||||
TRACE("textalign = %d\n", dc->textAlign);
|
||||
|
||||
if (dc->w.textAlign & TA_UPDATECP) {
|
||||
x = dc->w.CursPosX;
|
||||
y = dc->w.CursPosY;
|
||||
if (dc->textAlign & TA_UPDATECP) {
|
||||
x = dc->CursPosX;
|
||||
y = dc->CursPosY;
|
||||
}
|
||||
|
||||
x = XLPTODP( dc, x );
|
||||
|
@ -73,22 +72,22 @@ BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
|
||||
width = LOWORD(dwRet);
|
||||
|
||||
switch( dc->w.textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) ) {
|
||||
switch( dc->textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) ) {
|
||||
case TA_LEFT:
|
||||
if (dc->w.textAlign & TA_UPDATECP)
|
||||
dc->w.CursPosX = XDPTOLP( dc, x + width );
|
||||
if (dc->textAlign & TA_UPDATECP)
|
||||
dc->CursPosX = XDPTOLP( dc, x + width );
|
||||
break;
|
||||
case TA_RIGHT:
|
||||
x -= width;
|
||||
if (dc->w.textAlign & TA_UPDATECP)
|
||||
dc->w.CursPosX = XDPTOLP( dc, x );
|
||||
if (dc->textAlign & TA_UPDATECP)
|
||||
dc->CursPosX = XDPTOLP( dc, x );
|
||||
break;
|
||||
case TA_CENTER:
|
||||
x -= width / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch( dc->w.textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE) ) {
|
||||
switch( dc->textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE) ) {
|
||||
case TA_TOP:
|
||||
break;
|
||||
case TA_BOTTOM:
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
#include "bitmap.h"
|
||||
#include "callback.h"
|
||||
#include "color.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "metafile.h"
|
||||
#include "options.h"
|
||||
#include "x11drv.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(bitblt)
|
||||
DEFAULT_DEBUG_CHANNEL(bitblt);
|
||||
|
||||
|
||||
#define DST 0 /* Destination drawable */
|
||||
|
@ -859,13 +859,13 @@ static void BITBLT_GetSrcAreaStretch( DC *dcSrc, DC *dcDst,
|
|||
visRectSrc->bottom - visRectSrc->top,
|
||||
AllPlanes, ZPixmap );
|
||||
XCREATEIMAGE( imageDst, rectDst.right - rectDst.left,
|
||||
rectDst.bottom - rectDst.top, dcDst->w.bitsPerPixel );
|
||||
rectDst.bottom - rectDst.top, dcDst->bitsPerPixel );
|
||||
BITBLT_StretchImage( imageSrc, imageDst, widthSrc, heightSrc,
|
||||
widthDst, heightDst, &rectSrc, &rectDst,
|
||||
physDevDst->textPixel, dcDst->w.bitsPerPixel != 1 ?
|
||||
physDevDst->textPixel, dcDst->bitsPerPixel != 1 ?
|
||||
physDevDst->backgroundPixel :
|
||||
physDevSrc->backgroundPixel,
|
||||
dcDst->w.stretchBltMode );
|
||||
dcDst->stretchBltMode );
|
||||
XPutImage( display, pixmap, gc, imageDst, 0, 0, 0, 0,
|
||||
rectDst.right - rectDst.left, rectDst.bottom - rectDst.top );
|
||||
XDestroyImage( imageSrc );
|
||||
|
@ -889,12 +889,12 @@ static void BITBLT_GetSrcArea( DC *dcSrc, DC *dcDst, Pixmap pixmap, GC gc,
|
|||
X11DRV_PDEVICE *physDevSrc = (X11DRV_PDEVICE *)dcSrc->physDev;
|
||||
X11DRV_PDEVICE *physDevDst = (X11DRV_PDEVICE *)dcDst->physDev;
|
||||
|
||||
if (dcSrc->w.bitsPerPixel == dcDst->w.bitsPerPixel)
|
||||
if (dcSrc->bitsPerPixel == dcDst->bitsPerPixel)
|
||||
{
|
||||
if (!X11DRV_PALETTE_XPixelToPalette ||
|
||||
(dcDst->w.bitsPerPixel == 1)) /* monochrome -> monochrome */
|
||||
(dcDst->bitsPerPixel == 1)) /* monochrome -> monochrome */
|
||||
{
|
||||
if (dcDst->w.bitsPerPixel == 1)
|
||||
if (dcDst->bitsPerPixel == 1)
|
||||
{
|
||||
/* MSDN says if StretchBlt must convert a bitmap from monochrome
|
||||
to color or vice versa, the forground and background color of
|
||||
|
@ -912,7 +912,7 @@ static void BITBLT_GetSrcArea( DC *dcSrc, DC *dcDst, Pixmap pixmap, GC gc,
|
|||
}
|
||||
else /* color -> color */
|
||||
{
|
||||
if (dcSrc->w.flags & DC_MEMORY)
|
||||
if (dcSrc->flags & DC_MEMORY)
|
||||
imageSrc = XGetImage( display, physDevSrc->drawable,
|
||||
visRectSrc->left, visRectSrc->top,
|
||||
width, height, AllPlanes, ZPixmap );
|
||||
|
@ -936,7 +936,7 @@ static void BITBLT_GetSrcArea( DC *dcSrc, DC *dcDst, Pixmap pixmap, GC gc,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (dcSrc->w.bitsPerPixel == 1) /* monochrome -> color */
|
||||
if (dcSrc->bitsPerPixel == 1) /* monochrome -> color */
|
||||
{
|
||||
if (X11DRV_PALETTE_XPixelToPalette)
|
||||
{
|
||||
|
@ -960,7 +960,7 @@ static void BITBLT_GetSrcArea( DC *dcSrc, DC *dcDst, Pixmap pixmap, GC gc,
|
|||
imageSrc = XGetImage( display, physDevSrc->drawable,
|
||||
visRectSrc->left, visRectSrc->top,
|
||||
width, height, AllPlanes, ZPixmap );
|
||||
XCREATEIMAGE( imageDst, width, height, dcDst->w.bitsPerPixel );
|
||||
XCREATEIMAGE( imageDst, width, height, dcDst->bitsPerPixel );
|
||||
for (y = 0; y < height; y++)
|
||||
for (x = 0; x < width; x++)
|
||||
XPutPixel(imageDst, x, y, (XGetPixel(imageSrc,x,y) ==
|
||||
|
@ -986,7 +986,7 @@ static void BITBLT_GetDstArea(DC *dc, Pixmap pixmap, GC gc, RECT *visRectDst)
|
|||
INT height = visRectDst->bottom - visRectDst->top;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
if (!X11DRV_PALETTE_XPixelToPalette || (dc->w.bitsPerPixel == 1) ||
|
||||
if (!X11DRV_PALETTE_XPixelToPalette || (dc->bitsPerPixel == 1) ||
|
||||
(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL) )
|
||||
{
|
||||
XCopyArea( display, physDev->drawable, pixmap, gc,
|
||||
|
@ -997,7 +997,7 @@ static void BITBLT_GetDstArea(DC *dc, Pixmap pixmap, GC gc, RECT *visRectDst)
|
|||
register INT x, y;
|
||||
XImage *image;
|
||||
|
||||
if (dc->w.flags & DC_MEMORY)
|
||||
if (dc->flags & DC_MEMORY)
|
||||
image = XGetImage( display, physDev->drawable,
|
||||
visRectDst->left, visRectDst->top,
|
||||
width, height, AllPlanes, ZPixmap );
|
||||
|
@ -1033,7 +1033,7 @@ static void BITBLT_PutDstArea(DC *dc, Pixmap pixmap, GC gc, RECT *visRectDst)
|
|||
|
||||
/* !X11DRV_PALETTE_PaletteToXPixel is _NOT_ enough */
|
||||
|
||||
if (!X11DRV_PALETTE_PaletteToXPixel || (dc->w.bitsPerPixel == 1) ||
|
||||
if (!X11DRV_PALETTE_PaletteToXPixel || (dc->bitsPerPixel == 1) ||
|
||||
(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL) )
|
||||
{
|
||||
XCopyArea( display, pixmap, physDev->drawable, gc, 0, 0,
|
||||
|
@ -1079,7 +1079,7 @@ static BOOL BITBLT_GetVisRectangles( DC *dcDst, INT xDst, INT yDst,
|
|||
rect.bottom = yDst + heightDst;
|
||||
if (widthDst < 0) SWAP_INT32( &rect.left, &rect.right );
|
||||
if (heightDst < 0) SWAP_INT32( &rect.top, &rect.bottom );
|
||||
GetRgnBox( dcDst->w.hGCClipRgn, &clipRect );
|
||||
GetRgnBox( dcDst->hGCClipRgn, &clipRect );
|
||||
if (!IntersectRect( visRectDst, &rect, &clipRect )) return FALSE;
|
||||
|
||||
/* Get the source visible rectangle */
|
||||
|
@ -1093,7 +1093,7 @@ static BOOL BITBLT_GetVisRectangles( DC *dcDst, INT xDst, INT yDst,
|
|||
if (heightSrc < 0) SWAP_INT32( &rect.top, &rect.bottom );
|
||||
/* Apparently the clipping and visible regions are only for output,
|
||||
so just check against totalExtent here to avoid BadMatch errors */
|
||||
if (!IntersectRect( visRectSrc, &rect, &dcSrc->w.totalExtent ))
|
||||
if (!IntersectRect( visRectSrc, &rect, &dcSrc->totalExtent ))
|
||||
return FALSE;
|
||||
|
||||
/* Intersect the rectangles */
|
||||
|
@ -1186,8 +1186,8 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
|
||||
/* Map the coordinates to device coords */
|
||||
|
||||
xDst = dcDst->w.DCOrgX + XLPTODP( dcDst, xDst );
|
||||
yDst = dcDst->w.DCOrgY + YLPTODP( dcDst, yDst );
|
||||
xDst = dcDst->DCOrgX + XLPTODP( dcDst, xDst );
|
||||
yDst = dcDst->DCOrgY + YLPTODP( dcDst, yDst );
|
||||
|
||||
/* Here we have to round to integers, not truncate */
|
||||
widthDst = MulDiv(widthDst, dcDst->vportExtX, dcDst->wndExtX);
|
||||
|
@ -1200,12 +1200,12 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
dcDst->wndExtX, dcDst->wndExtY );
|
||||
TRACE(" rectdst=%d,%d-%d,%d orgdst=%d,%d\n",
|
||||
xDst, yDst, widthDst, heightDst,
|
||||
dcDst->w.DCOrgX, dcDst->w.DCOrgY );
|
||||
dcDst->DCOrgX, dcDst->DCOrgY );
|
||||
|
||||
if (useSrc)
|
||||
{
|
||||
xSrc = dcSrc->w.DCOrgX + XLPTODP( dcSrc, xSrc );
|
||||
ySrc = dcSrc->w.DCOrgY + YLPTODP( dcSrc, ySrc );
|
||||
xSrc = dcSrc->DCOrgX + XLPTODP( dcSrc, xSrc );
|
||||
ySrc = dcSrc->DCOrgY + YLPTODP( dcSrc, ySrc );
|
||||
widthSrc = widthSrc * dcSrc->vportExtX / dcSrc->wndExtX;
|
||||
heightSrc = heightSrc * dcSrc->vportExtY / dcSrc->wndExtY;
|
||||
fStretch = (widthSrc != widthDst) || (heightSrc != heightDst);
|
||||
|
@ -1216,7 +1216,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
dcSrc->wndExtX, dcSrc->wndExtY );
|
||||
TRACE(" rectsrc=%d,%d-%d,%d orgsrc=%d,%d\n",
|
||||
xSrc, ySrc, widthSrc, heightSrc,
|
||||
dcSrc->w.DCOrgX, dcSrc->w.DCOrgY );
|
||||
dcSrc->DCOrgX, dcSrc->DCOrgY );
|
||||
if (!BITBLT_GetVisRectangles( dcDst, xDst, yDst, widthDst, heightDst,
|
||||
dcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||
&visRectSrc, &visRectDst ))
|
||||
|
@ -1244,7 +1244,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
if (!fStretch) switch(rop) /* A few optimisations */
|
||||
{
|
||||
case BLACKNESS: /* 0x00 */
|
||||
if ((dcDst->w.bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||
XSetFunction( display, physDevDst->gc, GXclear );
|
||||
else
|
||||
{
|
||||
|
@ -1257,7 +1257,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
return TRUE;
|
||||
|
||||
case DSTINVERT: /* 0x55 */
|
||||
if ((dcDst->w.bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel ||
|
||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel ||
|
||||
!perfect_graphics())
|
||||
{
|
||||
XSetFunction( display, physDevDst->gc, GXinvert );
|
||||
|
@ -1302,9 +1302,9 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
return TRUE;
|
||||
|
||||
case SRCCOPY: /* 0xcc */
|
||||
if (dcSrc->w.bitsPerPixel == dcDst->w.bitsPerPixel)
|
||||
if (dcSrc->bitsPerPixel == dcDst->bitsPerPixel)
|
||||
{
|
||||
BOOL expose = !(dcSrc->w.flags & DC_MEMORY) && !(dcDst->w.flags & DC_MEMORY);
|
||||
BOOL expose = !(dcSrc->flags & DC_MEMORY) && !(dcDst->flags & DC_MEMORY);
|
||||
if ( expose ) XSetGraphicsExposures( display, physDevDst->gc, True );
|
||||
XSetFunction( display, physDevDst->gc, GXcopy );
|
||||
XCopyArea( display, physDevSrc->drawable,
|
||||
|
@ -1314,9 +1314,9 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
if ( expose ) XSetGraphicsExposures( display, physDevDst->gc, False );
|
||||
return TRUE;
|
||||
}
|
||||
if (dcSrc->w.bitsPerPixel == 1)
|
||||
if (dcSrc->bitsPerPixel == 1)
|
||||
{
|
||||
BOOL expose = !(dcSrc->w.flags & DC_MEMORY) && !(dcDst->w.flags & DC_MEMORY);
|
||||
BOOL expose = !(dcSrc->flags & DC_MEMORY) && !(dcDst->flags & DC_MEMORY);
|
||||
XSetBackground( display, physDevDst->gc, physDevDst->textPixel );
|
||||
XSetForeground( display, physDevDst->gc,
|
||||
physDevDst->backgroundPixel );
|
||||
|
@ -1339,7 +1339,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
return TRUE;
|
||||
|
||||
case WHITENESS: /* 0xff */
|
||||
if ((dcDst->w.bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||
XSetFunction( display, physDevDst->gc, GXset );
|
||||
else
|
||||
{
|
||||
|
@ -1356,11 +1356,11 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
tmpGC = XCreateGC( display, physDevDst->drawable, 0, NULL );
|
||||
XSetGraphicsExposures( display, tmpGC, False );
|
||||
pixmaps[DST] = XCreatePixmap( display, X11DRV_GetXRootWindow(), width, height,
|
||||
dcDst->w.bitsPerPixel );
|
||||
dcDst->bitsPerPixel );
|
||||
if (useSrc)
|
||||
{
|
||||
pixmaps[SRC] = XCreatePixmap( display, X11DRV_GetXRootWindow(), width, height,
|
||||
dcDst->w.bitsPerPixel );
|
||||
dcDst->bitsPerPixel );
|
||||
if (fStretch)
|
||||
BITBLT_GetSrcAreaStretch( dcSrc, dcDst, pixmaps[SRC], tmpGC,
|
||||
xSrc, ySrc, widthSrc, heightSrc,
|
||||
|
@ -1386,7 +1386,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
if (!pixmaps[TMP])
|
||||
pixmaps[TMP] = XCreatePixmap( display, X11DRV_GetXRootWindow(),
|
||||
width, height,
|
||||
dcDst->w.bitsPerPixel );
|
||||
dcDst->bitsPerPixel );
|
||||
/* fall through */
|
||||
case OP_ARGS(DST,SRC):
|
||||
case OP_ARGS(SRC,DST):
|
||||
|
@ -1401,7 +1401,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
|||
if (!pixmaps[TMP] && !fNullBrush)
|
||||
pixmaps[TMP] = XCreatePixmap( display, X11DRV_GetXRootWindow(),
|
||||
width, height,
|
||||
dcDst->w.bitsPerPixel );
|
||||
dcDst->bitsPerPixel );
|
||||
/* fall through */
|
||||
case OP_ARGS(PAT,DST):
|
||||
case OP_ARGS(PAT,SRC):
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include <stdlib.h>
|
||||
#include "gdi.h"
|
||||
#include "callback.h"
|
||||
#include "dc.h"
|
||||
#include "bitmap.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
|
@ -69,11 +68,11 @@ HBITMAP X11DRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap,
|
|||
BITMAPOBJ * bmp )
|
||||
{
|
||||
HRGN hrgn;
|
||||
HBITMAP prevHandle = dc->w.hBitmap;
|
||||
HBITMAP prevHandle = dc->hBitmap;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
|
||||
if (!(dc->w.flags & DC_MEMORY)) return 0;
|
||||
if (!(dc->flags & DC_MEMORY)) return 0;
|
||||
|
||||
if(!bmp->physBitmap)
|
||||
if(!X11DRV_CreateBitmap(hbitmap))
|
||||
|
@ -87,25 +86,25 @@ HBITMAP X11DRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap,
|
|||
hrgn = CreateRectRgn(0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight);
|
||||
if (!hrgn) return 0;
|
||||
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->w.totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
|
||||
physDev->drawable = (Pixmap)bmp->physBitmap;
|
||||
dc->w.hBitmap = hbitmap;
|
||||
dc->hBitmap = hbitmap;
|
||||
|
||||
SelectVisRgn16( dc->hSelf, hrgn );
|
||||
DeleteObject( hrgn );
|
||||
|
||||
/* Change GC depth if needed */
|
||||
|
||||
if (dc->w.bitsPerPixel != bmp->bitmap.bmBitsPixel)
|
||||
if (dc->bitsPerPixel != bmp->bitmap.bmBitsPixel)
|
||||
{
|
||||
TSXFreeGC( display, physDev->gc );
|
||||
physDev->gc = TSXCreateGC( display, physDev->drawable, 0, NULL );
|
||||
TSXSetGraphicsExposures( display, physDev->gc, False );
|
||||
dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
dc->bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
DC_InitDC( dc );
|
||||
}
|
||||
return prevHandle;
|
||||
|
|
|
@ -151,7 +151,7 @@ static void BRUSH_SelectSolidBrush( DC *dc, COLORREF color )
|
|||
{
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
if ((dc->w.bitsPerPixel > 1) && (X11DRV_GetDepth() <= 8) && !COLOR_IsSolid( color ))
|
||||
if ((dc->bitsPerPixel > 1) && (X11DRV_GetDepth() <= 8) && !COLOR_IsSolid( color ))
|
||||
{
|
||||
/* Dithered brush */
|
||||
physDev->brush.pixmap = BRUSH_DitherColor( dc, color );
|
||||
|
@ -186,7 +186,7 @@ static BOOL BRUSH_SelectPatternBrush( DC * dc, HBITMAP hbitmap )
|
|||
goto done;
|
||||
}
|
||||
|
||||
if ((dc->w.bitsPerPixel == 1) && (bmp->bitmap.bmBitsPixel != 1))
|
||||
if ((dc->bitsPerPixel == 1) && (bmp->bitmap.bmBitsPixel != 1))
|
||||
{
|
||||
/* Special case: a color pattern on a monochrome DC */
|
||||
physDev->brush.pixmap = TSXCreatePixmap( display, X11DRV_GetXRootWindow(), 8, 8, 1);
|
||||
|
@ -228,13 +228,13 @@ HBRUSH X11DRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush, BRUSHOBJ * brush )
|
|||
{
|
||||
HBITMAP16 hBitmap;
|
||||
BITMAPINFO * bmpInfo;
|
||||
HBRUSH16 prevHandle = dc->w.hBrush;
|
||||
HBRUSH16 prevHandle = dc->hBrush;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
TRACE("hdc=%04x hbrush=%04x\n",
|
||||
dc->hSelf,hbrush);
|
||||
|
||||
dc->w.hBrush = hbrush;
|
||||
dc->hBrush = hbrush;
|
||||
|
||||
if (physDev->brush.pixmap)
|
||||
{
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "x11drv.h"
|
||||
#include "region.h"
|
||||
#include "debugtools.h"
|
||||
#include "heap.h"
|
||||
#include "local.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(x11drv)
|
||||
DEFAULT_DEBUG_CHANNEL(x11drv);
|
||||
|
||||
/***********************************************************************
|
||||
* X11DRV_SetDeviceClipping
|
||||
|
@ -31,7 +31,7 @@ void X11DRV_SetDeviceClipping( DC * dc )
|
|||
XRectangle *pXrect;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
|
||||
RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->hGCClipRgn, REGION_MAGIC);
|
||||
if (!obj)
|
||||
{
|
||||
ERR("Rgn is 0. Please report this.\n");
|
||||
|
@ -49,7 +49,7 @@ void X11DRV_SetDeviceClipping( DC * dc )
|
|||
if(!pXrect)
|
||||
{
|
||||
WARN("Can't alloc buffer\n");
|
||||
GDI_ReleaseObj( dc->w.hGCClipRgn );
|
||||
GDI_ReleaseObj( dc->hGCClipRgn );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -70,6 +70,6 @@ void X11DRV_SetDeviceClipping( DC * dc )
|
|||
if(pXrect)
|
||||
HeapFree( GetProcessHeap(), 0, pXrect );
|
||||
|
||||
GDI_ReleaseObj( dc->w.hGCClipRgn );
|
||||
GDI_ReleaseObj( dc->hGCClipRgn );
|
||||
}
|
||||
|
||||
|
|
|
@ -23,14 +23,14 @@
|
|||
#include "bitmap.h"
|
||||
#include "x11drv.h"
|
||||
#include "debugtools.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "color.h"
|
||||
#include "callback.h"
|
||||
#include "selectors.h"
|
||||
#include "global.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(bitmap)
|
||||
DECLARE_DEBUG_CHANNEL(x11drv)
|
||||
DEFAULT_DEBUG_CHANNEL(bitmap);
|
||||
DECLARE_DEBUG_CHANNEL(x11drv);
|
||||
|
||||
static int bitmapDepthTable[] = { 8, 1, 32, 16, 24, 15, 4, 0 };
|
||||
static int ximageDepthTable[] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
@ -2802,7 +2802,7 @@ INT X11DRV_SetDIBitsToDevice( DC *dc, INT xDest, INT yDest, DWORD cx,
|
|||
if (!cx || !cy) return 0;
|
||||
|
||||
X11DRV_SetupGCForText( dc ); /* To have the correct colors */
|
||||
TSXSetFunction(display, physDev->gc, X11DRV_XROPfunction[dc->w.ROPmode-1]);
|
||||
TSXSetFunction(display, physDev->gc, X11DRV_XROPfunction[dc->ROPmode-1]);
|
||||
|
||||
switch (descr.infoBpp)
|
||||
{
|
||||
|
@ -2811,7 +2811,7 @@ INT X11DRV_SetDIBitsToDevice( DC *dc, INT xDest, INT yDest, DWORD cx,
|
|||
case 8:
|
||||
descr.colorMap = (RGBQUAD *)X11DRV_DIB_BuildColorMap(
|
||||
coloruse == DIB_PAL_COLORS ? dc : NULL, coloruse,
|
||||
dc->w.bitsPerPixel, info, &descr.nColorMap );
|
||||
dc->bitsPerPixel, info, &descr.nColorMap );
|
||||
if (!descr.colorMap) return 0;
|
||||
descr.rMask = descr.gMask = descr.bMask = 0;
|
||||
break;
|
||||
|
@ -2842,14 +2842,14 @@ INT X11DRV_SetDIBitsToDevice( DC *dc, INT xDest, INT yDest, DWORD cx,
|
|||
descr.palentry = NULL;
|
||||
descr.lines = tmpheight >= 0 ? lines : -lines;
|
||||
descr.infoWidth = width;
|
||||
descr.depth = dc->w.bitsPerPixel;
|
||||
descr.depth = dc->bitsPerPixel;
|
||||
descr.drawable = physDev->drawable;
|
||||
descr.gc = physDev->gc;
|
||||
descr.xSrc = xSrc;
|
||||
descr.ySrc = tmpheight >= 0 ? lines-(ySrc-startscan)-cy+(oldcy-cy)
|
||||
: ySrc - startscan;
|
||||
descr.xDest = dc->w.DCOrgX + XLPTODP( dc, xDest );
|
||||
descr.yDest = dc->w.DCOrgY + YLPTODP( dc, yDest ) +
|
||||
descr.xDest = dc->DCOrgX + XLPTODP( dc, xDest );
|
||||
descr.yDest = dc->DCOrgY + YLPTODP( dc, yDest ) +
|
||||
(tmpheight >= 0 ? oldcy-cy : 0);
|
||||
descr.width = cx;
|
||||
descr.height = cy;
|
||||
|
@ -2969,7 +2969,7 @@ INT X11DRV_DIB_GetDIBits(
|
|||
(int)info->bmiHeader.biWidth, (int)info->bmiHeader.biHeight,
|
||||
startscan );
|
||||
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->w.hPalette, PALETTE_MAGIC )))
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->hPalette, PALETTE_MAGIC )))
|
||||
return 0;
|
||||
|
||||
if( lines > info->bmiHeader.biHeight ) lines = info->bmiHeader.biHeight;
|
||||
|
@ -3065,7 +3065,7 @@ INT X11DRV_DIB_GetDIBits(
|
|||
info->bmiHeader.biCompression = 0;
|
||||
|
||||
done:
|
||||
GDI_ReleaseObj( dc->w.hPalette );
|
||||
GDI_ReleaseObj( dc->hPalette );
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
@ -3292,9 +3292,9 @@ void X11DRV_DIB_UpdateDIBSection(DC *dc, BOOL toDIB)
|
|||
/* Ensure this is a Compatible DC that has a DIB section selected */
|
||||
|
||||
if (!dc) return;
|
||||
if (!(dc->w.flags & DC_MEMORY)) return;
|
||||
if (!(dc->flags & DC_MEMORY)) return;
|
||||
|
||||
X11DRV_DIB_UpdateDIBSection2(dc->w.hBitmap, toDIB);
|
||||
X11DRV_DIB_UpdateDIBSection2(dc->hBitmap, toDIB);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include "x11font.h"
|
||||
#include "bitmap.h"
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "callback.h"
|
||||
#include "metafile.h"
|
||||
#include "palette.h"
|
||||
|
@ -99,7 +98,7 @@ BOOL X11DRV_SetupGCForPatBlt( DC * dc, GC gc, BOOL fMapColors )
|
|||
val.background = X11DRV_PALETTE_XPixelToPalette[val.background];
|
||||
}
|
||||
|
||||
val.function = X11DRV_XROPfunction[dc->w.ROPmode-1];
|
||||
val.function = X11DRV_XROPfunction[dc->ROPmode-1];
|
||||
/*
|
||||
** Let's replace GXinvert by GXxor with (black xor white)
|
||||
** This solves the selection color and leak problems in excel
|
||||
|
@ -115,7 +114,7 @@ BOOL X11DRV_SetupGCForPatBlt( DC * dc, GC gc, BOOL fMapColors )
|
|||
{
|
||||
case FillStippled:
|
||||
case FillOpaqueStippled:
|
||||
if (dc->w.backgroundMode==OPAQUE) val.fill_style = FillOpaqueStippled;
|
||||
if (dc->backgroundMode==OPAQUE) val.fill_style = FillOpaqueStippled;
|
||||
val.stipple = physDev->brush.pixmap;
|
||||
mask = GCStipple;
|
||||
break;
|
||||
|
@ -147,9 +146,9 @@ BOOL X11DRV_SetupGCForPatBlt( DC * dc, GC gc, BOOL fMapColors )
|
|||
mask = 0;
|
||||
break;
|
||||
}
|
||||
val.ts_x_origin = dc->w.DCOrgX + dc->w.brushOrgX;
|
||||
val.ts_y_origin = dc->w.DCOrgY + dc->w.brushOrgY;
|
||||
val.fill_rule = (dc->w.polyFillMode==WINDING) ? WindingRule : EvenOddRule;
|
||||
val.ts_x_origin = dc->DCOrgX + dc->brushOrgX;
|
||||
val.ts_y_origin = dc->DCOrgY + dc->brushOrgY;
|
||||
val.fill_rule = (dc->polyFillMode==WINDING) ? WindingRule : EvenOddRule;
|
||||
TSXChangeGC( display, gc,
|
||||
GCFunction | GCForeground | GCBackground | GCFillStyle |
|
||||
GCFillRule | GCTileStipXOrigin | GCTileStipYOrigin | mask,
|
||||
|
@ -185,7 +184,7 @@ BOOL X11DRV_SetupGCForPen( DC * dc )
|
|||
|
||||
if (physDev->pen.style == PS_NULL) return FALSE;
|
||||
|
||||
switch (dc->w.ROPmode)
|
||||
switch (dc->ROPmode)
|
||||
{
|
||||
case R2_BLACK :
|
||||
val.foreground = BlackPixelOfScreen( X11DRV_GetXScreen() );
|
||||
|
@ -206,7 +205,7 @@ BOOL X11DRV_SetupGCForPen( DC * dc )
|
|||
break;
|
||||
default :
|
||||
val.foreground = physDev->pen.pixel;
|
||||
val.function = X11DRV_XROPfunction[dc->w.ROPmode-1];
|
||||
val.function = X11DRV_XROPfunction[dc->ROPmode-1];
|
||||
}
|
||||
val.background = physDev->backgroundPixel;
|
||||
val.fill_style = FillSolid;
|
||||
|
@ -216,7 +215,7 @@ BOOL X11DRV_SetupGCForPen( DC * dc )
|
|||
{
|
||||
TSXSetDashes( display, physDev->gc, 0, physDev->pen.dashes,
|
||||
physDev->pen.dash_len );
|
||||
val.line_style = (dc->w.backgroundMode == OPAQUE) ?
|
||||
val.line_style = (dc->backgroundMode == OPAQUE) ?
|
||||
LineDoubleDash : LineOnOffDash;
|
||||
}
|
||||
else val.line_style = LineSolid;
|
||||
|
@ -298,10 +297,10 @@ X11DRV_LineTo( DC *dc, INT x, INT y )
|
|||
/* Update the pixmap from the DIB section */
|
||||
X11DRV_DIB_UpdateDIBSection(dc, FALSE);
|
||||
TSXDrawLine(display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + XLPTODP( dc, dc->w.CursPosX ),
|
||||
dc->w.DCOrgY + YLPTODP( dc, dc->w.CursPosY ),
|
||||
dc->w.DCOrgX + XLPTODP( dc, x ),
|
||||
dc->w.DCOrgY + YLPTODP( dc, y ) );
|
||||
dc->DCOrgX + XLPTODP( dc, dc->CursPosX ),
|
||||
dc->DCOrgY + YLPTODP( dc, dc->CursPosY ),
|
||||
dc->DCOrgX + XLPTODP( dc, x ),
|
||||
dc->DCOrgY + YLPTODP( dc, y ) );
|
||||
/* Update the DIBSection from the pixmap */
|
||||
X11DRV_DIB_UpdateDIBSection(dc, TRUE);
|
||||
}
|
||||
|
@ -343,7 +342,7 @@ X11DRV_DrawArc( DC *dc, INT left, INT top, INT right,
|
|||
if ((left == right) || (top == bottom)
|
||||
||(lines && ((right-left==1)||(bottom-top==1)))) return TRUE;
|
||||
|
||||
if( dc->w.ArcDirection == AD_CLOCKWISE )
|
||||
if( dc->ArcDirection == AD_CLOCKWISE )
|
||||
{ INT tmp = xstart; xstart = xend; xend = tmp;
|
||||
tmp = ystart; ystart = yend; yend = tmp; }
|
||||
|
||||
|
@ -395,7 +394,7 @@ X11DRV_DrawArc( DC *dc, INT left, INT top, INT right,
|
|||
TSXSetArcMode( display, physDev->gc,
|
||||
(lines==1) ? ArcChord : ArcPieSlice);
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right-left-1, bottom-top-1, istart_angle, idiff_angle );
|
||||
update = TRUE;
|
||||
}
|
||||
|
@ -404,20 +403,20 @@ X11DRV_DrawArc( DC *dc, INT left, INT top, INT right,
|
|||
|
||||
if (X11DRV_SetupGCForPen( dc )){
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right-left-1, bottom-top-1, istart_angle, idiff_angle );
|
||||
if (lines) {
|
||||
/* use the truncated values */
|
||||
start_angle=(double)istart_angle*PI/64./180.;
|
||||
end_angle=(double)(istart_angle+idiff_angle)*PI/64./180.;
|
||||
/* calculate the endpoints and round correctly */
|
||||
points[0].x = (int) floor(dc->w.DCOrgX + (right+left)/2.0 +
|
||||
points[0].x = (int) floor(dc->DCOrgX + (right+left)/2.0 +
|
||||
cos(start_angle) * (right-left-width*2+2) / 2. + 0.5);
|
||||
points[0].y = (int) floor(dc->w.DCOrgY + (top+bottom)/2.0 -
|
||||
points[0].y = (int) floor(dc->DCOrgY + (top+bottom)/2.0 -
|
||||
sin(start_angle) * (bottom-top-width*2+2) / 2. + 0.5);
|
||||
points[1].x = (int) floor(dc->w.DCOrgX + (right+left)/2.0 +
|
||||
points[1].x = (int) floor(dc->DCOrgX + (right+left)/2.0 +
|
||||
cos(end_angle) * (right-left-width*2+2) / 2. + 0.5);
|
||||
points[1].y = (int) floor(dc->w.DCOrgY + (top+bottom)/2.0 -
|
||||
points[1].y = (int) floor(dc->DCOrgY + (top+bottom)/2.0 -
|
||||
sin(end_angle) * (bottom-top-width*2+2) / 2. + 0.5);
|
||||
|
||||
/* OK this stuff is optimized for Xfree86
|
||||
|
@ -431,8 +430,8 @@ X11DRV_DrawArc( DC *dc, INT left, INT top, INT right,
|
|||
if (lines == 2) {
|
||||
INT dx1,dy1;
|
||||
points[3] = points[1];
|
||||
points[1].x = dc->w.DCOrgX + xcenter;
|
||||
points[1].y = dc->w.DCOrgY + ycenter;
|
||||
points[1].x = dc->DCOrgX + xcenter;
|
||||
points[1].y = dc->DCOrgY + ycenter;
|
||||
points[2] = points[1];
|
||||
dx1=points[1].x-points[0].x;
|
||||
dy1=points[1].y-points[0].y;
|
||||
|
@ -550,14 +549,14 @@ X11DRV_Ellipse( DC *dc, INT left, INT top, INT right, INT bottom )
|
|||
if (X11DRV_SetupGCForBrush( dc ))
|
||||
{
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right-left-1, bottom-top-1, 0, 360*64 );
|
||||
update = TRUE;
|
||||
}
|
||||
if (X11DRV_SetupGCForPen( dc ))
|
||||
{
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right-left-1, bottom-top-1, 0, 360*64 );
|
||||
update = TRUE;
|
||||
}
|
||||
|
@ -619,15 +618,15 @@ X11DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
|
|||
if (X11DRV_SetupGCForBrush( dc ))
|
||||
{
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + (width + 1) / 2,
|
||||
dc->w.DCOrgY + top + (width + 1) / 2,
|
||||
dc->DCOrgX + left + (width + 1) / 2,
|
||||
dc->DCOrgY + top + (width + 1) / 2,
|
||||
right-left-width-1, bottom-top-width-1);
|
||||
update = TRUE;
|
||||
}
|
||||
if (X11DRV_SetupGCForPen( dc ))
|
||||
{
|
||||
TSXDrawRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right-left-1, bottom-top-1 );
|
||||
update = TRUE;
|
||||
}
|
||||
|
@ -698,61 +697,61 @@ X11DRV_RoundRect( DC *dc, INT left, INT top, INT right,
|
|||
if (ell_width > (right-left) )
|
||||
if (ell_height > (bottom-top) )
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right - left - 1, bottom - top - 1,
|
||||
0, 360 * 64 );
|
||||
else{
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right - left - 1, ell_height, 0, 180 * 64 );
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left,
|
||||
dc->w.DCOrgY + bottom - ell_height - 1,
|
||||
dc->DCOrgX + left,
|
||||
dc->DCOrgY + bottom - ell_height - 1,
|
||||
right - left - 1, ell_height, 180 * 64,
|
||||
180 * 64 );
|
||||
}
|
||||
else if (ell_height > (bottom-top) ){
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
ell_width, bottom - top - 1, 90 * 64, 180 * 64 );
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width -1, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + right - ell_width -1, dc->DCOrgY + top,
|
||||
ell_width, bottom - top - 1, 270 * 64, 180 * 64 );
|
||||
}else{
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
ell_width, ell_height, 90 * 64, 90 * 64 );
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left,
|
||||
dc->w.DCOrgY + bottom - ell_height - 1,
|
||||
dc->DCOrgX + left,
|
||||
dc->DCOrgY + bottom - ell_height - 1,
|
||||
ell_width, ell_height, 180 * 64, 90 * 64 );
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width - 1,
|
||||
dc->w.DCOrgY + bottom - ell_height - 1,
|
||||
dc->DCOrgX + right - ell_width - 1,
|
||||
dc->DCOrgY + bottom - ell_height - 1,
|
||||
ell_width, ell_height, 270 * 64, 90 * 64 );
|
||||
TSXFillArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width - 1,
|
||||
dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + right - ell_width - 1,
|
||||
dc->DCOrgY + top,
|
||||
ell_width, ell_height, 0, 90 * 64 );
|
||||
}
|
||||
if (ell_width < right - left)
|
||||
{
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + (ell_width + 1) / 2,
|
||||
dc->w.DCOrgY + top + 1,
|
||||
dc->DCOrgX + left + (ell_width + 1) / 2,
|
||||
dc->DCOrgY + top + 1,
|
||||
right - left - ell_width - 1,
|
||||
(ell_height + 1) / 2 - 1);
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + (ell_width + 1) / 2,
|
||||
dc->w.DCOrgY + bottom - (ell_height) / 2 - 1,
|
||||
dc->DCOrgX + left + (ell_width + 1) / 2,
|
||||
dc->DCOrgY + bottom - (ell_height) / 2 - 1,
|
||||
right - left - ell_width - 1,
|
||||
(ell_height) / 2 );
|
||||
}
|
||||
if (ell_height < bottom - top)
|
||||
{
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + 1,
|
||||
dc->w.DCOrgY + top + (ell_height + 1) / 2,
|
||||
dc->DCOrgX + left + 1,
|
||||
dc->DCOrgY + top + (ell_height + 1) / 2,
|
||||
right - left - 2,
|
||||
bottom - top - ell_height - 1);
|
||||
}
|
||||
|
@ -771,65 +770,65 @@ X11DRV_RoundRect( DC *dc, INT left, INT top, INT right,
|
|||
if (ell_width > (right-left) )
|
||||
if (ell_height > (bottom-top) )
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right - left - 1, bottom -top - 1, 0 , 360 * 64 );
|
||||
else{
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
right - left - 1, ell_height - 1, 0 , 180 * 64 );
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left,
|
||||
dc->w.DCOrgY + bottom - ell_height,
|
||||
dc->DCOrgX + left,
|
||||
dc->DCOrgY + bottom - ell_height,
|
||||
right - left - 1, ell_height - 1, 180 * 64 , 180 * 64 );
|
||||
}
|
||||
else if (ell_height > (bottom-top) ){
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
ell_width - 1 , bottom - top - 1, 90 * 64 , 180 * 64 );
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width,
|
||||
dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + right - ell_width,
|
||||
dc->DCOrgY + top,
|
||||
ell_width - 1 , bottom - top - 1, 270 * 64 , 180 * 64 );
|
||||
}else{
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + left, dc->DCOrgY + top,
|
||||
ell_width - 1, ell_height - 1, 90 * 64, 90 * 64 );
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left, dc->w.DCOrgY + bottom - ell_height,
|
||||
dc->DCOrgX + left, dc->DCOrgY + bottom - ell_height,
|
||||
ell_width - 1, ell_height - 1, 180 * 64, 90 * 64 );
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width,
|
||||
dc->w.DCOrgY + bottom - ell_height,
|
||||
dc->DCOrgX + right - ell_width,
|
||||
dc->DCOrgY + bottom - ell_height,
|
||||
ell_width - 1, ell_height - 1, 270 * 64, 90 * 64 );
|
||||
TSXDrawArc( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - ell_width, dc->w.DCOrgY + top,
|
||||
dc->DCOrgX + right - ell_width, dc->DCOrgY + top,
|
||||
ell_width - 1, ell_height - 1, 0, 90 * 64 );
|
||||
}
|
||||
if (ell_width < right - left)
|
||||
{
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + ell_width / 2,
|
||||
dc->w.DCOrgY + top,
|
||||
dc->w.DCOrgX + right - (ell_width+1) / 2,
|
||||
dc->w.DCOrgY + top);
|
||||
dc->DCOrgX + left + ell_width / 2,
|
||||
dc->DCOrgY + top,
|
||||
dc->DCOrgX + right - (ell_width+1) / 2,
|
||||
dc->DCOrgY + top);
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left + ell_width / 2 ,
|
||||
dc->w.DCOrgY + bottom - 1,
|
||||
dc->w.DCOrgX + right - (ell_width+1)/ 2,
|
||||
dc->w.DCOrgY + bottom - 1);
|
||||
dc->DCOrgX + left + ell_width / 2 ,
|
||||
dc->DCOrgY + bottom - 1,
|
||||
dc->DCOrgX + right - (ell_width+1)/ 2,
|
||||
dc->DCOrgY + bottom - 1);
|
||||
}
|
||||
if (ell_height < bottom - top)
|
||||
{
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + right - 1,
|
||||
dc->w.DCOrgY + top + ell_height / 2,
|
||||
dc->w.DCOrgX + right - 1,
|
||||
dc->w.DCOrgY + bottom - (ell_height+1) / 2);
|
||||
dc->DCOrgX + right - 1,
|
||||
dc->DCOrgY + top + ell_height / 2,
|
||||
dc->DCOrgX + right - 1,
|
||||
dc->DCOrgY + bottom - (ell_height+1) / 2);
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + left,
|
||||
dc->w.DCOrgY + top + ell_height / 2,
|
||||
dc->w.DCOrgX + left,
|
||||
dc->w.DCOrgY + bottom - (ell_height+1) / 2);
|
||||
dc->DCOrgX + left,
|
||||
dc->DCOrgY + top + ell_height / 2,
|
||||
dc->DCOrgX + left,
|
||||
dc->DCOrgY + bottom - (ell_height+1) / 2);
|
||||
}
|
||||
update = TRUE;
|
||||
}
|
||||
|
@ -852,8 +851,8 @@ X11DRV_SetPixel( DC *dc, INT x, INT y, COLORREF color )
|
|||
Pixel pixel;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
x = dc->w.DCOrgX + XLPTODP( dc, x );
|
||||
y = dc->w.DCOrgY + YLPTODP( dc, y );
|
||||
x = dc->DCOrgX + XLPTODP( dc, x );
|
||||
y = dc->DCOrgY + YLPTODP( dc, y );
|
||||
pixel = X11DRV_PALETTE_ToPhysical( dc, color );
|
||||
|
||||
TSXSetForeground( display, physDev->gc, pixel );
|
||||
|
@ -879,10 +878,10 @@ X11DRV_GetPixel( DC *dc, INT x, INT y )
|
|||
int pixel;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
x = dc->w.DCOrgX + XLPTODP( dc, x );
|
||||
y = dc->w.DCOrgY + YLPTODP( dc, y );
|
||||
x = dc->DCOrgX + XLPTODP( dc, x );
|
||||
y = dc->DCOrgY + YLPTODP( dc, y );
|
||||
EnterCriticalSection( &X11DRV_CritSection );
|
||||
if (dc->w.flags & DC_MEMORY)
|
||||
if (dc->flags & DC_MEMORY)
|
||||
{
|
||||
image = XGetImage( display, physDev->drawable, x, y, 1, 1,
|
||||
AllPlanes, ZPixmap );
|
||||
|
@ -892,7 +891,7 @@ X11DRV_GetPixel( DC *dc, INT x, INT y )
|
|||
/* If we are reading from the screen, use a temporary copy */
|
||||
/* to avoid a BadMatch error */
|
||||
if (!pixmap) pixmap = XCreatePixmap( display, X11DRV_GetXRootWindow(),
|
||||
1, 1, dc->w.bitsPerPixel );
|
||||
1, 1, dc->bitsPerPixel );
|
||||
XCopyArea( display, physDev->drawable, pixmap, BITMAP_colorGC,
|
||||
x, y, 1, 1, 0, 0 );
|
||||
image = XGetImage( display, pixmap, 0, 0, 1, 1, AllPlanes, ZPixmap );
|
||||
|
@ -920,7 +919,7 @@ X11DRV_PaintRgn( DC *dc, HRGN hrgn )
|
|||
|
||||
/* Transform region into device co-ords */
|
||||
if ( !REGION_LPTODP( hdc, tmpVisRgn, hrgn )
|
||||
|| OffsetRgn( tmpVisRgn, dc->w.DCOrgX, dc->w.DCOrgY ) == ERROR) {
|
||||
|| OffsetRgn( tmpVisRgn, dc->DCOrgX, dc->DCOrgY ) == ERROR) {
|
||||
DeleteObject( tmpVisRgn );
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -936,7 +935,7 @@ X11DRV_PaintRgn( DC *dc, HRGN hrgn )
|
|||
|
||||
/* Fill the region */
|
||||
|
||||
GetRgnBox( dc->w.hGCClipRgn, &box );
|
||||
GetRgnBox( dc->hGCClipRgn, &box );
|
||||
if (X11DRV_SetupGCForBrush( dc ))
|
||||
{
|
||||
/* Update the pixmap from the DIB section */
|
||||
|
@ -976,8 +975,8 @@ X11DRV_Polyline( DC *dc, const POINT* pt, INT count )
|
|||
}
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
|
||||
points[i].y = dc->w.DCOrgY + YLPTODP( dc, pt[i].y );
|
||||
points[i].x = dc->DCOrgX + XLPTODP( dc, pt[i].x );
|
||||
points[i].y = dc->DCOrgY + YLPTODP( dc, pt[i].y );
|
||||
}
|
||||
|
||||
if (X11DRV_SetupGCForPen ( dc ))
|
||||
|
@ -1016,8 +1015,8 @@ X11DRV_Polygon( DC *dc, const POINT* pt, INT count )
|
|||
}
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
|
||||
points[i].y = dc->w.DCOrgY + YLPTODP( dc, pt[i].y );
|
||||
points[i].x = dc->DCOrgX + XLPTODP( dc, pt[i].x );
|
||||
points[i].y = dc->DCOrgY + YLPTODP( dc, pt[i].y );
|
||||
}
|
||||
points[count] = points[0];
|
||||
|
||||
|
@ -1057,7 +1056,7 @@ X11DRV_PolyPolygon( DC *dc, const POINT* pt, const INT* counts, UINT polygons)
|
|||
/* FIXME: The points should be converted to device coords before */
|
||||
/* creating the region. */
|
||||
|
||||
hrgn = CreatePolyPolygonRgn( pt, counts, polygons, dc->w.polyFillMode );
|
||||
hrgn = CreatePolyPolygonRgn( pt, counts, polygons, dc->polyFillMode );
|
||||
X11DRV_PaintRgn( dc, hrgn );
|
||||
DeleteObject( hrgn );
|
||||
|
||||
|
@ -1081,8 +1080,8 @@ X11DRV_PolyPolygon( DC *dc, const POINT* pt, const INT* counts, UINT polygons)
|
|||
{
|
||||
for (j = 0; j < counts[i]; j++)
|
||||
{
|
||||
points[j].x = dc->w.DCOrgX + XLPTODP( dc, pt->x );
|
||||
points[j].y = dc->w.DCOrgY + YLPTODP( dc, pt->y );
|
||||
points[j].x = dc->DCOrgX + XLPTODP( dc, pt->x );
|
||||
points[j].y = dc->DCOrgY + YLPTODP( dc, pt->y );
|
||||
pt++;
|
||||
}
|
||||
points[j] = points[0];
|
||||
|
@ -1125,8 +1124,8 @@ X11DRV_PolyPolyline( DC *dc, const POINT* pt, const DWORD* counts, DWORD polylin
|
|||
{
|
||||
for (j = 0; j < counts[i]; j++)
|
||||
{
|
||||
points[j].x = dc->w.DCOrgX + XLPTODP( dc, pt->x );
|
||||
points[j].y = dc->w.DCOrgY + YLPTODP( dc, pt->y );
|
||||
points[j].x = dc->DCOrgX + XLPTODP( dc, pt->x );
|
||||
points[j].y = dc->DCOrgY + YLPTODP( dc, pt->y );
|
||||
pt++;
|
||||
}
|
||||
TSXDrawLines( display, physDev->drawable, physDev->gc,
|
||||
|
@ -1236,7 +1235,7 @@ static BOOL X11DRV_DoFloodFill( const struct FloodFill_params *params )
|
|||
DC *dc = params->dc;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
if (GetRgnBox( dc->w.hGCClipRgn, &rect ) == ERROR) return FALSE;
|
||||
if (GetRgnBox( dc->hGCClipRgn, &rect ) == ERROR) return FALSE;
|
||||
|
||||
if (!(image = XGetImage( display, physDev->drawable,
|
||||
rect.left,
|
||||
|
@ -1253,8 +1252,8 @@ static BOOL X11DRV_DoFloodFill( const struct FloodFill_params *params )
|
|||
/* ROP mode is always GXcopy for flood-fill */
|
||||
XSetFunction( display, physDev->gc, GXcopy );
|
||||
X11DRV_InternalFloodFill(image, dc,
|
||||
XLPTODP(dc,params->x) + dc->w.DCOrgX - rect.left,
|
||||
YLPTODP(dc,params->y) + dc->w.DCOrgY - rect.top,
|
||||
XLPTODP(dc,params->x) + dc->DCOrgX - rect.left,
|
||||
YLPTODP(dc,params->y) + dc->DCOrgY - rect.top,
|
||||
rect.left,
|
||||
rect.top,
|
||||
X11DRV_PALETTE_ToPhysical( dc, params->color ),
|
||||
|
@ -1304,8 +1303,8 @@ X11DRV_SetBkColor( DC *dc, COLORREF color )
|
|||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
COLORREF oldColor;
|
||||
|
||||
oldColor = dc->w.backgroundColor;
|
||||
dc->w.backgroundColor = color;
|
||||
oldColor = dc->backgroundColor;
|
||||
dc->backgroundColor = color;
|
||||
|
||||
physDev->backgroundPixel = X11DRV_PALETTE_ToPhysical( dc, color );
|
||||
|
||||
|
@ -1321,8 +1320,8 @@ X11DRV_SetTextColor( DC *dc, COLORREF color )
|
|||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
COLORREF oldColor;
|
||||
|
||||
oldColor = dc->w.textColor;
|
||||
dc->w.textColor = color;
|
||||
oldColor = dc->textColor;
|
||||
dc->textColor = color;
|
||||
|
||||
physDev->textPixel = X11DRV_PALETTE_ToPhysical( dc, color );
|
||||
|
||||
|
@ -1334,7 +1333,7 @@ X11DRV_SetTextColor( DC *dc, COLORREF color )
|
|||
*/
|
||||
BOOL X11DRV_GetDCOrgEx( DC *dc, LPPOINT lpp )
|
||||
{
|
||||
if (!(dc->w.flags & DC_MEMORY))
|
||||
if (!(dc->flags & DC_MEMORY))
|
||||
{
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *) dc->physDev;
|
||||
Window root;
|
||||
|
|
|
@ -243,45 +243,45 @@ static BOOL X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
dc->w.devCaps = &X11DRV_DevCaps;
|
||||
if (dc->w.flags & DC_MEMORY)
|
||||
dc->devCaps = &X11DRV_DevCaps;
|
||||
if (dc->flags & DC_MEMORY)
|
||||
{
|
||||
BITMAPOBJ *bmp = (BITMAPOBJ *) GDI_GetObjPtr( dc->w.hBitmap, BITMAP_MAGIC );
|
||||
BITMAPOBJ *bmp = (BITMAPOBJ *) GDI_GetObjPtr( dc->hBitmap, BITMAP_MAGIC );
|
||||
if (!bmp)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, physDev );
|
||||
return FALSE;
|
||||
}
|
||||
if (!bmp->physBitmap) X11DRV_CreateBitmap( dc->w.hBitmap );
|
||||
if (!bmp->physBitmap) X11DRV_CreateBitmap( dc->hBitmap );
|
||||
physDev->drawable = (Pixmap)bmp->physBitmap;
|
||||
physDev->gc = TSXCreateGC(display, physDev->drawable, 0, NULL);
|
||||
dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
dc->bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
||||
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->w.totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = bmp->bitmap.bmWidth;
|
||||
dc->totalExtent.bottom = bmp->bitmap.bmHeight;
|
||||
dc->hVisRgn = CreateRectRgnIndirect( &dc->totalExtent );
|
||||
|
||||
GDI_ReleaseObj( dc->w.hBitmap );
|
||||
GDI_ReleaseObj( dc->hBitmap );
|
||||
}
|
||||
else
|
||||
{
|
||||
physDev->drawable = X11DRV_GetXRootWindow();
|
||||
physDev->gc = TSXCreateGC( display, physDev->drawable, 0, NULL );
|
||||
dc->w.bitsPerPixel = screen_depth;
|
||||
dc->bitsPerPixel = screen_depth;
|
||||
|
||||
dc->w.totalExtent.left = 0;
|
||||
dc->w.totalExtent.top = 0;
|
||||
dc->w.totalExtent.right = screen_width;
|
||||
dc->w.totalExtent.bottom = screen_height;
|
||||
dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = screen_width;
|
||||
dc->totalExtent.bottom = screen_height;
|
||||
dc->hVisRgn = CreateRectRgnIndirect( &dc->totalExtent );
|
||||
}
|
||||
|
||||
physDev->current_pf = 0;
|
||||
physDev->used_visuals = 0;
|
||||
|
||||
if (!dc->w.hVisRgn)
|
||||
if (!dc->hVisRgn)
|
||||
{
|
||||
TSXFreeGC( display, physDev->gc );
|
||||
HeapFree( GetProcessHeap(), 0, physDev );
|
||||
|
|
|
@ -669,7 +669,7 @@ COLORREF X11DRV_PALETTE_ToLogical(int pixel)
|
|||
int X11DRV_PALETTE_ToPhysical( DC *dc, COLORREF color )
|
||||
{
|
||||
WORD index = 0;
|
||||
HPALETTE16 hPal = (dc)? dc->w.hPalette: GetStockObject(DEFAULT_PALETTE);
|
||||
HPALETTE16 hPal = (dc)? dc->hPalette: GetStockObject(DEFAULT_PALETTE);
|
||||
unsigned char spec_type = color >> 24;
|
||||
PALETTEOBJ* palPtr = (PALETTEOBJ *) GDI_GetObjPtr( hPal, PALETTE_MAGIC );
|
||||
|
||||
|
@ -710,7 +710,7 @@ int X11DRV_PALETTE_ToPhysical( DC *dc, COLORREF color )
|
|||
/* fall through to RGB */
|
||||
|
||||
case 0: /* RGB */
|
||||
if( dc && (dc->w.bitsPerPixel == 1) )
|
||||
if( dc && (dc->bitsPerPixel == 1) )
|
||||
{
|
||||
GDI_ReleaseObj( hPal );
|
||||
return (((color >> 16) & 0xff) +
|
||||
|
@ -745,7 +745,7 @@ int X11DRV_PALETTE_ToPhysical( DC *dc, COLORREF color )
|
|||
{
|
||||
|
||||
if( !palPtr->mapping )
|
||||
WARN("Palette %04x is not realized\n", dc->w.hPalette);
|
||||
WARN("Palette %04x is not realized\n", dc->hPalette);
|
||||
|
||||
switch(spec_type) /* we have to peruse DC and system palette */
|
||||
{
|
||||
|
@ -754,7 +754,7 @@ int X11DRV_PALETTE_ToPhysical( DC *dc, COLORREF color )
|
|||
/* fall through to RGB */
|
||||
|
||||
case 0: /* RGB */
|
||||
if( dc && (dc->w.bitsPerPixel == 1) )
|
||||
if( dc && (dc->bitsPerPixel == 1) )
|
||||
{
|
||||
GDI_ReleaseObj( hPal );
|
||||
return (((color >> 16) & 0xff) +
|
||||
|
|
|
@ -22,10 +22,10 @@ static const char PEN_alternate[] = { 1,1 }; /* FIXME */
|
|||
*/
|
||||
HPEN X11DRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen )
|
||||
{
|
||||
HPEN prevHandle = dc->w.hPen;
|
||||
HPEN prevHandle = dc->hPen;
|
||||
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
|
||||
dc->w.hPen = hpen;
|
||||
dc->hPen = hpen;
|
||||
physDev->pen.style = pen->logpen.lopnStyle & PS_STYLE_MASK;
|
||||
physDev->pen.type = pen->logpen.lopnStyle & PS_TYPE_MASK;
|
||||
physDev->pen.endcap = pen->logpen.lopnStyle & PS_ENDCAP_MASK;
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
#include "windef.h"
|
||||
#include "winnls.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "x11font.h"
|
||||
|
@ -72,10 +71,10 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
lprect->right, lprect->bottom );
|
||||
/* Setup coordinates */
|
||||
|
||||
if (dc->w.textAlign & TA_UPDATECP)
|
||||
if (dc->textAlign & TA_UPDATECP)
|
||||
{
|
||||
x = dc->w.CursPosX;
|
||||
y = dc->w.CursPosY;
|
||||
x = dc->CursPosX;
|
||||
y = dc->CursPosY;
|
||||
}
|
||||
|
||||
if (flags & (ETO_OPAQUE | ETO_CLIPPED)) /* there's a rectangle */
|
||||
|
@ -117,7 +116,7 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
dibUpdateFlag = TRUE;
|
||||
TSXSetForeground( display, physDev->gc, physDev->backgroundPixel );
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + rect.left, dc->w.DCOrgY + rect.top,
|
||||
dc->DCOrgX + rect.left, dc->DCOrgY + rect.top,
|
||||
rect.right-rect.left, rect.bottom-rect.top );
|
||||
}
|
||||
if (!count) goto END; /* Nothing more to do */
|
||||
|
@ -144,20 +143,20 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
ywidth = pfo->lpX11Trans ? width * pfo->lpX11Trans->b /
|
||||
pfo->lpX11Trans->pixelsize : 0;
|
||||
|
||||
switch( dc->w.textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) )
|
||||
switch( dc->textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) )
|
||||
{
|
||||
case TA_LEFT:
|
||||
if (dc->w.textAlign & TA_UPDATECP) {
|
||||
dc->w.CursPosX = XDPTOLP( dc, x + xwidth );
|
||||
dc->w.CursPosY = YDPTOLP( dc, y - ywidth );
|
||||
if (dc->textAlign & TA_UPDATECP) {
|
||||
dc->CursPosX = XDPTOLP( dc, x + xwidth );
|
||||
dc->CursPosY = YDPTOLP( dc, y - ywidth );
|
||||
}
|
||||
break;
|
||||
case TA_RIGHT:
|
||||
x -= xwidth;
|
||||
y += ywidth;
|
||||
if (dc->w.textAlign & TA_UPDATECP) {
|
||||
dc->w.CursPosX = XDPTOLP( dc, x );
|
||||
dc->w.CursPosY = YDPTOLP( dc, y );
|
||||
if (dc->textAlign & TA_UPDATECP) {
|
||||
dc->CursPosX = XDPTOLP( dc, x );
|
||||
dc->CursPosY = YDPTOLP( dc, y );
|
||||
}
|
||||
break;
|
||||
case TA_CENTER:
|
||||
|
@ -166,7 +165,7 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
break;
|
||||
}
|
||||
|
||||
switch( dc->w.textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE) )
|
||||
switch( dc->textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE) )
|
||||
{
|
||||
case TA_TOP:
|
||||
x -= pfo->lpX11Trans ? ascent * pfo->lpX11Trans->c /
|
||||
|
@ -201,7 +200,7 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
dibUpdateFlag = TRUE;
|
||||
}
|
||||
|
||||
if (dc->w.backgroundMode != TRANSPARENT)
|
||||
if (dc->backgroundMode != TRANSPARENT)
|
||||
{
|
||||
/* If rectangle is opaque and clipped, do nothing */
|
||||
if (!(flags & ETO_CLIPPED) || !(flags & ETO_OPAQUE))
|
||||
|
@ -217,8 +216,8 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
TSXSetForeground( display, physDev->gc,
|
||||
physDev->backgroundPixel );
|
||||
TSXFillRectangle( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + x,
|
||||
dc->w.DCOrgY + y - ascent,
|
||||
dc->DCOrgX + x,
|
||||
dc->DCOrgY + y - ascent,
|
||||
width,
|
||||
ascent + descent );
|
||||
}
|
||||
|
@ -232,11 +231,11 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
TSXSetForeground( display, physDev->gc, physDev->textPixel );
|
||||
if(!rotated)
|
||||
{
|
||||
if (!dc->w.charExtra && !dc->w.breakExtra && !lpDx)
|
||||
if (!dc->charExtra && !dc->breakExtra && !lpDx)
|
||||
{
|
||||
X11DRV_cptable[pfo->fi->cptable].pDrawString(
|
||||
pfo, display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + x, dc->w.DCOrgY + y, str2b, count );
|
||||
dc->DCOrgX + x, dc->DCOrgY + y, str2b, count );
|
||||
}
|
||||
else /* Now the fun begins... */
|
||||
{
|
||||
|
@ -295,9 +294,9 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
|
||||
do
|
||||
{
|
||||
delta += dc->w.charExtra;
|
||||
delta += dc->charExtra;
|
||||
if (str2b[i].byte2 == (char)dfBreakChar)
|
||||
delta += dc->w.breakExtra;
|
||||
delta += dc->breakExtra;
|
||||
pitem->nchars++;
|
||||
} while ((++i < count) && !delta);
|
||||
pitem++;
|
||||
|
@ -306,7 +305,7 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
|
||||
X11DRV_cptable[pfo->fi->cptable].pDrawText( pfo, display,
|
||||
physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + x, dc->w.DCOrgY + y, items, pitem - items );
|
||||
dc->DCOrgX + x, dc->DCOrgY + y, items, pitem - items );
|
||||
HeapFree( GetProcessHeap(), 0, items );
|
||||
}
|
||||
}
|
||||
|
@ -320,9 +319,9 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
{
|
||||
int char_metric_offset = str2b[i].byte2 + (str2b[i].byte1 << 8)
|
||||
- font->min_char_or_byte2;
|
||||
int x_i = IROUND((double) (dc->w.DCOrgX + x) + offset *
|
||||
int x_i = IROUND((double) (dc->DCOrgX + x) + offset *
|
||||
pfo->lpX11Trans->a / pfo->lpX11Trans->pixelsize );
|
||||
int y_i = IROUND((double) (dc->w.DCOrgY + y) - offset *
|
||||
int y_i = IROUND((double) (dc->DCOrgY + y) - offset *
|
||||
pfo->lpX11Trans->b / pfo->lpX11Trans->pixelsize );
|
||||
|
||||
X11DRV_cptable[pfo->fi->cptable].pDrawString(
|
||||
|
@ -336,9 +335,9 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
font->per_char[char_metric_offset].attributes:
|
||||
font->min_bounds.attributes)
|
||||
* pfo->lpX11Trans->pixelsize / 1000.0;
|
||||
offset += dc->w.charExtra;
|
||||
offset += dc->charExtra;
|
||||
if (str2b[i].byte2 == (char)dfBreakChar)
|
||||
offset += dc->w.breakExtra;
|
||||
offset += dc->breakExtra;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -358,8 +357,8 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
TSXSetLineAttributes( display, physDev->gc, lineWidth,
|
||||
LineSolid, CapRound, JoinBevel );
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + x, dc->w.DCOrgY + y + linePos,
|
||||
dc->w.DCOrgX + x + width, dc->w.DCOrgY + y + linePos );
|
||||
dc->DCOrgX + x, dc->DCOrgY + y + linePos,
|
||||
dc->DCOrgX + x + width, dc->DCOrgY + y + linePos );
|
||||
}
|
||||
if (lfStrikeOut)
|
||||
{
|
||||
|
@ -371,8 +370,8 @@ X11DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
|
|||
TSXSetLineAttributes( display, physDev->gc, lineAscent + lineDescent,
|
||||
LineSolid, CapRound, JoinBevel );
|
||||
TSXDrawLine( display, physDev->drawable, physDev->gc,
|
||||
dc->w.DCOrgX + x, dc->w.DCOrgY + y - lineAscent,
|
||||
dc->w.DCOrgX + x + width, dc->w.DCOrgY + y - lineAscent );
|
||||
dc->DCOrgX + x, dc->DCOrgY + y - lineAscent,
|
||||
dc->DCOrgX + x + width, dc->DCOrgY + y - lineAscent );
|
||||
}
|
||||
|
||||
if (flags & ETO_CLIPPED)
|
||||
|
@ -408,8 +407,8 @@ BOOL X11DRV_GetTextExtentPoint( DC *dc, LPCWSTR str, INT count,
|
|||
int info_width;
|
||||
X11DRV_cptable[pfo->fi->cptable].pTextExtents( pfo, p,
|
||||
count, &dir, &ascent, &descent, &info_width );
|
||||
size->cx = abs((info_width + dc->w.breakRem + count *
|
||||
dc->w.charExtra) * dc->wndExtX / dc->vportExtX);
|
||||
size->cx = abs((info_width + dc->breakRem + count *
|
||||
dc->charExtra) * dc->wndExtX / dc->vportExtX);
|
||||
size->cy = abs((pfo->fs->ascent + pfo->fs->descent) *
|
||||
dc->wndExtY / dc->vportExtY);
|
||||
} else {
|
||||
|
@ -425,7 +424,7 @@ BOOL X11DRV_GetTextExtentPoint( DC *dc, LPCWSTR str, INT count,
|
|||
TRACE("x = %f y = %f\n", x, y);
|
||||
x *= pfo->lpX11Trans->pixelsize / 1000.0;
|
||||
y *= pfo->lpX11Trans->pixelsize / 1000.0;
|
||||
size->cx = fabs((x + dc->w.breakRem + count * dc->w.charExtra) *
|
||||
size->cx = fabs((x + dc->breakRem + count * dc->charExtra) *
|
||||
dc->wndExtX / dc->vportExtX);
|
||||
size->cy = fabs(y * dc->wndExtY / dc->vportExtY);
|
||||
}
|
||||
|
|
|
@ -3071,7 +3071,7 @@ HFONT X11DRV_FONT_SelectObject( DC* dc, HFONT hfont, FONTOBJ* font )
|
|||
lf.lfHeight = MIN_FONT_SIZE;
|
||||
}
|
||||
else
|
||||
lf.lfHeight = -(DEF_POINT_SIZE * dc->w.devCaps->logPixelsY + (72>>1)) / 72;
|
||||
lf.lfHeight = -(DEF_POINT_SIZE * dc->devCaps->logPixelsY + (72>>1)) / 72;
|
||||
|
||||
{
|
||||
/* Fixup aliases before passing to RealizeFont */
|
||||
|
@ -3103,8 +3103,8 @@ HFONT X11DRV_FONT_SelectObject( DC* dc, HFONT hfont, FONTOBJ* font )
|
|||
font->logfont.lfCharSet = charsetMatched;
|
||||
}
|
||||
|
||||
hPrevFont = dc->w.hFont;
|
||||
dc->w.hFont = hfont;
|
||||
hPrevFont = dc->hFont;
|
||||
dc->hFont = hfont;
|
||||
|
||||
LeaveCriticalSection( &crtsc_fonts_X11 );
|
||||
|
||||
|
|
31
include/dc.h
31
include/dc.h
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* GDI Device Context function prototypes
|
||||
*
|
||||
* Copyright 1994 Alexandre Julliard
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __WINE_DC_H
|
||||
#define __WINE_DC_H
|
||||
|
||||
#include "gdi.h"
|
||||
|
||||
#define CLIP_INTERSECT 0x0001
|
||||
#define CLIP_EXCLUDE 0x0002
|
||||
#define CLIP_KEEPRGN 0x0004
|
||||
|
||||
extern DC * DC_AllocDC( const DC_FUNCTIONS *funcs );
|
||||
extern DC * DC_GetDCPtr( HDC hdc );
|
||||
extern DC * DC_GetDCUpdate( HDC hdc );
|
||||
extern void DC_InitDC( DC * dc );
|
||||
extern void DC_UpdateXforms( DC * dc );
|
||||
|
||||
|
||||
/* objects/clipping.c */
|
||||
INT CLIPPING_IntersectClipRect( DC * dc, INT left, INT top,
|
||||
INT right, INT bottom, UINT flags );
|
||||
INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
|
||||
INT right, INT bottom, BOOL exclude );
|
||||
extern void CLIPPING_UpdateGCRegion( DC * dc );
|
||||
|
||||
#endif /* __WINE_DC_H */
|
100
include/gdi.h
100
include/gdi.h
|
@ -84,17 +84,28 @@ typedef struct tagDeviceCaps
|
|||
WORD colorRes; /* 108: color resolution */
|
||||
} DeviceCaps;
|
||||
|
||||
typedef struct tagGDI_DRIVER
|
||||
{
|
||||
BOOL (*pInitialize)(void);
|
||||
void (*pFinalize)(void);
|
||||
} GDI_DRIVER;
|
||||
typedef BOOL16 CALLBACK (*DCHOOKPROC)(HDC16,WORD,DWORD,LPARAM);
|
||||
|
||||
extern GDI_DRIVER *GDI_Driver;
|
||||
|
||||
/* Device independent DC information */
|
||||
typedef struct
|
||||
typedef struct tagDC
|
||||
{
|
||||
GDIOBJHDR header;
|
||||
HDC hSelf; /* Handle to this DC */
|
||||
const struct tagDC_FUNCS *funcs; /* DC function table */
|
||||
void *physDev; /* Physical device (driver-specific) */
|
||||
INT saveLevel;
|
||||
DWORD dwHookData;
|
||||
FARPROC16 hookProc; /* the original SEGPTR ... */
|
||||
DCHOOKPROC hookThunk; /* ... and the thunk to call it */
|
||||
|
||||
INT wndOrgX; /* Window origin */
|
||||
INT wndOrgY;
|
||||
INT wndExtX; /* Window extent */
|
||||
INT wndExtY;
|
||||
INT vportOrgX; /* Viewport origin */
|
||||
INT vportOrgY;
|
||||
INT vportExtX; /* Viewport extent */
|
||||
INT vportExtY;
|
||||
|
||||
int flags;
|
||||
const DeviceCaps *devCaps;
|
||||
|
||||
|
@ -107,7 +118,7 @@ typedef struct
|
|||
HBITMAP16 hBitmap;
|
||||
HANDLE16 hDevice;
|
||||
HPALETTE16 hPalette;
|
||||
|
||||
|
||||
GdiPath path;
|
||||
|
||||
WORD ROPmode;
|
||||
|
@ -142,32 +153,6 @@ typedef struct
|
|||
XFORM xformWorld2Vport; /* World-to-viewport transformation */
|
||||
XFORM xformVport2World; /* Inverse of the above transformation */
|
||||
BOOL vport2WorldValid; /* Is xformVport2World valid? */
|
||||
} WIN_DC_INFO;
|
||||
|
||||
|
||||
typedef BOOL16 CALLBACK (*DCHOOKPROC)(HDC16,WORD,DWORD,LPARAM);
|
||||
|
||||
typedef struct tagDC
|
||||
{
|
||||
GDIOBJHDR header;
|
||||
HDC hSelf; /* Handle to this DC */
|
||||
const struct tagDC_FUNCS *funcs; /* DC function table */
|
||||
void *physDev; /* Physical device (driver-specific) */
|
||||
INT saveLevel;
|
||||
DWORD dwHookData;
|
||||
FARPROC16 hookProc; /* the original SEGPTR ... */
|
||||
DCHOOKPROC hookThunk; /* ... and the thunk to call it */
|
||||
|
||||
INT wndOrgX; /* Window origin */
|
||||
INT wndOrgY;
|
||||
INT wndExtX; /* Window extent */
|
||||
INT wndExtY;
|
||||
INT vportOrgX; /* Viewport origin */
|
||||
INT vportOrgY;
|
||||
INT vportExtX; /* Viewport extent */
|
||||
INT vportExtY;
|
||||
|
||||
WIN_DC_INFO w;
|
||||
} DC;
|
||||
|
||||
/* Device functions for the Wine driver interface */
|
||||
|
@ -359,18 +344,18 @@ static inline BOOL WINE_UNUSED INTERNAL_DPTOLP_FLOAT(DC *dc, FLOAT_POINT *point)
|
|||
FLOAT x, y;
|
||||
|
||||
/* Check that the viewport-to-world transformation is valid */
|
||||
if (!dc->w.vport2WorldValid)
|
||||
if (!dc->vport2WorldValid)
|
||||
return FALSE;
|
||||
|
||||
/* Perform the transformation */
|
||||
x = point->x;
|
||||
y = point->y;
|
||||
point->x = x * dc->w.xformVport2World.eM11 +
|
||||
y * dc->w.xformVport2World.eM21 +
|
||||
dc->w.xformVport2World.eDx;
|
||||
point->y = x * dc->w.xformVport2World.eM12 +
|
||||
y * dc->w.xformVport2World.eM22 +
|
||||
dc->w.xformVport2World.eDy;
|
||||
point->x = x * dc->xformVport2World.eM11 +
|
||||
y * dc->xformVport2World.eM21 +
|
||||
dc->xformVport2World.eDx;
|
||||
point->y = x * dc->xformVport2World.eM12 +
|
||||
y * dc->xformVport2World.eM22 +
|
||||
dc->xformVport2World.eDy;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -405,12 +390,12 @@ static inline void WINE_UNUSED INTERNAL_LPTODP_FLOAT(DC *dc, FLOAT_POINT *point)
|
|||
/* Perform the transformation */
|
||||
x = point->x;
|
||||
y = point->y;
|
||||
point->x = x * dc->w.xformWorld2Vport.eM11 +
|
||||
y * dc->w.xformWorld2Vport.eM21 +
|
||||
dc->w.xformWorld2Vport.eDx;
|
||||
point->y = x * dc->w.xformWorld2Vport.eM12 +
|
||||
y * dc->w.xformWorld2Vport.eM22 +
|
||||
dc->w.xformWorld2Vport.eDy;
|
||||
point->x = x * dc->xformWorld2Vport.eM11 +
|
||||
y * dc->xformWorld2Vport.eM21 +
|
||||
dc->xformWorld2Vport.eDx;
|
||||
point->y = x * dc->xformWorld2Vport.eM12 +
|
||||
y * dc->xformWorld2Vport.eM22 +
|
||||
dc->xformWorld2Vport.eDy;
|
||||
}
|
||||
|
||||
/* Performs a world-to-viewport transformation on the specified point (which
|
||||
|
@ -466,5 +451,22 @@ extern BOOL DRIVER_GetDriverName( LPCSTR device, LPSTR driver, DWORD size );
|
|||
|
||||
extern POINT *GDI_Bezier( const POINT *Points, INT count, INT *nPtsOut );
|
||||
|
||||
extern DC * DC_AllocDC( const DC_FUNCTIONS *funcs );
|
||||
extern DC * DC_GetDCPtr( HDC hdc );
|
||||
extern DC * DC_GetDCUpdate( HDC hdc );
|
||||
extern void DC_InitDC( DC * dc );
|
||||
extern void DC_UpdateXforms( DC * dc );
|
||||
|
||||
|
||||
#define CLIP_INTERSECT 0x0001
|
||||
#define CLIP_EXCLUDE 0x0002
|
||||
#define CLIP_KEEPRGN 0x0004
|
||||
|
||||
/* objects/clipping.c */
|
||||
INT CLIPPING_IntersectClipRect( DC * dc, INT left, INT top,
|
||||
INT right, INT bottom, UINT flags );
|
||||
INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
|
||||
INT right, INT bottom, BOOL exclude );
|
||||
extern void CLIPPING_UpdateGCRegion( DC * dc );
|
||||
|
||||
#endif /* __WINE_GDI_H */
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "wine/winbase16.h"
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
#include "bitmap.h"
|
||||
#include "heap.h"
|
||||
#include "global.h"
|
||||
|
@ -185,7 +184,7 @@ HBITMAP WINAPI CreateCompatibleBitmap( HDC hdc, INT width, INT height)
|
|||
if (!width || !height)
|
||||
hbmpRet = CreateBitmap( 1, 1, 1, 1, NULL );
|
||||
else
|
||||
hbmpRet = CreateBitmap( width, height, 1, dc->w.bitsPerPixel, NULL );
|
||||
hbmpRet = CreateBitmap( width, height, 1, dc->bitsPerPixel, NULL );
|
||||
if(dc->funcs->pCreateBitmap)
|
||||
dc->funcs->pCreateBitmap( hbmpRet );
|
||||
}
|
||||
|
|
|
@ -313,11 +313,11 @@ HBRUSH WINAPI CreateSolidBrush( COLORREF color )
|
|||
DWORD WINAPI SetBrushOrg16( HDC16 hdc, INT16 x, INT16 y )
|
||||
{
|
||||
DWORD retval;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
retval = dc->w.brushOrgX | (dc->w.brushOrgY << 16);
|
||||
dc->w.brushOrgX = x;
|
||||
dc->w.brushOrgY = y;
|
||||
retval = dc->brushOrgX | (dc->brushOrgY << 16);
|
||||
dc->brushOrgX = x;
|
||||
dc->brushOrgY = y;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return retval;
|
||||
}
|
||||
|
@ -328,16 +328,16 @@ DWORD WINAPI SetBrushOrg16( HDC16 hdc, INT16 x, INT16 y )
|
|||
*/
|
||||
BOOL WINAPI SetBrushOrgEx( HDC hdc, INT x, INT y, LPPOINT oldorg )
|
||||
{
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
if (!dc) return FALSE;
|
||||
if (oldorg)
|
||||
{
|
||||
oldorg->x = dc->w.brushOrgX;
|
||||
oldorg->y = dc->w.brushOrgY;
|
||||
oldorg->x = dc->brushOrgX;
|
||||
oldorg->y = dc->brushOrgY;
|
||||
}
|
||||
dc->w.brushOrgX = x;
|
||||
dc->w.brushOrgY = y;
|
||||
dc->brushOrgX = x;
|
||||
dc->brushOrgY = y;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "dc.h"
|
||||
#include "region.h"
|
||||
#include "debugtools.h"
|
||||
#include "windef.h"
|
||||
#include "wingdi.h"
|
||||
#include "wine/winuser16.h"
|
||||
#include "gdi.h"
|
||||
#include "region.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(clipping);
|
||||
|
||||
|
@ -22,20 +22,20 @@ DEFAULT_DEBUG_CHANNEL(clipping);
|
|||
*/
|
||||
void CLIPPING_UpdateGCRegion( DC * dc )
|
||||
{
|
||||
if (!dc->w.hGCClipRgn) dc->w.hGCClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
if (!dc->hGCClipRgn) dc->hGCClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
|
||||
if (!dc->w.hVisRgn)
|
||||
if (!dc->hVisRgn)
|
||||
{
|
||||
ERR("hVisRgn is zero. Please report this.\n" );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (dc->w.flags & DC_DIRTY) ERR( "DC is dirty. Please report this.\n" );
|
||||
if (dc->flags & DC_DIRTY) ERR( "DC is dirty. Please report this.\n" );
|
||||
|
||||
if (!dc->w.hClipRgn)
|
||||
CombineRgn( dc->w.hGCClipRgn, dc->w.hVisRgn, 0, RGN_COPY );
|
||||
if (!dc->hClipRgn)
|
||||
CombineRgn( dc->hGCClipRgn, dc->hVisRgn, 0, RGN_COPY );
|
||||
else
|
||||
CombineRgn(dc->w.hGCClipRgn, dc->w.hClipRgn, dc->w.hVisRgn, RGN_AND);
|
||||
CombineRgn(dc->hGCClipRgn, dc->hClipRgn, dc->hVisRgn, RGN_AND);
|
||||
if (dc->funcs->pSetDeviceClipping) dc->funcs->pSetDeviceClipping( dc );
|
||||
}
|
||||
|
||||
|
@ -80,8 +80,8 @@ INT WINAPI ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT fnMode )
|
|||
{
|
||||
if (fnMode == RGN_COPY)
|
||||
{
|
||||
if (dc->w.hClipRgn) DeleteObject16( dc->w.hClipRgn );
|
||||
dc->w.hClipRgn = 0;
|
||||
if (dc->hClipRgn) DeleteObject16( dc->hClipRgn );
|
||||
dc->hClipRgn = 0;
|
||||
retval = SIMPLEREGION; /* Clip region == whole DC */
|
||||
}
|
||||
else
|
||||
|
@ -93,19 +93,19 @@ INT WINAPI ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT fnMode )
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!dc->w.hClipRgn)
|
||||
if (!dc->hClipRgn)
|
||||
{
|
||||
RECT rect;
|
||||
GetRgnBox( dc->w.hVisRgn, &rect );
|
||||
dc->w.hClipRgn = CreateRectRgnIndirect( &rect );
|
||||
GetRgnBox( dc->hVisRgn, &rect );
|
||||
dc->hClipRgn = CreateRectRgnIndirect( &rect );
|
||||
}
|
||||
|
||||
OffsetRgn( dc->w.hClipRgn, -dc->w.DCOrgX, -dc->w.DCOrgY );
|
||||
OffsetRgn( dc->hClipRgn, -dc->DCOrgX, -dc->DCOrgY );
|
||||
if(fnMode == RGN_COPY)
|
||||
retval = CombineRgn( dc->w.hClipRgn, hrgn, 0, fnMode );
|
||||
retval = CombineRgn( dc->hClipRgn, hrgn, 0, fnMode );
|
||||
else
|
||||
retval = CombineRgn( dc->w.hClipRgn, dc->w.hClipRgn, hrgn, fnMode);
|
||||
OffsetRgn( dc->w.hClipRgn, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
retval = CombineRgn( dc->hClipRgn, dc->hClipRgn, hrgn, fnMode);
|
||||
OffsetRgn( dc->hClipRgn, dc->DCOrgX, dc->DCOrgY );
|
||||
}
|
||||
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
|
@ -126,9 +126,9 @@ INT16 WINAPI SelectVisRgn16( HDC16 hdc, HRGN16 hrgn )
|
|||
|
||||
TRACE("%04x %04x\n", hdc, hrgn );
|
||||
|
||||
dc->w.flags &= ~DC_DIRTY;
|
||||
dc->flags &= ~DC_DIRTY;
|
||||
|
||||
retval = CombineRgn16( dc->w.hVisRgn, hrgn, 0, RGN_COPY );
|
||||
retval = CombineRgn16( dc->hVisRgn, hrgn, 0, RGN_COPY );
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return retval;
|
||||
|
@ -157,8 +157,8 @@ INT WINAPI OffsetClipRgn( HDC hdc, INT x, INT y )
|
|||
|
||||
if(dc->funcs->pOffsetClipRgn)
|
||||
ret = dc->funcs->pOffsetClipRgn( dc, x, y );
|
||||
else if (dc->w.hClipRgn) {
|
||||
ret = OffsetRgn( dc->w.hClipRgn, XLSTODS(dc,x), YLSTODS(dc,y));
|
||||
else if (dc->hClipRgn) {
|
||||
ret = OffsetRgn( dc->hClipRgn, XLSTODS(dc,x), YLSTODS(dc,y));
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -175,7 +175,7 @@ INT16 WINAPI OffsetVisRgn16( HDC16 hdc, INT16 x, INT16 y )
|
|||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return ERROR;
|
||||
TRACE("%04x %d,%d\n", hdc, x, y );
|
||||
retval = OffsetRgn( dc->w.hVisRgn, x, y );
|
||||
retval = OffsetRgn( dc->hVisRgn, x, y );
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return retval;
|
||||
|
@ -195,34 +195,34 @@ INT CLIPPING_IntersectClipRect( DC * dc, INT left, INT top,
|
|||
HRGN newRgn;
|
||||
INT ret;
|
||||
|
||||
left += dc->w.DCOrgX;
|
||||
right += dc->w.DCOrgX;
|
||||
top += dc->w.DCOrgY;
|
||||
bottom += dc->w.DCOrgY;
|
||||
left += dc->DCOrgX;
|
||||
right += dc->DCOrgX;
|
||||
top += dc->DCOrgY;
|
||||
bottom += dc->DCOrgY;
|
||||
|
||||
if (!(newRgn = CreateRectRgn( left, top, right, bottom ))) return ERROR;
|
||||
if (!dc->w.hClipRgn)
|
||||
if (!dc->hClipRgn)
|
||||
{
|
||||
if( flags & CLIP_INTERSECT )
|
||||
{
|
||||
dc->w.hClipRgn = newRgn;
|
||||
dc->hClipRgn = newRgn;
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
return SIMPLEREGION;
|
||||
}
|
||||
else if( flags & CLIP_EXCLUDE )
|
||||
{
|
||||
dc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( dc->w.hClipRgn, dc->w.hVisRgn, 0, RGN_COPY );
|
||||
dc->hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( dc->hClipRgn, dc->hVisRgn, 0, RGN_COPY );
|
||||
}
|
||||
else WARN("No hClipRgn and flags are %x\n",flags);
|
||||
}
|
||||
|
||||
ret = CombineRgn( newRgn, dc->w.hClipRgn, newRgn,
|
||||
ret = CombineRgn( newRgn, dc->hClipRgn, newRgn,
|
||||
(flags & CLIP_EXCLUDE) ? RGN_DIFF : RGN_AND );
|
||||
if (ret != ERROR)
|
||||
{
|
||||
if (!(flags & CLIP_KEEPRGN)) DeleteObject( dc->w.hClipRgn );
|
||||
dc->w.hClipRgn = newRgn;
|
||||
if (!(flags & CLIP_KEEPRGN)) DeleteObject( dc->hClipRgn );
|
||||
dc->hClipRgn = newRgn;
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
}
|
||||
else DeleteObject( newRgn );
|
||||
|
@ -318,10 +318,10 @@ INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
|
|||
HRGN tempRgn, newRgn;
|
||||
INT ret;
|
||||
|
||||
left += dc->w.DCOrgX;
|
||||
right += dc->w.DCOrgX;
|
||||
top += dc->w.DCOrgY;
|
||||
bottom += dc->w.DCOrgY;
|
||||
left += dc->DCOrgX;
|
||||
right += dc->DCOrgX;
|
||||
top += dc->DCOrgY;
|
||||
bottom += dc->DCOrgY;
|
||||
|
||||
if (!(newRgn = CreateRectRgn( 0, 0, 0, 0 ))) return ERROR;
|
||||
if (!(tempRgn = CreateRectRgn( left, top, right, bottom )))
|
||||
|
@ -329,7 +329,7 @@ INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
|
|||
DeleteObject( newRgn );
|
||||
return ERROR;
|
||||
}
|
||||
ret = CombineRgn( newRgn, dc->w.hVisRgn, tempRgn,
|
||||
ret = CombineRgn( newRgn, dc->hVisRgn, tempRgn,
|
||||
exclude ? RGN_DIFF : RGN_AND );
|
||||
DeleteObject( tempRgn );
|
||||
|
||||
|
@ -338,16 +338,16 @@ INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
|
|||
RGNOBJ *newObj = (RGNOBJ*)GDI_GetObjPtr( newRgn, REGION_MAGIC);
|
||||
if (newObj)
|
||||
{
|
||||
RGNOBJ *prevObj = (RGNOBJ*)GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC);
|
||||
RGNOBJ *prevObj = (RGNOBJ*)GDI_GetObjPtr( dc->hVisRgn, REGION_MAGIC);
|
||||
if (prevObj)
|
||||
{
|
||||
newObj->header.hNext = prevObj->header.hNext;
|
||||
GDI_ReleaseObj( dc->w.hVisRgn );
|
||||
GDI_ReleaseObj( dc->hVisRgn );
|
||||
}
|
||||
GDI_ReleaseObj( newRgn );
|
||||
}
|
||||
DeleteObject( dc->w.hVisRgn );
|
||||
dc->w.hVisRgn = newRgn;
|
||||
DeleteObject( dc->hVisRgn );
|
||||
dc->hVisRgn = newRgn;
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
}
|
||||
else DeleteObject( newRgn );
|
||||
|
@ -385,7 +385,7 @@ INT16 WINAPI IntersectVisRect16( HDC16 hdc, INT16 left, INT16 top,
|
|||
INT16 right, INT16 bottom )
|
||||
{
|
||||
INT16 ret;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return ERROR;
|
||||
|
||||
left = XLPTODP( dc, left );
|
||||
|
@ -420,10 +420,10 @@ BOOL WINAPI PtVisible( HDC hdc, INT x, INT y )
|
|||
|
||||
TRACE("%04x %d,%d\n", hdc, x, y );
|
||||
if (!dc) return FALSE;
|
||||
if (dc->w.hGCClipRgn)
|
||||
if (dc->hGCClipRgn)
|
||||
{
|
||||
ret = PtInRegion( dc->w.hGCClipRgn, XLPTODP(dc,x) + dc->w.DCOrgX,
|
||||
YLPTODP(dc,y) + dc->w.DCOrgY );
|
||||
ret = PtInRegion( dc->hGCClipRgn, XLPTODP(dc,x) + dc->DCOrgX,
|
||||
YLPTODP(dc,y) + dc->DCOrgY );
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -437,20 +437,20 @@ BOOL16 WINAPI RectVisible16( HDC16 hdc, const RECT16* rect )
|
|||
{
|
||||
BOOL ret = FALSE;
|
||||
RECT16 tmpRect;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCUpdate( hdc );
|
||||
if (!dc) return FALSE;
|
||||
TRACE("%04x %d,%dx%d,%d\n",
|
||||
hdc, rect->left, rect->top, rect->right, rect->bottom );
|
||||
if (dc->w.hGCClipRgn)
|
||||
if (dc->hGCClipRgn)
|
||||
{
|
||||
/* copy rectangle to avoid overwriting by LPtoDP */
|
||||
tmpRect = *rect;
|
||||
LPtoDP16( hdc, (LPPOINT16)&tmpRect, 2 );
|
||||
tmpRect.left += dc->w.DCOrgX;
|
||||
tmpRect.right += dc->w.DCOrgX;
|
||||
tmpRect.top += dc->w.DCOrgY;
|
||||
tmpRect.bottom += dc->w.DCOrgY;
|
||||
ret = RectInRegion16( dc->w.hGCClipRgn, &tmpRect );
|
||||
tmpRect.left += dc->DCOrgX;
|
||||
tmpRect.right += dc->DCOrgX;
|
||||
tmpRect.top += dc->DCOrgY;
|
||||
tmpRect.bottom += dc->DCOrgY;
|
||||
ret = RectInRegion16( dc->hGCClipRgn, &tmpRect );
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -474,13 +474,13 @@ BOOL WINAPI RectVisible( HDC hdc, const RECT* rect )
|
|||
INT16 WINAPI GetClipBox16( HDC16 hdc, LPRECT16 rect )
|
||||
{
|
||||
int ret;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return ERROR;
|
||||
ret = GetRgnBox16( dc->w.hGCClipRgn, rect );
|
||||
rect->left -= dc->w.DCOrgX;
|
||||
rect->right -= dc->w.DCOrgX;
|
||||
rect->top -= dc->w.DCOrgY;
|
||||
rect->bottom -= dc->w.DCOrgY;
|
||||
ret = GetRgnBox16( dc->hGCClipRgn, rect );
|
||||
rect->left -= dc->DCOrgX;
|
||||
rect->right -= dc->DCOrgX;
|
||||
rect->top -= dc->DCOrgY;
|
||||
rect->bottom -= dc->DCOrgY;
|
||||
DPtoLP16( hdc, (LPPOINT16)rect, 2 );
|
||||
TRACE("%d,%d-%d,%d\n", rect->left,rect->top,rect->right,rect->bottom );
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -494,13 +494,13 @@ INT16 WINAPI GetClipBox16( HDC16 hdc, LPRECT16 rect )
|
|||
INT WINAPI GetClipBox( HDC hdc, LPRECT rect )
|
||||
{
|
||||
INT ret;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return ERROR;
|
||||
ret = GetRgnBox( dc->w.hGCClipRgn, rect );
|
||||
rect->left -= dc->w.DCOrgX;
|
||||
rect->right -= dc->w.DCOrgX;
|
||||
rect->top -= dc->w.DCOrgY;
|
||||
rect->bottom -= dc->w.DCOrgY;
|
||||
ret = GetRgnBox( dc->hGCClipRgn, rect );
|
||||
rect->left -= dc->DCOrgX;
|
||||
rect->right -= dc->DCOrgX;
|
||||
rect->top -= dc->DCOrgY;
|
||||
rect->bottom -= dc->DCOrgY;
|
||||
DPtoLP( hdc, (LPPOINT)rect, 2 );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -514,16 +514,16 @@ INT WINAPI GetClipRgn( HDC hdc, HRGN hRgn )
|
|||
{
|
||||
INT ret = -1;
|
||||
DC * dc;
|
||||
if (hRgn && (dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC )))
|
||||
if (hRgn && (dc = DC_GetDCPtr( hdc )))
|
||||
{
|
||||
if( dc->w.hClipRgn )
|
||||
if( dc->hClipRgn )
|
||||
{
|
||||
/* this assumes that dc->w.hClipRgn is in coordinates
|
||||
/* this assumes that dc->hClipRgn is in coordinates
|
||||
relative to the device (not DC origin) */
|
||||
|
||||
if( CombineRgn(hRgn, dc->w.hClipRgn, 0, RGN_COPY) != ERROR )
|
||||
if( CombineRgn(hRgn, dc->hClipRgn, 0, RGN_COPY) != ERROR )
|
||||
{
|
||||
OffsetRgn( hRgn, -dc->w.DCOrgX, -dc->w.DCOrgY );
|
||||
OffsetRgn( hRgn, -dc->DCOrgX, -dc->DCOrgY );
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
|
@ -545,29 +545,29 @@ HRGN16 WINAPI SaveVisRgn16( HDC16 hdc )
|
|||
if (!dc) return 0;
|
||||
TRACE("%04x\n", hdc );
|
||||
|
||||
if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC )))
|
||||
if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->hVisRgn, REGION_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
}
|
||||
if (!(copy = CreateRectRgn( 0, 0, 0, 0 )))
|
||||
{
|
||||
GDI_ReleaseObj( dc->w.hVisRgn );
|
||||
GDI_ReleaseObj( dc->hVisRgn );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
}
|
||||
CombineRgn( copy, dc->w.hVisRgn, 0, RGN_COPY );
|
||||
CombineRgn( copy, dc->hVisRgn, 0, RGN_COPY );
|
||||
if (!(copyObj = (RGNOBJ *) GDI_GetObjPtr( copy, REGION_MAGIC )))
|
||||
{
|
||||
DeleteObject( copy );
|
||||
GDI_ReleaseObj( dc->w.hVisRgn );
|
||||
GDI_ReleaseObj( dc->hVisRgn );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
}
|
||||
copyObj->header.hNext = obj->header.hNext;
|
||||
obj->header.hNext = copy;
|
||||
GDI_ReleaseObj( copy );
|
||||
GDI_ReleaseObj( dc->w.hVisRgn );
|
||||
GDI_ReleaseObj( dc->hVisRgn );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return copy;
|
||||
}
|
||||
|
@ -580,21 +580,21 @@ INT16 WINAPI RestoreVisRgn16( HDC16 hdc )
|
|||
{
|
||||
HRGN saved;
|
||||
RGNOBJ *obj, *savedObj;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
INT16 ret = ERROR;
|
||||
|
||||
if (!dc) return ERROR;
|
||||
if (!dc->w.hVisRgn) goto done;
|
||||
if (!dc->hVisRgn) goto done;
|
||||
TRACE("%04x\n", hdc );
|
||||
if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC ))) goto done;
|
||||
if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->hVisRgn, REGION_MAGIC ))) goto done;
|
||||
|
||||
saved = obj->header.hNext;
|
||||
GDI_ReleaseObj( dc->w.hVisRgn );
|
||||
GDI_ReleaseObj( dc->hVisRgn );
|
||||
if (!saved || !(savedObj = (RGNOBJ *) GDI_GetObjPtr( saved, REGION_MAGIC ))) goto done;
|
||||
|
||||
DeleteObject( dc->w.hVisRgn );
|
||||
dc->w.hVisRgn = saved;
|
||||
dc->w.flags &= ~DC_DIRTY;
|
||||
DeleteObject( dc->hVisRgn );
|
||||
dc->hVisRgn = saved;
|
||||
dc->flags &= ~DC_DIRTY;
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
ret = savedObj->rgn->type; /* FIXME */
|
||||
GDI_ReleaseObj( saved );
|
||||
|
|
543
objects/dc.c
543
objects/dc.c
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
|
@ -22,61 +21,6 @@
|
|||
|
||||
DEFAULT_DEBUG_CHANNEL(dc);
|
||||
|
||||
/***********************************************************************
|
||||
* DC_Init_DC_INFO
|
||||
*
|
||||
* Fill the WIN_DC_INFO structure.
|
||||
*/
|
||||
static void DC_Init_DC_INFO( WIN_DC_INFO *win_dc_info )
|
||||
{
|
||||
win_dc_info->flags = 0;
|
||||
win_dc_info->devCaps = NULL;
|
||||
win_dc_info->hClipRgn = 0;
|
||||
win_dc_info->hVisRgn = 0;
|
||||
win_dc_info->hGCClipRgn = 0;
|
||||
win_dc_info->hPen = GetStockObject( BLACK_PEN );
|
||||
win_dc_info->hBrush = GetStockObject( WHITE_BRUSH );
|
||||
win_dc_info->hFont = GetStockObject( SYSTEM_FONT );
|
||||
win_dc_info->hBitmap = 0;
|
||||
win_dc_info->hDevice = 0;
|
||||
win_dc_info->hPalette = GetStockObject( DEFAULT_PALETTE );
|
||||
win_dc_info->ROPmode = R2_COPYPEN;
|
||||
win_dc_info->polyFillMode = ALTERNATE;
|
||||
win_dc_info->stretchBltMode = BLACKONWHITE;
|
||||
win_dc_info->relAbsMode = ABSOLUTE;
|
||||
win_dc_info->backgroundMode = OPAQUE;
|
||||
win_dc_info->backgroundColor = RGB( 255, 255, 255 );
|
||||
win_dc_info->textColor = RGB( 0, 0, 0 );
|
||||
win_dc_info->brushOrgX = 0;
|
||||
win_dc_info->brushOrgY = 0;
|
||||
win_dc_info->textAlign = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
||||
win_dc_info->charExtra = 0;
|
||||
win_dc_info->breakTotalExtra = 0;
|
||||
win_dc_info->breakCount = 0;
|
||||
win_dc_info->breakExtra = 0;
|
||||
win_dc_info->breakRem = 0;
|
||||
win_dc_info->bitsPerPixel = 1;
|
||||
win_dc_info->MapMode = MM_TEXT;
|
||||
win_dc_info->GraphicsMode = GM_COMPATIBLE;
|
||||
win_dc_info->DCOrgX = 0;
|
||||
win_dc_info->DCOrgY = 0;
|
||||
win_dc_info->pAbortProc = NULL;
|
||||
win_dc_info->CursPosX = 0;
|
||||
win_dc_info->CursPosY = 0;
|
||||
win_dc_info->ArcDirection = AD_COUNTERCLOCKWISE;
|
||||
win_dc_info->xformWorld2Wnd.eM11 = 1.0f;
|
||||
win_dc_info->xformWorld2Wnd.eM12 = 0.0f;
|
||||
win_dc_info->xformWorld2Wnd.eM21 = 0.0f;
|
||||
win_dc_info->xformWorld2Wnd.eM22 = 1.0f;
|
||||
win_dc_info->xformWorld2Wnd.eDx = 0.0f;
|
||||
win_dc_info->xformWorld2Wnd.eDy = 0.0f;
|
||||
win_dc_info->xformWorld2Vport = win_dc_info->xformWorld2Wnd;
|
||||
win_dc_info->xformVport2World = win_dc_info->xformWorld2Wnd;
|
||||
win_dc_info->vport2WorldValid = TRUE;
|
||||
|
||||
PATH_InitGdiPath(&win_dc_info->path);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* DC_AllocDC
|
||||
|
@ -86,25 +30,72 @@ DC *DC_AllocDC( const DC_FUNCTIONS *funcs )
|
|||
HDC hdc;
|
||||
DC *dc;
|
||||
|
||||
if (!(dc = GDI_AllocObject( sizeof(DC), DC_MAGIC, &hdc ))) return NULL;
|
||||
dc->hSelf = hdc;
|
||||
dc->funcs = funcs;
|
||||
dc->physDev = NULL;
|
||||
dc->saveLevel = 0;
|
||||
dc->dwHookData = 0L;
|
||||
dc->hookProc = NULL;
|
||||
dc->hookThunk = NULL;
|
||||
dc->wndOrgX = 0;
|
||||
dc->wndOrgY = 0;
|
||||
dc->wndExtX = 1;
|
||||
dc->wndExtY = 1;
|
||||
dc->vportOrgX = 0;
|
||||
dc->vportOrgY = 0;
|
||||
dc->vportExtX = 1;
|
||||
dc->vportExtY = 1;
|
||||
|
||||
DC_Init_DC_INFO( &dc->w );
|
||||
if (!(dc = GDI_AllocObject( sizeof(*dc), DC_MAGIC, &hdc ))) return NULL;
|
||||
|
||||
dc->hSelf = hdc;
|
||||
dc->funcs = funcs;
|
||||
dc->physDev = NULL;
|
||||
dc->saveLevel = 0;
|
||||
dc->dwHookData = 0;
|
||||
dc->hookProc = NULL;
|
||||
dc->hookThunk = NULL;
|
||||
dc->wndOrgX = 0;
|
||||
dc->wndOrgY = 0;
|
||||
dc->wndExtX = 1;
|
||||
dc->wndExtY = 1;
|
||||
dc->vportOrgX = 0;
|
||||
dc->vportOrgY = 0;
|
||||
dc->vportExtX = 1;
|
||||
dc->vportExtY = 1;
|
||||
dc->flags = 0;
|
||||
dc->devCaps = NULL;
|
||||
dc->hClipRgn = 0;
|
||||
dc->hVisRgn = 0;
|
||||
dc->hGCClipRgn = 0;
|
||||
dc->hPen = GetStockObject( BLACK_PEN );
|
||||
dc->hBrush = GetStockObject( WHITE_BRUSH );
|
||||
dc->hFont = GetStockObject( SYSTEM_FONT );
|
||||
dc->hBitmap = 0;
|
||||
dc->hDevice = 0;
|
||||
dc->hPalette = GetStockObject( DEFAULT_PALETTE );
|
||||
dc->ROPmode = R2_COPYPEN;
|
||||
dc->polyFillMode = ALTERNATE;
|
||||
dc->stretchBltMode = BLACKONWHITE;
|
||||
dc->relAbsMode = ABSOLUTE;
|
||||
dc->backgroundMode = OPAQUE;
|
||||
dc->backgroundColor = RGB( 255, 255, 255 );
|
||||
dc->textColor = RGB( 0, 0, 0 );
|
||||
dc->brushOrgX = 0;
|
||||
dc->brushOrgY = 0;
|
||||
dc->textAlign = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
||||
dc->charExtra = 0;
|
||||
dc->breakTotalExtra = 0;
|
||||
dc->breakCount = 0;
|
||||
dc->breakExtra = 0;
|
||||
dc->breakRem = 0;
|
||||
dc->totalExtent.left = 0;
|
||||
dc->totalExtent.top = 0;
|
||||
dc->totalExtent.right = 0;
|
||||
dc->totalExtent.bottom = 0;
|
||||
dc->bitsPerPixel = 1;
|
||||
dc->MapMode = MM_TEXT;
|
||||
dc->GraphicsMode = GM_COMPATIBLE;
|
||||
dc->DCOrgX = 0;
|
||||
dc->DCOrgY = 0;
|
||||
dc->pAbortProc = NULL;
|
||||
dc->CursPosX = 0;
|
||||
dc->CursPosY = 0;
|
||||
dc->ArcDirection = AD_COUNTERCLOCKWISE;
|
||||
dc->xformWorld2Wnd.eM11 = 1.0f;
|
||||
dc->xformWorld2Wnd.eM12 = 0.0f;
|
||||
dc->xformWorld2Wnd.eM21 = 0.0f;
|
||||
dc->xformWorld2Wnd.eM22 = 1.0f;
|
||||
dc->xformWorld2Wnd.eDx = 0.0f;
|
||||
dc->xformWorld2Wnd.eDy = 0.0f;
|
||||
dc->xformWorld2Vport = dc->xformWorld2Wnd;
|
||||
dc->xformVport2World = dc->xformWorld2Wnd;
|
||||
dc->vport2WorldValid = TRUE;
|
||||
PATH_InitGdiPath(&dc->path);
|
||||
return dc;
|
||||
}
|
||||
|
||||
|
@ -137,10 +128,10 @@ DC *DC_GetDCUpdate( HDC hdc )
|
|||
{
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return NULL;
|
||||
while (dc->w.flags & DC_DIRTY)
|
||||
while (dc->flags & DC_DIRTY)
|
||||
{
|
||||
dc->w.flags &= ~DC_DIRTY;
|
||||
if (!(dc->w.flags & (DC_SAVED | DC_MEMORY)))
|
||||
dc->flags &= ~DC_DIRTY;
|
||||
if (!(dc->flags & (DC_SAVED | DC_MEMORY)))
|
||||
{
|
||||
DCHOOKPROC proc = dc->hookThunk;
|
||||
if (proc)
|
||||
|
@ -164,11 +155,11 @@ DC *DC_GetDCUpdate( HDC hdc )
|
|||
void DC_InitDC( DC* dc )
|
||||
{
|
||||
RealizeDefaultPalette16( dc->hSelf );
|
||||
SetTextColor( dc->hSelf, dc->w.textColor );
|
||||
SetBkColor( dc->hSelf, dc->w.backgroundColor );
|
||||
SelectObject( dc->hSelf, dc->w.hPen );
|
||||
SelectObject( dc->hSelf, dc->w.hBrush );
|
||||
SelectObject( dc->hSelf, dc->w.hFont );
|
||||
SetTextColor( dc->hSelf, dc->textColor );
|
||||
SetBkColor( dc->hSelf, dc->backgroundColor );
|
||||
SelectObject( dc->hSelf, dc->hPen );
|
||||
SelectObject( dc->hSelf, dc->hBrush );
|
||||
SelectObject( dc->hSelf, dc->hFont );
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
}
|
||||
|
||||
|
@ -230,12 +221,12 @@ void DC_UpdateXforms( DC *dc )
|
|||
scaleY * (FLOAT)dc->wndOrgY;
|
||||
|
||||
/* Combine with the world transformation */
|
||||
CombineTransform( &dc->w.xformWorld2Vport, &dc->w.xformWorld2Wnd,
|
||||
CombineTransform( &dc->xformWorld2Vport, &dc->xformWorld2Wnd,
|
||||
&xformWnd2Vport );
|
||||
|
||||
/* Create inverse of world-to-viewport transformation */
|
||||
dc->w.vport2WorldValid = DC_InvertXform( &dc->w.xformWorld2Vport,
|
||||
&dc->w.xformVport2World );
|
||||
dc->vport2WorldValid = DC_InvertXform( &dc->xformWorld2Vport,
|
||||
&dc->xformVport2World );
|
||||
}
|
||||
|
||||
|
||||
|
@ -255,72 +246,73 @@ HDC16 WINAPI GetDCState16( HDC16 hdc )
|
|||
}
|
||||
TRACE("(%04x): returning %04x\n", hdc, handle );
|
||||
|
||||
newdc->w.flags = dc->w.flags | DC_SAVED;
|
||||
newdc->w.devCaps = dc->w.devCaps;
|
||||
newdc->w.hPen = dc->w.hPen;
|
||||
newdc->w.hBrush = dc->w.hBrush;
|
||||
newdc->w.hFont = dc->w.hFont;
|
||||
newdc->w.hBitmap = dc->w.hBitmap;
|
||||
newdc->w.hDevice = dc->w.hDevice;
|
||||
newdc->w.hPalette = dc->w.hPalette;
|
||||
newdc->w.totalExtent = dc->w.totalExtent;
|
||||
newdc->w.bitsPerPixel = dc->w.bitsPerPixel;
|
||||
newdc->w.ROPmode = dc->w.ROPmode;
|
||||
newdc->w.polyFillMode = dc->w.polyFillMode;
|
||||
newdc->w.stretchBltMode = dc->w.stretchBltMode;
|
||||
newdc->w.relAbsMode = dc->w.relAbsMode;
|
||||
newdc->w.backgroundMode = dc->w.backgroundMode;
|
||||
newdc->w.backgroundColor = dc->w.backgroundColor;
|
||||
newdc->w.textColor = dc->w.textColor;
|
||||
newdc->w.brushOrgX = dc->w.brushOrgX;
|
||||
newdc->w.brushOrgY = dc->w.brushOrgY;
|
||||
newdc->w.textAlign = dc->w.textAlign;
|
||||
newdc->w.charExtra = dc->w.charExtra;
|
||||
newdc->w.breakTotalExtra = dc->w.breakTotalExtra;
|
||||
newdc->w.breakCount = dc->w.breakCount;
|
||||
newdc->w.breakExtra = dc->w.breakExtra;
|
||||
newdc->w.breakRem = dc->w.breakRem;
|
||||
newdc->w.MapMode = dc->w.MapMode;
|
||||
newdc->w.GraphicsMode = dc->w.GraphicsMode;
|
||||
newdc->flags = dc->flags | DC_SAVED;
|
||||
newdc->devCaps = dc->devCaps;
|
||||
newdc->hPen = dc->hPen;
|
||||
newdc->hBrush = dc->hBrush;
|
||||
newdc->hFont = dc->hFont;
|
||||
newdc->hBitmap = dc->hBitmap;
|
||||
newdc->hDevice = dc->hDevice;
|
||||
newdc->hPalette = dc->hPalette;
|
||||
newdc->totalExtent = dc->totalExtent;
|
||||
newdc->bitsPerPixel = dc->bitsPerPixel;
|
||||
newdc->ROPmode = dc->ROPmode;
|
||||
newdc->polyFillMode = dc->polyFillMode;
|
||||
newdc->stretchBltMode = dc->stretchBltMode;
|
||||
newdc->relAbsMode = dc->relAbsMode;
|
||||
newdc->backgroundMode = dc->backgroundMode;
|
||||
newdc->backgroundColor = dc->backgroundColor;
|
||||
newdc->textColor = dc->textColor;
|
||||
newdc->brushOrgX = dc->brushOrgX;
|
||||
newdc->brushOrgY = dc->brushOrgY;
|
||||
newdc->textAlign = dc->textAlign;
|
||||
newdc->charExtra = dc->charExtra;
|
||||
newdc->breakTotalExtra = dc->breakTotalExtra;
|
||||
newdc->breakCount = dc->breakCount;
|
||||
newdc->breakExtra = dc->breakExtra;
|
||||
newdc->breakRem = dc->breakRem;
|
||||
newdc->MapMode = dc->MapMode;
|
||||
newdc->GraphicsMode = dc->GraphicsMode;
|
||||
#if 0
|
||||
/* Apparently, the DC origin is not changed by [GS]etDCState */
|
||||
newdc->w.DCOrgX = dc->w.DCOrgX;
|
||||
newdc->w.DCOrgY = dc->w.DCOrgY;
|
||||
newdc->DCOrgX = dc->DCOrgX;
|
||||
newdc->DCOrgY = dc->DCOrgY;
|
||||
#endif
|
||||
newdc->w.CursPosX = dc->w.CursPosX;
|
||||
newdc->w.CursPosY = dc->w.CursPosY;
|
||||
newdc->w.ArcDirection = dc->w.ArcDirection;
|
||||
newdc->w.xformWorld2Wnd = dc->w.xformWorld2Wnd;
|
||||
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
|
||||
newdc->w.xformVport2World = dc->w.xformVport2World;
|
||||
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
|
||||
newdc->wndOrgX = dc->wndOrgX;
|
||||
newdc->wndOrgY = dc->wndOrgY;
|
||||
newdc->wndExtX = dc->wndExtX;
|
||||
newdc->wndExtY = dc->wndExtY;
|
||||
newdc->vportOrgX = dc->vportOrgX;
|
||||
newdc->vportOrgY = dc->vportOrgY;
|
||||
newdc->vportExtX = dc->vportExtX;
|
||||
newdc->vportExtY = dc->vportExtY;
|
||||
newdc->CursPosX = dc->CursPosX;
|
||||
newdc->CursPosY = dc->CursPosY;
|
||||
newdc->ArcDirection = dc->ArcDirection;
|
||||
newdc->xformWorld2Wnd = dc->xformWorld2Wnd;
|
||||
newdc->xformWorld2Vport = dc->xformWorld2Vport;
|
||||
newdc->xformVport2World = dc->xformVport2World;
|
||||
newdc->vport2WorldValid = dc->vport2WorldValid;
|
||||
newdc->wndOrgX = dc->wndOrgX;
|
||||
newdc->wndOrgY = dc->wndOrgY;
|
||||
newdc->wndExtX = dc->wndExtX;
|
||||
newdc->wndExtY = dc->wndExtY;
|
||||
newdc->vportOrgX = dc->vportOrgX;
|
||||
newdc->vportOrgY = dc->vportOrgY;
|
||||
newdc->vportExtX = dc->vportExtX;
|
||||
newdc->vportExtY = dc->vportExtY;
|
||||
|
||||
newdc->hSelf = (HDC)handle;
|
||||
newdc->saveLevel = 0;
|
||||
|
||||
PATH_InitGdiPath( &newdc->w.path );
|
||||
PATH_InitGdiPath( &newdc->path );
|
||||
|
||||
newdc->w.pAbortProc = NULL;
|
||||
newdc->pAbortProc = NULL;
|
||||
newdc->hookThunk = NULL;
|
||||
newdc->hookProc = 0;
|
||||
|
||||
/* Get/SetDCState() don't change hVisRgn field ("Undoc. Windows" p.559). */
|
||||
|
||||
newdc->w.hGCClipRgn = newdc->w.hVisRgn = 0;
|
||||
if (dc->w.hClipRgn)
|
||||
newdc->hGCClipRgn = newdc->hVisRgn = 0;
|
||||
if (dc->hClipRgn)
|
||||
{
|
||||
newdc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
|
||||
newdc->hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( newdc->hClipRgn, dc->hClipRgn, 0, RGN_COPY );
|
||||
}
|
||||
else
|
||||
newdc->w.hClipRgn = 0;
|
||||
newdc->hClipRgn = 0;
|
||||
GDI_ReleaseObj( handle );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return handle;
|
||||
|
@ -333,14 +325,14 @@ HDC16 WINAPI GetDCState16( HDC16 hdc )
|
|||
void WINAPI SetDCState16( HDC16 hdc, HDC16 hdcs )
|
||||
{
|
||||
DC *dc, *dcs;
|
||||
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return;
|
||||
if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC )))
|
||||
|
||||
if (!(dc = GDI_GetObjPtr( hdc, DC_MAGIC ))) return;
|
||||
if (!(dcs = GDI_GetObjPtr( hdcs, DC_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
return;
|
||||
}
|
||||
if (!dcs->w.flags & DC_SAVED)
|
||||
if (!dcs->flags & DC_SAVED)
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
GDI_ReleaseObj( hdcs );
|
||||
|
@ -348,70 +340,70 @@ void WINAPI SetDCState16( HDC16 hdc, HDC16 hdcs )
|
|||
}
|
||||
TRACE("%04x %04x\n", hdc, hdcs );
|
||||
|
||||
dc->w.flags = dcs->w.flags & ~DC_SAVED;
|
||||
dc->w.devCaps = dcs->w.devCaps;
|
||||
dc->w.hDevice = dcs->w.hDevice;
|
||||
dc->w.totalExtent = dcs->w.totalExtent;
|
||||
dc->w.ROPmode = dcs->w.ROPmode;
|
||||
dc->w.polyFillMode = dcs->w.polyFillMode;
|
||||
dc->w.stretchBltMode = dcs->w.stretchBltMode;
|
||||
dc->w.relAbsMode = dcs->w.relAbsMode;
|
||||
dc->w.backgroundMode = dcs->w.backgroundMode;
|
||||
dc->w.backgroundColor = dcs->w.backgroundColor;
|
||||
dc->w.textColor = dcs->w.textColor;
|
||||
dc->w.brushOrgX = dcs->w.brushOrgX;
|
||||
dc->w.brushOrgY = dcs->w.brushOrgY;
|
||||
dc->w.textAlign = dcs->w.textAlign;
|
||||
dc->w.charExtra = dcs->w.charExtra;
|
||||
dc->w.breakTotalExtra = dcs->w.breakTotalExtra;
|
||||
dc->w.breakCount = dcs->w.breakCount;
|
||||
dc->w.breakExtra = dcs->w.breakExtra;
|
||||
dc->w.breakRem = dcs->w.breakRem;
|
||||
dc->w.MapMode = dcs->w.MapMode;
|
||||
dc->w.GraphicsMode = dcs->w.GraphicsMode;
|
||||
dc->flags = dcs->flags & ~DC_SAVED;
|
||||
dc->devCaps = dcs->devCaps;
|
||||
dc->hDevice = dcs->hDevice;
|
||||
dc->totalExtent = dcs->totalExtent;
|
||||
dc->ROPmode = dcs->ROPmode;
|
||||
dc->polyFillMode = dcs->polyFillMode;
|
||||
dc->stretchBltMode = dcs->stretchBltMode;
|
||||
dc->relAbsMode = dcs->relAbsMode;
|
||||
dc->backgroundMode = dcs->backgroundMode;
|
||||
dc->backgroundColor = dcs->backgroundColor;
|
||||
dc->textColor = dcs->textColor;
|
||||
dc->brushOrgX = dcs->brushOrgX;
|
||||
dc->brushOrgY = dcs->brushOrgY;
|
||||
dc->textAlign = dcs->textAlign;
|
||||
dc->charExtra = dcs->charExtra;
|
||||
dc->breakTotalExtra = dcs->breakTotalExtra;
|
||||
dc->breakCount = dcs->breakCount;
|
||||
dc->breakExtra = dcs->breakExtra;
|
||||
dc->breakRem = dcs->breakRem;
|
||||
dc->MapMode = dcs->MapMode;
|
||||
dc->GraphicsMode = dcs->GraphicsMode;
|
||||
#if 0
|
||||
/* Apparently, the DC origin is not changed by [GS]etDCState */
|
||||
dc->w.DCOrgX = dcs->w.DCOrgX;
|
||||
dc->w.DCOrgY = dcs->w.DCOrgY;
|
||||
dc->DCOrgX = dcs->DCOrgX;
|
||||
dc->DCOrgY = dcs->DCOrgY;
|
||||
#endif
|
||||
dc->w.CursPosX = dcs->w.CursPosX;
|
||||
dc->w.CursPosY = dcs->w.CursPosY;
|
||||
dc->w.ArcDirection = dcs->w.ArcDirection;
|
||||
dc->w.xformWorld2Wnd = dcs->w.xformWorld2Wnd;
|
||||
dc->w.xformWorld2Vport = dcs->w.xformWorld2Vport;
|
||||
dc->w.xformVport2World = dcs->w.xformVport2World;
|
||||
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
|
||||
dc->CursPosX = dcs->CursPosX;
|
||||
dc->CursPosY = dcs->CursPosY;
|
||||
dc->ArcDirection = dcs->ArcDirection;
|
||||
dc->xformWorld2Wnd = dcs->xformWorld2Wnd;
|
||||
dc->xformWorld2Vport = dcs->xformWorld2Vport;
|
||||
dc->xformVport2World = dcs->xformVport2World;
|
||||
dc->vport2WorldValid = dcs->vport2WorldValid;
|
||||
|
||||
dc->wndOrgX = dcs->wndOrgX;
|
||||
dc->wndOrgY = dcs->wndOrgY;
|
||||
dc->wndExtX = dcs->wndExtX;
|
||||
dc->wndExtY = dcs->wndExtY;
|
||||
dc->vportOrgX = dcs->vportOrgX;
|
||||
dc->vportOrgY = dcs->vportOrgY;
|
||||
dc->vportExtX = dcs->vportExtX;
|
||||
dc->vportExtY = dcs->vportExtY;
|
||||
dc->wndOrgX = dcs->wndOrgX;
|
||||
dc->wndOrgY = dcs->wndOrgY;
|
||||
dc->wndExtX = dcs->wndExtX;
|
||||
dc->wndExtY = dcs->wndExtY;
|
||||
dc->vportOrgX = dcs->vportOrgX;
|
||||
dc->vportOrgY = dcs->vportOrgY;
|
||||
dc->vportExtX = dcs->vportExtX;
|
||||
dc->vportExtY = dcs->vportExtY;
|
||||
|
||||
if (!(dc->w.flags & DC_MEMORY)) dc->w.bitsPerPixel = dcs->w.bitsPerPixel;
|
||||
if (!(dc->flags & DC_MEMORY)) dc->bitsPerPixel = dcs->bitsPerPixel;
|
||||
|
||||
if (dcs->w.hClipRgn)
|
||||
if (dcs->hClipRgn)
|
||||
{
|
||||
if (!dc->w.hClipRgn) dc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( dc->w.hClipRgn, dcs->w.hClipRgn, 0, RGN_COPY );
|
||||
if (!dc->hClipRgn) dc->hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
||||
CombineRgn( dc->hClipRgn, dcs->hClipRgn, 0, RGN_COPY );
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dc->w.hClipRgn) DeleteObject16( dc->w.hClipRgn );
|
||||
dc->w.hClipRgn = 0;
|
||||
if (dc->hClipRgn) DeleteObject16( dc->hClipRgn );
|
||||
dc->hClipRgn = 0;
|
||||
}
|
||||
CLIPPING_UpdateGCRegion( dc );
|
||||
|
||||
SelectObject( hdc, dcs->w.hBitmap );
|
||||
SelectObject( hdc, dcs->w.hBrush );
|
||||
SelectObject( hdc, dcs->w.hFont );
|
||||
SelectObject( hdc, dcs->w.hPen );
|
||||
SetBkColor( hdc, dcs->w.backgroundColor);
|
||||
SetTextColor( hdc, dcs->w.textColor);
|
||||
GDISelectPalette16( hdc, dcs->w.hPalette, FALSE );
|
||||
SelectObject( hdc, dcs->hBitmap );
|
||||
SelectObject( hdc, dcs->hBrush );
|
||||
SelectObject( hdc, dcs->hFont );
|
||||
SelectObject( hdc, dcs->hPen );
|
||||
SetBkColor( hdc, dcs->backgroundColor);
|
||||
SetTextColor( hdc, dcs->textColor);
|
||||
GDISelectPalette16( hdc, dcs->hPalette, FALSE );
|
||||
GDI_ReleaseObj( hdcs );
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
|
@ -458,14 +450,14 @@ INT WINAPI SaveDC( HDC hdc )
|
|||
* SetDCState doesn't allow us to signal an error (which can happen
|
||||
* when copying paths).
|
||||
*/
|
||||
if (!PATH_AssignGdiPath( &dcs->w.path, &dc->w.path ))
|
||||
if (!PATH_AssignGdiPath( &dcs->path, &dc->path ))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
GDI_ReleaseObj( hdcs );
|
||||
DeleteDC( hdcs );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
dcs->header.hNext = dc->header.hNext;
|
||||
dc->header.hNext = hdcs;
|
||||
TRACE("(%04x): returning %d\n", hdc, dc->saveLevel+1 );
|
||||
|
@ -520,7 +512,7 @@ BOOL WINAPI RestoreDC( HDC hdc, INT level )
|
|||
while (dc->saveLevel >= level)
|
||||
{
|
||||
HDC16 hdcs = dc->header.hNext;
|
||||
if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC )))
|
||||
if (!(dcs = GDI_GetObjPtr( hdcs, DC_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
return FALSE;
|
||||
|
@ -529,7 +521,7 @@ BOOL WINAPI RestoreDC( HDC hdc, INT level )
|
|||
if (--dc->saveLevel < level)
|
||||
{
|
||||
SetDCState16( hdc, hdcs );
|
||||
if (!PATH_AssignGdiPath( &dc->w.path, &dcs->w.path ))
|
||||
if (!PATH_AssignGdiPath( &dc->path, &dcs->path ))
|
||||
/* FIXME: This might not be quite right, since we're
|
||||
* returning FALSE but still destroying the saved DC state */
|
||||
success=FALSE;
|
||||
|
@ -558,7 +550,7 @@ HDC16 WINAPI CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output,
|
|||
|
||||
if (!(funcs = DRIVER_FindDriver( buf ))) return 0;
|
||||
if (!(dc = DC_AllocDC( funcs ))) return 0;
|
||||
dc->w.flags = 0;
|
||||
dc->flags = 0;
|
||||
|
||||
TRACE("(driver=%s, device=%s, output=%s): returning %04x\n",
|
||||
debugstr_a(driver), debugstr_a(device), debugstr_a(output), dc->hSelf );
|
||||
|
@ -656,7 +648,7 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
|
|||
DC *dc, *origDC;
|
||||
const DC_FUNCTIONS *funcs;
|
||||
|
||||
if ((origDC = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC ))) funcs = origDC->funcs;
|
||||
if ((origDC = GDI_GetObjPtr( hdc, DC_MAGIC ))) funcs = origDC->funcs;
|
||||
else funcs = DRIVER_FindDriver( "DISPLAY" );
|
||||
|
||||
if (!funcs || !(dc = DC_AllocDC( funcs )))
|
||||
|
@ -668,9 +660,9 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
|
|||
TRACE("(%04x): returning %04x\n",
|
||||
hdc, dc->hSelf );
|
||||
|
||||
dc->w.flags = DC_MEMORY;
|
||||
dc->w.bitsPerPixel = 1;
|
||||
dc->w.hBitmap = hPseudoStockBitmap;
|
||||
dc->flags = DC_MEMORY;
|
||||
dc->bitsPerPixel = 1;
|
||||
dc->hBitmap = hPseudoStockBitmap;
|
||||
|
||||
/* Copy the driver-specific physical device info into
|
||||
* the new DC. The driver may use this read-only info
|
||||
|
@ -708,13 +700,13 @@ BOOL16 WINAPI DeleteDC16( HDC16 hdc )
|
|||
*/
|
||||
BOOL WINAPI DeleteDC( HDC hdc )
|
||||
{
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC * dc = GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
TRACE("%04x\n", hdc );
|
||||
|
||||
/* Call hook procedure to check whether is it OK to delete this DC */
|
||||
if (dc->hookThunk && !(dc->w.flags & (DC_SAVED | DC_MEMORY)))
|
||||
if (dc->hookThunk && !(dc->flags & (DC_SAVED | DC_MEMORY)))
|
||||
{
|
||||
DCHOOKPROC proc = dc->hookThunk;
|
||||
if (proc)
|
||||
|
@ -730,14 +722,14 @@ BOOL WINAPI DeleteDC( HDC hdc )
|
|||
{
|
||||
DC * dcs;
|
||||
HDC16 hdcs = dc->header.hNext;
|
||||
if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC ))) break;
|
||||
if (!(dcs = GDI_GetObjPtr( hdcs, DC_MAGIC ))) break;
|
||||
dc->header.hNext = dcs->header.hNext;
|
||||
dc->saveLevel--;
|
||||
GDI_ReleaseObj( hdcs );
|
||||
DeleteDC( hdcs );
|
||||
}
|
||||
|
||||
if (!(dc->w.flags & DC_SAVED))
|
||||
if (!(dc->flags & DC_SAVED))
|
||||
{
|
||||
SelectObject( hdc, GetStockObject(BLACK_PEN) );
|
||||
SelectObject( hdc, GetStockObject(WHITE_BRUSH) );
|
||||
|
@ -745,12 +737,12 @@ BOOL WINAPI DeleteDC( HDC hdc )
|
|||
if (dc->funcs->pDeleteDC) dc->funcs->pDeleteDC(dc);
|
||||
}
|
||||
|
||||
if (dc->w.hClipRgn) DeleteObject( dc->w.hClipRgn );
|
||||
if (dc->w.hVisRgn) DeleteObject( dc->w.hVisRgn );
|
||||
if (dc->w.hGCClipRgn) DeleteObject( dc->w.hGCClipRgn );
|
||||
if (dc->w.pAbortProc) THUNK_Free( (FARPROC)dc->w.pAbortProc );
|
||||
if (dc->hClipRgn) DeleteObject( dc->hClipRgn );
|
||||
if (dc->hVisRgn) DeleteObject( dc->hVisRgn );
|
||||
if (dc->hGCClipRgn) DeleteObject( dc->hGCClipRgn );
|
||||
if (dc->pAbortProc) THUNK_Free( (FARPROC)dc->pAbortProc );
|
||||
if (dc->hookThunk) THUNK_Free( (FARPROC)dc->hookThunk );
|
||||
PATH_DestroyGdiPath(&dc->w.path);
|
||||
PATH_DestroyGdiPath(&dc->path);
|
||||
|
||||
return GDI_FreeObject( hdc, dc );
|
||||
}
|
||||
|
@ -803,12 +795,10 @@ INT16 WINAPI GetDeviceCaps16( HDC16 hdc, INT16 cap )
|
|||
*/
|
||||
INT WINAPI GetDeviceCaps( HDC hdc, INT cap )
|
||||
{
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc;
|
||||
INT ret = 0;
|
||||
POINT pt;
|
||||
|
||||
if (!dc) return 0;
|
||||
|
||||
/* Device capabilities for the printer */
|
||||
switch (cap)
|
||||
{
|
||||
|
@ -836,15 +826,16 @@ INT WINAPI GetDeviceCaps( HDC hdc, INT cap )
|
|||
if (((cap>=46) && (cap<88)) || ((cap>=92) && (cap<104)))
|
||||
FIXME("(%04x,%d): unsupported DeviceCaps capability, will yield 0!\n",
|
||||
hdc,cap );
|
||||
ret = *(WORD *)(((char *)dc->w.devCaps) + cap);
|
||||
|
||||
if ((cap == NUMCOLORS) && (ret == 0xffff))
|
||||
ret = -1;
|
||||
if ((dc = DC_GetDCPtr( hdc )))
|
||||
{
|
||||
ret = *(WORD *)(((char *)dc->devCaps) + cap);
|
||||
GDI_ReleaseObj( hdc );
|
||||
if ((cap == NUMCOLORS) && (ret == 0xffff)) ret = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
TRACE("(%04x,%d): returning %d\n", hdc, cap, ret );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -870,8 +861,8 @@ COLORREF WINAPI SetBkColor( HDC hdc, COLORREF color )
|
|||
if (dc->funcs->pSetBkColor)
|
||||
oldColor = dc->funcs->pSetBkColor(dc, color);
|
||||
else {
|
||||
oldColor = dc->w.backgroundColor;
|
||||
dc->w.backgroundColor = color;
|
||||
oldColor = dc->backgroundColor;
|
||||
dc->backgroundColor = color;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return oldColor;
|
||||
|
@ -899,8 +890,8 @@ COLORREF WINAPI SetTextColor( HDC hdc, COLORREF color )
|
|||
if (dc->funcs->pSetTextColor)
|
||||
oldColor = dc->funcs->pSetTextColor(dc, color);
|
||||
else {
|
||||
oldColor = dc->w.textColor;
|
||||
dc->w.textColor = color;
|
||||
oldColor = dc->textColor;
|
||||
dc->textColor = color;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return oldColor;
|
||||
|
@ -926,8 +917,8 @@ UINT WINAPI SetTextAlign( HDC hdc, UINT align )
|
|||
if (dc->funcs->pSetTextAlign)
|
||||
prevAlign = dc->funcs->pSetTextAlign(dc, align);
|
||||
else {
|
||||
prevAlign = dc->w.textAlign;
|
||||
dc->w.textAlign = align;
|
||||
prevAlign = dc->textAlign;
|
||||
dc->textAlign = align;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return prevAlign;
|
||||
|
@ -941,12 +932,12 @@ BOOL WINAPI GetDCOrgEx( HDC hDC, LPPOINT lpp )
|
|||
DC * dc;
|
||||
|
||||
if (!lpp) return FALSE;
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hDC, DC_MAGIC ))) return FALSE;
|
||||
if (!(dc = DC_GetDCPtr( hDC ))) return FALSE;
|
||||
|
||||
lpp->x = lpp->y = 0;
|
||||
if (dc->funcs->pGetDCOrgEx) dc->funcs->pGetDCOrgEx( dc, lpp );
|
||||
lpp->x += dc->w.DCOrgX;
|
||||
lpp->y += dc->w.DCOrgY;
|
||||
lpp->x += dc->DCOrgX;
|
||||
lpp->y += dc->DCOrgY;
|
||||
GDI_ReleaseObj( hDC );
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -970,11 +961,11 @@ DWORD WINAPI GetDCOrg16( HDC16 hdc )
|
|||
DWORD WINAPI SetDCOrg16( HDC16 hdc, INT16 x, INT16 y )
|
||||
{
|
||||
DWORD prevOrg;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return 0;
|
||||
prevOrg = dc->w.DCOrgX | (dc->w.DCOrgY << 16);
|
||||
dc->w.DCOrgX = x;
|
||||
dc->w.DCOrgY = y;
|
||||
prevOrg = dc->DCOrgX | (dc->DCOrgY << 16);
|
||||
dc->DCOrgX = x;
|
||||
dc->DCOrgY = y;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return prevOrg;
|
||||
}
|
||||
|
@ -986,20 +977,19 @@ DWORD WINAPI SetDCOrg16( HDC16 hdc, INT16 x, INT16 y )
|
|||
INT WINAPI SetGraphicsMode( HDC hdc, INT mode )
|
||||
{
|
||||
INT ret = 0;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
/* One would think that setting the graphics mode to GM_COMPATIBLE
|
||||
* would also reset the world transformation matrix to the unity
|
||||
* matrix. However, in Windows, this is not the case. This doesn't
|
||||
* make a lot of sense to me, but that's the way it is.
|
||||
*/
|
||||
|
||||
if (!dc) return 0;
|
||||
if ((mode > 0) || (mode <= GM_LAST))
|
||||
if ((mode > 0) || (mode <= GM_LAST))
|
||||
{
|
||||
ret = dc->w.GraphicsMode;
|
||||
dc->w.GraphicsMode = mode;
|
||||
}
|
||||
ret = dc->GraphicsMode;
|
||||
dc->GraphicsMode = mode;
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
}
|
||||
|
@ -1028,10 +1018,10 @@ INT WINAPI SetArcDirection( HDC hdc, INT nDirection )
|
|||
return 0;
|
||||
}
|
||||
|
||||
if ((dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC )))
|
||||
if ((dc = DC_GetDCPtr( hdc )))
|
||||
{
|
||||
nOldDirection = dc->w.ArcDirection;
|
||||
dc->w.ArcDirection = nDirection;
|
||||
nOldDirection = dc->ArcDirection;
|
||||
dc->ArcDirection = nDirection;
|
||||
GDI_ReleaseObj( hdc );
|
||||
}
|
||||
return nOldDirection;
|
||||
|
@ -1045,8 +1035,8 @@ BOOL WINAPI GetWorldTransform( HDC hdc, LPXFORM xform )
|
|||
{
|
||||
DC * dc;
|
||||
if (!xform) return FALSE;
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return FALSE;
|
||||
*xform = dc->w.xformWorld2Wnd;
|
||||
if (!(dc = DC_GetDCPtr( hdc ))) return FALSE;
|
||||
*xform = dc->xformWorld2Wnd;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1058,20 +1048,15 @@ BOOL WINAPI GetWorldTransform( HDC hdc, LPXFORM xform )
|
|||
BOOL WINAPI SetWorldTransform( HDC hdc, const XFORM *xform )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
|
||||
if (!dc)
|
||||
{
|
||||
SetLastError( ERROR_INVALID_HANDLE );
|
||||
return FALSE;
|
||||
}
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
if (!dc) return FALSE;
|
||||
if (!xform) goto done;
|
||||
|
||||
/* Check that graphics mode is GM_ADVANCED */
|
||||
if (dc->w.GraphicsMode!=GM_ADVANCED) goto done;
|
||||
|
||||
dc->w.xformWorld2Wnd = *xform;
|
||||
/* Check that graphics mode is GM_ADVANCED */
|
||||
if (dc->GraphicsMode!=GM_ADVANCED) goto done;
|
||||
|
||||
dc->xformWorld2Wnd = *xform;
|
||||
DC_UpdateXforms( dc );
|
||||
ret = TRUE;
|
||||
done:
|
||||
|
@ -1106,35 +1091,31 @@ BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform,
|
|||
DWORD iMode )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
/* Check for illegal parameters */
|
||||
if (!dc)
|
||||
{
|
||||
SetLastError( ERROR_INVALID_HANDLE );
|
||||
return FALSE;
|
||||
}
|
||||
if (!dc) return FALSE;
|
||||
if (!xform) goto done;
|
||||
|
||||
|
||||
/* Check that graphics mode is GM_ADVANCED */
|
||||
if (dc->w.GraphicsMode!=GM_ADVANCED) goto done;
|
||||
|
||||
if (dc->GraphicsMode!=GM_ADVANCED) goto done;
|
||||
|
||||
switch (iMode)
|
||||
{
|
||||
case MWT_IDENTITY:
|
||||
dc->w.xformWorld2Wnd.eM11 = 1.0f;
|
||||
dc->w.xformWorld2Wnd.eM12 = 0.0f;
|
||||
dc->w.xformWorld2Wnd.eM21 = 0.0f;
|
||||
dc->w.xformWorld2Wnd.eM22 = 1.0f;
|
||||
dc->w.xformWorld2Wnd.eDx = 0.0f;
|
||||
dc->w.xformWorld2Wnd.eDy = 0.0f;
|
||||
dc->xformWorld2Wnd.eM11 = 1.0f;
|
||||
dc->xformWorld2Wnd.eM12 = 0.0f;
|
||||
dc->xformWorld2Wnd.eM21 = 0.0f;
|
||||
dc->xformWorld2Wnd.eM22 = 1.0f;
|
||||
dc->xformWorld2Wnd.eDx = 0.0f;
|
||||
dc->xformWorld2Wnd.eDy = 0.0f;
|
||||
break;
|
||||
case MWT_LEFTMULTIPLY:
|
||||
CombineTransform( &dc->w.xformWorld2Wnd, xform,
|
||||
&dc->w.xformWorld2Wnd );
|
||||
CombineTransform( &dc->xformWorld2Wnd, xform,
|
||||
&dc->xformWorld2Wnd );
|
||||
break;
|
||||
case MWT_RIGHTMULTIPLY:
|
||||
CombineTransform( &dc->w.xformWorld2Wnd, &dc->w.xformWorld2Wnd,
|
||||
CombineTransform( &dc->xformWorld2Wnd, &dc->xformWorld2Wnd,
|
||||
xform );
|
||||
break;
|
||||
default:
|
||||
|
@ -1204,7 +1185,7 @@ extern WORD CALLBACK GDI_CallTo16_word_wwll(FARPROC16,WORD,WORD,LONG,LONG);
|
|||
/* ### stop build ### */
|
||||
BOOL16 WINAPI SetDCHook( HDC16 hdc, FARPROC16 hookProc, DWORD dwHookData )
|
||||
{
|
||||
DC *dc = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
/*
|
||||
|
@ -1238,7 +1219,7 @@ BOOL16 WINAPI SetDCHook( HDC16 hdc, FARPROC16 hookProc, DWORD dwHookData )
|
|||
*/
|
||||
DWORD WINAPI GetDCHook( HDC16 hdc, FARPROC16 *phookProc )
|
||||
{
|
||||
DC *dc = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return 0;
|
||||
*phookProc = dc->hookProc;
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -1251,11 +1232,11 @@ DWORD WINAPI GetDCHook( HDC16 hdc, FARPROC16 *phookProc )
|
|||
*/
|
||||
WORD WINAPI SetHookFlags16(HDC16 hDC, WORD flags)
|
||||
{
|
||||
DC* dc = (DC*)GDI_GetObjPtr( hDC, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hDC );
|
||||
|
||||
if( dc )
|
||||
{
|
||||
WORD wRet = dc->w.flags & DC_DIRTY;
|
||||
WORD wRet = dc->flags & DC_DIRTY;
|
||||
|
||||
/* "Undocumented Windows" info is slightly confusing.
|
||||
*/
|
||||
|
@ -1263,9 +1244,9 @@ WORD WINAPI SetHookFlags16(HDC16 hDC, WORD flags)
|
|||
TRACE("hDC %04x, flags %04x\n",hDC,flags);
|
||||
|
||||
if( flags & DCHF_INVALIDATEVISRGN )
|
||||
dc->w.flags |= DC_DIRTY;
|
||||
dc->flags |= DC_DIRTY;
|
||||
else if( flags & DCHF_VALIDATEVISRGN || !flags )
|
||||
dc->w.flags &= ~DC_DIRTY;
|
||||
dc->flags &= ~DC_DIRTY;
|
||||
GDI_ReleaseObj( hDC );
|
||||
return wRet;
|
||||
}
|
||||
|
@ -1382,9 +1363,11 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags)
|
|||
*/
|
||||
INT WINAPI GetRelAbs( HDC hdc, DWORD dwIgnore )
|
||||
{
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
if (!dc) return 0;
|
||||
return dc->w.relAbsMode;
|
||||
INT ret = 0;
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (dc) ret = dc->relAbsMode;
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "winbase.h"
|
||||
#include "winerror.h"
|
||||
#include "gdi.h"
|
||||
#include "dc.h"
|
||||
|
||||
#define COLORREF16 COLORREF /*hack*/
|
||||
|
||||
|
@ -16,7 +15,7 @@
|
|||
func_type WINAPI func_name( HDC16 hdc ) \
|
||||
{ \
|
||||
func_type ret = 0; \
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
||||
DC * dc = DC_GetDCPtr( hdc ); \
|
||||
if (dc) \
|
||||
{ \
|
||||
ret = dc->dc_field; \
|
||||
|
@ -34,7 +33,7 @@ func_type##16 WINAPI func_name##16( HDC16 hdc ) \
|
|||
func_type WINAPI func_name( HDC hdc ) \
|
||||
{ \
|
||||
func_type ret = 0; \
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
||||
DC * dc = DC_GetDCPtr( hdc ); \
|
||||
if (dc) \
|
||||
{ \
|
||||
ret = dc->dc_field; \
|
||||
|
@ -47,7 +46,7 @@ func_type WINAPI func_name( HDC hdc ) \
|
|||
func_type WINAPI func_name( HDC16 hdc ) \
|
||||
{ \
|
||||
func_type ret = 0; \
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
||||
DC * dc = DC_GetDCPtr( hdc ); \
|
||||
if (dc) \
|
||||
{ \
|
||||
ret = MAKELONG( dc->ret_x, dc->ret_y ); \
|
||||
|
@ -63,7 +62,7 @@ func_type WINAPI func_name( HDC16 hdc ) \
|
|||
#define DC_GET_VAL_EX( func_name, ret_x, ret_y, type ) \
|
||||
BOOL16 WINAPI func_name##16( HDC16 hdc, LP##type##16 pt ) \
|
||||
{ \
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
||||
DC * dc = DC_GetDCPtr( hdc ); \
|
||||
if (!dc) return FALSE; \
|
||||
((LPPOINT16)pt)->x = dc->ret_x; \
|
||||
((LPPOINT16)pt)->y = dc->ret_y; \
|
||||
|
@ -73,7 +72,7 @@ BOOL16 WINAPI func_name##16( HDC16 hdc, LP##type##16 pt ) \
|
|||
\
|
||||
BOOL WINAPI func_name( HDC hdc, LP##type pt ) \
|
||||
{ \
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
||||
DC * dc = DC_GetDCPtr( hdc ); \
|
||||
if (!dc) return FALSE; \
|
||||
((LPPOINT)pt)->x = dc->ret_x; \
|
||||
((LPPOINT)pt)->y = dc->ret_y; \
|
||||
|
@ -110,72 +109,72 @@ INT WINAPI func_name( HDC hdc, INT mode ) \
|
|||
* SetBkMode (GDI.2) (GDI32.306)
|
||||
*
|
||||
*/
|
||||
DC_SET_MODE( SetBkMode, w.backgroundMode, TRANSPARENT, OPAQUE )
|
||||
DC_SET_MODE( SetBkMode, backgroundMode, TRANSPARENT, OPAQUE )
|
||||
|
||||
/***********************************************************************
|
||||
* SetROP2 (GDI.4) (GDI32.331)
|
||||
*/
|
||||
DC_SET_MODE( SetROP2, w.ROPmode, R2_BLACK, R2_WHITE )
|
||||
DC_SET_MODE( SetROP2, ROPmode, R2_BLACK, R2_WHITE )
|
||||
|
||||
/***********************************************************************
|
||||
* SetRelAbs (GDI.5) (GDI32.333)
|
||||
*/
|
||||
DC_SET_MODE( SetRelAbs, w.relAbsMode, ABSOLUTE, RELATIVE )
|
||||
DC_SET_MODE( SetRelAbs, relAbsMode, ABSOLUTE, RELATIVE )
|
||||
|
||||
/***********************************************************************
|
||||
* SetPolyFillMode (GDI.6) (GDI32.330)
|
||||
*/
|
||||
DC_SET_MODE( SetPolyFillMode, w.polyFillMode, ALTERNATE, WINDING )
|
||||
DC_SET_MODE( SetPolyFillMode, polyFillMode, ALTERNATE, WINDING )
|
||||
|
||||
/***********************************************************************
|
||||
* SetStretchBltMode (GDI.7) (GDI32.334)
|
||||
*/
|
||||
DC_SET_MODE( SetStretchBltMode, w.stretchBltMode, BLACKONWHITE, HALFTONE )
|
||||
DC_SET_MODE( SetStretchBltMode, stretchBltMode, BLACKONWHITE, HALFTONE )
|
||||
|
||||
/***********************************************************************
|
||||
* GetBkColor (GDI.75) (GDI32.145)
|
||||
*/
|
||||
DC_GET_VAL( COLORREF, GetBkColor, w.backgroundColor )
|
||||
DC_GET_VAL( COLORREF, GetBkColor, backgroundColor )
|
||||
|
||||
/***********************************************************************
|
||||
* GetBkMode (GDI.76) (GDI32.146)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetBkMode, w.backgroundMode )
|
||||
DC_GET_VAL( INT, GetBkMode, backgroundMode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetCurrentPosition16 (GDI.78)
|
||||
*/
|
||||
DC_GET_X_Y( DWORD, GetCurrentPosition16, w.CursPosX, w.CursPosY )
|
||||
DC_GET_X_Y( DWORD, GetCurrentPosition16, CursPosX, CursPosY )
|
||||
|
||||
/***********************************************************************
|
||||
* GetMapMode (GDI.81) (GDI32.196)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetMapMode, w.MapMode )
|
||||
DC_GET_VAL( INT, GetMapMode, MapMode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetPolyFillMode (GDI.84) (GDI32.213)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetPolyFillMode, w.polyFillMode )
|
||||
DC_GET_VAL( INT, GetPolyFillMode, polyFillMode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetROP2 (GDI.85) (GDI32.214)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetROP2, w.ROPmode )
|
||||
DC_GET_VAL( INT, GetROP2, ROPmode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetRelAbs16 (GDI.86)
|
||||
*/
|
||||
DC_GET_VAL_16( INT16, GetRelAbs16, w.relAbsMode )
|
||||
DC_GET_VAL_16( INT16, GetRelAbs16, relAbsMode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetStretchBltMode (GDI.88) (GDI32.221)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetStretchBltMode, w.stretchBltMode )
|
||||
DC_GET_VAL( INT, GetStretchBltMode, stretchBltMode )
|
||||
|
||||
/***********************************************************************
|
||||
* GetTextColor (GDI.90) (GDI32.227)
|
||||
*/
|
||||
DC_GET_VAL( COLORREF, GetTextColor, w.textColor )
|
||||
DC_GET_VAL( COLORREF, GetTextColor, textColor )
|
||||
|
||||
/***********************************************************************
|
||||
* GetViewportExt16 (GDI.94)
|
||||
|
@ -200,47 +199,47 @@ DC_GET_X_Y( DWORD, GetWindowOrg16, wndOrgX, wndOrgY )
|
|||
/***********************************************************************
|
||||
* InquireVisRgn16 (GDI.131)
|
||||
*/
|
||||
DC_GET_VAL_16( HRGN16, InquireVisRgn16, w.hVisRgn )
|
||||
DC_GET_VAL_16( HRGN16, InquireVisRgn16, hVisRgn )
|
||||
|
||||
/***********************************************************************
|
||||
* GetClipRgn16 (GDI.173)
|
||||
*/
|
||||
DC_GET_VAL_16( HRGN16, GetClipRgn16, w.hClipRgn )
|
||||
DC_GET_VAL_16( HRGN16, GetClipRgn16, hClipRgn )
|
||||
|
||||
/***********************************************************************
|
||||
* GetBrushOrg16 (GDI.149)
|
||||
*/
|
||||
DC_GET_X_Y( DWORD, GetBrushOrg16, w.brushOrgX, w.brushOrgY )
|
||||
DC_GET_X_Y( DWORD, GetBrushOrg16, brushOrgX, brushOrgY )
|
||||
|
||||
/***********************************************************************
|
||||
* GetTextAlign (GDI.345) (GDI32,224)
|
||||
*/
|
||||
DC_GET_VAL( UINT, GetTextAlign, w.textAlign )
|
||||
DC_GET_VAL( UINT, GetTextAlign, textAlign )
|
||||
|
||||
/***********************************************************************
|
||||
* GetCurLogFont16 (GDI.411)
|
||||
*/
|
||||
DC_GET_VAL_16( HFONT16, GetCurLogFont16, w.hFont )
|
||||
DC_GET_VAL_16( HFONT16, GetCurLogFont16, hFont )
|
||||
|
||||
/***********************************************************************
|
||||
* GetArcDirection (GDI.524) (GDI32.141)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetArcDirection, w.ArcDirection )
|
||||
DC_GET_VAL( INT, GetArcDirection, ArcDirection )
|
||||
|
||||
/***********************************************************************
|
||||
* GetGraphicsMode (GDI32.188)
|
||||
*/
|
||||
DC_GET_VAL( INT, GetGraphicsMode, w.GraphicsMode)
|
||||
DC_GET_VAL( INT, GetGraphicsMode, GraphicsMode)
|
||||
|
||||
/***********************************************************************
|
||||
* GetBrushOrgEx (GDI.469) (GDI32.148)
|
||||
*/
|
||||
DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY, POINT ) /* */
|
||||
DC_GET_VAL_EX( GetBrushOrgEx, brushOrgX, brushOrgY, POINT ) /* */
|
||||
|
||||
/***********************************************************************
|
||||
* GetCurrentPositionEx (GDI.470) (GDI32.167)
|
||||
*/
|
||||
DC_GET_VAL_EX( GetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
|
||||
DC_GET_VAL_EX( GetCurrentPositionEx, CursPosX, CursPosY, POINT )
|
||||
|
||||
/***********************************************************************
|
||||
* GetViewportExtEx (GDI.472 GDI32.239)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "winbase.h"
|
||||
#include "bitmap.h"
|
||||
#include "callback.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "debugtools.h"
|
||||
#include "palette.h"
|
||||
|
||||
|
@ -312,7 +312,7 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
|
||||
if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
|
||||
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->w.hPalette, PALETTE_MAGIC )))
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->hPalette, PALETTE_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
|
@ -320,10 +320,10 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
|
||||
/* Transfer color info */
|
||||
|
||||
if (dc->w.bitsPerPixel <= 8) {
|
||||
if (dc->bitsPerPixel <= 8) {
|
||||
palEntry = palette->logpalette.palPalEntry + startpos;
|
||||
if (startpos + entries > (1 << dc->w.bitsPerPixel))
|
||||
entries = (1 << dc->w.bitsPerPixel) - startpos;
|
||||
if (startpos + entries > (1 << dc->bitsPerPixel))
|
||||
entries = (1 << dc->bitsPerPixel) - startpos;
|
||||
|
||||
if (startpos + entries > palette->logpalette.palNumEntries)
|
||||
entries = palette->logpalette.palNumEntries - startpos;
|
||||
|
@ -337,7 +337,7 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
} else {
|
||||
entries = 0;
|
||||
}
|
||||
GDI_ReleaseObj( dc->w.hPalette );
|
||||
GDI_ReleaseObj( dc->hPalette );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return entries;
|
||||
}
|
||||
|
@ -364,7 +364,7 @@ UINT WINAPI GetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
|
||||
if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
|
||||
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->w.hPalette, PALETTE_MAGIC )))
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->hPalette, PALETTE_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
|
@ -372,10 +372,10 @@ UINT WINAPI GetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
|
||||
/* Transfer color info */
|
||||
|
||||
if (dc->w.bitsPerPixel <= 8) {
|
||||
if (dc->bitsPerPixel <= 8) {
|
||||
palEntry = palette->logpalette.palPalEntry + startpos;
|
||||
if (startpos + entries > (1 << dc->w.bitsPerPixel)) {
|
||||
entries = (1 << dc->w.bitsPerPixel) - startpos;
|
||||
if (startpos + entries > (1 << dc->bitsPerPixel)) {
|
||||
entries = (1 << dc->bitsPerPixel) - startpos;
|
||||
}
|
||||
for (end = colors + entries; colors < end; palEntry++, colors++)
|
||||
{
|
||||
|
@ -387,7 +387,7 @@ UINT WINAPI GetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
|
|||
} else {
|
||||
entries = 0;
|
||||
}
|
||||
GDI_ReleaseObj( dc->w.hPalette );
|
||||
GDI_ReleaseObj( dc->hPalette );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return entries;
|
||||
}
|
||||
|
@ -485,7 +485,7 @@ INT WINAPI GetDIBits(
|
|||
GDI_ReleaseObj( hdc );
|
||||
return 0;
|
||||
}
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->w.hPalette, PALETTE_MAGIC )))
|
||||
if (!(palette = (PALETTEOBJ*)GDI_GetObjPtr( dc->hPalette, PALETTE_MAGIC )))
|
||||
{
|
||||
GDI_ReleaseObj( hdc );
|
||||
GDI_ReleaseObj( hbitmap );
|
||||
|
@ -548,7 +548,7 @@ INT WINAPI GetDIBits(
|
|||
}
|
||||
}
|
||||
|
||||
GDI_ReleaseObj( dc->w.hPalette );
|
||||
GDI_ReleaseObj( dc->hPalette );
|
||||
|
||||
if (bits && lines)
|
||||
{
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
#include "options.h"
|
||||
#include "debugtools.h"
|
||||
#include "winerror.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "winnls.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(font)
|
||||
DECLARE_DEBUG_CHANNEL(gdi)
|
||||
DEFAULT_DEBUG_CHANNEL(font);
|
||||
DECLARE_DEBUG_CHANNEL(gdi);
|
||||
|
||||
#define ENUM_UNICODE 0x00000001
|
||||
|
||||
|
@ -726,9 +726,9 @@ INT16 WINAPI GetTextCharacterExtra16( HDC16 hdc )
|
|||
INT WINAPI GetTextCharacterExtra( HDC hdc )
|
||||
{
|
||||
INT ret;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return 0;
|
||||
ret = abs( (dc->w.charExtra * dc->wndExtX + dc->vportExtX / 2)
|
||||
ret = abs( (dc->charExtra * dc->wndExtX + dc->vportExtX / 2)
|
||||
/ dc->vportExtX );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
@ -757,8 +757,8 @@ INT WINAPI SetTextCharacterExtra( HDC hdc, INT extra )
|
|||
else
|
||||
{
|
||||
extra = (extra * dc->vportExtX + dc->wndExtX / 2) / dc->wndExtX;
|
||||
prev = (dc->w.charExtra * dc->wndExtX + dc->vportExtX / 2) / dc->vportExtX;
|
||||
dc->w.charExtra = abs(extra);
|
||||
prev = (dc->charExtra * dc->wndExtX + dc->vportExtX / 2) / dc->vportExtX;
|
||||
dc->charExtra = abs(extra);
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return prev;
|
||||
|
@ -788,17 +788,17 @@ BOOL WINAPI SetTextJustification( HDC hdc, INT extra, INT breaks )
|
|||
{
|
||||
extra = abs((extra * dc->vportExtX + dc->wndExtX / 2) / dc->wndExtX);
|
||||
if (!extra) breaks = 0;
|
||||
dc->w.breakTotalExtra = extra;
|
||||
dc->w.breakCount = breaks;
|
||||
dc->breakTotalExtra = extra;
|
||||
dc->breakCount = breaks;
|
||||
if (breaks)
|
||||
{
|
||||
dc->w.breakExtra = extra / breaks;
|
||||
dc->w.breakRem = extra - (dc->w.breakCount * dc->w.breakExtra);
|
||||
dc->breakExtra = extra / breaks;
|
||||
dc->breakRem = extra - (dc->breakCount * dc->breakExtra);
|
||||
}
|
||||
else
|
||||
{
|
||||
dc->w.breakExtra = 0;
|
||||
dc->w.breakRem = 0;
|
||||
dc->breakExtra = 0;
|
||||
dc->breakRem = 0;
|
||||
}
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -822,10 +822,10 @@ INT WINAPI GetTextFaceA( HDC hdc, INT count, LPSTR name )
|
|||
FONTOBJ *font;
|
||||
INT ret = 0;
|
||||
|
||||
DC * dc = (DC *) DC_GetDCPtr( hdc );
|
||||
DC * dc = DC_GetDCPtr( hdc );
|
||||
if (!dc) return 0;
|
||||
|
||||
if ((font = (FONTOBJ *) GDI_GetObjPtr( dc->w.hFont, FONT_MAGIC )))
|
||||
if ((font = (FONTOBJ *) GDI_GetObjPtr( dc->hFont, FONT_MAGIC )))
|
||||
{
|
||||
if (name)
|
||||
{
|
||||
|
@ -833,7 +833,7 @@ INT WINAPI GetTextFaceA( HDC hdc, INT count, LPSTR name )
|
|||
ret = strlen(name);
|
||||
}
|
||||
else ret = strlen(font->logfont.lfFaceName) + 1;
|
||||
GDI_ReleaseObj( dc->w.hFont );
|
||||
GDI_ReleaseObj( dc->hFont );
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
return ret;
|
||||
|
|
102
objects/gdiobj.c
102
objects/gdiobj.c
|
@ -17,7 +17,6 @@
|
|||
|
||||
#include "bitmap.h"
|
||||
#include "brush.h"
|
||||
#include "dc.h"
|
||||
#include "font.h"
|
||||
#include "heap.h"
|
||||
#include "options.h"
|
||||
|
@ -31,9 +30,6 @@
|
|||
|
||||
DEFAULT_DEBUG_CHANNEL(gdi);
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
GDI_DRIVER *GDI_Driver = NULL;
|
||||
|
||||
/***********************************************************************
|
||||
* GDI stock objects
|
||||
|
@ -366,6 +362,38 @@ BOOL GDI_Init(void)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
#define FIRST_LARGE_HANDLE 16
|
||||
#define MAX_LARGE_HANDLES ((GDI_HEAP_SIZE - FIRST_LARGE_HANDLE) >> 2)
|
||||
static GDIOBJHDR *large_handles[MAX_LARGE_HANDLES];
|
||||
static int next_large_handle;
|
||||
|
||||
/***********************************************************************
|
||||
* alloc_large_heap
|
||||
*
|
||||
* Allocate a GDI handle from the large heap. Helper for GDI_AllocObject
|
||||
*/
|
||||
inline static GDIOBJHDR *alloc_large_heap( WORD size, HGDIOBJ *handle )
|
||||
{
|
||||
int i;
|
||||
GDIOBJHDR *obj;
|
||||
|
||||
for (i = next_large_handle + 1; i < MAX_LARGE_HANDLES; i++)
|
||||
if (!large_handles[i]) goto found;
|
||||
for (i = 0; i <= next_large_handle; i++)
|
||||
if (!large_handles[i]) goto found;
|
||||
*handle = 0;
|
||||
return NULL;
|
||||
|
||||
found:
|
||||
if ((obj = HeapAlloc( GetProcessHeap(), 0, size )))
|
||||
{
|
||||
large_handles[i] = obj;
|
||||
*handle = (i + FIRST_LARGE_HANDLE) << 2;
|
||||
next_large_handle = i;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GDI_AllocObject
|
||||
|
@ -376,18 +404,36 @@ void *GDI_AllocObject( WORD size, WORD magic, HGDIOBJ *handle )
|
|||
GDIOBJHDR *obj;
|
||||
|
||||
_EnterSysLevel( &GDI_level );
|
||||
if (!(*handle = LOCAL_Alloc( GDI_HeapSel, LMEM_MOVEABLE, size )))
|
||||
switch(magic)
|
||||
{
|
||||
_LeaveSysLevel( &GDI_level );
|
||||
return NULL;
|
||||
/* allocate DCs on the larger heap */
|
||||
case DC_MAGIC:
|
||||
case DISABLED_DC_MAGIC:
|
||||
case META_DC_MAGIC:
|
||||
case METAFILE_MAGIC:
|
||||
case METAFILE_DC_MAGIC:
|
||||
case ENHMETAFILE_MAGIC:
|
||||
case ENHMETAFILE_DC_MAGIC:
|
||||
if (!(obj = alloc_large_heap( size, handle ))) goto error;
|
||||
break;
|
||||
default:
|
||||
if (!(*handle = LOCAL_Alloc( GDI_HeapSel, LMEM_MOVEABLE, size ))) goto error;
|
||||
assert( *handle & 2 );
|
||||
obj = (GDIOBJHDR *)LOCAL_Lock( GDI_HeapSel, *handle );
|
||||
break;
|
||||
}
|
||||
obj = (GDIOBJHDR *)LOCAL_Lock( GDI_HeapSel, *handle );
|
||||
|
||||
obj->hNext = 0;
|
||||
obj->wMagic = magic|OBJECT_NOSYSTEM;
|
||||
obj->dwCount = ++count;
|
||||
|
||||
TRACE_SEC( *handle, "enter" );
|
||||
return obj;
|
||||
|
||||
error:
|
||||
_LeaveSysLevel( &GDI_level );
|
||||
*handle = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -401,6 +447,7 @@ void *GDI_ReallocObject( WORD size, HGDIOBJ handle, void *object )
|
|||
{
|
||||
HGDIOBJ new_handle;
|
||||
|
||||
assert( handle & 2 ); /* no realloc for large handles */
|
||||
LOCAL_Unlock( GDI_HeapSel, handle );
|
||||
if (!(new_handle = LOCAL_ReAlloc( GDI_HeapSel, handle, size, LMEM_MOVEABLE )))
|
||||
{
|
||||
|
@ -424,8 +471,20 @@ BOOL GDI_FreeObject( HGDIOBJ handle, void *ptr )
|
|||
if (handle < FIRST_STOCK_HANDLE)
|
||||
{
|
||||
object->wMagic = 0; /* Mark it as invalid */
|
||||
LOCAL_Unlock( GDI_HeapSel, handle );
|
||||
LOCAL_Free( GDI_HeapSel, handle );
|
||||
if (handle & 2) /* GDI heap handle */
|
||||
{
|
||||
LOCAL_Unlock( GDI_HeapSel, handle );
|
||||
LOCAL_Free( GDI_HeapSel, handle );
|
||||
}
|
||||
else /* large heap handle */
|
||||
{
|
||||
int i = (handle >> 2) - FIRST_LARGE_HANDLE;
|
||||
if (i >= 0 && large_handles[i])
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, large_handles[i] );
|
||||
large_handles[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
TRACE_SEC( handle, "leave" );
|
||||
_LeaveSysLevel( &GDI_level );
|
||||
|
@ -452,7 +511,7 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic )
|
|||
if (ptr && (magic != MAGIC_DONTCARE)
|
||||
&& (GDIMAGIC(ptr->wMagic) != magic)) ptr = NULL;
|
||||
}
|
||||
else
|
||||
else if (handle & 2) /* GDI heap handle */
|
||||
{
|
||||
ptr = (GDIOBJHDR *)LOCAL_Lock( GDI_HeapSel, handle );
|
||||
if (ptr &&
|
||||
|
@ -462,6 +521,15 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic )
|
|||
ptr = NULL;
|
||||
}
|
||||
}
|
||||
else /* large heap handle */
|
||||
{
|
||||
int i = (handle >> 2) - FIRST_LARGE_HANDLE;
|
||||
if (i >= 0)
|
||||
{
|
||||
ptr = large_handles[i];
|
||||
if (ptr && (magic != MAGIC_DONTCARE) && (GDIMAGIC(ptr->wMagic) != magic)) ptr = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ptr)
|
||||
{
|
||||
|
@ -480,7 +548,7 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic )
|
|||
*/
|
||||
void GDI_ReleaseObj( HGDIOBJ handle )
|
||||
{
|
||||
if (handle < FIRST_STOCK_HANDLE) LOCAL_Unlock( GDI_HeapSel, handle );
|
||||
if (handle < FIRST_STOCK_HANDLE && (handle & 2)) LOCAL_Unlock( GDI_HeapSel, handle );
|
||||
TRACE_SEC( handle, "leave" );
|
||||
_LeaveSysLevel( &GDI_level );
|
||||
}
|
||||
|
@ -778,11 +846,11 @@ HANDLE WINAPI GetCurrentObject(HDC hdc,UINT type)
|
|||
if (dc)
|
||||
{
|
||||
switch (type) {
|
||||
case OBJ_PEN: ret = dc->w.hPen; break;
|
||||
case OBJ_BRUSH: ret = dc->w.hBrush; break;
|
||||
case OBJ_PAL: ret = dc->w.hPalette; break;
|
||||
case OBJ_FONT: ret = dc->w.hFont; break;
|
||||
case OBJ_BITMAP: ret = dc->w.hBitmap; break;
|
||||
case OBJ_PEN: ret = dc->hPen; break;
|
||||
case OBJ_BRUSH: ret = dc->hBrush; break;
|
||||
case OBJ_PAL: ret = dc->hPalette; break;
|
||||
case OBJ_FONT: ret = dc->hFont; break;
|
||||
case OBJ_BITMAP: ret = dc->hBitmap; break;
|
||||
default:
|
||||
/* the SDK only mentions those above */
|
||||
FIXME("(%08x,%d): unknown type.\n",hdc,type);
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "wine/winuser16.h"
|
||||
#include "gdi.h"
|
||||
#include "color.h"
|
||||
#include "dc.h"
|
||||
#include "palette.h"
|
||||
#include "debugtools.h"
|
||||
#include "callback.h"
|
||||
|
@ -484,22 +483,22 @@ UINT WINAPI GetSystemPaletteEntries(
|
|||
|
||||
TRACE("hdc=%04x,start=%i,count=%i\n", hdc,start,count);
|
||||
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return 0;
|
||||
if (!(dc = DC_GetDCPtr( hdc ))) return 0;
|
||||
|
||||
if (!entries)
|
||||
{
|
||||
count = dc->w.devCaps->sizePalette;
|
||||
count = dc->devCaps->sizePalette;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (start >= dc->w.devCaps->sizePalette)
|
||||
if (start >= dc->devCaps->sizePalette)
|
||||
{
|
||||
count = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (start+count >= dc->w.devCaps->sizePalette)
|
||||
count = dc->w.devCaps->sizePalette - start;
|
||||
if (start+count >= dc->devCaps->sizePalette)
|
||||
count = dc->devCaps->sizePalette - start;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
*(COLORREF*)(entries + i) = COLOR_GetSystemPaletteEntry( start + i );
|
||||
|
@ -576,9 +575,9 @@ COLORREF WINAPI GetNearestColor(
|
|||
DC *dc;
|
||||
PALETTEOBJ *palObj;
|
||||
|
||||
if ( (dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC )) )
|
||||
if ( (dc = DC_GetDCPtr( hdc )) )
|
||||
{
|
||||
HPALETTE hpal = (dc->w.hPalette)? dc->w.hPalette : GetStockObject( DEFAULT_PALETTE );
|
||||
HPALETTE hpal = (dc->hPalette)? dc->hPalette : GetStockObject( DEFAULT_PALETTE );
|
||||
palObj = GDI_GetObjPtr( hpal, PALETTE_MAGIC );
|
||||
if (!palObj) {
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
@ -649,8 +648,8 @@ HPALETTE16 WINAPI GDISelectPalette16( HDC16 hdc, HPALETTE16 hpal, WORD wBkg)
|
|||
return 0;
|
||||
}
|
||||
if (!(dc = DC_GetDCPtr( hdc ))) return 0;
|
||||
prev = dc->w.hPalette;
|
||||
dc->w.hPalette = hpal;
|
||||
prev = dc->hPalette;
|
||||
dc->hPalette = hpal;
|
||||
GDI_ReleaseObj( hdc );
|
||||
if (!wBkg) hPrimaryPalette = hpal;
|
||||
return prev;
|
||||
|
@ -670,29 +669,29 @@ UINT16 WINAPI GDIRealizePalette16( HDC16 hdc )
|
|||
|
||||
TRACE("%04x...\n", hdc );
|
||||
|
||||
if(dc->w.hPalette != hLastRealizedPalette )
|
||||
if(dc->hPalette != hLastRealizedPalette )
|
||||
{
|
||||
if( dc->w.hPalette == GetStockObject( DEFAULT_PALETTE )) {
|
||||
if( dc->hPalette == GetStockObject( DEFAULT_PALETTE )) {
|
||||
realized = RealizeDefaultPalette16( hdc );
|
||||
GDI_ReleaseObj( hdc );
|
||||
return (UINT16)realized;
|
||||
}
|
||||
|
||||
|
||||
palPtr = (PALETTEOBJ *) GDI_GetObjPtr( dc->w.hPalette, PALETTE_MAGIC );
|
||||
palPtr = (PALETTEOBJ *) GDI_GetObjPtr( dc->hPalette, PALETTE_MAGIC );
|
||||
|
||||
if (!palPtr) {
|
||||
GDI_ReleaseObj( hdc );
|
||||
FIXME("invalid selected palette %04x\n",dc->w.hPalette);
|
||||
FIXME("invalid selected palette %04x\n",dc->hPalette);
|
||||
return 0;
|
||||
}
|
||||
|
||||
realized = PALETTE_Driver->
|
||||
pSetMapping(palPtr,0,palPtr->logpalette.palNumEntries,
|
||||
(dc->w.hPalette != hPrimaryPalette) ||
|
||||
(dc->w.hPalette == GetStockObject( DEFAULT_PALETTE )));
|
||||
hLastRealizedPalette = dc->w.hPalette;
|
||||
GDI_ReleaseObj( dc->w.hPalette );
|
||||
(dc->hPalette != hPrimaryPalette) ||
|
||||
(dc->hPalette == GetStockObject( DEFAULT_PALETTE )));
|
||||
hLastRealizedPalette = dc->hPalette;
|
||||
GDI_ReleaseObj( dc->hPalette );
|
||||
}
|
||||
else TRACE(" skipping (hLastRealizedPalette = %04x)\n",
|
||||
hLastRealizedPalette);
|
||||
|
@ -716,7 +715,7 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
|
|||
|
||||
if (!(dc = DC_GetDCPtr( hdc ))) return 0;
|
||||
|
||||
if (!(dc->w.flags & DC_MEMORY))
|
||||
if (!(dc->flags & DC_MEMORY))
|
||||
{
|
||||
palPtr = (PALETTEOBJ*)GDI_GetObjPtr( GetStockObject(DEFAULT_PALETTE), PALETTE_MAGIC );
|
||||
if (palPtr)
|
||||
|
@ -735,10 +734,10 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
|
|||
*/
|
||||
BOOL16 WINAPI IsDCCurrentPalette16(HDC16 hDC)
|
||||
{
|
||||
DC* dc = (DC *)GDI_GetObjPtr( hDC, DC_MAGIC );
|
||||
DC *dc = DC_GetDCPtr( hDC );
|
||||
if (dc)
|
||||
{
|
||||
BOOL bRet = dc->w.hPalette == hPrimaryPalette;
|
||||
BOOL bRet = dc->hPalette == hPrimaryPalette;
|
||||
GDI_ReleaseObj( hDC );
|
||||
return bRet;
|
||||
}
|
||||
|
@ -785,9 +784,9 @@ INT16 WINAPI UpdateColors16( HDC16 hDC )
|
|||
HWND hWnd;
|
||||
int size;
|
||||
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hDC, DC_MAGIC ))) return 0;
|
||||
size = dc->w.devCaps->sizePalette;
|
||||
GDI_ReleaseObj( hDC );
|
||||
if (!(dc = DC_GetDCPtr( hDC ))) return 0;
|
||||
size = dc->devCaps->sizePalette;
|
||||
GDI_ReleaseObj( hDC );
|
||||
hWnd = Callout.WindowFromDC( hDC );
|
||||
|
||||
/* Docs say that we have to remap current drawable pixel by pixel
|
||||
|
|
|
@ -88,7 +88,7 @@ SOFTWARE.
|
|||
#include "debugtools.h"
|
||||
#include "region.h"
|
||||
#include "heap.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(region);
|
||||
|
||||
|
@ -1164,7 +1164,7 @@ BOOL REGION_LPTODP( HDC hdc, HRGN hDest, HRGN hSrc )
|
|||
hdc, hDest, hSrc) ;
|
||||
if (!dc) return ret;
|
||||
|
||||
if (dc->w.MapMode == MM_TEXT) /* Requires only a translation */
|
||||
if (dc->MapMode == MM_TEXT) /* Requires only a translation */
|
||||
{
|
||||
if( CombineRgn( hDest, hSrc, 0, RGN_COPY ) == ERROR ) goto done;
|
||||
OffsetRgn( hDest, dc->vportOrgX - dc->wndOrgX,
|
||||
|
@ -2937,7 +2937,7 @@ INT WINAPI GetRandomRgn(HDC hDC, HRGN hRgn, DWORD dwCode)
|
|||
POINT org;
|
||||
|
||||
if (!dc) return -1;
|
||||
CombineRgn (hRgn, dc->w.hVisRgn, 0, RGN_COPY);
|
||||
CombineRgn (hRgn, dc->hVisRgn, 0, RGN_COPY);
|
||||
/*
|
||||
* On Windows NT/2000,
|
||||
* the region returned is in screen coordinates.
|
||||
|
@ -2949,8 +2949,8 @@ INT WINAPI GetRandomRgn(HDC hDC, HRGN hRgn, DWORD dwCode)
|
|||
GetDCOrgEx(hDC, &org);
|
||||
else
|
||||
org.x = org.y = 0;
|
||||
org.x -= dc->w.DCOrgX;
|
||||
org.y -= dc->w.DCOrgY;
|
||||
org.x -= dc->DCOrgX;
|
||||
org.y -= dc->DCOrgY;
|
||||
OffsetRgn (hRgn, org.x, org.y);
|
||||
GDI_ReleaseObj( hDC );
|
||||
return 1;
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "wine/winuser16.h"
|
||||
#include "winbase.h"
|
||||
#include "winerror.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "heap.h"
|
||||
#include "debugtools.h"
|
||||
|
|
|
@ -599,9 +599,9 @@ HRGN DCE_GetVisRgn( HWND hwnd, WORD flags, HWND hwndChild, WORD cflags )
|
|||
static void DCE_OffsetVisRgn( HDC hDC, HRGN hVisRgn )
|
||||
{
|
||||
DC *dc;
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hDC, DC_MAGIC ))) return;
|
||||
if (!(dc = DC_GetDCPtr( hDC ))) return;
|
||||
|
||||
OffsetRgn( hVisRgn, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
OffsetRgn( hVisRgn, dc->DCOrgX, dc->DCOrgY );
|
||||
|
||||
GDI_ReleaseObj( hDC );
|
||||
}
|
||||
|
@ -798,16 +798,16 @@ HDC WINAPI GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
|||
dce->DCXflags = dcxFlags | (flags & DCX_WINDOWPAINT) | DCX_DCEBUSY;
|
||||
hdc = dce->hDC;
|
||||
|
||||
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC )))
|
||||
if (!(dc = DC_GetDCPtr( hdc )))
|
||||
{
|
||||
hdc = 0;
|
||||
goto END;
|
||||
}
|
||||
bUpdateVisRgn = bUpdateVisRgn || (dc->w.flags & DC_DIRTY);
|
||||
bUpdateVisRgn = bUpdateVisRgn || (dc->flags & DC_DIRTY);
|
||||
|
||||
/* recompute visible region */
|
||||
wndPtr->pDriver->pSetDrawable( wndPtr, hdc, flags, bUpdateClipOrigin );
|
||||
dc->w.flags &= ~DC_DIRTY;
|
||||
dc->flags &= ~DC_DIRTY;
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
||||
if( bUpdateVisRgn )
|
||||
|
|
|
@ -13,14 +13,13 @@
|
|||
#include "wingdi.h"
|
||||
#include "wine/winuser16.h"
|
||||
#include "winuser.h"
|
||||
#include "dc.h"
|
||||
#include "win.h"
|
||||
#include "gdi.h"
|
||||
#include "dce.h"
|
||||
#include "region.h"
|
||||
#include "debugtools.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(scroll)
|
||||
DEFAULT_DEBUG_CHANNEL(scroll);
|
||||
|
||||
/*************************************************************************
|
||||
* ScrollWindow16 (USER.61)
|
||||
|
@ -122,7 +121,7 @@ BOOL WINAPI ScrollDC( HDC hdc, INT dx, INT dy, const RECT *rc,
|
|||
OffsetRect( &rSrc, -dx, -dy );
|
||||
IntersectRect( &rSrc, &rSrc, &rect );
|
||||
|
||||
if(dc->w.hVisRgn)
|
||||
if(dc->hVisRgn)
|
||||
{
|
||||
if (!IsRectEmpty(&rSrc))
|
||||
{
|
||||
|
@ -153,9 +152,9 @@ BOOL WINAPI ScrollDC( HDC hdc, INT dx, INT dy, const RECT *rc,
|
|||
HRGN hrgn2;
|
||||
|
||||
hrgn2 = CreateRectRgnIndirect( &rect );
|
||||
OffsetRgn( hrgn2, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
CombineRgn( hrgn2, hrgn2, dc->w.hVisRgn, RGN_AND );
|
||||
OffsetRgn( hrgn2, -dc->w.DCOrgX, -dc->w.DCOrgY );
|
||||
OffsetRgn( hrgn2, dc->DCOrgX, dc->DCOrgY );
|
||||
CombineRgn( hrgn2, hrgn2, dc->hVisRgn, RGN_AND );
|
||||
OffsetRgn( hrgn2, -dc->DCOrgX, -dc->DCOrgY );
|
||||
SetRectRgn( hrgn, rClip.left, rClip.top,
|
||||
rClip.right, rClip.bottom );
|
||||
CombineRgn( hrgn, hrgn, hrgn2, RGN_AND );
|
||||
|
@ -293,10 +292,10 @@ rc.left, rc.top, rc.right, rc.bottom, (UINT16)flags );
|
|||
|
||||
if( (dc = DC_GetDCPtr(hDC)) )
|
||||
{
|
||||
OffsetRgn( hrgnTemp, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
CombineRgn( hrgnTemp, hrgnTemp, dc->w.hVisRgn,
|
||||
OffsetRgn( hrgnTemp, dc->DCOrgX, dc->DCOrgY );
|
||||
CombineRgn( hrgnTemp, hrgnTemp, dc->hVisRgn,
|
||||
RGN_AND );
|
||||
OffsetRgn( hrgnTemp, -dc->w.DCOrgX, -dc->w.DCOrgY );
|
||||
OffsetRgn( hrgnTemp, -dc->DCOrgX, -dc->DCOrgY );
|
||||
CombineRgn( hrgnUpdate, hrgnTemp, hrgnClip,
|
||||
RGN_AND );
|
||||
OffsetRgn( hrgnTemp, dx, dy );
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "bitmap.h"
|
||||
#include "debugtools.h"
|
||||
#include "dce.h"
|
||||
#include "dc.h"
|
||||
#include "gdi.h"
|
||||
#include "options.h"
|
||||
#include "message.h"
|
||||
#include "heap.h"
|
||||
|
@ -877,8 +877,8 @@ void X11DRV_WND_SurfaceCopy(WND* wndPtr, HDC hdc, INT dx, INT dy,
|
|||
|
||||
if (!dcPtr) return;
|
||||
physDev = (X11DRV_PDEVICE *)dcPtr->physDev;
|
||||
dst.x = (src.x = dcPtr->w.DCOrgX + rect->left) + dx;
|
||||
dst.y = (src.y = dcPtr->w.DCOrgY + rect->top) + dy;
|
||||
dst.x = (src.x = dcPtr->DCOrgX + rect->left) + dx;
|
||||
dst.y = (src.y = dcPtr->DCOrgY + rect->top) + dy;
|
||||
|
||||
if (bUpdate) /* handles non-Wine windows hanging over the copied area */
|
||||
TSXSetGraphicsExposures( display, physDev->gc, True );
|
||||
|
@ -913,8 +913,8 @@ void X11DRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigi
|
|||
physDev = (X11DRV_PDEVICE *)dc->physDev;
|
||||
if (!wndPtr) /* Get a DC for the whole screen */
|
||||
{
|
||||
dc->w.DCOrgX = 0;
|
||||
dc->w.DCOrgY = 0;
|
||||
dc->DCOrgX = 0;
|
||||
dc->DCOrgY = 0;
|
||||
physDev->drawable = X11DRV_GetXRootWindow();
|
||||
TSXSetSubwindowMode( display, physDev->gc, IncludeInferiors );
|
||||
}
|
||||
|
@ -931,36 +931,36 @@ void X11DRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigi
|
|||
* modify the origin and reset the clipping. When the clipping is set,
|
||||
* it is moved according to the new DC origin.
|
||||
*/
|
||||
if ( (wndPtr->class->style & (CS_OWNDC | CS_CLASSDC)) && (dc->w.hClipRgn > 0))
|
||||
if ( (wndPtr->class->style & (CS_OWNDC | CS_CLASSDC)) && (dc->hClipRgn > 0))
|
||||
{
|
||||
dcOrgXCopy = dc->w.DCOrgX;
|
||||
dcOrgYCopy = dc->w.DCOrgY;
|
||||
dcOrgXCopy = dc->DCOrgX;
|
||||
dcOrgYCopy = dc->DCOrgY;
|
||||
offsetClipRgn = TRUE;
|
||||
}
|
||||
|
||||
if (flags & DCX_WINDOW)
|
||||
{
|
||||
dc->w.DCOrgX = wndPtr->rectWindow.left;
|
||||
dc->w.DCOrgY = wndPtr->rectWindow.top;
|
||||
dc->DCOrgX = wndPtr->rectWindow.left;
|
||||
dc->DCOrgY = wndPtr->rectWindow.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
dc->w.DCOrgX = wndPtr->rectClient.left;
|
||||
dc->w.DCOrgY = wndPtr->rectClient.top;
|
||||
dc->DCOrgX = wndPtr->rectClient.left;
|
||||
dc->DCOrgY = wndPtr->rectClient.top;
|
||||
}
|
||||
while (!X11DRV_WND_GetXWindow(wndPtr))
|
||||
{
|
||||
wndPtr = wndPtr->parent;
|
||||
dc->w.DCOrgX += wndPtr->rectClient.left;
|
||||
dc->w.DCOrgY += wndPtr->rectClient.top;
|
||||
dc->DCOrgX += wndPtr->rectClient.left;
|
||||
dc->DCOrgY += wndPtr->rectClient.top;
|
||||
}
|
||||
dc->w.DCOrgX -= wndPtr->rectWindow.left;
|
||||
dc->w.DCOrgY -= wndPtr->rectWindow.top;
|
||||
dc->DCOrgX -= wndPtr->rectWindow.left;
|
||||
dc->DCOrgY -= wndPtr->rectWindow.top;
|
||||
|
||||
/* reset the clip region, according to the new origin */
|
||||
if ( offsetClipRgn )
|
||||
{
|
||||
OffsetRgn(dc->w.hClipRgn, dc->w.DCOrgX - dcOrgXCopy,dc->w.DCOrgY - dcOrgYCopy);
|
||||
OffsetRgn(dc->hClipRgn, dc->DCOrgX - dcOrgXCopy,dc->DCOrgY - dcOrgYCopy);
|
||||
}
|
||||
|
||||
physDev->drawable = X11DRV_WND_GetXWindow(wndPtr);
|
||||
|
@ -972,7 +972,7 @@ void X11DRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigi
|
|||
*/
|
||||
|
||||
if( bSetClipOrigin )
|
||||
TSXSetClipOrigin( display, physDev->gc, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
TSXSetClipOrigin( display, physDev->gc, dc->DCOrgX, dc->DCOrgY );
|
||||
#endif
|
||||
}
|
||||
GDI_ReleaseObj( hdc );
|
||||
|
|
Loading…
Reference in New Issue