Some OS/2 updates
[wxWidgets.git] / include / wx / msw / dibutils.h
CommitLineData
2bda0e17
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: dibutils.h
3// Purpose: Utilities for DIBs
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Microsoft, Julian Smart
bbcdf8bc 9// Licence: wxWindows licence
2bda0e17
KB
10/////////////////////////////////////////////////////////////////////////////
11
12/***************************************************************************
13
14 (C) Copyright 1994 Microsoft Corp. All rights reserved.
15
16 You have a royalty-free right to use, modify, reproduce and
17 distribute the Sample Files (and/or any modified version) in
18 any way you find useful, provided that you agree that
19 Microsoft has no warranty obligations or liability for any
20 Sample Application Files which are modified.
21
22 **************************************************************************/
23
24/***************************************************************************
25 Functions for handling Device Independent Bitmaps and clearing the
26 System Palette.
27 **************************************************************************/
28
29#ifndef SAMPLES_UTILS_H
30#define SAMPLES_UTILS_H
31
32#ifdef __GNUG__
33#pragma interface "dibutils.h"
34#endif
35
36typedef LPBITMAPINFOHEADER PDIB;
37typedef HANDLE HDIB;
38
39/***************************************************************************
40 External function declarations
41 **************************************************************************/
42
a61ddc47
UJ
43void wxClearSystemPalette(void);
44PDIB wxDibOpenFile(LPTSTR szFile);
45int wxDibWriteFile(LPTSTR szFile, LPBITMAPINFOHEADER lpbi);
46BOOL wxDibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
47PDIB wxDibCreate(int bits, int dx, int dy);
48BOOL wxDibMapToPalette(PDIB pdib, HPALETTE hpal);
49HPALETTE wxMakePalette(const BITMAPINFO FAR* Info, UINT flags);
2bda0e17
KB
50
51/****************************************************************************
52 Internal function declarations
53 ***************************************************************************/
54
a61ddc47 55PDIB wxDibReadBitmapInfo(HFILE fh);
2bda0e17
KB
56
57/****************************************************************************
58 DIB macros.
59 ***************************************************************************/
60
61#ifdef WIN32
a61ddc47 62 #define wxHandleFromDib(lpbi) GlobalHandle(lpbi)
2bda0e17 63#else
a61ddc47 64 #define wxHandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
2bda0e17
KB
65#endif
66
a61ddc47 67#define wxDibFromHandle(h) (PDIB)GlobalLock(h)
2bda0e17 68
a61ddc47 69#define wxDibFree(pdib) GlobalFreePtr(pdib)
2bda0e17 70
a61ddc47 71#define wxWIDTHBYTES(i) ((unsigned)((i+31)&(~31))/8) /* ULONG aligned ! */
2bda0e17 72
a61ddc47
UJ
73#define wxDibWidth(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
74#define wxDibHeight(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
75#define wxDibBitCount(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
76#define wxDibCompression(lpbi) (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
2bda0e17 77
a61ddc47
UJ
78#define wxDibWidthBytesN(lpbi, n) (UINT)wxWIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
79#define wxDibWidthBytes(lpbi) wxDibWidthBytesN(lpbi, (lpbi)->biBitCount)
2bda0e17 80
a61ddc47
UJ
81#define wxDibSizeImage(lpbi) ((lpbi)->biSizeImage == 0 \
82 ? ((DWORD)(UINT)wxDibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
2bda0e17
KB
83 : (lpbi)->biSizeImage)
84
a61ddc47
UJ
85#define wxDibSize(lpbi) ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
86#define wxDibPaletteSize(lpbi) (wxDibNumColors(lpbi) * sizeof(RGBQUAD))
2bda0e17 87
a61ddc47 88#define wxDibFlipY(lpbi, y) ((int)(lpbi)->biHeight-1-(y))
2bda0e17
KB
89
90//HACK for NT BI_BITFIELDS DIBs
91#ifdef WIN32
a61ddc47
UJ
92 #define wxDibPtr(lpbi) ((lpbi)->biCompression == BI_BITFIELDS \
93 ? (LPVOID)(wxDibColors(lpbi) + 3) \
94 : (LPVOID)(wxDibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
2bda0e17 95#else
a61ddc47 96 #define wxDibPtr(lpbi) (LPVOID)(wxDibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
2bda0e17
KB
97#endif
98
a61ddc47 99#define wxDibColors(lpbi) ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
2bda0e17 100
a61ddc47 101#define wxDibNumColors(lpbi) ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
2bda0e17
KB
102 ? (int)(1 << (int)(lpbi)->biBitCount) \
103 : (int)(lpbi)->biClrUsed)
104
a61ddc47 105#define wxDibXYN(lpbi,pb,x,y,n) (LPVOID)( \
2bda0e17
KB
106 (BYTE _huge *)(pb) + \
107 (UINT)((UINT)(x) * (UINT)(n) / 8u) + \
a61ddc47 108 ((DWORD)wxDibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
2bda0e17 109
a61ddc47 110#define wxDibXY(lpbi,x,y) wxDibXYN(lpbi,wxDibPtr(lpbi),x,y,(lpbi)->biBitCount)
2bda0e17 111
a61ddc47
UJ
112#define wxFixBitmapInfo(lpbi) if ((lpbi)->biSizeImage == 0) \
113 (lpbi)->biSizeImage = wxDibSizeImage(lpbi); \
2bda0e17 114 if ((lpbi)->biClrUsed == 0) \
a61ddc47 115 (lpbi)->biClrUsed = wxDibNumColors(lpbi);
2917e920
BM
116
117// if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0)
118// ; // (lpbi)->biClrUsed = 3;
2bda0e17 119
a61ddc47 120#define wxDibInfo(pDIB) ((BITMAPINFO FAR *)(pDIB))
2bda0e17
KB
121
122/***************************************************************************/
123
124#ifndef BI_BITFIELDS
125 #define BI_BITFIELDS 3
126#endif
127
128#ifndef HALFTONE
129 #define HALFTONE COLORONCOLOR
130#endif
131
132#endif