ReactOS  0.4.14-dev-554-g2f8d847
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

◆ _va_arg_n

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

◆ NDEBUG

#define NDEBUG

Definition at line 6 of file rosglue.c.

Function Documentation

◆ _assert()

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

Definition at line 574 of file rosglue.c.

578 {
580 }
#define DbgRaiseAssertionFailure
Definition: ke.h:164

◆ alloc_dc_ptr()

WINEDC* alloc_dc_ptr ( WORD  magic)

Definition at line 295 of file rosglue.c.

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

Referenced by CreateEnhMetaFileW(), and MFDRV_AllocMetaFile().

◆ alloc_gdi_handle()

HGDIOBJ alloc_gdi_handle ( PVOID  pvObject,
WORD  wType,
const struct gdi_obj_funcs funcs 
)

Definition at line 225 of file rosglue.c.

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

◆ bitmap_info_size()

int bitmap_info_size ( const BITMAPINFO info,
WORD  coloruse 
)

Definition at line 449 of file rosglue.c.

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

◆ ConvertObjectType()

static GDILOOBJTYPE ConvertObjectType ( WORD  wType)
static

Definition at line 200 of file rosglue.c.

202 {
203  /* Get the GDI object type */
204  switch (wType)
205  {
206  case OBJ_PEN: return GDILoObjType_LO_PEN_TYPE;
208  case OBJ_DC: return GDILoObjType_LO_DC_TYPE;
211  case OBJ_FONT: return GDILoObjType_LO_FONT_TYPE;
215  case OBJ_MEMDC: return GDILoObjType_LO_DC_TYPE;
220  default: return 0;
221  }
222 }
#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:703
#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

Referenced by alloc_gdi_handle(), and GDI_GetObjPtr().

◆ DeleteColorSpace()

BOOL WINAPI DeleteColorSpace ( HCOLORSPACE  hcs)

Definition at line 539 of file rosglue.c.

541 {
542  return NtGdiDeleteColorSpace(hcs);
543 }
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteColorSpace(_In_ HANDLE hColorSpace)

◆ DRIVER_Dispatch()

static DWORD_PTR DRIVER_Dispatch ( _In_ PHYSDEV  physdev,
_In_ DCFUNC  eFunction,
_In_ va_list  argptr 
)
static

Definition at line 743 of file rosglue.c.

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

Referenced by METADC_Dispatch().

◆ DRIVER_PatBlt()

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 619 of file rosglue.c.

627 {
628  struct bitblt_coords coords;
629 
630  InitBitBltCoords(&coords, hdc, xLeft, yTop, cx, cy);
631 
632  return physdev->funcs->pPatBlt(physdev, &coords, dwRop);
633 }
GLuint coords
Definition: glext.h:7368
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
HDC hdc
Definition: main.c:9
static VOID InitBitBltCoords(struct bitblt_coords *coords, HDC hdc, int x, int y, int cx, int cy)
Definition: rosglue.c:586
_Out_opt_ int * cx
Definition: commctrl.h:581

Referenced by DRIVER_Dispatch().

◆ DRIVER_PathToRegion()

static HRGN DRIVER_PathToRegion ( PHYSDEV  physdev)
static

Definition at line 734 of file rosglue.c.

735 {
736  DPRINT1("DRIVER_PathToRegion\n");
737  return (HRGN)(ULONG_PTR)physdev->funcs->pAbortPath( physdev );
738 }
#define DPRINT1
Definition: precomp.h:8
#define ULONG_PTR
Definition: config.h:101
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31

Referenced by DRIVER_Dispatch().

◆ DRIVER_RestoreDC()

static BOOL DRIVER_RestoreDC ( PHYSDEV  physdev,
INT  level 
)
static

Definition at line 669 of file rosglue.c.

670 {
671  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
672 
674  {
675  /* The Restore DC function needs the save level to be set correctly.
676  Note that wine's level is 0 based, while our's is (like win) 1 based. */
677  pWineDc->saveLevel = GetDCDWord(physdev->hdc, GdiGetEMFRestorDc, 0) - 1;
678 
679  /* Fail if the level is not valid */
680  if ((abs(level) > pWineDc->saveLevel) || (level == 0))
681  return FALSE;
682  }
683 
684  return physdev->funcs->pRestoreDC(physdev,level);
685 }
#define abs(i)
Definition: fconv.c:206
GLint level
Definition: gl.h:1546
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:378
#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:81
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31

Referenced by DRIVER_Dispatch().

◆ DRIVER_SelectBrush()

static HBRUSH DRIVER_SelectBrush ( PHYSDEV  physdev,
HBRUSH  hbrush,
const struct brush_pattern pattern 
)
static

Definition at line 719 of file rosglue.c.

720 {
721  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
722  HBRUSH hOldBrush;
723 
724  if (!physdev->funcs->pSelectBrush(physdev, hbrush, pattern))
725  return 0;
726 
727  hOldBrush = pWineDc->hBrush;
728  pWineDc->hBrush = hbrush;
729  return hOldBrush;
730 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:378
static HBRUSH hbrush
HBRUSH hBrush
Definition: gdi_private.h:76
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
GLubyte * pattern
Definition: glext.h:7787

Referenced by DRIVER_Dispatch().

◆ DRIVER_SelectFont()

static HFONT DRIVER_SelectFont ( PHYSDEV  physdev,
HFONT  hFont,
UINT aa_flags 
)
static

Definition at line 689 of file rosglue.c.

690 {
691  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
692  HFONT hOldFont;
693 
694  if (!physdev->funcs->pSelectFont(physdev, hFont, aa_flags))
695  return 0;
696 
697  hOldFont = pWineDc->hFont;
698  pWineDc->hFont = hFont;
699  return hOldFont;
700 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:378
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:82

Referenced by DRIVER_Dispatch().

◆ DRIVER_SelectPen()

static HPEN DRIVER_SelectPen ( PHYSDEV  physdev,
HPEN  hpen,
const struct brush_pattern pattern 
)
static

Definition at line 704 of file rosglue.c.

705 {
706  WINEDC *pWineDc = get_dc_ptr(physdev->hdc);
707  HPEN hOldPen;
708 
709  if (!physdev->funcs->pSelectPen(physdev, hpen, pattern))
710  return 0;
711 
712  hOldPen = pWineDc->hPen;
713  pWineDc->hPen = hpen;
714  return hOldPen;
715 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:378
static HPEN hpen
HPEN hPen
Definition: gdi_private.h:77
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
GLubyte * pattern
Definition: glext.h:7787

Referenced by DRIVER_Dispatch().

◆ DRIVER_StretchBlt()

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 637 of file rosglue.c.

650 {
651  struct bitblt_coords coordsDst, coordsSrc;
652  struct gdi_physdev physdevSrc = {0};
653 
654  /* Source cannot be a metafile */
656  return FALSE;
657 
658  /* Source physdev uses only hdc and func */
659  physdevSrc.hdc = hdcSrc;
660 
661  InitBitBltCoords(&coordsDst, hdcDst, xDst, yDst, cxDst, cyDst);
662  InitBitBltCoords(&coordsSrc, hdcSrc, xSrc, ySrc, cxSrc, cySrc);
663 
664  return physdev->funcs->pStretchBlt(physdev, &coordsDst, &physdevSrc, &coordsSrc, dwRop);
665 }
static HDC hdcSrc
Definition: xlate.c:32
#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:586

Referenced by DRIVER_Dispatch().

◆ free_dc_ptr()

VOID free_dc_ptr ( WINEDC pWineDc)

Definition at line 353 of file rosglue.c.

354 {
355  /* Invoke the DeleteDC callback to clean up the DC */
356  pWineDc->physDev->funcs->pDeleteDC(pWineDc->physDev);
357 
358  /* FIXME */
360  {
361  /* Get rid of the LDC */
362  ASSERT((WINEDC*)GdiGetLDC(pWineDc->hdc) == pWineDc);
363  GdiSetLDC(pWineDc->hdc, NULL);
364 
365  /* Free the DC */
366  NtGdiDeleteObjectApp(pWineDc->hdc);
367  }
369  {
370  GdiDeleteClientObj(pWineDc->hdc);
371  }
372 
373  /* Free the Wine DC */
374  HeapFree(GetProcessHeap(), 0, pWineDc);
375 }
BOOL FASTCALL GdiSetLDC(HDC hdc, PVOID pvLDC)
Definition: misc.c:802
PHYSDEV physDev
Definition: gdi_private.h:66
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:403
PVOID WINAPI GdiDeleteClientObj(_In_ HGDIOBJ hobj)
Definition: clientobj.c:173
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
__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:402

◆ free_gdi_handle()

PVOID free_gdi_handle ( HGDIOBJ  hobj)

Definition at line 248 of file rosglue.c.

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

Referenced by DeleteMetaFile(), and EMF_Delete_HENHMETAFILE().

◆ GDI_GetObjPtr()

PVOID GDI_GetObjPtr ( HGDIOBJ  hobj,
WORD  wType 
)

Definition at line 255 of file rosglue.c.

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

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

◆ GDI_hdc_not_using_object()

VOID GDI_hdc_not_using_object ( HGDIOBJ  hobj,
HDC  hdc 
)

Definition at line 432 of file rosglue.c.

435 {
436  HDC hdcLink;
437 
438  /* Remove the HDC link for the object */
439  hdcLink = GdiRemoveClientObjLink(hobj);
440  ASSERT(hdcLink == hdc);
441 }
PVOID WINAPI GdiRemoveClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:98
static HDC
Definition: imagelist.c:92
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
HDC hdc
Definition: main.c:9

Referenced by EMFDRV_DeleteDC(), and MFDRV_DeleteDC().

◆ GDI_hdc_using_object()

VOID GDI_hdc_using_object ( HGDIOBJ  hobj,
HDC  hdc 
)

Definition at line 416 of file rosglue.c.

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

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

◆ GDI_ReleaseObj()

VOID GDI_ReleaseObj ( HGDIOBJ  hobj)

Definition at line 289 of file rosglue.c.

290 {
291  /* We don't do any reference-counting */
292 }

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

◆ get_brush_bitmap_info()

BOOL get_brush_bitmap_info ( HBRUSH  hbr,
PBITMAPINFO  pbmi,
PVOID ppvBits,
PUINT  puUsage 
)

Definition at line 473 of file rosglue.c.

478 {
479  HBITMAP hbmp;
480  HDC hdc;
481 
482  /* Call win32k to get the bitmap handle and color usage */
483  hbmp = NtGdiGetObjectBitmapHandle(hbr, puUsage);
484  if (hbmp == NULL)
485  return FALSE;
486 
487  hdc = GetDC(NULL);
488  if (hdc == NULL)
489  return FALSE;
490 
491  /* Initialize the BITMAPINFO */
492  ZeroMemory(pbmi, sizeof(*pbmi));
494 
495  /* Retrieve information about the bitmap */
496  if (!GetDIBits(hdc, hbmp, 0, 0, NULL, pbmi, *puUsage))
497  return FALSE;
498 
499  /* Now allocate a buffer for the bits */
501  if (*ppvBits == NULL)
502  return FALSE;
503 
504  /* Retrieve the bitmap bits */
505  if (!GetDIBits(hdc, hbmp, 0, pbmi->bmiHeader.biHeight, *ppvBits, pbmi, *puUsage))
506  {
507  HeapFree(GetProcessHeap(), 0, *ppvBits);
508  *ppvBits = NULL;
509  return FALSE;
510  }
511 
512  /* GetDIBits doesn't set biClrUsed, but wine code needs it, so we set it */
513  if (pbmi->bmiHeader.biBitCount <= 8)
514  {
516  }
517 
518  return TRUE;
519 }
#define TRUE
Definition: types.h:120
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
HDC WINAPI GetDC(_In_opt_ HWND)
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
Definition: ntgdi.h:2780
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
#define ZeroMemory
Definition: winbase.h:1642
smooth NULL
Definition: ftsmooth.c:416
HBITMAP hbmp
#define GetProcessHeap()
Definition: compat.h:403
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
HDC hdc
Definition: main.c:9
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)
static HBITMAP
Definition: button.c:44
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ get_dc_ptr()

WINEDC* get_dc_ptr ( HDC  hdc)

Definition at line 378 of file rosglue.c.

379 {
380  /* Check for EMF DC */
382  {
383  /* The Wine DC is stored as the LDC */
384  return (WINEDC*)GdiGetLDC(hdc);
385  }
386 
387  /* Check for METADC16 */
389  {
390  return GdiGetClientObjLink(hdc);
391  }
392 
393  return NULL;
394 }
PVOID WINAPI GdiGetClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:61
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
HDC hdc
Definition: main.c:9

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

◆ get_nulldrv_dc()

WINEDC* get_nulldrv_dc ( PHYSDEV  dev)

Definition at line 186 of file rosglue.c.

187 {
188  return CONTAINING_RECORD( dev, WINEDC, NullPhysDev );
189 }
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

Referenced by get_physdev_dc(), and nulldrv_BeginPath().

◆ get_physdev_dc()

WINEDC* get_physdev_dc ( PHYSDEV  dev)

◆ GetPhysDev()

static PHYSDEV GetPhysDev ( HDC  hdc)
static

Definition at line 603 of file rosglue.c.

605 {
606  WINEDC *pWineDc;
607 
608  pWineDc = get_dc_ptr(hdc);
609  if (pWineDc == NULL)
610  {
611  return NULL;
612  }
613 
614  return pWineDc->physDev;
615 }
WINEDC * get_dc_ptr(HDC hdc)
Definition: rosglue.c:378
PHYSDEV physDev
Definition: gdi_private.h:66
smooth NULL
Definition: ftsmooth.c:416
HDC hdc
Definition: main.c:9

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

◆ InitBitBltCoords()

static VOID InitBitBltCoords ( struct bitblt_coords coords,
HDC  hdc,
int  x,
int  y,
int  cx,
int  cy 
)
static

Definition at line 586 of file rosglue.c.

593 {
594  coords->log_x = x;
595  coords->log_y = y;
596  coords->log_width = cx;
597  coords->log_height = cy;
598  coords->layout = GetLayout(hdc);
599 }
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint coords
Definition: glext.h:7368
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
HDC hdc
Definition: main.c:9
DWORD WINAPI GetLayout(_In_ HDC hdc)
Definition: coord.c:741
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
_Out_opt_ int * cx
Definition: commctrl.h:581

Referenced by DRIVER_PatBlt(), and DRIVER_StretchBlt().

◆ METADC16_Escape()

INT WINAPI METADC16_Escape ( _In_ HDC  hdc,
_In_ INT  nEscape,
_In_ INT  cbInput,
_In_ LPCSTR  lpvInData,
_Out_ LPVOID  lpvOutData 
)

Definition at line 1285 of file rosglue.c.

1291 {
1292  DWORD_PTR dwResult;
1293 
1294  /* Do not record MFCOMMENT */
1295  if (nEscape == MFCOMMENT)
1296  {
1297  // HACK required by wine code...
1298  //return 1;
1299  }
1300 
1302  &dwResult,
1303  SP_ERROR,
1304  hdc,
1305  nEscape,
1306  cbInput,
1307  lpvInData,
1308  lpvOutData);
1309 
1310  return (INT)dwResult;
1311 }
#define SP_ERROR
Definition: wingdi.h:317
#define MFCOMMENT
Definition: wingdi.h:1007
int32_t INT
Definition: typedefs.h:56
HDC hdc
Definition: main.c:9
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:1120

Referenced by Escape().

◆ METADC_DeleteDC()

BOOL WINAPI METADC_DeleteDC ( _In_ HDC  hdc)

Definition at line 1270 of file rosglue.c.

1272 {
1273  /* Only ALTDCs are supported */
1275  {
1276  DPRINT1("Trying to delete METADC %p\n", hdc);
1277  return FALSE;
1278  }
1279  // FIXME call the driver?
1280  return NtGdiDeleteObjectApp(hdc);
1281 }
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
HDC hdc
Definition: main.c:9
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
#define DPRINT1
Definition: precomp.h:8

Referenced by DeleteDC().

◆ METADC_DeleteObject()

VOID WINAPI METADC_DeleteObject ( HGDIOBJ  hobj)

Definition at line 1229 of file rosglue.c.

1230 {
1231  GDILOOBJTYPE eObjectType;
1232  HDC hdc;
1233  PHYSDEV physdev;
1234 
1235  /* Check for one of the types we actually handle here */
1236  eObjectType = GDI_HANDLE_GET_TYPE(hobj);
1237  if ((eObjectType != GDILoObjType_LO_BRUSH_TYPE) &&
1238  (eObjectType != GDILoObjType_LO_PEN_TYPE) &&
1239  (eObjectType != GDILoObjType_LO_EXTPEN_TYPE) &&
1240  (eObjectType != GDILoObjType_LO_PALETTE_TYPE) &&
1241  (eObjectType != GDILoObjType_LO_FONT_TYPE))
1242  {
1243  return;
1244  }
1245 
1246  /* Check if we have a client object link and remove it if it was found.
1247  The link is the HDC that the object was selected into. */
1248  hdc = GdiRemoveClientObjLink(hobj);
1249  if (hdc == NULL)
1250  {
1251  /* The link was not found, so we are not handling this object here */
1252  return;
1253  }
1254 
1255  /* Get the physdev */
1256  physdev = GetPhysDev(hdc);
1257  if (physdev == NULL)
1258  {
1259  /* This happens, when the METADC is already closed, when we delete
1260  the object. Simply ignore it */
1261  DPRINT1("METADC was already closed, cannot delete object. Ignoring.\n");
1262  return;
1263  }
1264 
1265  physdev->funcs->pDeleteObject(physdev, hobj);
1266 }
PVOID WINAPI GdiRemoveClientObjLink(_In_ HGDIOBJ hobj)
Definition: clientobj.c:98
static HDC
Definition: imagelist.c:92
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
HDC hdc
Definition: main.c:9
#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:603

Referenced by DeleteObject().

◆ METADC_Dispatch()

BOOL METADC_Dispatch ( _In_ DCFUNC  eFunction,
_Out_ PDWORD_PTR  pdwResult,
_In_ DWORD_PTR  dwError,
_In_ HDC  hdc,
  ... 
)

Definition at line 1120 of file rosglue.c.

1126 {
1127  PHYSDEV physdev;
1128  va_list argptr;
1129 
1130  /* Handle only METADC16 and ALTDC */
1133  {
1134  /* Let the caller handle it */
1135  return FALSE;
1136  }
1137 
1138  // See if this is other than a METADATA issue.
1140  {
1141  WINEDC* pwdc = (WINEDC*)GdiGetLDC(hdc);
1142  if (pwdc && pwdc->iType != LDC_EMFLDC)
1143  {
1144  /* Let the caller handle it */
1145  return FALSE;
1146  }
1147  }
1148 
1149  physdev = GetPhysDev(hdc);
1150  if (physdev == NULL)
1151  {
1153  *pdwResult = dwError;
1154  return TRUE;
1155  }
1156 
1157  i = eFunction;
1158  va_start(argptr, hdc);
1159  *pdwResult = DRIVER_Dispatch(physdev, eFunction, argptr);
1160  va_end(argptr);
1161  i = 0;
1162 
1163  /* Return TRUE to indicate that we want to return from the parent */
1165  (*pdwResult == dwError));
1166 }
#define TRUE
Definition: types.h:120
#define ERROR_INVALID_HANDLE
Definition: compat.h:88
#define va_end(ap)
Definition: acmsvcex.h:90
smooth NULL
Definition: ftsmooth.c:416
char * va_list
Definition: acmsvcex.h:78
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
PLDC FASTCALL GdiGetLDC(HDC hDC)
Definition: misc.c:785
#define SetLastError(x)
Definition: compat.h:417
HDC hdc
Definition: main.c:9
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:743
#define va_start(ap, A)
Definition: acmsvcex.h:91
static PHYSDEV GetPhysDev(HDC hdc)
Definition: rosglue.c:603
#define LDC_EMFLDC
Definition: gdi_private.h:57

Referenced by METADC16_Escape().

◆ METADC_GetAndSetDCDWord()

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 1170 of file rosglue.c.

1178 {
1179  PHYSDEV physdev;
1180 
1181  /* Ignore these, we let wine code handle this */
1182  UNREFERENCED_PARAMETER(ulMFId);
1183  UNREFERENCED_PARAMETER(usMF16Id);
1184 
1185  physdev = GetPhysDev(hdc);
1186  if (physdev == NULL)
1187  {
1189  *pdwResult = dwError;
1190  return TRUE;
1191  }
1192 
1193  /* Check the function */
1194  switch (uFunction)
1195  {
1196  case GdiGetSetMapMode:
1197  *pdwResult = physdev->funcs->pSetMapMode(physdev, dwIn);
1198  break;
1199 
1200  case GdiGetSetArcDirection:
1202  *pdwResult = 0;
1203  else
1204  *pdwResult = physdev->funcs->pSetArcDirection(physdev, dwIn);
1205  break;
1206 
1207  case GdiGetSetRelAbs:
1209  *pdwResult = physdev->funcs->pSetRelAbs(physdev, dwIn);
1210  else
1211  {
1212  UNIMPLEMENTED;
1213  *pdwResult = 0;
1214  }
1215  break;
1216 
1217 
1218  default:
1219  __debugbreak();
1220  }
1221 
1222  /* Return TRUE to indicate that we want to return from the parent */
1224  (*pdwResult == dwError));
1225 }
#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
smooth NULL
Definition: ftsmooth.c:416
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
#define SetLastError(x)
Definition: compat.h:417
HDC hdc
Definition: main.c:9
_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:603

◆ NULL_ExcludeClipRect()

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; }

◆ NULL_ExtSelectClipRgn()

static INT NULL_ExtSelectClipRgn ( PHYSDEV  dev,
HRGN  hrgn,
INT  iMode 
)
static

Definition at line 41 of file rosglue.c.

41 { return 1; }

◆ NULL_ExtTextOutW()

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

◆ NULL_IntersectClipRect()

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; }

◆ NULL_ModifyWorldTransform()

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

◆ NULL_OffsetClipRgn()

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:361

◆ NULL_PolyPolyline()

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

◆ NULL_RestoreDC()

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

◆ NULL_SaveDC()

static INT NULL_SaveDC ( PHYSDEV  dev)
static

Definition at line 33 of file rosglue.c.

33 { return 1; }

◆ NULL_SelectFont()

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

◆ NULL_SetMapMode()

static INT NULL_SetMapMode ( PHYSDEV  dev,
INT  iMode 
)
static

Definition at line 35 of file rosglue.c.

35 { return 1; }

◆ NULL_SetViewportExtEx()

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

◆ NULL_SetViewportOrgEx()

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

◆ NULL_SetWindowExtEx()

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

◆ NULL_SetWindowOrgEx()

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

◆ NULL_SetWorldTransform()

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

◆ NULL_Unused()

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

◆ nulldrv_AbortPath()

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

◆ nulldrv_BeginPath()

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  }
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:155
static struct path_physdev * get_path_physdev(PHYSDEV dev)
Definition: path.c:23
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:186
static const WCHAR dc[]

◆ nulldrv_CloseFigure()

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 ERROR_CAN_NOT_COMPLETE
Definition: winerror.h:582
void DPRINT(...)
Definition: polytest.cpp:61
#define SetLastError(x)
Definition: compat.h:417

◆ nulldrv_EndPath()

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 ERROR_CAN_NOT_COMPLETE
Definition: winerror.h:582
void DPRINT(...)
Definition: polytest.cpp:61
#define SetLastError(x)
Definition: compat.h:417

◆ nulldrv_FillPath()

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

◆ nulldrv_FlattenPath()

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

◆ nulldrv_SelectClipPath()

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 ERROR(name)
Definition: error_private.h:53
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
DWORD ret
Definition: path.c:47
int WINAPI ExtSelectClipRgn(_In_ HDC, _In_opt_ HRGN, _In_ int)
unsigned int BOOL
Definition: ntddk_ex.h:94
void DPRINT(...)
Definition: polytest.cpp:61
HRGN WINAPI PathToRegion(HDC hdc)
Definition: path.c:120
static HRGN hrgn
Definition: win.c:55
GLenum mode
Definition: glext.h:6217

◆ nulldrv_StrokeAndFillPath()

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

◆ nulldrv_StrokePath()

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

◆ nulldrv_WidenPath()

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

◆ push_dc_driver_ros()

void push_dc_driver_ros ( PHYSDEV dev,
PHYSDEV  physdev,
const struct gdi_dc_funcs funcs 
)

Definition at line 403 of file rosglue.c.

407 {
408  while ((*dev)->funcs->priority > funcs->priority) dev = &(*dev)->next;
409  physdev->funcs = funcs;
410  physdev->next = *dev;
411  physdev->hdc = CONTAINING_RECORD(dev, WINEDC, physDev)->hdc;
412  *dev = physdev;
413 }
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:59
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31

◆ release_dc_ptr()

VOID release_dc_ptr ( WINEDC dc)

Definition at line 397 of file rosglue.c.

398 {
399  /* We don't do any reference-counting */
400 }

◆ SetVirtualResolution()

BOOL WINAPI SetVirtualResolution ( HDC  hdc,
DWORD  cxVirtualDevicePixel,
DWORD  cyVirtualDevicePixel,
DWORD  cxVirtualDeviceMm,
DWORD  cyVirtualDeviceMm 
)

Definition at line 523 of file rosglue.c.

529 {
531  cxVirtualDevicePixel,
532  cyVirtualDevicePixel,
533  cxVirtualDeviceMm,
534  cyVirtualDeviceMm);
535 }
__kernel_entry W32KAPI BOOL APIENTRY NtGdiSetVirtualResolution(_In_ HDC hdc, _In_ INT cxVirtualDevicePixel, _In_ INT cyVirtualDevicePixel, _In_ INT cxVirtualDeviceMm, _In_ INT cyVirtualDeviceMm)
HDC hdc
Definition: main.c:9

Referenced by CreateEnhMetaFileW(), and MFDRV_AllocMetaFile().

Variable Documentation

◆ DummyPhysDevFuncs

const struct gdi_dc_funcs DummyPhysDevFuncs
static

Definition at line 50 of file rosglue.c.

Referenced by alloc_dc_ptr(), and get_physdev_dc().

◆ i

INT i = 0
static

Definition at line 22 of file rosglue.c.

Referenced by METADC_Dispatch(), and NULL_Unused().