mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 13:00:28 +00:00
sys/windows: add basic Gdi32.lib support
This commit is contained in:
66
core/sys/windows/gdi32.odin
Normal file
66
core/sys/windows/gdi32.odin
Normal file
@@ -0,0 +1,66 @@
|
||||
// +build windows
|
||||
package sys_windows
|
||||
|
||||
foreign import gdi32 "system:Gdi32.lib"
|
||||
|
||||
@(default_calling_convention="stdcall")
|
||||
foreign gdi32 {
|
||||
GetStockObject :: proc(i: c_int) -> HGDIOBJ ---
|
||||
SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ ---
|
||||
|
||||
CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH ---
|
||||
|
||||
CreateDIBitmap :: proc(
|
||||
hdc: HDC,
|
||||
pbmih: ^BITMAPINFOHEADER,
|
||||
flInit: DWORD,
|
||||
pjBits: ^VOID,
|
||||
pbmi: ^BITMAPINFO,
|
||||
iUsage: UINT,
|
||||
) -> HBITMAP ---
|
||||
|
||||
CreateDIBSection :: proc(
|
||||
hdc: HDC,
|
||||
pbmi: ^BITMAPINFO,
|
||||
usage: UINT,
|
||||
ppvBits: ^^VOID,
|
||||
hSection: HANDLE,
|
||||
offset: DWORD,
|
||||
) -> HBITMAP ---
|
||||
|
||||
StretchDIBits :: proc(
|
||||
hdc: HDC,
|
||||
xDest: c_int,
|
||||
yDest: c_int,
|
||||
DestWidth: c_int,
|
||||
DestHeight: c_int,
|
||||
xSrc: c_int,
|
||||
ySrc: c_int,
|
||||
SrcWidth: c_int,
|
||||
SrcHeight: c_int,
|
||||
lpBits: ^VOID,
|
||||
lpbmi: ^BITMAPINFO,
|
||||
iUsage: UINT,
|
||||
rop: DWORD,
|
||||
) -> c_int ---
|
||||
|
||||
StretchBlt :: proc(
|
||||
hdcDest: HDC,
|
||||
xDest: c_int,
|
||||
yDest: c_int,
|
||||
wDest: c_int,
|
||||
hDest: c_int,
|
||||
hdcSrc: HDC,
|
||||
xSrc: c_int,
|
||||
ySrc: c_int,
|
||||
wSrc: c_int,
|
||||
hSrc: c_int,
|
||||
rop: DWORD,
|
||||
) -> BOOL ---
|
||||
|
||||
SetPixelFormat :: proc(hdc: HDC, format: c_int, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL ---
|
||||
ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> c_int ---
|
||||
SwapBuffers :: proc(HDC) -> BOOL ---
|
||||
|
||||
PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL ---
|
||||
}
|
||||
@@ -27,6 +27,9 @@ HICON :: distinct HANDLE
|
||||
HCURSOR :: distinct HANDLE
|
||||
HMENU :: distinct HANDLE
|
||||
HBRUSH :: distinct HANDLE
|
||||
HGDIOBJ :: distinct HANDLE
|
||||
HBITMAP :: distinct HANDLE
|
||||
HGLOBAL :: distinct HANDLE
|
||||
BOOL :: distinct b32
|
||||
BYTE :: distinct u8
|
||||
BOOLEAN :: distinct b8
|
||||
@@ -92,7 +95,8 @@ LPPROCESS_INFORMATION :: ^PROCESS_INFORMATION
|
||||
PSECURITY_ATTRIBUTES :: ^SECURITY_ATTRIBUTES
|
||||
LPSECURITY_ATTRIBUTES :: ^SECURITY_ATTRIBUTES
|
||||
LPSTARTUPINFO :: ^STARTUPINFO
|
||||
PVOID :: rawptr
|
||||
VOID :: rawptr
|
||||
PVOID :: rawptr
|
||||
LPVOID :: rawptr
|
||||
PINT :: ^INT
|
||||
LPINT :: ^INT
|
||||
@@ -466,6 +470,185 @@ IDI_ERROR := IDI_HAND
|
||||
IDI_INFORMATION := IDI_ASTERISK
|
||||
|
||||
|
||||
// DIB color table identifiers
|
||||
DIB_RGB_COLORS :: 0
|
||||
DIB_PAL_COLORS :: 1
|
||||
|
||||
// constants for CreateDIBitmap
|
||||
CBM_INIT :: 0x04 // initialize bitmap
|
||||
|
||||
// Region Flags
|
||||
ERROR :: 0
|
||||
NULLREGION :: 1
|
||||
SIMPLEREGION :: 2
|
||||
COMPLEXREGION :: 3
|
||||
RGN_ERROR :: ERROR
|
||||
|
||||
// StretchBlt() Modes
|
||||
BLACKONWHITE :: 1
|
||||
WHITEONBLACK :: 2
|
||||
COLORONCOLOR :: 3
|
||||
HALFTONE :: 4
|
||||
MAXSTRETCHBLTMODE :: 4
|
||||
|
||||
// Binary raster ops
|
||||
R2_BLACK :: 1 // 0
|
||||
R2_NOTMERGEPEN :: 2 // DPon
|
||||
R2_MASKNOTPEN :: 3 // DPna
|
||||
R2_NOTCOPYPEN :: 4 // PN
|
||||
R2_MASKPENNOT :: 5 // PDna
|
||||
R2_NOT :: 6 // Dn
|
||||
R2_XORPEN :: 7 // DPx
|
||||
R2_NOTMASKPEN :: 8 // DPan
|
||||
R2_MASKPEN :: 9 // DPa
|
||||
R2_NOTXORPEN :: 10 // DPxn
|
||||
R2_NOP :: 11 // D
|
||||
R2_MERGENOTPEN :: 12 // DPno
|
||||
R2_COPYPEN :: 13 // P
|
||||
R2_MERGEPENNOT :: 14 // PDno
|
||||
R2_MERGEPEN :: 15 // DPo
|
||||
R2_WHITE :: 16 // 1
|
||||
R2_LAST :: 16
|
||||
|
||||
// Ternary raster operations
|
||||
SRCCOPY : DWORD : 0x00CC0020 // dest = source
|
||||
SRCPAINT : DWORD : 0x00EE0086 // dest = source OR dest
|
||||
SRCAND : DWORD : 0x008800C6 // dest = source AND dest
|
||||
SRCINVERT : DWORD : 0x00660046 // dest = source XOR dest
|
||||
SRCERASE : DWORD : 0x00440328 // dest = source AND (NOT dest)
|
||||
NOTSRCCOPY : DWORD : 0x00330008 // dest = (NOT source)
|
||||
NOTSRCERASE : DWORD : 0x001100A6 // dest = (NOT src) AND (NOT dest)
|
||||
MERGECOPY : DWORD : 0x00C000CA // dest = (source AND pattern
|
||||
MERGEPAINT : DWORD : 0x00BB0226 // dest = (NOT source) OR dest
|
||||
PATCOPY : DWORD : 0x00F00021 // dest = pattern
|
||||
PATPAINT : DWORD : 0x00FB0A09 // dest = DPSnoo
|
||||
PATINVERT : DWORD : 0x005A0049 // dest = pattern XOR dest
|
||||
DSTINVERT : DWORD : 0x00550009 // dest = (NOT dest)
|
||||
BLACKNESS : DWORD : 0x00000042 // dest = BLACK
|
||||
WHITENESS : DWORD : 0x00FF0062 // dest = WHITE
|
||||
NOMIRRORBITMAP : DWORD : 0x80000000 // Do not Mirror the bitmap in this call
|
||||
CAPTUREBLT : DWORD : 0x40000000 // Include layered windows
|
||||
|
||||
// Stock Logical Objects
|
||||
WHITE_BRUSH :: 0
|
||||
LTGRAY_BRUSH :: 1
|
||||
GRAY_BRUSH :: 2
|
||||
DKGRAY_BRUSH :: 3
|
||||
BLACK_BRUSH :: 4
|
||||
NULL_BRUSH :: 5
|
||||
HOLLOW_BRUSH :: NULL_BRUSH
|
||||
WHITE_PEN :: 6
|
||||
BLACK_PEN :: 7
|
||||
NULL_PEN :: 8
|
||||
OEM_FIXED_FONT :: 10
|
||||
ANSI_FIXED_FONT :: 11
|
||||
ANSI_VAR_FONT :: 12
|
||||
SYSTEM_FONT :: 13
|
||||
DEVICE_DEFAULT_FONT :: 14
|
||||
DEFAULT_PALETTE :: 15
|
||||
SYSTEM_FIXED_FONT :: 16
|
||||
DEFAULT_GUI_FONT :: 17
|
||||
DC_BRUSH :: 18
|
||||
DC_PEN :: 19
|
||||
STOCK_LAST :: 19
|
||||
|
||||
CLR_INVALID :: 0xFFFFFFFF
|
||||
|
||||
RGBQUAD :: struct {
|
||||
rgbBlue: BYTE,
|
||||
rgbGreen: BYTE,
|
||||
rgbRed: BYTE,
|
||||
rgbReserved: BYTE,
|
||||
}
|
||||
|
||||
PIXELFORMATDESCRIPTOR :: struct {
|
||||
nSize: WORD,
|
||||
nVersion: WORD,
|
||||
dwFlags: DWORD,
|
||||
iPixelType: BYTE,
|
||||
cColorBits: BYTE,
|
||||
cRedBits: BYTE,
|
||||
cRedShift: BYTE,
|
||||
cGreenBits: BYTE,
|
||||
cGreenShift: BYTE,
|
||||
cBlueBits: BYTE,
|
||||
cBlueShift: BYTE,
|
||||
cAlphaBits: BYTE,
|
||||
cAlphaShift: BYTE,
|
||||
cAccumBits: BYTE,
|
||||
cAccumRedBits: BYTE,
|
||||
cAccumGreenBits: BYTE,
|
||||
cAccumBlueBits: BYTE,
|
||||
cAccumAlphaBits: BYTE,
|
||||
cDepthBits: BYTE,
|
||||
cStencilBits: BYTE,
|
||||
cAuxBuffers: BYTE,
|
||||
iLayerType: BYTE,
|
||||
bReserved: BYTE,
|
||||
dwLayerMask: DWORD,
|
||||
dwVisibleMask: DWORD,
|
||||
dwDamageMask: DWORD,
|
||||
}
|
||||
|
||||
BITMAPINFOHEADER :: struct {
|
||||
biSize: DWORD,
|
||||
biWidth: LONG,
|
||||
biHeight: LONG,
|
||||
biPlanes: WORD,
|
||||
biBitCount: WORD,
|
||||
biCompression: DWORD,
|
||||
biSizeImage: DWORD,
|
||||
biXPelsPerMeter: LONG,
|
||||
biYPelsPerMeter: LONG,
|
||||
biClrUsed: DWORD,
|
||||
biClrImportant: DWORD,
|
||||
}
|
||||
|
||||
BITMAPINFO :: struct {
|
||||
bmiHeader: BITMAPINFOHEADER,
|
||||
bmiColors: [1]RGBQUAD,
|
||||
}
|
||||
|
||||
// pixel types
|
||||
PFD_TYPE_RGBA :: 0
|
||||
PFD_TYPE_COLORINDEX :: 1
|
||||
|
||||
// layer types
|
||||
PFD_MAIN_PLANE :: 0
|
||||
PFD_OVERLAY_PLANE :: 1
|
||||
PFD_UNDERLAY_PLANE :: -1
|
||||
|
||||
// PIXELFORMATDESCRIPTOR flags
|
||||
PFD_DOUBLEBUFFER :: 0x00000001
|
||||
PFD_STEREO :: 0x00000002
|
||||
PFD_DRAW_TO_WINDOW :: 0x00000004
|
||||
PFD_DRAW_TO_BITMAP :: 0x00000008
|
||||
PFD_SUPPORT_GDI :: 0x00000010
|
||||
PFD_SUPPORT_OPENGL :: 0x00000020
|
||||
PFD_GENERIC_FORMAT :: 0x00000040
|
||||
PFD_NEED_PALETTE :: 0x00000080
|
||||
PFD_NEED_SYSTEM_PALETTE :: 0x00000100
|
||||
PFD_SWAP_EXCHANGE :: 0x00000200
|
||||
PFD_SWAP_COPY :: 0x00000400
|
||||
PFD_SWAP_LAYER_BUFFERS :: 0x00000800
|
||||
PFD_GENERIC_ACCELERATED :: 0x00001000
|
||||
PFD_SUPPORT_DIRECTDRAW :: 0x00002000
|
||||
PFD_DIRECT3D_ACCELERATED :: 0x00004000
|
||||
PFD_SUPPORT_COMPOSITION :: 0x00008000
|
||||
|
||||
// PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
|
||||
PFD_DEPTH_DONTCARE :: 0x20000000
|
||||
PFD_DOUBLEBUFFER_DONTCARE :: 0x40000000
|
||||
PFD_STEREO_DONTCARE :: 0x80000000
|
||||
|
||||
// constants for the biCompression field
|
||||
BI_RGB :: 0
|
||||
BI_RLE8 :: 1
|
||||
BI_RLE4 :: 2
|
||||
BI_BITFIELDS :: 3
|
||||
BI_JPEG :: 4
|
||||
BI_PNG :: 5
|
||||
|
||||
WSA_FLAG_OVERLAPPED: DWORD : 0x01
|
||||
WSA_FLAG_NO_HANDLE_INHERIT: DWORD : 0x80
|
||||
|
||||
|
||||
Reference in New Issue
Block a user