ReactOS  0.4.10-dev-348-gbcec1fd
rosglue.c File Reference
#include <precomp.h>
#include "gdi_private.h"
#include <debug.h>
Include dependency graph for rosglue.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define _va_arg_n(p, t, i)   (*(t*)((intptr_t*)(p) + i))
 

Functions

WINEDCget_nulldrv_dc (PHYSDEV dev)
 
BOOL nulldrv_BeginPath (PHYSDEV dev)
 
BOOL nulldrv_EndPath (PHYSDEV dev)
 
BOOL nulldrv_AbortPath (PHYSDEV dev)
 
BOOL nulldrv_CloseFigure (PHYSDEV dev)
 
BOOL nulldrv_SelectClipPath (PHYSDEV dev, INT mode)
 
BOOL nulldrv_FillPath (PHYSDEV dev)
 
BOOL nulldrv_StrokeAndFillPath (PHYSDEV dev)
 
BOOL nulldrv_StrokePath (PHYSDEV dev)
 
BOOL nulldrv_FlattenPath (PHYSDEV dev)
 
BOOL nulldrv_WidenPath (PHYSDEV dev)
 
static INT_PTR NULL_Unused ()
 
static INT NULL_SaveDC (PHYSDEV dev)
 
static BOOL NULL_RestoreDC (PHYSDEV dev, INT level)
 
static INT NULL_SetMapMode (PHYSDEV dev, INT iMode)
 
static HFONT NULL_SelectFont (PHYSDEV dev, HFONT hFont, UINT *aa_flags)
 
static BOOL NULL_SetWindowExtEx (PHYSDEV dev, INT cx, INT cy, SIZE *size)
 
static BOOL NULL_SetViewportExtEx (PHYSDEV dev, INT cx, INT cy, SIZE *size)
 
static BOOL NULL_SetWindowOrgEx (PHYSDEV dev, INT x, INT y, POINT *pt)
 
static BOOL NULL_SetViewportOrgEx (PHYSDEV dev, INT x, INT y, POINT *pt)
 
static INT NULL_ExtSelectClipRgn (PHYSDEV dev, HRGN hrgn, INT iMode)
 
static INT NULL_IntersectClipRect (PHYSDEV dev, INT left, INT top, INT right, INT bottom)
 
static INT NULL_OffsetClipRgn (PHYSDEV dev, INT x, INT y)
 
static INT NULL_ExcludeClipRect (PHYSDEV dev, INT left, INT top, INT right, INT bottom)
 
static BOOL NULL_ExtTextOutW (PHYSDEV dev, INT x, INT y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cwc, const INT *lpDx)
 
static BOOL NULL_ModifyWorldTransform (PHYSDEV dev, const XFORM *xform, DWORD mode)
 
static BOOL NULL_SetWorldTransform (PHYSDEV dev, const XFORM *xform)
 
static BOOL NULL_PolyPolyline (PHYSDEV dev, const POINT *pt, const DWORD *lpt, DWORD cw)
 
WINEDCget_physdev_dc (PHYSDEV dev)
 
static GDILOOBJTYPE ConvertObjectType (WORD wType)
 
HGDIOBJ alloc_gdi_handle (PVOID pvObject, WORD wType, const struct gdi_obj_funcs *funcs)
 
PVOID free_gdi_handle (HGDIOBJ hobj)
 
PVOID GDI_GetObjPtr (HGDIOBJ hobj, WORD wType)
 
VOID GDI_ReleaseObj (HGDIOBJ hobj)
 
WINEDCalloc_dc_ptr (WORD magic)
 
VOID free_dc_ptr (WINEDC *pWineDc)
 
WINEDCget_dc_ptr (HDC hdc)
 
VOID release_dc_ptr (WINEDC *dc)
 
void push_dc_driver_ros (PHYSDEV *dev, PHYSDEV physdev, const struct gdi_dc_funcs *funcs)
 
VOID GDI_hdc_using_object (HGDIOBJ hobj, HDC hdc)
 
VOID GDI_hdc_not_using_object (HGDIOBJ hobj, HDC hdc)
 
int bitmap_info_size (const BITMAPINFO *info, WORD coloruse)
 
BOOL get_brush_bitmap_info (HBRUSH hbr, PBITMAPINFO pbmi, PVOID *ppvBits, PUINT puUsage)
 
BOOL WINAPI SetVirtualResolution (HDC hdc, DWORD cxVirtualDevicePixel, DWORD cyVirtualDevicePixel, DWORD cxVirtualDeviceMm, DWORD cyVirtualDeviceMm)
 
BOOL WINAPI DeleteColorSpace (HCOLORSPACE hcs)
 
void __cdecl _assert (const char *exp, const char *file, unsigned line)
 
static VOID InitBitBltCoords (struct bitblt_coords *coords, HDC hdc, int x, int y, int cx, int cy)
 
static PHYSDEV GetPhysDev (HDC hdc)
 
static BOOL DRIVER_PatBlt (_In_ PHYSDEV physdev, _In_ HDC hdc, _In_ INT xLeft, _In_ INT yTop, _In_ INT cx, _In_ INT cy, _In_ DWORD dwRop)
 
static BOOL DRIVER_StretchBlt (_In_ PHYSDEV physdev, _In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ DWORD dwRop)
 
static BOOL DRIVER_RestoreDC (PHYSDEV physdev, INT level)
 
static HFONT DRIVER_SelectFont (PHYSDEV physdev, HFONT hFont, UINT *aa_flags)
 
static HPEN DRIVER_SelectPen (PHYSDEV physdev, HPEN hpen, const struct brush_pattern *pattern)
 
static HBRUSH DRIVER_SelectBrush (PHYSDEV physdev, HBRUSH hbrush, const struct brush_pattern *pattern)
 
static HRGN DRIVER_PathToRegion (PHYSDEV physdev)
 
static DWORD_PTR DRIVER_Dispatch (_In_ PHYSDEV physdev, _In_ DCFUNC eFunction, _In_ va_list argptr)
 
BOOL METADC_Dispatch (_In_ DCFUNC eFunction, _Out_ PDWORD_PTR pdwResult, _In_ DWORD_PTR dwError, _In_ HDC hdc,...)
 
BOOL WINAPI METADC_GetAndSetDCDWord (_Out_ DWORD *pdwResult, _In_ HDC hdc, _In_ UINT uFunction, _In_ DWORD dwIn, _In_ ULONG ulMFId, _In_ USHORT usMF16Id, _In_ DWORD dwError)
 
VOID WINAPI METADC_DeleteObject (HGDIOBJ hobj)
 
BOOL WINAPI METADC_DeleteDC (_In_ HDC hdc)
 
INT WINAPI METADC16_Escape (_In_ HDC hdc, _In_ INT nEscape, _In_ INT cbInput, _In_ LPCSTR lpvInData, _Out_ LPVOID lpvOutData)
 

Variables

static INT i = 0
 
static const struct gdi_dc_funcs DummyPhysDevFuncs
 

Macro Definition Documentation

#define _va_arg_n (   p,
  t,
  i 
)    (*(t*)((intptr_t*)(p) + i))

Referenced by DRIVER_Dispatch().

#define NDEBUG

Definition at line 6 of file rosglue.c.

Function Documentation

void __cdecl _assert ( const char exp,
const char file,
unsigned  line 
)

Definition at line 571 of file rosglue.c.

575 {
577 }
#define DbgRaiseAssertionFailure
Definition: ke.h:164
WINEDC* alloc_dc_ptr ( WORD  magic)

Definition at line 294 of file rosglue.c.

Referenced by CreateEnhMetaFileW(), and MFDRV_AllocMetaFile().

295 {
296  WINEDC* pWineDc;
297 
298  /* Allocate the Wine DC */
299  pWineDc = HeapAlloc(GetProcessHeap(), 0, sizeof(*pWineDc));
300  if (pWineDc == NULL)
301  {
302  return NULL;
303  }
304 
305  ZeroMemory(pWineDc, sizeof(*pWineDc));
306  pWineDc->refcount = 1;
307  pWineDc->hFont = GetStockObject(SYSTEM_FONT);
308  pWineDc->hBrush = GetStockObject(WHITE_BRUSH);
309  pWineDc->hPen = GetStockObject(BLACK_PEN);
311 
312  if (magic == OBJ_ENHMETADC)
313  {
314  /* We create a metafile DC, but we ignore the reference DC, this is
315  handled by the wine code */
316  pWineDc->hdc = NtGdiCreateMetafileDC(NULL);
317  if (pWineDc->hdc == NULL)
318  {
319  HeapFree(GetProcessHeap(), 0, pWineDc);
320  return NULL;
321  }
322 
323  /* Set the Wine DC as LDC */
324  GdiSetLDC(pWineDc->hdc, pWineDc);
325  }
326  else if (magic == OBJ_METADC)
327  {
329  if (pWineDc->hdc == NULL)
330  {
331  HeapFree(GetProcessHeap(), 0, pWineDc);
332  return NULL;
333  }
334  }
335  else
336  {
337  // nothing else supported!
338  ASSERT(FALSE);
339  }
340 
341  pWineDc->physDev = &pWineDc->NullPhysDev;
342  pWineDc->NullPhysDev.funcs = &DummyPhysDevFuncs;
343  pWineDc->NullPhysDev.next = NULL;
344 
345  pWineDc->NullPhysDev.hdc = pWineDc->hdc;
346  return pWineDc;
347 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
HPALETTE hPalette
Definition: gdi_private.h:65
static const struct gdi_dc_funcs DummyPhysDevFuncs
Definition: rosglue.c:50
BOOL FASTCALL GdiSetLDC(HDC hdc, PVOID pvLDC)
Definition: misc.c:802
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
u32_t magic(void)
HGDIOBJ WINAPI GdiCreateClientObj(_In_ PVOID pvObject, _In_ GDILOOBJTYPE eObjType)
Definition: clientobj.c:148
#define ZeroMemory
Definition: winbase.h:1635
#define WHITE_BRUSH
Definition: wingdi.h:900
#define FALSE
Definition: types.h:117
PHYSDEV physDev
Definition: gdi_private.h:59
smooth NULL
Definition: ftsmooth.c:416
#define SYSTEM_FONT
Definition: wingdi.h:909
HBRUSH hBrush
Definition: gdi_private.h:63
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define DEFAULT_PALETTE
Definition: wingdi.h:911
#define OBJ_ENHMETADC
Definition: objidl.idl:1420
struct gdi_physdev NullPhysDev
Definition: gdi_private.h:58
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateMetafileDC(_In_ HDC hdc)
HPEN hPen
Definition: gdi_private.h:64
#define BLACK_PEN
Definition: wingdi.h:901
#define OBJ_METADC
Definition: objidl.idl:1412
LONG refcount
Definition: gdi_private.h:60
#define HeapFree(x, y, z)
Definition: compat.h:394
HFONT hFont
Definition: gdi_private.h:62
HGDIOBJ alloc_gdi_handle ( PVOID  pvObject,
WORD  wType,
const struct gdi_obj_funcs funcs 
)

Definition at line 224 of file rosglue.c.

228 {
229  GDILOOBJTYPE eObjType;
230 
231  /* Get the GDI object type */
232  eObjType = ConvertObjectType(wType);
233  if ((eObjType != GDILoObjType_LO_METAFILE_TYPE) &&
234  (eObjType != GDILoObjType_LO_METAFILE16_TYPE) &&
235  (eObjType != GDILoObjType_LO_METADC16_TYPE))
236  {
237  /* This is not supported! */
238  ASSERT(FALSE);
239  return NULL;
240  }
241 
242  /* Insert the client object */
243  return GdiCreateClientObj(pvObject, eObjType);
244 }
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
HGDIOBJ WINAPI GdiCreateClientObj(_In_ PVOID pvObject, _In_ GDILOOBJTYPE eObjType)
Definition: clientobj.c:148
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
static GDILOOBJTYPE ConvertObjectType(WORD wType)
Definition: rosglue.c:199
enum GDILoObjType GDILOOBJTYPE
int bitmap_info_size ( const BITMAPINFO info,
WORD  coloruse 
)

Definition at line 446 of file rosglue.c.

449 {
450  unsigned int colors, size, masks = 0;
451 
452  if (info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
453  {
454  const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)info;
455  colors = (core->bcBitCount <= 8) ? 1 << core->bcBitCount : 0;
456  return sizeof(BITMAPCOREHEADER) + colors *
457  ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBTRIPLE) : sizeof(WORD));
458  }
459  else /* assume BITMAPINFOHEADER */
460  {
461  if (info->bmiHeader.biClrUsed) colors = min( info->bmiHeader.biClrUsed, 256 );
462  else colors = info->bmiHeader.biBitCount > 8 ? 0 : 1 << info->bmiHeader.biBitCount;
463  if (info->bmiHeader.biCompression == BI_BITFIELDS) masks = 3;
464  size = max( info->bmiHeader.biSize, sizeof(BITMAPINFOHEADER) + masks * sizeof(DWORD) );
465  return size + colors * ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBQUAD) : sizeof(WORD));
466  }
467 }
#define max(a, b)
Definition: svc.c:63
unsigned short WORD
Definition: ntddk_ex.h:93
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1453
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
#define BI_BITFIELDS
Definition: mmreg.h:507
DWORD DWORD
Definition: winlogon.h:75
DWORD biCompression
Definition: amvideo.idl:35
GLsizeiptr size
Definition: glext.h:5919
#define min(a, b)
Definition: monoChain.cc:55
#define DIB_RGB_COLORS
Definition: wingdi.h:365
static const BYTE masks[8]
Definition: dib.c:2760
static GDILOOBJTYPE ConvertObjectType ( WORD  wType)
static

Definition at line 199 of file rosglue.c.

Referenced by alloc_gdi_handle(), and GDI_GetObjPtr().

201 {
202  /* Get the GDI object type */
203  switch (wType)
204  {
205  case OBJ_PEN: return GDILoObjType_LO_PEN_TYPE;
207  case OBJ_DC: return GDILoObjType_LO_DC_TYPE;
210  case OBJ_FONT: return GDILoObjType_LO_FONT_TYPE;
214  case OBJ_MEMDC: return GDILoObjType_LO_DC_TYPE;
219  default: return 0;
220  }
221 }
#define OBJ_MEMDC
Definition: objidl.idl:1418
#define OBJ_PEN
Definition: objidl.idl:1409
#define OBJ_ENHMETAFILE
Definition: objidl.idl:1421
#define OBJ_COLORSPACE
Definition: wingdi.h:702
#define OBJ_REGION
Definition: objidl.idl:1416
#define OBJ_METAFILE
Definition: objidl.idl:1417
#define OBJ_ENHMETADC
Definition: objidl.idl:1420
#define OBJ_DC
Definition: objidl.idl:1411
#define OBJ_PAL
Definition: objidl.idl:1413
#define OBJ_FONT
Definition: objidl.idl:1414
#define OBJ_EXTPEN
Definition: objidl.idl:1419
#define OBJ_BRUSH
Definition: objidl.idl:1410
#define OBJ_METADC
Definition: objidl.idl:1412
#define OBJ_BITMAP
Definition: objidl.idl:1415
BOOL WINAPI DeleteColorSpace ( HCOLORSPACE  hcs)

Definition at line 536 of file rosglue.c.

538 {
539  return NtGdiDeleteColorSpace(hcs);
540 }
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteColorSpace(_In_ HANDLE hColorSpace)
static DWORD_PTR DRIVER_Dispatch ( _In_ PHYSDEV  physdev,
_In_ DCFUNC  eFunction,
_In_ va_list  argptr 
)
static

Definition at line 740 of file rosglue.c.

Referenced by METADC_Dispatch().

744 {
745  UINT aa_flags = 0;
746 
747 /* Note that this is a hack that relies on some assumptions regarding the
748  Windows ABI. It relies on the fact that all vararg functions put their
749  parameters on the stack in the correct order. Additionally it relies
750  on the fact that none of the functions we handle here, pass any 64
751  bit arguments on a 32 bit architecture. */
752 #define _va_arg_n(p,t,i) (*(t*)((intptr_t*)(p) + i))
753 
754  switch (eFunction)
755  {
756  case DCFUNC_AbortPath:
757  return physdev->funcs->pAbortPath(physdev);
758  case DCFUNC_Arc:
759  return physdev->funcs->pArc(physdev,
760  _va_arg_n(argptr, INT, 0), // left
761  _va_arg_n(argptr, INT, 1), // top
762  _va_arg_n(argptr, INT, 2), // right
763  _va_arg_n(argptr, INT, 3), // bottom
764  _va_arg_n(argptr, INT, 4), // xstart
765  _va_arg_n(argptr, INT, 5), // ystart
766  _va_arg_n(argptr, INT, 6), // xend
767  _va_arg_n(argptr, INT, 7)); // yend
768  case DCFUNC_BeginPath:
769  return physdev->funcs->pBeginPath(physdev);
770  case DCFUNC_Chord:
771  return physdev->funcs->pChord(physdev,
772  _va_arg_n(argptr, INT, 0),
773  _va_arg_n(argptr, INT, 1),
774  _va_arg_n(argptr, INT, 2),
775  _va_arg_n(argptr, INT, 3),
776  _va_arg_n(argptr, INT, 4),
777  _va_arg_n(argptr, INT, 5),
778  _va_arg_n(argptr, INT, 6),
779  _va_arg_n(argptr, INT, 7));
780  case DCFUNC_CloseFigure:
781  return physdev->funcs->pCloseFigure(physdev);
782  case DCFUNC_Ellipse:
783  return physdev->funcs->pEllipse(physdev,
784  _va_arg_n(argptr, INT, 0),
785  _va_arg_n(argptr, INT, 1),
786  _va_arg_n(argptr, INT, 2),
787  _va_arg_n(argptr, INT, 3));
788  case DCFUNC_EndPath:
789  return physdev->funcs->pEndPath(physdev);
791  return physdev->funcs->pExcludeClipRect(physdev,
792  _va_arg_n(argptr, INT, 0),
793  _va_arg_n(argptr, INT, 1),
794  _va_arg_n(argptr, INT, 2),
795  _va_arg_n(argptr, INT, 3));
796  case DCFUNC_ExtEscape:
797  ASSERT(physdev->funcs->pExtEscape != NULL);
798  return physdev->funcs->pExtEscape(physdev,
799  _va_arg_n(argptr, INT, 0),
800  _va_arg_n(argptr, INT, 1),
801  _va_arg_n(argptr, LPCVOID, 2),
802  _va_arg_n(argptr, INT, 3),
803  _va_arg_n(argptr, LPVOID, 4));
804  case DCFUNC_ExtFloodFill:
805  return physdev->funcs->pExtFloodFill(physdev,
806  _va_arg_n(argptr, INT, 0),
807  _va_arg_n(argptr, INT, 1),
808  _va_arg_n(argptr, COLORREF, 2),
809  _va_arg_n(argptr, UINT, 3));
811  return physdev->funcs->pExtSelectClipRgn(physdev,
812  _va_arg_n(argptr, HRGN, 0), // hrgn
813  _va_arg_n(argptr, INT, 1)); // iMode
814  case DCFUNC_ExtTextOut:
815  return physdev->funcs->pExtTextOut(physdev,
816  _va_arg_n(argptr, INT, 0),// x
817  _va_arg_n(argptr, INT, 1),// y
818  _va_arg_n(argptr, UINT, 2),// fuOptions
819  _va_arg_n(argptr, const RECT *, 3),// lprc,
820  _va_arg_n(argptr, LPCWSTR, 4),// lpString,
821  _va_arg_n(argptr, UINT, 5),// cchString,
822  _va_arg_n(argptr, const INT *, 6));// lpDx);
823  case DCFUNC_FillPath:
824  return physdev->funcs->pFillPath(physdev);
825  case DCFUNC_FillRgn:
826  return physdev->funcs->pFillRgn(physdev,
827  _va_arg_n(argptr, HRGN, 0),
828  _va_arg_n(argptr, HBRUSH, 1));
829  case DCFUNC_FlattenPath:
830  return physdev->funcs->pFlattenPath(physdev);
831  case DCFUNC_FrameRgn:
832  return physdev->funcs->pFrameRgn(physdev,
833  _va_arg_n(argptr, HRGN, 0),
834  _va_arg_n(argptr, HBRUSH, 1),
835  _va_arg_n(argptr, INT, 2),
836  _va_arg_n(argptr, INT, 3));
838  return physdev->funcs->pGetDeviceCaps(physdev, va_arg(argptr, INT));
839  case DCFUNC_GdiComment:
840  return physdev->funcs->pGdiComment(physdev,
841  _va_arg_n(argptr, UINT, 0),
842  _va_arg_n(argptr, const BYTE*, 1));
844  return physdev->funcs->pIntersectClipRect(physdev,
845  _va_arg_n(argptr, INT, 0),
846  _va_arg_n(argptr, INT, 1),
847  _va_arg_n(argptr, INT, 2),
848  _va_arg_n(argptr, INT, 3));
849  case DCFUNC_InvertRgn:
850  return physdev->funcs->pInvertRgn(physdev,
851  va_arg(argptr, HRGN));
852  case DCFUNC_LineTo:
853  return physdev->funcs->pLineTo(physdev,
854  _va_arg_n(argptr, INT, 0),
855  _va_arg_n(argptr, INT, 1));
857  return physdev->funcs->pModifyWorldTransform(physdev,
858  _va_arg_n(argptr, const XFORM*, 0),
859  _va_arg_n(argptr, DWORD, 1));
860  case DCFUNC_MoveTo:
861  return physdev->funcs->pMoveTo(physdev,
862  _va_arg_n(argptr, INT, 0),
863  _va_arg_n(argptr, INT, 1));
865  return physdev->funcs->pOffsetClipRgn(physdev,
866  _va_arg_n(argptr, INT, 0), // hrgn
867  _va_arg_n(argptr, INT, 1)); // iMode
869  return physdev->funcs->pOffsetViewportOrgEx(physdev,
870  _va_arg_n(argptr, INT, 0), // X
871  _va_arg_n(argptr, INT, 1), // Y
872  _va_arg_n(argptr, LPPOINT, 2)); // lpPoint
874  return physdev->funcs->pOffsetWindowOrgEx(physdev,
875  _va_arg_n(argptr, INT, 0), // X
876  _va_arg_n(argptr, INT, 1), // Y
877  _va_arg_n(argptr, LPPOINT, 2)); // lpPoint
878  case DCFUNC_PatBlt:
879  return DRIVER_PatBlt(physdev,
880  physdev->hdc,
881  _va_arg_n(argptr, INT, 0),
882  _va_arg_n(argptr, INT, 1),
883  _va_arg_n(argptr, INT, 2),
884  _va_arg_n(argptr, INT, 3),
885  _va_arg_n(argptr, DWORD, 4));
886  case DCFUNC_Pie:
887  return physdev->funcs->pPie(physdev,
888  _va_arg_n(argptr, INT, 0),
889  _va_arg_n(argptr, INT, 1),
890  _va_arg_n(argptr, INT, 2),
891  _va_arg_n(argptr, INT, 3),
892  _va_arg_n(argptr, INT, 4),
893  _va_arg_n(argptr, INT, 5),
894  _va_arg_n(argptr, INT, 6),
895  _va_arg_n(argptr, INT, 7));
896  case DCFUNC_PolyBezier:
897  return physdev->funcs->pPolyBezier(physdev,
898  _va_arg_n(argptr, const POINT*, 0),
899  _va_arg_n(argptr, DWORD, 1));
900  case DCFUNC_PolyBezierTo:
901  return physdev->funcs->pPolyBezierTo(physdev,
902  _va_arg_n(argptr, const POINT*, 0),
903  _va_arg_n(argptr, DWORD, 1));
904  case DCFUNC_PolyDraw:
905  return physdev->funcs->pPolyDraw(physdev,
906  _va_arg_n(argptr, const POINT*, 0),
907  _va_arg_n(argptr, const BYTE*, 1),
908  _va_arg_n(argptr, DWORD, 2));
909  case DCFUNC_Polygon:
910  return physdev->funcs->pPolygon(physdev,
911  _va_arg_n(argptr, const POINT*, 0),
912  _va_arg_n(argptr, INT, 1));
913  case DCFUNC_Polyline:
914  return physdev->funcs->pPolyline(physdev,
915  _va_arg_n(argptr, const POINT*, 0),
916  _va_arg_n(argptr, INT, 1));
917  case DCFUNC_PolylineTo:
918  return physdev->funcs->pPolylineTo(physdev,
919  _va_arg_n(argptr, const POINT*, 0),
920  _va_arg_n(argptr, INT, 1));
921  case DCFUNC_PolyPolygon:
922  return physdev->funcs->pPolyPolygon(physdev,
923  _va_arg_n(argptr, const POINT*, 0),
924  _va_arg_n(argptr, const INT*, 1),
925  _va_arg_n(argptr, DWORD, 2));
926  case DCFUNC_PolyPolyline:
927  return physdev->funcs->pPolyPolyline(physdev,
928  _va_arg_n(argptr, const POINT*, 0),
929  _va_arg_n(argptr, const DWORD*, 1),
930  _va_arg_n(argptr, DWORD, 2));
933  {
935  return GDI_ERROR;
936  }
937  return physdev->funcs->pRealizePalette(physdev, NULL, FALSE);
938  case DCFUNC_Rectangle:
939  return physdev->funcs->pRectangle(physdev,
940  _va_arg_n(argptr, INT, 0),
941  _va_arg_n(argptr, INT, 1),
942  _va_arg_n(argptr, INT, 2),
943  _va_arg_n(argptr, INT, 3));
944  case DCFUNC_RestoreDC:
945  return DRIVER_RestoreDC(physdev, va_arg(argptr, INT));
946  case DCFUNC_RoundRect:
947  return physdev->funcs->pRoundRect(physdev,
948  _va_arg_n(argptr, INT, 0),
949  _va_arg_n(argptr, INT, 1),
950  _va_arg_n(argptr, INT, 2),
951  _va_arg_n(argptr, INT, 3),
952  _va_arg_n(argptr, INT, 4),
953  _va_arg_n(argptr, INT, 5));
954 
955  case DCFUNC_SaveDC:
956  return physdev->funcs->pSaveDC(physdev);
958  return physdev->funcs->pScaleViewportExtEx(physdev,
959  _va_arg_n(argptr, INT, 0), // xNum
960  _va_arg_n(argptr, INT, 1), // xDenom
961  _va_arg_n(argptr, INT, 2), // yNum
962  _va_arg_n(argptr, INT, 3), // yDenom
963  _va_arg_n(argptr, LPSIZE, 4)); // lpSize
965  return physdev->funcs->pScaleWindowExtEx(physdev,
966  _va_arg_n(argptr, INT, 0), // xNum
967  _va_arg_n(argptr, INT, 1), // xDenom
968  _va_arg_n(argptr, INT, 2), // yNum
969  _va_arg_n(argptr, INT, 3), // yDenom
970  _va_arg_n(argptr, LPSIZE, 4)); // lpSize
971  case DCFUNC_SelectBrush:
972  return (DWORD_PTR)DRIVER_SelectBrush(physdev, va_arg(argptr, HBRUSH), NULL);
974  return physdev->funcs->pSelectClipPath(physdev, va_arg(argptr, INT));
975  case DCFUNC_SelectFont:
976  return (DWORD_PTR)DRIVER_SelectFont(physdev, va_arg(argptr, HFONT), &aa_flags);
978  return (DWORD_PTR)physdev->funcs->pSelectPalette(physdev,
979  _va_arg_n(argptr, HPALETTE, 0),
980  _va_arg_n(argptr, BOOL, 1));
981  case DCFUNC_SelectPen:
982  return (DWORD_PTR)DRIVER_SelectPen(physdev, va_arg(argptr, HPEN), NULL);
984  return physdev->funcs->pSetDCBrushColor(physdev, va_arg(argptr, COLORREF));
986  return physdev->funcs->pSetDCPenColor(physdev, va_arg(argptr, COLORREF));
988  return physdev->funcs->pSetDIBitsToDevice(physdev,
989  _va_arg_n(argptr, INT, 0),
990  _va_arg_n(argptr, INT, 1),
991  _va_arg_n(argptr, DWORD, 2),
992  _va_arg_n(argptr, DWORD, 3),
993  _va_arg_n(argptr, INT, 4),
994  _va_arg_n(argptr, INT, 5),
995  _va_arg_n(argptr, UINT, 6),
996  _va_arg_n(argptr, UINT, 7),
997  _va_arg_n(argptr, LPCVOID, 8),
998  _va_arg_n(argptr, BITMAPINFO*, 9),
999  _va_arg_n(argptr, UINT, 10));
1000  case DCFUNC_SetBkColor:
1001  return physdev->funcs->pSetBkColor(physdev, va_arg(argptr, COLORREF));
1002  case DCFUNC_SetBkMode:
1003  return physdev->funcs->pSetBkMode(physdev, va_arg(argptr, INT));
1004  case DCFUNC_SetLayout:
1005  // FIXME: MF16 is UNIMPLEMENTED
1006  return physdev->funcs->pSetLayout(physdev,
1007  _va_arg_n(argptr, DWORD, 0));
1008  //case DCFUNC_SetMapMode:
1009  // return physdev->funcs->pSetMapMode(physdev, va_arg(argptr, INT));
1010  case DCFUNC_SetPixel:
1011  return physdev->funcs->pSetPixel(physdev,
1012  _va_arg_n(argptr, INT, 0),
1013  _va_arg_n(argptr, INT, 1),
1014  _va_arg_n(argptr, COLORREF, 2));
1016  return physdev->funcs->pSetPolyFillMode(physdev, va_arg(argptr, INT));
1017  case DCFUNC_SetROP2:
1018  return physdev->funcs->pSetROP2(physdev, va_arg(argptr, INT));
1020  return physdev->funcs->pSetStretchBltMode(physdev, va_arg(argptr, INT));
1021  case DCFUNC_SetTextAlign:
1022  return physdev->funcs->pSetTextAlign(physdev, va_arg(argptr, UINT));
1024  return physdev->funcs->pSetTextCharacterExtra(physdev, va_arg(argptr, INT));
1025  case DCFUNC_SetTextColor:
1026  return physdev->funcs->pSetTextColor(physdev, va_arg(argptr, COLORREF));
1028  return physdev->funcs->pSetTextJustification(physdev,
1029  _va_arg_n(argptr, INT, 0),
1030  _va_arg_n(argptr, INT, 1));
1032  return physdev->funcs->pSetViewportExtEx(physdev,
1033  _va_arg_n(argptr, INT, 0), // nXExtent
1034  _va_arg_n(argptr, INT, 1), // nYExtent
1035  _va_arg_n(argptr, LPSIZE, 2)); // lpSize
1037  return physdev->funcs->pSetViewportOrgEx(physdev,
1038  _va_arg_n(argptr, INT, 0), // X
1039  _va_arg_n(argptr, INT, 1), // Y
1040  _va_arg_n(argptr, LPPOINT, 2)); // lpPoint
1041  case DCFUNC_SetWindowExtEx:
1042  return physdev->funcs->pSetWindowExtEx(physdev,
1043  _va_arg_n(argptr, INT, 0), // nXExtent
1044  _va_arg_n(argptr, INT, 1), // nYExtent
1045  _va_arg_n(argptr, LPSIZE, 2)); // lpSize
1046  case DCFUNC_SetWindowOrgEx:
1047  return physdev->funcs->pSetWindowOrgEx(physdev,
1048  _va_arg_n(argptr, INT, 0), // X
1049  _va_arg_n(argptr, INT, 1), // Y
1050  _va_arg_n(argptr, LPPOINT, 2)); // lpPoint
1051 
1053  return physdev->funcs->pSetWorldTransform(physdev,
1054  va_arg(argptr, const XFORM*));
1055 
1056  case DCFUNC_StretchBlt:
1057  return DRIVER_StretchBlt(physdev,
1058  physdev->hdc,
1059  _va_arg_n(argptr, INT, 0),
1060  _va_arg_n(argptr, INT, 1),
1061  _va_arg_n(argptr, INT, 2),
1062  _va_arg_n(argptr, INT, 3),
1063  _va_arg_n(argptr, HDC, 4),
1064  _va_arg_n(argptr, INT, 5),
1065  _va_arg_n(argptr, INT, 6),
1066  _va_arg_n(argptr, INT, 7),
1067  _va_arg_n(argptr, INT, 8),
1068  _va_arg_n(argptr, DWORD, 9));
1070  return physdev->funcs->pStrokeAndFillPath(physdev);
1071  case DCFUNC_StrokePath:
1072  return physdev->funcs->pStrokePath(physdev);
1073  case DCFUNC_WidenPath:
1074  return physdev->funcs->pWidenPath(physdev);
1075  case DCFUNC_AngleArc:
1076  return physdev->funcs->pAngleArc(physdev,
1077  _va_arg_n(argptr, INT, 0),
1078  _va_arg_n(argptr, INT, 1),
1079  _va_arg_n(argptr, DWORD, 2),
1080  _va_arg_n(argptr, FLOAT, 3),
1081  _va_arg_n(argptr, FLOAT, 4 ));
1082  case DCFUNC_ArcTo:
1083  return physdev->funcs->pArcTo(physdev,
1084  _va_arg_n(argptr, INT, 0),
1085  _va_arg_n(argptr, INT, 1),
1086  _va_arg_n(argptr, INT, 2),
1087  _va_arg_n(argptr, INT, 3),
1088  _va_arg_n(argptr, INT, 4),
1089  _va_arg_n(argptr, INT, 5),
1090  _va_arg_n(argptr, INT, 6),
1091  _va_arg_n(argptr, INT, 7));
1092  case DCFUNC_GradientFill:
1093  return physdev->funcs->pGradientFill(physdev,
1094  _va_arg_n(argptr, TRIVERTEX *, 0),
1095  _va_arg_n(argptr, ULONG, 1),
1096  _va_arg_n(argptr, void *, 2),
1097  _va_arg_n(argptr, ULONG , 3),
1098  _va_arg_n(argptr, ULONG , 4));
1099  case DCFUNC_PathToRegion:
1100  return (DWORD_PTR)DRIVER_PathToRegion(physdev);
1101 
1102  /* These are not implemented in wine */
1103  case DCFUNC_AlphaBlend:
1104  case DCFUNC_MaskBlt:
1105  case DCFUNC_PlgBlt:
1106  case DCFUNC_TransparentBlt:
1107  UNIMPLEMENTED;
1108  return 0;
1109 
1110  default:
1111  __debugbreak();
1112  return 0;
1113  }
1114 }
#define HDC
Definition: msvc.h:22
#define _va_arg_n(p, t, i)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
#define HRGN
Definition: msvc.h:39
static HPEN DRIVER_SelectPen(PHYSDEV physdev, HPEN hpen, const struct brush_pattern *pattern)
Definition: rosglue.c:701
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
int32_t INT
Definition: typedefs.h:56
DWORD DWORD
Definition: winlogon.h:75
static BOOL DRIVER_PatBlt(_In_ PHYSDEV physdev, _In_ HDC hdc, _In_ INT xLeft, _In_ INT yTop, _In_ INT cx, _In_ INT cy, _In_ DWORD dwRop)
Definition: rosglue.c:616
static BOOL DRIVER_RestoreDC(PHYSDEV physdev, INT level)
Definition: rosglue.c:666
#define FALSE
Definition: types.h:117
static BOOL DRIVER_StretchBlt(_In_ PHYSDEV physdev, _In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ DWORD dwRop)
Definition: rosglue.c:634
smooth NULL
Definition: ftsmooth.c:416
static HRGN DRIVER_PathToRegion(PHYSDEV physdev)
Definition: rosglue.c:731
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
unsigned int BOOL
Definition: ntddk_ex.h:94
uint32_t DWORD_PTR
Definition: typedefs.h:63
unsigned char BYTE
Definition: ntddk_ex.h:96
static HFONT DRIVER_SelectFont(PHYSDEV physdev, HFONT hFont, UINT *aa_flags)
Definition: rosglue.c:686
#define va_arg(ap, T)
Definition: acmsvcex.h:89
unsigned int UINT
Definition: ndis.h:50
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
CONST void * LPCVOID
Definition: windef.h:191
float FLOAT
Definition: typedefs.h:67
unsigned int ULONG
Definition: retypes.h:1
#define UNIMPLEMENTED
Definition: debug.h:114
#define GDI_ERROR
Definition: wingdi.h:1290
DWORD COLORREF
Definition: windef.h:290
static HBRUSH DRIVER_SelectBrush(PHYSDEV physdev, HBRUSH hbrush, const struct brush_pattern *pattern)
Definition: rosglue.c:716
static BOOL DRIVER_PatBlt ( _In_ PHYSDEV  physdev,
_In_ HDC  hdc,
_In_ INT  xLeft,
_In_ INT  yTop,
_In_ INT  cx,
_In_ INT  cy,
_In_ DWORD  dwRop 
)
static

Definition at line 616 of file rosglue.c.

Referenced by DRIVER_Dispatch().

624 {
625  struct bitblt_coords coords;
626 
627  InitBitBltCoords(&coords, hdc, xLeft, yTop, cx, cy);
628 
629  return physdev->funcs->pPatBlt(physdev, &coords, dwRop);
630 }
GLuint coords
Definition: glext.h:7368
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
HDC hdc
Definition: msvc.h:53
static VOID InitBitBltCoords(struct bitblt_coords *coords, HDC hdc, int x, int y, int cx, int cy)
Definition: rosglue.c:583
_Out_opt_ int * cx
Definition: commctrl.h:570
static HRGN DRIVER_PathToRegion ( PHYSDEV  physdev)
static

Definition at line 731 of file rosglue.c.

Referenced by DRIVER_Dispatch().

732 {
733  DPRINT1("DRIVER_PathToRegion\n");
734  return (HRGN)physdev->funcs->pAbortPath( physdev );
735 }
#define HRGN
Definition: msvc.h:39
#define DPRINT1
Definition: precomp.h:8
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static BOOL DRIVER_RestoreDC ( PHYSDEV  physdev,
INT  level 
)
static

Definition at line 666 of file rosglue.c.

Referenced by DRIVER_Dispatch().

667 {
668  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
669 
671  {
672  /* The Restore DC function needs the save level to be set correctly.
673  Note that wine's level is 0 based, while our's is (like win) 1 based. */
674  pWineDc->saveLevel = GetDCDWord(physdev->hdc, GdiGetEMFRestorDc, 0) - 1;
675 
676  /* Fail if the level is not valid */
677  if ((abs(level) > pWineDc->saveLevel) || (level == 0))
678  return FALSE;
679  }
680 
681  return physdev->funcs->pRestoreDC(physdev,level);
682 }
#define abs(i)
Definition: fconv.c:206
GLint level
Definition: gl.h:1546
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:375
#define FALSE
Definition: types.h:117
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
DWORD WINAPI GetDCDWord(_In_ HDC hdc, _In_ UINT u, _In_ DWORD dwError)
Definition: dc.c:763
INT saveLevel
Definition: gdi_private.h:61
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static HBRUSH DRIVER_SelectBrush ( PHYSDEV  physdev,
HBRUSH  hbrush,
const struct brush_pattern pattern 
)
static

Definition at line 716 of file rosglue.c.

Referenced by DRIVER_Dispatch().

717 {
718  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
719  HBRUSH hOldBrush;
720 
721  if (!physdev->funcs->pSelectBrush(physdev, hbrush, pattern))
722  return 0;
723 
724  hOldBrush = pWineDc->hBrush;
725  pWineDc->hBrush = hbrush;
726  return hOldBrush;
727 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:375
static HBRUSH hbrush
HBRUSH hBrush
Definition: gdi_private.h:63
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static HFONT DRIVER_SelectFont ( PHYSDEV  physdev,
HFONT  hFont,
UINT aa_flags 
)
static

Definition at line 686 of file rosglue.c.

Referenced by DRIVER_Dispatch().

687 {
688  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
689  HFONT hOldFont;
690 
691  if (!physdev->funcs->pSelectFont(physdev, hFont, aa_flags))
692  return 0;
693 
694  hOldFont = pWineDc->hFont;
695  pWineDc->hFont = hFont;
696  return hOldFont;
697 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:375
HFONT hFont
Definition: main.c:53
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
HFONT hFont
Definition: gdi_private.h:62
static HPEN DRIVER_SelectPen ( PHYSDEV  physdev,
HPEN  hpen,
const struct brush_pattern pattern 
)
static

Definition at line 701 of file rosglue.c.

Referenced by DRIVER_Dispatch().

702 {
703  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
704  HPEN hOldPen;
705 
706  if (!physdev->funcs->pSelectPen(physdev, hpen, pattern))
707  return 0;
708 
709  hOldPen = pWineDc->hPen;
710  pWineDc->hPen = hpen;
711  return hOldPen;
712 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:375
static HPEN hpen
HPEN hPen
Definition: gdi_private.h:64
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static BOOL DRIVER_StretchBlt ( _In_ PHYSDEV  physdev,
_In_ HDC  hdcDst,
_In_ INT  xDst,
_In_ INT  yDst,
_In_ INT  cxDst,
_In_ INT  cyDst,
_In_opt_ HDC  hdcSrc,
_In_ INT  xSrc,
_In_ INT  ySrc,
_In_ INT  cxSrc,
_In_ INT  cySrc,
_In_ DWORD  dwRop 
)
static

Definition at line 634 of file rosglue.c.

Referenced by DRIVER_Dispatch().

647 {
648  struct bitblt_coords coordsDst, coordsSrc;
649  struct gdi_physdev physdevSrc = {0};
650 
651  /* Source cannot be a metafile */
653  return FALSE;
654 
655  /* Source physdev uses only hdc and func */
656  physdevSrc.hdc = hdcSrc;
657 
658  InitBitBltCoords(&coordsDst, hdcDst, xDst, yDst, cxDst, cyDst);
659  InitBitBltCoords(&coordsSrc, hdcSrc, xSrc, ySrc, cxSrc, cySrc);
660 
661  return physdev->funcs->pStretchBlt(physdev, &coordsDst, &physdevSrc, &coordsSrc, dwRop);
662 }
int int int int int int ySrc
Definition: wglext.h:473
static HDC hdcSrc
Definition: xlate.c:32
#define FALSE
Definition: types.h:117
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
static HDC hdcDst
Definition: xlate.c:32
static VOID InitBitBltCoords(struct bitblt_coords *coords, HDC hdc, int x, int y, int cx, int cy)
Definition: rosglue.c:583
int int int int int xSrc
Definition: wglext.h:473
VOID free_dc_ptr ( WINEDC pWineDc)

Definition at line 350 of file rosglue.c.

351 {
352  /* Invoke the DeleteDC callback to clean up the DC */
353  pWineDc->physDev->funcs->pDeleteDC(pWineDc->physDev);
354 
355  /* FIXME */
357  {
358  /* Get rid of the LDC */
359  ASSERT((WINEDC*)GdiGetLDC(pWineDc->hdc) == pWineDc);
360  GdiSetLDC(pWineDc->hdc, NULL);
361 
362  /* Free the DC */
363  NtGdiDeleteObjectApp(pWineDc->hdc);
364  }
366  {
367  GdiDeleteClientObj(pWineDc->hdc);
368  }
369 
370  /* Free the Wine DC */
371  HeapFree(GetProcessHeap(), 0, pWineDc);
372 }
BOOL FASTCALL GdiSetLDC(HDC hdc, PVOID pvLDC)
Definition: misc.c:802
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
PHYSDEV physDev
Definition: gdi_private.h:59
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
PLDC FASTCALL GdiGetLDC(HDC hDC)
Definition: misc.c:785
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI GdiDeleteClientObj(_In_ HGDIOBJ hobj)
Definition: clientobj.c:173
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
#define HeapFree(x, y, z)
Definition: compat.h:394
PVOID free_gdi_handle ( HGDIOBJ  hobj)

Definition at line 247 of file rosglue.c.

Referenced by DeleteMetaFile(), and EMF_Delete_HENHMETAFILE().

248 {
249  /* Should be a client object */
250  return GdiDeleteClientObj(hobj);
251 }
PVOID WINAPI GdiDeleteClientObj(_In_ HGDIOBJ hobj)
Definition: clientobj.c:173
PVOID GDI_GetObjPtr ( HGDIOBJ  hobj,
WORD  wType 
)

Definition at line 254 of file rosglue.c.

Referenced by EMF_GetEnhMetaHeader(), get_metafile_bits(), and GetMetaFileBitsEx().

257 {
258  GDILOOBJTYPE eObjType;
259 
260  /* Check if the object type matches */
261  eObjType = ConvertObjectType(wType);
262  if ((eObjType == 0) || (GDI_HANDLE_GET_TYPE(hobj) != eObjType))
263  {
264  return NULL;
265  }
266 
267  /* Check if we have an ALTDC */
268  if (eObjType == GDILoObjType_LO_ALTDC_TYPE)
269  {
270  /* Object is stored as LDC */
271  return GdiGetLDC(hobj);
272  }
273 
274  /* Check for client objects */
275  if ((eObjType == GDILoObjType_LO_METAFILE_TYPE) ||
276  (eObjType == GDILoObjType_LO_METAFILE16_TYPE) ||
277  (eObjType == GDILoObjType_LO_METADC16_TYPE))
278  {
279  return GdiGetClientObjLink(hobj);
280  }
281 
282  /* This should never happen! */
283  ASSERT(FALSE);
284  return NULL;
285 }
PVOID WINAPI GdiGetClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:61
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
static GDILOOBJTYPE ConvertObjectType(WORD wType)
Definition: rosglue.c:199
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
PLDC FASTCALL GdiGetLDC(HDC hDC)
Definition: misc.c:785
enum GDILoObjType GDILOOBJTYPE
VOID GDI_hdc_not_using_object ( HGDIOBJ  hobj,
HDC  hdc 
)

Definition at line 429 of file rosglue.c.

Referenced by EMFDRV_DeleteDC(), and MFDRV_DeleteDC().

432 {
433  HDC hdcLink;
434 
435  /* Remove the HDC link for the object */
436  hdcLink = GdiRemoveClientObjLink(hobj);
437  ASSERT(hdcLink == hdc);
438 }
#define HDC
Definition: msvc.h:22
PVOID WINAPI GdiRemoveClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:98
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel)?(CompletionRoutine!=NULL):TRUE)
HDC hdc
Definition: msvc.h:53
VOID GDI_hdc_using_object ( HGDIOBJ  hobj,
HDC  hdc 
)

Definition at line 413 of file rosglue.c.

Referenced by EMFDRV_SelectBrush(), EMFDRV_SelectFont(), EMFDRV_SelectPalette(), EMFDRV_SelectPen(), EMFDRV_SetDCBrushColor(), EMFDRV_SetDCPenColor(), MFDRV_SelectBrush(), MFDRV_SelectFont(), and MFDRV_SelectPen().

416 {
417  /* Record that we have an object in use by a METADC. We simply link the
418  object to the HDC that we use. Wine API does not give us a way to
419  respond to failure, so we silently ignore it */
420  if (!GdiCreateClientObjLink(hobj, hdc))
421  {
422  /* Ignore failure, and return */
423  DPRINT1("Failed to create link for selected METADC object.\n");
424  return;
425  }
426 }
BOOL WINAPI GdiCreateClientObjLink(_In_ HGDIOBJ hobj, _In_ PVOID pvObject)
Definition: clientobj.c:24
HDC hdc
Definition: msvc.h:53
#define DPRINT1
Definition: precomp.h:8
VOID GDI_ReleaseObj ( HGDIOBJ  hobj)

Definition at line 288 of file rosglue.c.

Referenced by EMF_GetEnhMetaHeader(), get_metafile_bits(), and GetMetaFileBitsEx().

289 {
290  /* We don't do any reference-counting */
291 }
BOOL get_brush_bitmap_info ( HBRUSH  hbr,
PBITMAPINFO  pbmi,
PVOID ppvBits,
PUINT  puUsage 
)

Definition at line 470 of file rosglue.c.

475 {
476  HBITMAP hbmp;
477  HDC hdc;
478 
479  /* Call win32k to get the bitmap handle and color usage */
480  hbmp = NtGdiGetObjectBitmapHandle(hbr, puUsage);
481  if (hbmp == NULL)
482  return FALSE;
483 
484  hdc = GetDC(NULL);
485  if (hdc == NULL)
486  return FALSE;
487 
488  /* Initialize the BITMAPINFO */
489  ZeroMemory(pbmi, sizeof(*pbmi));
490  pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
491 
492  /* Retrieve information about the bitmap */
493  if (!GetDIBits(hdc, hbmp, 0, 0, NULL, pbmi, *puUsage))
494  return FALSE;
495 
496  /* Now allocate a buffer for the bits */
497  *ppvBits = HeapAlloc(GetProcessHeap(), 0, pbmi->bmiHeader.biSizeImage);
498  if (*ppvBits == NULL)
499  return FALSE;
500 
501  /* Retrieve the bitmap bits */
502  if (!GetDIBits(hdc, hbmp, 0, pbmi->bmiHeader.biHeight, *ppvBits, pbmi, *puUsage))
503  {
504  HeapFree(GetProcessHeap(), 0, *ppvBits);
505  *ppvBits = NULL;
506  return FALSE;
507  }
508 
509  /* GetDIBits doesn't set biClrUsed, but wine code needs it, so we set it */
510  if (pbmi->bmiHeader.biBitCount <= 8)
511  {
512  pbmi->bmiHeader.biClrUsed = 1 << pbmi->bmiHeader.biBitCount;
513  }
514 
515  return TRUE;
516 }
#define HDC
Definition: msvc.h:22
#define TRUE
Definition: types.h:120
#define HBITMAP
Definition: msvc.h:28
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1453
HDC WINAPI GetDC(_In_opt_ HWND)
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
#define ZeroMemory
Definition: winbase.h:1635
#define FALSE
Definition: types.h:117
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiGetObjectBitmapHandle(_In_ HBRUSH hbr, _Out_ UINT *piUsage)
Definition: brush.cpp:502
DWORD biSizeImage
Definition: amvideo.idl:36
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
HBITMAP hbmp
Definition: msvc.h:60
#define HeapFree(x, y, z)
Definition: compat.h:394
WINEDC* get_dc_ptr ( HDC  hdc)

Definition at line 375 of file rosglue.c.

Referenced by CloseEnhMetaFile(), DRIVER_RestoreDC(), DRIVER_SelectBrush(), DRIVER_SelectFont(), DRIVER_SelectPen(), GetPhysDev(), and MFDRV_CloseMetaFile().

376 {
377  /* Check for EMF DC */
379  {
380  /* The Wine DC is stored as the LDC */
381  return (WINEDC*)GdiGetLDC(hdc);
382  }
383 
384  /* Check for METADC16 */
386  {
387  return GdiGetClientObjLink(hdc);
388  }
389 
390  return NULL;
391 }
PVOID WINAPI GdiGetClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:61
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
PLDC FASTCALL GdiGetLDC(HDC hDC)
Definition: misc.c:785
WINEDC* get_nulldrv_dc ( PHYSDEV  dev)

Definition at line 185 of file rosglue.c.

Referenced by get_physdev_dc(), and nulldrv_BeginPath().

186 {
187  return CONTAINING_RECORD( dev, WINEDC, NullPhysDev );
188 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
WINEDC* get_physdev_dc ( PHYSDEV  dev)

Definition at line 190 of file rosglue.c.

Referenced by EMFDRV_ArcChordPie(), EMFDRV_BeginPath(), EMFDRV_Ellipse(), EMFDRV_ExtTextOut(), EMFDRV_LineTo(), EMFDRV_Polylinegon(), EMFDRV_Rectangle(), EMFDRV_RestoreDC(), EMFDRV_RoundRect(), EMFDRV_SetDCBrushColor(), EMFDRV_SetDCPenColor(), emfdrv_stroke_and_fill_path(), emfpathdrv_AbortPath(), emfpathdrv_EndPath(), pathdrv_AbortPath(), and pathdrv_EndPath().

191 {
192  while (dev->funcs != &DummyPhysDevFuncs)
193  dev = dev->next;
194  return get_nulldrv_dc( dev );
195 }
static const struct gdi_dc_funcs DummyPhysDevFuncs
Definition: rosglue.c:50
struct gdi_physdev * next
Definition: gdi_driver.h:32
WINEDC * get_nulldrv_dc(PHYSDEV dev)
Definition: rosglue.c:185
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static PHYSDEV GetPhysDev ( HDC  hdc)
static

Definition at line 600 of file rosglue.c.

Referenced by METADC_DeleteObject(), METADC_Dispatch(), and METADC_GetAndSetDCDWord().

602 {
603  WINEDC *pWineDc;
604 
605  pWineDc = get_dc_ptr(hdc);
606  if (pWineDc == NULL)
607  {
608  return NULL;
609  }
610 
611  return pWineDc->physDev;
612 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:375
PHYSDEV physDev
Definition: gdi_private.h:59
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
static VOID InitBitBltCoords ( struct bitblt_coords coords,
HDC  hdc,
int  x,
int  y,
int  cx,
int  cy 
)
static

Definition at line 583 of file rosglue.c.

Referenced by DRIVER_PatBlt(), and DRIVER_StretchBlt().

590 {
591  coords->log_x = x;
592  coords->log_y = y;
593  coords->log_width = cx;
594  coords->log_height = cy;
595  coords->layout = GetLayout(hdc);
596 }
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
HDC hdc
Definition: msvc.h:53
DWORD layout
Definition: gdi_driver.h:47
DWORD WINAPI GetLayout(_In_ HDC hdc)
Definition: coord.c:735
_Out_opt_ int * cx
Definition: commctrl.h:570
INT INT y
Definition: msvc.h:62
INT x
Definition: msvc.h:62
INT WINAPI METADC16_Escape ( _In_ HDC  hdc,
_In_ INT  nEscape,
_In_ INT  cbInput,
_In_ LPCSTR  lpvInData,
_Out_ LPVOID  lpvOutData 
)

Definition at line 1271 of file rosglue.c.

Referenced by Escape().

1277 {
1278  DWORD_PTR dwResult;
1279 
1280  /* Do not record MFCOMMENT */
1281  if (nEscape == MFCOMMENT)
1282  {
1283  // HACK required by wine code...
1284  //return 1;
1285  }
1286 
1288  &dwResult,
1289  SP_ERROR,
1290  hdc,
1291  nEscape,
1292  cbInput,
1293  lpvInData,
1294  lpvOutData);
1295 
1296  return (INT)dwResult;
1297 }
#define SP_ERROR
Definition: wingdi.h:316
#define MFCOMMENT
Definition: wingdi.h:996
int32_t INT
Definition: typedefs.h:56
HDC hdc
Definition: msvc.h:53
uint32_t DWORD_PTR
Definition: typedefs.h:63
BOOL METADC_Dispatch(_In_ DCFUNC eFunction, _Out_ PDWORD_PTR pdwResult, _In_ DWORD_PTR dwError, _In_ HDC hdc,...)
Definition: rosglue.c:1117
BOOL WINAPI METADC_DeleteDC ( _In_ HDC  hdc)

Definition at line 1256 of file rosglue.c.

Referenced by DeleteDC().

1258 {
1259  /* Only ALTDCs are supported */
1261  {
1262  DPRINT1("Trying to delete METADC %p\n", hdc);
1263  return FALSE;
1264  }
1265  // FIXME call the driver?
1266  return NtGdiDeleteObjectApp(hdc);
1267 }
#define FALSE
Definition: types.h:117
HDC hdc
Definition: msvc.h:53
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
#define DPRINT1
Definition: precomp.h:8
VOID WINAPI METADC_DeleteObject ( HGDIOBJ  hobj)

Definition at line 1215 of file rosglue.c.

Referenced by DeleteObject().

1216 {
1217  GDILOOBJTYPE eObjectType;
1218  HDC hdc;
1219  PHYSDEV physdev;
1220 
1221  /* Check for one of the types we actually handle here */
1222  eObjectType = GDI_HANDLE_GET_TYPE(hobj);
1223  if ((eObjectType != GDILoObjType_LO_BRUSH_TYPE) &&
1224  (eObjectType != GDILoObjType_LO_PEN_TYPE) &&
1225  (eObjectType != GDILoObjType_LO_EXTPEN_TYPE) &&
1226  (eObjectType != GDILoObjType_LO_PALETTE_TYPE) &&
1227  (eObjectType != GDILoObjType_LO_FONT_TYPE))
1228  {
1229  return;
1230  }
1231 
1232  /* Check if we have a client object link and remove it if it was found.
1233  The link is the HDC that the object was selected into. */
1234  hdc = GdiRemoveClientObjLink(hobj);
1235  if (hdc == NULL)
1236  {
1237  /* The link was not found, so we are not handling this object here */
1238  return;
1239  }
1240 
1241  /* Get the physdev */
1242  physdev = GetPhysDev(hdc);
1243  if (physdev == NULL)
1244  {
1245  /* This happens, when the METADC is already closed, when we delete
1246  the object. Simply ignore it */
1247  DPRINT1("METADC was already closed, cannot delete object. Ignoring.\n");
1248  return;
1249  }
1250 
1251  physdev->funcs->pDeleteObject(physdev, hobj);
1252 }
#define HDC
Definition: msvc.h:22
PVOID WINAPI GdiRemoveClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:98
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
#define DPRINT1
Definition: precomp.h:8
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
enum GDILoObjType GDILOOBJTYPE
static PHYSDEV GetPhysDev(HDC hdc)
Definition: rosglue.c:600
BOOL METADC_Dispatch ( _In_ DCFUNC  eFunction,
_Out_ PDWORD_PTR  pdwResult,
_In_ DWORD_PTR  dwError,
_In_ HDC  hdc,
  ... 
)

Definition at line 1117 of file rosglue.c.

Referenced by METADC16_Escape().

1123 {
1124  PHYSDEV physdev;
1125  va_list argptr;
1126 
1127  /* Handle only METADC16 and ALTDC */
1130  {
1131  /* Let the caller handle it */
1132  return FALSE;
1133  }
1134 
1135  physdev = GetPhysDev(hdc);
1136  if (physdev == NULL)
1137  {
1139  *pdwResult = dwError;
1140  return TRUE;
1141  }
1142 
1143  i = eFunction;
1144  va_start(argptr, hdc);
1145  *pdwResult = DRIVER_Dispatch(physdev, eFunction, argptr);
1146  va_end(argptr);
1147  i = 0;
1148 
1149  /* Return TRUE to indicate that we want to return from the parent */
1151  (*pdwResult == dwError));
1152 }
#define TRUE
Definition: types.h:120
#define ERROR_INVALID_HANDLE
Definition: compat.h:88
#define va_end(ap)
Definition: acmsvcex.h:90
#define FALSE
Definition: types.h:117
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
char * va_list
Definition: acmsvcex.h:78
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
#define SetLastError(x)
Definition: compat.h:409
static INT i
Definition: rosglue.c:22
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
Definition: ntgdi.h:248
static DWORD_PTR DRIVER_Dispatch(_In_ PHYSDEV physdev, _In_ DCFUNC eFunction, _In_ va_list argptr)
Definition: rosglue.c:740
#define va_start(ap, A)
Definition: acmsvcex.h:91
static PHYSDEV GetPhysDev(HDC hdc)
Definition: rosglue.c:600
BOOL WINAPI METADC_GetAndSetDCDWord ( _Out_ DWORD pdwResult,
_In_ HDC  hdc,
_In_ UINT  uFunction,
_In_ DWORD  dwIn,
_In_ ULONG  ulMFId,
_In_ USHORT  usMF16Id,
_In_ DWORD  dwError 
)

Definition at line 1156 of file rosglue.c.

1164 {
1165  PHYSDEV physdev;
1166 
1167  /* Ignore these, we let wine code handle this */
1168  UNREFERENCED_PARAMETER(ulMFId);
1169  UNREFERENCED_PARAMETER(usMF16Id);
1170 
1171  physdev = GetPhysDev(hdc);
1172  if (physdev == NULL)
1173  {
1175  *pdwResult = dwError;
1176  return TRUE;
1177  }
1178 
1179  /* Check the function */
1180  switch (uFunction)
1181  {
1182  case GdiGetSetMapMode:
1183  *pdwResult = physdev->funcs->pSetMapMode(physdev, dwIn);
1184  break;
1185 
1186  case GdiGetSetArcDirection:
1188  *pdwResult = 0;
1189  else
1190  *pdwResult = physdev->funcs->pSetArcDirection(physdev, dwIn);
1191  break;
1192 
1193  case GdiGetSetRelAbs:
1195  *pdwResult = physdev->funcs->pSetRelAbs(physdev, dwIn);
1196  else
1197  {
1198  UNIMPLEMENTED;
1199  *pdwResult = 0;
1200  }
1201  break;
1202 
1203 
1204  default:
1205  __debugbreak();
1206  }
1207 
1208  /* Return TRUE to indicate that we want to return from the parent */
1210  (*pdwResult == dwError));
1211 }
#define TRUE
Definition: types.h:120
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define ERROR_INVALID_HANDLE
Definition: compat.h:88
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
HDC hdc
Definition: msvc.h:53
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
#define SetLastError(x)
Definition: compat.h:409
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
Definition: ntgdi.h:248
_In_ UINT _In_ DWORD dwIn
Definition: ntgdi.h:248
#define UNIMPLEMENTED
Definition: debug.h:114
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
static PHYSDEV GetPhysDev(HDC hdc)
Definition: rosglue.c:600
static INT NULL_ExcludeClipRect ( PHYSDEV  dev,
INT  left,
INT  top,
INT  right,
INT  bottom 
)
static

Definition at line 44 of file rosglue.c.

44 { return 1; }
static INT NULL_ExtSelectClipRgn ( PHYSDEV  dev,
HRGN  hrgn,
INT  iMode 
)
static

Definition at line 41 of file rosglue.c.

41 { return 1; }
static BOOL NULL_ExtTextOutW ( PHYSDEV  dev,
INT  x,
INT  y,
UINT  fuOptions,
const RECT lprc,
LPCWSTR  lpString,
UINT  cwc,
const INT lpDx 
)
static

Definition at line 45 of file rosglue.c.

45 { return TRUE; }
#define TRUE
Definition: types.h:120
static INT NULL_IntersectClipRect ( PHYSDEV  dev,
INT  left,
INT  top,
INT  right,
INT  bottom 
)
static

Definition at line 42 of file rosglue.c.

42 { return 1; }
static BOOL NULL_ModifyWorldTransform ( PHYSDEV  dev,
const XFORM xform,
DWORD  mode 
)
static

Definition at line 46 of file rosglue.c.

46 { return TRUE; }
#define TRUE
Definition: types.h:120
static INT NULL_OffsetClipRgn ( PHYSDEV  dev,
INT  x,
INT  y 
)
static

Definition at line 43 of file rosglue.c.

43 { return SIMPLEREGION; }
#define SIMPLEREGION
Definition: wingdi.h:360
static BOOL NULL_PolyPolyline ( PHYSDEV  dev,
const POINT pt,
const DWORD lpt,
DWORD  cw 
)
static

Definition at line 48 of file rosglue.c.

48 { return TRUE; }
#define TRUE
Definition: types.h:120
static BOOL NULL_RestoreDC ( PHYSDEV  dev,
INT  level 
)
static

Definition at line 34 of file rosglue.c.

34 { return TRUE; }
#define TRUE
Definition: types.h:120
static INT NULL_SaveDC ( PHYSDEV  dev)
static

Definition at line 33 of file rosglue.c.

33 { return 1; }
static HFONT NULL_SelectFont ( PHYSDEV  dev,
HFONT  hFont,
UINT aa_flags 
)
static

Definition at line 36 of file rosglue.c.

36 { return NULL; }
smooth NULL
Definition: ftsmooth.c:416
static INT NULL_SetMapMode ( PHYSDEV  dev,
INT  iMode 
)
static

Definition at line 35 of file rosglue.c.

35 { return 1; }
static BOOL NULL_SetViewportExtEx ( PHYSDEV  dev,
INT  cx,
INT  cy,
SIZE size 
)
static

Definition at line 38 of file rosglue.c.

38 { return TRUE; }
#define TRUE
Definition: types.h:120
static BOOL NULL_SetViewportOrgEx ( PHYSDEV  dev,
INT  x,
INT  y,
POINT pt 
)
static

Definition at line 40 of file rosglue.c.

40 { return TRUE; }
#define TRUE
Definition: types.h:120
static BOOL NULL_SetWindowExtEx ( PHYSDEV  dev,
INT  cx,
INT  cy,
SIZE size 
)
static

Definition at line 37 of file rosglue.c.

37 { return TRUE; }
#define TRUE
Definition: types.h:120
static BOOL NULL_SetWindowOrgEx ( PHYSDEV  dev,
INT  x,
INT  y,
POINT pt 
)
static

Definition at line 39 of file rosglue.c.

39 { return TRUE; }
#define TRUE
Definition: types.h:120
static BOOL NULL_SetWorldTransform ( PHYSDEV  dev,
const XFORM xform 
)
static

Definition at line 47 of file rosglue.c.

47 { return TRUE; }
#define TRUE
Definition: types.h:120
static INT_PTR NULL_Unused ( )
static

Definition at line 26 of file rosglue.c.

27 {
28  DPRINT1("NULL_Unused %d\n",i);
29  // __debugbreak();
30  return 0;
31 }
static INT i
Definition: rosglue.c:22
#define DPRINT1
Definition: precomp.h:8
BOOL nulldrv_AbortPath ( PHYSDEV  dev)

Definition at line 354 of file path.c.

355 {
356  //DC *dc = get_nulldrv_dc( dev );
357  DPRINT("nulldrv_AbortPath dev %p\n",dev);
358  //if (dc->path) free_gdi_path( dc->path );
359  //dc->path = NULL;
360  return TRUE;
361 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
BOOL nulldrv_BeginPath ( PHYSDEV  dev)

Definition at line 331 of file path.c.

332 {
333  DC *dc = get_nulldrv_dc( dev );
334  struct path_physdev *physdev;
335 
336  if (!path_driver.pCreateDC( &dc->physDev, NULL, NULL, NULL, NULL ))
337  {
338  return FALSE;
339  }
340  physdev = get_path_physdev( find_dc_driver( dc, &path_driver ));
341  physdev->HasPathHook = TRUE;
342  DPRINT("nulldrv_BeginPath dev %p\n",dev);
343  DPRINT("nulldrv_BeginPath pd %p\n",physdev);
344  return TRUE;
345 }
#define TRUE
Definition: types.h:120
static PHYSDEV find_dc_driver(DC *dc, const struct gdi_dc_funcs *funcs)
Definition: gdi_private.h:137
HDC dc
Definition: cylfrac.c:34
static struct path_physdev * get_path_physdev(PHYSDEV dev)
Definition: path.c:23
#define FALSE
Definition: types.h:117
const struct gdi_dc_funcs path_driver
Definition: path.c:440
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
BOOL HasPathHook
Definition: path.c:20
Definition: polytest.cpp:40
WINEDC * get_nulldrv_dc(PHYSDEV dev)
Definition: rosglue.c:185
BOOL nulldrv_CloseFigure ( PHYSDEV  dev)

Definition at line 363 of file path.c.

364 {
365  DPRINT("nulldrv_CloseFigure dev %p\n",dev);
367  return FALSE;
368 }
#define FALSE
Definition: types.h:117
#define ERROR_CAN_NOT_COMPLETE
Definition: winerror.h:582
void DPRINT(...)
Definition: polytest.cpp:61
#define SetLastError(x)
Definition: compat.h:409
BOOL nulldrv_EndPath ( PHYSDEV  dev)

Definition at line 347 of file path.c.

348 {
349  DPRINT("nulldrv_EndPath dev %p\n",dev);
351  return FALSE;
352 }
#define FALSE
Definition: types.h:117
#define ERROR_CAN_NOT_COMPLETE
Definition: winerror.h:582
void DPRINT(...)
Definition: polytest.cpp:61
#define SetLastError(x)
Definition: compat.h:409
BOOL nulldrv_FillPath ( PHYSDEV  dev)

Definition at line 384 of file path.c.

385 {
386  DPRINT("nulldrv_FillPath dev %p\n",dev);
387  //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
388  //AbortPath( dev->hdc );
389  return TRUE;
390 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
BOOL nulldrv_FlattenPath ( PHYSDEV  dev)

Definition at line 408 of file path.c.

409 {
410 /* DC *dc = get_nulldrv_dc( dev );
411  struct gdi_path *path; */
412  DPRINT("nulldrv_FlattenPath dev %p\n",dev);
413 /* if (!dc->path)
414  {
415  SetLastError( ERROR_CAN_NOT_COMPLETE );
416  return FALSE;
417  }
418  if (!(path = PATH_FlattenPath( dc->path ))) return FALSE;
419  free_gdi_path( dc->path );
420  dc->path = path;*/
421  return TRUE;
422 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
BOOL nulldrv_SelectClipPath ( PHYSDEV  dev,
INT  mode 
)

Definition at line 370 of file path.c.

371 {
372  BOOL ret = FALSE;
373  HRGN hrgn = PathToRegion( dev->hdc );
374  DPRINT("nulldrv_SelectClipPath dev %p\n",dev);
375  if (hrgn)
376  {
377  ret = ExtSelectClipRgn( dev->hdc, hrgn, mode ) != ERROR;
378  DeleteObject( hrgn );
379  }
380  return ret;
381 // return TRUE;
382 }
#define HRGN
Definition: msvc.h:39
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define ERROR(err)
Definition: vbo_exec_api.c:413
DWORD ret
Definition: path.c:47
int WINAPI ExtSelectClipRgn(_In_ HDC, _In_opt_ HRGN, _In_ int)
#define FALSE
Definition: types.h:117
void DPRINT(...)
Definition: polytest.cpp:61
unsigned int BOOL
Definition: ntddk_ex.h:94
HRGN WINAPI PathToRegion(HDC hdc)
Definition: path.c:120
static HRGN hrgn
Definition: win.c:55
BOOL nulldrv_StrokeAndFillPath ( PHYSDEV  dev)

Definition at line 392 of file path.c.

393 {
394  DPRINT("nulldrv_StrokeAndFillPath dev %p\n",dev);
395  //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
396  //AbortPath( dev->hdc );
397  return TRUE;
398 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
BOOL nulldrv_StrokePath ( PHYSDEV  dev)

Definition at line 400 of file path.c.

401 {
402  DPRINT("nulldrv_StrokePath dev %p\n",dev);
403  //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
404  //AbortPath( dev->hdc );
405  return TRUE;
406 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
BOOL nulldrv_WidenPath ( PHYSDEV  dev)

Definition at line 424 of file path.c.

425 {
426 /* DC *dc = get_nulldrv_dc( dev );
427  struct gdi_path *path;*/
428  DPRINT("nulldrv_WidenPath dev %p\n",dev);
429 /* if (!dc->path)
430  {
431  SetLastError( ERROR_CAN_NOT_COMPLETE );
432  return FALSE;
433  }
434  if (!(path = PATH_WidenPath( dc ))) return FALSE;
435  free_gdi_path( dc->path );
436  dc->path = path;*/
437  return TRUE;
438 }
#define TRUE
Definition: types.h:120
void DPRINT(...)
Definition: polytest.cpp:61
void push_dc_driver_ros ( PHYSDEV dev,
PHYSDEV  physdev,
const struct gdi_dc_funcs funcs 
)

Definition at line 400 of file rosglue.c.

404 {
405  while ((*dev)->funcs->priority > funcs->priority) dev = &(*dev)->next;
406  physdev->funcs = funcs;
407  physdev->next = *dev;
408  physdev->hdc = CONTAINING_RECORD(dev, WINEDC, physDev)->hdc;
409  *dev = physdev;
410 }
struct gdi_physdev * next
Definition: gdi_driver.h:32
static int dev
Definition: mkdosfs.c:536
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
static struct __wine_debug_functions funcs
Definition: debug.c:58
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
VOID release_dc_ptr ( WINEDC dc)

Definition at line 394 of file rosglue.c.

395 {
396  /* We don't do any reference-counting */
397 }
BOOL WINAPI SetVirtualResolution ( HDC  hdc,
DWORD  cxVirtualDevicePixel,
DWORD  cyVirtualDevicePixel,
DWORD  cxVirtualDeviceMm,
DWORD  cyVirtualDeviceMm 
)

Definition at line 520 of file rosglue.c.

Referenced by CreateEnhMetaFileW(), and MFDRV_AllocMetaFile().

526 {
528  cxVirtualDevicePixel,
529  cyVirtualDevicePixel,
530  cxVirtualDeviceMm,
531  cyVirtualDeviceMm);
532 }
HDC hdc
Definition: msvc.h:53
__kernel_entry W32KAPI BOOL APIENTRY NtGdiSetVirtualResolution(_In_ HDC hdc, _In_ INT cxVirtualDevicePixel, _In_ INT cyVirtualDevicePixel, _In_ INT cxVirtualDeviceMm, _In_ INT cyVirtualDeviceMm)

Variable Documentation

const struct gdi_dc_funcs DummyPhysDevFuncs
static

Definition at line 50 of file rosglue.c.

Referenced by alloc_dc_ptr().

INT i = 0
static

Definition at line 22 of file rosglue.c.

Referenced by METADC_Dispatch(), and NULL_Unused().