Browse Source

sys/windows: add functions and constants

hikari 3 years ago
parent
commit
88e9eb7d0c
3 changed files with 221 additions and 0 deletions
  1. 11 0
      core/sys/windows/gdi32.odin
  2. 198 0
      core/sys/windows/types.odin
  3. 12 0
      core/sys/windows/user32.odin

+ 11 - 0
core/sys/windows/gdi32.odin

@@ -7,6 +7,8 @@ foreign import gdi32 "system:Gdi32.lib"
 foreign gdi32 {
 foreign gdi32 {
 	GetStockObject :: proc(i: c_int) -> HGDIOBJ ---
 	GetStockObject :: proc(i: c_int) -> HGDIOBJ ---
 	SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ ---
 	SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ ---
+	DeleteObject :: proc(ho: HGDIOBJ) -> BOOL ---
+	SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
 
 
 	CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH ---
 	CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH ---
 
 
@@ -65,6 +67,15 @@ foreign gdi32 {
 	SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
 	SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
 	GetDCBrushColor :: proc(hdc: HDC) -> COLORREF ---
 	GetDCBrushColor :: proc(hdc: HDC) -> COLORREF ---
 	PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL ---
 	PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL ---
+	Rectangle :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL ---
+
+	CreateFontW :: proc(
+		cHeight, cWidth, cEscapement, cOrientation, cWeight: c_int,
+		bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD,
+		iClipPrecision, iQuality, iPitchAndFamily: DWORD,
+		pszFaceName: LPCWSTR,
+	) -> HFONT ---
+	TextOutW :: proc(hdc: HDC, x, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL ---
 }
 }
 
 
 RGB :: #force_inline proc "contextless" (r, g, b: u8) -> COLORREF {
 RGB :: #force_inline proc "contextless" (r, g, b: u8) -> COLORREF {

+ 198 - 0
core/sys/windows/types.odin

@@ -35,6 +35,7 @@ HGLOBAL :: distinct HANDLE
 HHOOK :: distinct HANDLE
 HHOOK :: distinct HANDLE
 HKEY :: distinct HANDLE
 HKEY :: distinct HANDLE
 HDESK :: distinct HANDLE
 HDESK :: distinct HANDLE
+HFONT :: distinct HANDLE
 BOOL :: distinct b32
 BOOL :: distinct b32
 BYTE :: distinct u8
 BYTE :: distinct u8
 BOOLEAN :: distinct b8
 BOOLEAN :: distinct b8
@@ -455,6 +456,201 @@ BROADCAST_QUERY_DENY :: 0x424D5144
 HWND_BROADCAST :: HWND(uintptr(0xffff))
 HWND_BROADCAST :: HWND(uintptr(0xffff))
 HWND_MESSAGE   :: HWND(~uintptr(0) - 2) // -3
 HWND_MESSAGE   :: HWND(~uintptr(0) - 2) // -3
 
 
+// Color Types
+CTLCOLOR_MSGBOX    :: 0
+CTLCOLOR_EDIT      :: 1
+CTLCOLOR_LISTBOX   :: 2
+CTLCOLOR_BTN       :: 3
+CTLCOLOR_DLG       :: 4
+CTLCOLOR_SCROLLBAR :: 5
+CTLCOLOR_STATIC    :: 6
+CTLCOLOR_MAX       :: 7
+
+COLOR_SCROLLBAR           :: 0
+COLOR_BACKGROUND          :: 1
+COLOR_ACTIVECAPTION       :: 2
+COLOR_INACTIVECAPTION     :: 3
+COLOR_MENU                :: 4
+COLOR_WINDOW              :: 5
+COLOR_WINDOWFRAME         :: 6
+COLOR_MENUTEXT            :: 7
+COLOR_WINDOWTEXT          :: 8
+COLOR_CAPTIONTEXT         :: 9
+COLOR_ACTIVEBORDER        :: 10
+COLOR_INACTIVEBORDER      :: 11
+COLOR_APPWORKSPACE        :: 12
+COLOR_HIGHLIGHT           :: 13
+COLOR_HIGHLIGHTTEXT       :: 14
+COLOR_BTNFACE             :: 15
+COLOR_BTNSHADOW           :: 16
+COLOR_GRAYTEXT            :: 17
+COLOR_BTNTEXT             :: 18
+COLOR_INACTIVECAPTIONTEXT :: 19
+COLOR_BTNHIGHLIGHT        :: 20
+
+COLOR_3DDKSHADOW              :: 21
+COLOR_3DLIGHT                 :: 22
+COLOR_INFOTEXT                :: 23
+COLOR_INFOBK                  :: 24
+COLOR_HOTLIGHT                :: 26
+COLOR_GRADIENTACTIVECAPTION   :: 27
+COLOR_GRADIENTINACTIVECAPTION :: 28
+COLOR_MENUHILIGHT             :: 29
+COLOR_MENUBAR                 :: 30
+
+COLOR_DESKTOP     :: COLOR_BACKGROUND
+COLOR_3DFACE      :: COLOR_BTNFACE
+COLOR_3DSHADOW    :: COLOR_BTNSHADOW
+COLOR_3DHIGHLIGHT :: COLOR_BTNHIGHLIGHT
+COLOR_3DHILIGHT   :: COLOR_BTNHIGHLIGHT
+COLOR_BTNHILIGHT  :: COLOR_BTNHIGHLIGHT
+
+// Combo Box Notification Codes
+CBN_ERRSPACE     :: -1
+CBN_SELCHANGE    :: 1
+CBN_DBLCLK       :: 2
+CBN_SETFOCUS     :: 3
+CBN_KILLFOCUS    :: 4
+CBN_EDITCHANGE   :: 5
+CBN_EDITUPDATE   :: 6
+CBN_DROPDOWN     :: 7
+CBN_CLOSEUP      :: 8
+CBN_SELENDOK     :: 9
+CBN_SELENDCANCEL :: 10
+
+// Combo Box styles
+CBS_SIMPLE            :: 0x0001
+CBS_DROPDOWN          :: 0x0002
+CBS_DROPDOWNLIST      :: 0x0003
+CBS_OWNERDRAWFIXED    :: 0x0010
+CBS_OWNERDRAWVARIABLE :: 0x0020
+CBS_AUTOHSCROLL       :: 0x0040
+CBS_OEMCONVERT        :: 0x0080
+CBS_SORT              :: 0x0100
+CBS_HASSTRINGS        :: 0x0200
+CBS_NOINTEGRALHEIGHT  :: 0x0400
+CBS_DISABLENOSCROLL   :: 0x0800
+CBS_UPPERCASE         :: 0x2000
+CBS_LOWERCASE         :: 0x4000
+
+// User Button Notification Codes
+BN_CLICKED       :: 0
+BN_PAINT         :: 1
+BN_HILITE        :: 2
+BN_UNHILITE      :: 3
+BN_DISABLE       :: 4
+BN_DOUBLECLICKED :: 5
+BN_PUSHED        :: BN_HILITE
+BN_UNPUSHED      :: BN_UNHILITE
+BN_DBLCLK        :: BN_DOUBLECLICKED
+BN_SETFOCUS      :: 6
+BN_KILLFOCUS     :: 7
+
+// Button Control Styles
+BS_PUSHBUTTON      :: 0x00000000
+BS_DEFPUSHBUTTON   :: 0x00000001
+BS_CHECKBOX        :: 0x00000002
+BS_AUTOCHECKBOX    :: 0x00000003
+BS_RADIOBUTTON     :: 0x00000004
+BS_3STATE          :: 0x00000005
+BS_AUTO3STATE      :: 0x00000006
+BS_GROUPBOX        :: 0x00000007
+BS_USERBUTTON      :: 0x00000008
+BS_AUTORADIOBUTTON :: 0x00000009
+BS_PUSHBOX         :: 0x0000000A
+BS_OWNERDRAW       :: 0x0000000B
+BS_TYPEMASK        :: 0x0000000F
+BS_LEFTTEXT        :: 0x00000020
+BS_TEXT            :: 0x00000000
+BS_ICON            :: 0x00000040
+BS_BITMAP          :: 0x00000080
+BS_LEFT            :: 0x00000100
+BS_RIGHT           :: 0x00000200
+BS_CENTER          :: 0x00000300
+BS_TOP             :: 0x00000400
+BS_BOTTOM          :: 0x00000800
+BS_VCENTER         :: 0x00000C00
+BS_PUSHLIKE        :: 0x00001000
+BS_MULTILINE       :: 0x00002000
+BS_NOTIFY          :: 0x00004000
+BS_FLAT            :: 0x00008000
+BS_RIGHTBUTTON     :: BS_LEFTTEXT
+
+// Button Control Messages
+BST_UNCHECKED     :: 0x0000
+BST_CHECKED       :: 0x0001
+BST_INDETERMINATE :: 0x0002
+BST_PUSHED        :: 0x0004
+BST_FOCUS         :: 0x0008
+
+// Static Control Constants
+SS_LEFT            :: 0x00000000
+SS_CENTER          :: 0x00000001
+SS_RIGHT           :: 0x00000002
+SS_ICON            :: 0x00000003
+SS_BLACKRECT       :: 0x00000004
+SS_GRAYRECT        :: 0x00000005
+SS_WHITERECT       :: 0x00000006
+SS_BLACKFRAME      :: 0x00000007
+SS_GRAYFRAME       :: 0x00000008
+SS_WHITEFRAME      :: 0x00000009
+SS_USERITEM        :: 0x0000000A
+SS_SIMPLE          :: 0x0000000B
+SS_LEFTNOWORDWRAP  :: 0x0000000C
+SS_OWNERDRAW       :: 0x0000000D
+SS_BITMAP          :: 0x0000000E
+SS_ENHMETAFILE     :: 0x0000000F
+SS_ETCHEDHORZ      :: 0x00000010
+SS_ETCHEDVERT      :: 0x00000011
+SS_ETCHEDFRAME     :: 0x00000012
+SS_TYPEMASK        :: 0x0000001F
+SS_REALSIZECONTROL :: 0x00000040
+SS_NOPREFIX        :: 0x00000080
+SS_NOTIFY          :: 0x00000100
+SS_CENTERIMAGE     :: 0x00000200
+SS_RIGHTJUST       :: 0x00000400
+SS_REALSIZEIMAGE   :: 0x00000800
+SS_SUNKEN          :: 0x00001000
+SS_EDITCONTROL     :: 0x00002000
+SS_ENDELLIPSIS     :: 0x00004000
+SS_PATHELLIPSIS    :: 0x00008000
+SS_WORDELLIPSIS    :: 0x0000C000
+SS_ELLIPSISMASK    :: 0x0000C000
+
+// Edit Control Styles
+ES_LEFT        :: 0x0000
+ES_CENTER      :: 0x0001
+ES_RIGHT       :: 0x0002
+ES_MULTILINE   :: 0x0004
+ES_UPPERCASE   :: 0x0008
+ES_LOWERCASE   :: 0x0010
+ES_PASSWORD    :: 0x0020
+ES_AUTOVSCROLL :: 0x0040
+ES_AUTOHSCROLL :: 0x0080
+ES_NOHIDESEL   :: 0x0100
+ES_OEMCONVERT  :: 0x0400
+ES_READONLY    :: 0x0800
+ES_WANTRETURN  :: 0x1000
+ES_NUMBER      :: 0x2000
+
+// Font Weights
+FW_DONTCARE   :: 0
+FW_THIN       :: 100
+FW_EXTRALIGHT :: 200
+FW_LIGHT      :: 300
+FW_NORMAL     :: 400
+FW_MEDIUM     :: 500
+FW_SEMIBOLD   :: 600
+FW_BOLD       :: 700
+FW_EXTRABOLD  :: 800
+FW_HEAVY      :: 900
+
+FW_ULTRALIGHT :: FW_EXTRALIGHT
+FW_REGULAR    :: FW_NORMAL
+FW_DEMIBOLD   :: FW_SEMIBOLD
+FW_ULTRABOLD  :: FW_EXTRABOLD
+FW_BLACK      :: FW_HEAVY
+
 PTIMERAPCROUTINE :: #type proc "stdcall" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD)
 PTIMERAPCROUTINE :: #type proc "stdcall" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD)
 
 
 TIMERPROC :: #type proc "stdcall" (HWND, UINT, UINT_PTR, DWORD)
 TIMERPROC :: #type proc "stdcall" (HWND, UINT, UINT_PTR, DWORD)
@@ -544,6 +740,8 @@ MSG :: struct {
 	pt: POINT,
 	pt: POINT,
 }
 }
 
 
+LPMSG :: ^MSG
+
 PAINTSTRUCT :: struct {
 PAINTSTRUCT :: struct {
 	hdc: HDC,
 	hdc: HDC,
 	fErase: BOOL,
 	fErase: BOOL,

+ 12 - 0
core/sys/windows/user32.odin

@@ -161,6 +161,18 @@ foreign user32 {
 		uTimeout: UINT,
 		uTimeout: UINT,
 		lpdwResult: PDWORD_PTR,
 		lpdwResult: PDWORD_PTR,
 	) -> LRESULT ---
 	) -> LRESULT ---
+
+	GetSysColor :: proc(nIndex: c_int) -> DWORD ---
+	GetSysColorBrush :: proc(nIndex: c_int) -> HBRUSH ---
+	SetSysColors :: proc(cElements: c_int, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL ---
+	MessageBeep :: proc(uType: UINT) -> BOOL ---
+
+	IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL ---
+	GetWindowTextLengthW :: proc(hWnd: HWND) -> c_int ---
+	GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: c_int) -> c_int ---
+	SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL ---
+	CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
+	EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL ---
 }
 }
 
 
 CreateWindowW :: #force_inline proc "stdcall" (
 CreateWindowW :: #force_inline proc "stdcall" (