[CMAKE]
[reactos.git] / subsystems / win32 / win32k / include / surface.h
index 3fe9054..4da7577 100644 (file)
 /* GDI surface object */
 typedef struct _SURFACE
 {
-  BASEOBJECT  BaseObject;
-
-  SURFOBJ     SurfObj;
-  FLONG              flHooks;
-  FLONG       flFlags;
-  struct _PALETTE  *ppal;
-
-  union
-  {
-    HANDLE    hSecureUMPD;  // if UMPD_SURFACE set
-    HANDLE    hMirrorParent;// if MIRROR_SURFACE set
-    HANDLE    hDDSurface;   // if DIRECTDRAW_SURFACE set
-  };
-
-  SIZEL       dimension;    /* For SetBitmapDimension(), do NOT use
+    BASEOBJECT  BaseObject;
+
+    SURFOBJ     SurfObj;
+    //XDCOBJ *   pdcoAA;
+    FLONG       flags;
+    struct _PALETTE  *ppal;
+    //UINT       unk_050;
+
+    union
+    {
+        HANDLE  hSecureUMPD;  // if UMPD_SURFACE set
+        HANDLE  hMirrorParent;// if MIRROR_SURFACE set
+        HANDLE  hDDSurface;   // if DIRECTDRAW_SURFACE set
+    };
+
+    SIZEL       sizlDim;      /* For SetBitmapDimension(), do NOT use
                                to get width/height of bitmap, use
                                bitmap.bmWidth/bitmap.bmHeight for
                                that */
-  
-  HDC         hDC; // Doc in "Undocumented Windows", page 546, seems to be supported with XP.
-  ULONG       cRef;         // 0x064
-  HPALETTE    hpalHint;
 
-  /* For device-independent bitmaps: */
-  HANDLE      hDIBSection;
-  HANDLE      hSecure;
-  DWORD       dwOffset;
+    HDC         hdc;          // Doc in "Undocumented Windows", page 546, seems to be supported with XP.
+    ULONG       cRef;
+    HPALETTE    hpalHint;
+
+    /* For device-independent bitmaps: */
+    HANDLE      hDIBSection;
+    HANDLE      hSecure;
+    DWORD       dwOffset;
+    //UINT       unk_078;
 
   /* reactos specific */
-  PFAST_MUTEX BitsLock;     /* You need to hold this lock before you touch
-                               the actual bits in the bitmap */
-  HPALETTE hDIBPalette;
-  DWORD dsBitfields[3]; // hack, should probably use palette instead
-  DWORD biClrUsed;
-  DWORD biClrImportant;
+    DWORD biClrImportant;
 } SURFACE, *PSURFACE;
 
-#define BITMAPOBJ_IS_APIBITMAP         0x1
+// flags field:
+//#define HOOK_BITBLT               0x00000001
+//#define HOOK_STRETCHBLT           0x00000002
+//#define HOOK_PLGBLT               0x00000004
+//#define HOOK_TEXTOUT              0x00000008
+//#define HOOK_PAINT                0x00000010
+//#define HOOK_STROKEPATH           0x00000020
+//#define HOOK_FILLPATH             0x00000040
+//#define HOOK_STROKEANDFILLPATH    0x00000080
+//#define HOOK_LINETO               0x00000100
+//#define SHAREACCESS_SURFACE       0x00000200
+//#define HOOK_COPYBITS             0x00000400
+//#define REDIRECTION_SURFACE       0x00000800 // ?
+//#define HOOK_MOVEPANNING          0x00000800
+//#define HOOK_SYNCHRONIZE          0x00001000
+//#define HOOK_STRETCHBLTROP        0x00002000
+//#define HOOK_SYNCHRONIZEACCESS    0x00004000
+//#define USE_DEVLOCK_SURFACE       0x00004000
+//#define HOOK_TRANSPARENTBLT       0x00008000
+//#define HOOK_ALPHABLEND           0x00010000
+//#define HOOK_GRADIENTFILL         0x00020000
+//#if (NTDDI_VERSION < 0x06000000)
+// #define HOOK_FLAGS               0x0003B5FF
+//#else
+// #define HOOK_FLAGS               0x0003B5EF
+//#endif
+#define UMPD_SURFACE              0x00040000
+#define MIRROR_SURFACE            0x00080000
+#define DIRECTDRAW_SURFACE        0x00100000
+#define DRIVER_CREATED_SURFACE    0x00200000
+#define ENG_CREATE_DEVICE_SURFACE 0x00400000
+#define DDB_SURFACE               0x00800000
+#define LAZY_DELETE_SURFACE       0x01000000
+#define BANDING_SURFACE           0x02000000
+#define API_BITMAP                0x04000000
+#define PALETTE_SELECT_SET        0x08000000
+#define UNREADABLE_SURFACE        0x10000000
+#define DYNAMIC_MODE_PALETTE      0x20000000
+#define ABORT_SURFACE             0x40000000
+#define PDEV_SURFACE              0x80000000
+
+
+#define BMF_DONT_FREE 0x100
+#define BMF_RLE_HACK  0x200
+
 
 /*  Internal interface  */
 
-#define SURFACE_AllocSurface()    ((PSURFACE) GDIOBJ_AllocObj(GDIObjType_SURF_TYPE))
-#define SURFACE_AllocSurfaceWithHandle()    ((PSURFACE) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP))
+#define SURFACE_AllocSurfaceWithHandle()    ((PSURFACE) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP, sizeof(SURFACE)))
 #define SURFACE_FreeSurface(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDIObjType_SURF_TYPE)
 #define SURFACE_FreeSurfaceByHandle(hBMObj) GDIOBJ_FreeObjByHandle((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
 
 /* NOTE: Use shared locks! */
-#define  SURFACE_LockSurface(hBMObj) \
-  ((PSURFACE) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
 #define  SURFACE_ShareLockSurface(hBMObj) \
   ((PSURFACE) GDIOBJ_ShareLockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
 #define  SURFACE_UnlockSurface(pBMObj)  \
-  GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
+  GDIOBJ_vUnlockObject ((POBJ)pBMObj)
 #define  SURFACE_ShareUnlockSurface(pBMObj)  \
-  GDIOBJ_ShareUnlockObjByPtr ((POBJ)pBMObj)
-
-#define SURFACE_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
-#define SURFACE_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
+  GDIOBJ_vDereferenceObject ((POBJ)pBMObj)
 
 BOOL INTERNAL_CALL SURFACE_Cleanup(PVOID ObjectBody);
-BOOL INTERNAL_CALL SURFACE_InitBitsLock(SURFACE *pBMObj);
-void INTERNAL_CALL SURFACE_CleanupBitsLock(SURFACE *pBMObj);
+
+PSURFACE
+NTAPI
+SURFACE_AllocSurface(
+    IN ULONG iType,
+    IN ULONG cx,
+    IN ULONG cy,
+    IN ULONG iFormat);
+
+BOOL
+NTAPI
+SURFACE_bSetBitmapBits(
+    IN PSURFACE psurf,
+    IN USHORT fjBitmap,
+    IN ULONG ulWidth,
+    IN PVOID pvBits OPTIONAL);
 
 #define GDIDEV(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))
 #define GDIDEVFUNCS(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))->DriverFunctions
 
-INT   FASTCALL BitsPerFormat (ULONG Format);
-ULONG FASTCALL BitmapFormat (WORD Bits, DWORD Compression);
+ULONG FASTCALL BitmapFormat(ULONG cBits, ULONG iCompression);
+extern UCHAR gajBitsPerFormat[];
+#define BitsPerFormat(Format) gajBitsPerFormat[Format]
+
+#define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3)
+#define WIDTH_BYTES_ALIGN16(cx, bpp) ((((cx) * (bpp) + 15) & ~15) >> 3)
+