]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/dibutils.h
added some wxMSW stuff
[wxWidgets.git] / include / wx / msw / dibutils.h
diff --git a/include/wx/msw/dibutils.h b/include/wx/msw/dibutils.h
new file mode 100644 (file)
index 0000000..b43d4fa
--- /dev/null
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        dibutils.h
+// Purpose:     Utilities for DIBs
+// Author:      Julian Smart
+// Modified by:
+// Created:     04/01/98
+// RCS-ID:      $Id$
+// Copyright:   (c) Microsoft, Julian Smart
+// Licence:    wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/***************************************************************************
+
+    (C) Copyright 1994 Microsoft Corp.  All rights reserved.
+
+    You have a royalty-free right to use, modify, reproduce and 
+    distribute the Sample Files (and/or any modified version) in 
+    any way you find useful, provided that you agree that 
+        Microsoft has no warranty obligations or liability for any
+    Sample Application Files which are modified. 
+
+ **************************************************************************/
+
+/***************************************************************************
+    Functions for handling Device Independent Bitmaps and clearing the 
+        System Palette.
+ **************************************************************************/
+
+#ifndef SAMPLES_UTILS_H  
+#define SAMPLES_UTILS_H
+
+#ifdef __GNUG__
+#pragma interface "dibutils.h"
+#endif
+
+typedef     LPBITMAPINFOHEADER PDIB;
+typedef     HANDLE             HDIB;
+
+/***************************************************************************
+   External function declarations
+ **************************************************************************/
+
+void        ClearSystemPalette(void);
+PDIB        DibOpenFile(LPSTR szFile);  
+int                    DibWriteFile(LPSTR szFile, LPBITMAPINFOHEADER lpbi);
+BOOL        DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
+PDIB        DibCreate(int bits, int dx, int dy);
+BOOL        DibMapToPalette(PDIB pdib, HPALETTE hpal);
+HPALETTE MakePalette(const BITMAPINFO FAR* Info, UINT flags);
+
+/****************************************************************************
+   Internal function declarations
+ ***************************************************************************/
+
+PDIB        DibReadBitmapInfo(HFILE fh);
+
+/****************************************************************************
+   DIB macros.
+ ***************************************************************************/
+
+#ifdef  WIN32
+        #define HandleFromDib(lpbi) GlobalHandle(lpbi)
+#else
+    #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
+#endif
+
+#define DibFromHandle(h)        (PDIB)GlobalLock(h)
+
+#define DibFree(pdib)           GlobalFreePtr(pdib)
+
+#define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
+
+#define DibWidth(lpbi)          (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
+#define DibHeight(lpbi)         (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
+#define DibBitCount(lpbi)       (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
+#define DibCompression(lpbi)    (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
+
+#define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
+#define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
+
+#define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 \
+                                    ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
+                                    : (lpbi)->biSizeImage)
+
+#define DibSize(lpbi)           ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
+#define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
+
+#define DibFlipY(lpbi, y)       ((int)(lpbi)->biHeight-1-(y))
+
+//HACK for NT BI_BITFIELDS DIBs
+#ifdef WIN32
+    #define DibPtr(lpbi)            ((lpbi)->biCompression == BI_BITFIELDS \
+                                       ? (LPVOID)(DibColors(lpbi) + 3) \
+                                       : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
+#else
+        #define DibPtr(lpbi)            (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
+#endif
+
+#define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
+
+#define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
+                                    ? (int)(1 << (int)(lpbi)->biBitCount)          \
+                                    : (int)(lpbi)->biClrUsed)
+
+#define DibXYN(lpbi,pb,x,y,n)   (LPVOID)(                                     \
+                                (BYTE _huge *)(pb) +                          \
+                                (UINT)((UINT)(x) * (UINT)(n) / 8u) +          \
+                                ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
+
+#define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
+
+#define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 \
+                                                                                               (lpbi)->biSizeImage = DibSizeImage(lpbi); \
+                                if ((lpbi)->biClrUsed == 0)                   \
+                                    (lpbi)->biClrUsed = DibNumColors(lpbi);   \
+                                if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0) \
+                                    ; // (lpbi)->biClrUsed = 3;                    
+
+#define DibInfo(pDIB)     ((BITMAPINFO FAR *)(pDIB))
+
+/***************************************************************************/
+
+#ifndef BI_BITFIELDS
+  #define BI_BITFIELDS 3
+#endif  
+
+#ifndef HALFTONE
+  #define HALFTONE COLORONCOLOR
+#endif
+
+#endif