2016-04-21 11:55:09 -05:00
// 21 april 2016
2016-04-23 14:46:39 -05:00
# include "winapi.hpp"
# include "../ui.h"
# include "../ui_windows.h"
# include "../common/uipriv.h"
# include "resources.hpp"
# include "compilerver.hpp"
// ui internal window messages
enum {
// redirected WM_COMMAND and WM_NOTIFY
msgCOMMAND = WM_APP + 0x40 , // start offset just to be safe
msgNOTIFY ,
msgHSCROLL ,
msgQueued ,
2016-04-27 00:06:35 -05:00
// TODO convert to a function like with container
2016-04-23 14:46:39 -05:00
msgD2DScratchPaint ,
} ;
2016-04-21 11:55:09 -05:00
2016-04-22 12:31:33 -05:00
// alloc.cpp
extern void initAlloc ( void ) ;
extern void uninitAlloc ( void ) ;
2016-04-21 11:55:09 -05:00
// events.cpp
extern BOOL runWM_COMMAND ( WPARAM wParam , LPARAM lParam , LRESULT * lResult ) ;
extern BOOL runWM_NOTIFY ( WPARAM wParam , LPARAM lParam , LRESULT * lResult ) ;
extern BOOL runWM_HSCROLL ( WPARAM wParam , LPARAM lParam , LRESULT * lResult ) ;
extern void issueWM_WININICHANGE ( WPARAM wParam , LPARAM lParam ) ;
2016-04-21 17:03:52 -05:00
// utf16.cpp
2016-04-21 22:29:44 -05:00
# define emptyUTF16() ((WCHAR *) uiAlloc(1 * sizeof (WCHAR), "WCHAR[]"))
# define emptyUTF8() ((char *) uiAlloc(1 * sizeof (char), "char[]"))
2016-04-21 17:03:52 -05:00
extern WCHAR * toUTF16 ( const char * str ) ;
extern char * toUTF8 ( const WCHAR * wstr ) ;
2016-04-22 12:01:55 -05:00
extern WCHAR * utf16dup ( const WCHAR * orig ) ;
2016-04-21 17:03:52 -05:00
extern WCHAR * strf ( const WCHAR * format , . . . ) ;
extern WCHAR * vstrf ( const WCHAR * format , va_list ap ) ;
2016-04-23 16:31:59 -05:00
extern WCHAR * debugstrf ( const WCHAR * format , . . . ) ;
2016-04-21 17:03:52 -05:00
extern WCHAR * debugvstrf ( const WCHAR * format , va_list ap ) ;
2016-04-21 17:10:30 -05:00
extern char * LFtoCRLF ( const char * lfonly ) ;
extern void CRLFtoLF ( const char * s ) ;
2016-04-21 17:03:52 -05:00
// debug.cpp
2016-04-23 16:31:59 -05:00
// see http://stackoverflow.com/questions/14421656/is-there-widely-available-wide-character-variant-of-file
2016-04-23 21:15:33 -05:00
// we turn __LINE__ into a string because PRIiMAX can't be converted to a wide string in MSVC (it seems to be defined as "ll" "i" according to the compiler errors)
2016-04-23 19:26:37 -05:00
// also note the use of __FUNCTION__ here; __func__ doesn't seem to work for some reason
# define _ws2(m) L ## m
# define _ws(m) _ws2(m)
2016-04-23 21:15:33 -05:00
# define _ws2n(m) L ## #m
# define _wsn(m) _ws2n(m)
# define debugargs const WCHAR *file, const WCHAR *line, const WCHAR *func
2016-04-23 16:31:59 -05:00
extern HRESULT _logLastError ( debugargs , const WCHAR * s ) ;
2016-04-23 21:15:33 -05:00
# define logLastError(s) _logLastError(_ws(__FILE__), _wsn(__LINE__), _ws(__FUNCTION__), s)
2016-04-21 17:03:52 -05:00
extern HRESULT _logHRESULT ( debugargs , const WCHAR * s , HRESULT hr ) ;
2016-04-23 21:15:33 -05:00
# define logHRESULT(s, hr) _logHRESULT(_ws(__FILE__), _wsn(__LINE__), _ws(__FUNCTION__), s, hr)
2016-04-21 17:03:52 -05:00
extern void _implbug ( debugargs , const WCHAR * format , . . . ) ;
2016-04-23 21:23:07 -05:00
# define implbug(...) _implbug(_ws(__FILE__), _wsn(__LINE__), _ws(__FUNCTION__), __VA_ARGS__)
2016-04-21 22:05:10 -05:00
// winutil.cpp
extern int windowClassOf ( HWND hwnd , . . . ) ;
extern void mapWindowRect ( HWND from , HWND to , RECT * r ) ;
extern DWORD getStyle ( HWND hwnd ) ;
extern void setStyle ( HWND hwnd , DWORD style ) ;
extern DWORD getExStyle ( HWND hwnd ) ;
extern void setExStyle ( HWND hwnd , DWORD exstyle ) ;
extern void clientSizeToWindowSize ( HWND hwnd , intmax_t * width , intmax_t * height , BOOL hasMenubar ) ;
extern HWND parentOf ( HWND child ) ;
extern HWND parentToplevel ( HWND child ) ;
2016-04-22 18:51:33 -05:00
extern void setWindowInsertAfter ( HWND hwnd , HWND insertAfter ) ;
2016-04-21 22:29:44 -05:00
// text.cpp
extern WCHAR * windowTextAndLen ( HWND hwnd , LRESULT * len ) ;
extern WCHAR * windowText ( HWND hwnd ) ;
extern void setWindowText ( HWND hwnd , WCHAR * wtext ) ;
2016-04-22 12:31:33 -05:00
// init.cpp
extern HINSTANCE hInstance ;
extern int nCmdShow ;
extern HFONT hMessageFont ;
extern HBRUSH hollowBrush ;
extern uiInitOptions options ;
2016-04-22 12:52:02 -05:00
// utilwin.cpp
extern HWND utilWindow ;
extern const char * initUtilWindow ( HICON hDefaultIcon , HCURSOR hDefaultCursor ) ;
extern void uninitUtilWindow ( void ) ;
2016-04-22 13:36:21 -05:00
// main.cpp
2016-04-23 21:29:54 -05:00
extern int registerMessageFilter ( void ) ;
2016-04-22 13:36:21 -05:00
extern void unregisterMessageFilter ( void ) ;
2016-04-22 17:11:20 -05:00
// parent.cpp
extern void paintContainerBackground ( HWND hwnd , HDC dc , RECT * paintRect ) ;
extern BOOL handleParentMessages ( HWND hwnd , UINT uMsg , WPARAM wParam , LPARAM lParam , LRESULT * lResult ) ;
2016-04-22 18:51:33 -05:00
2016-04-23 10:50:47 -05:00
// d2dscratch.cpp
extern ATOM registerD2DScratchClass ( HICON hDefaultIcon , HCURSOR hDefaultCursor ) ;
extern void unregisterD2DScratchClass ( void ) ;
extern HWND newD2DScratch ( HWND parent , RECT * rect , HMENU controlID , SUBCLASSPROC subclass , DWORD_PTR subclassData ) ;
2016-04-23 14:46:39 -05:00
// area.cpp
# define areaClass L"libui_uiAreaClass"
extern ATOM registerAreaClass ( HICON , HCURSOR ) ;
extern void unregisterArea ( void ) ;
// areaevents.cpp
extern BOOL areaFilter ( MSG * ) ;
// window.cpp
extern ATOM registerWindowClass ( HICON , HCURSOR ) ;
extern void unregisterWindowClass ( void ) ;
extern void ensureMinimumWindowSize ( uiWindow * ) ;
2016-04-22 20:36:19 -05:00
2016-04-23 14:46:39 -05:00
// container.cpp
# define containerClass L"libui_uiContainerClass"
extern ATOM initContainer ( HICON , HCURSOR ) ;
extern void uninitContainer ( void ) ;
2016-04-27 11:41:30 -05:00
// tabpage.cpp
struct tabPage {
HWND hwnd ;
uiControl * child ;
BOOL margined ;
} ;
extern struct tabPage * newTabPage ( uiControl * child ) ;
extern void tabPageDestroy ( struct tabPage * tp ) ;
extern void tabPageMinimumSize ( struct tabPage * tp , intmax_t * width , intmax_t * height ) ;
2016-04-23 14:46:39 -05:00
// TODO
# include "_uipriv_migrate.hpp"
2016-04-22 20:36:19 -05:00
// TODO
// child.cpp
extern struct child * newChild ( uiControl * child , uiControl * parent , HWND parentHWND ) ;
extern struct child * newChildWithTabPage ( uiControl * child , uiControl * parent , HWND parentHWND ) ;
extern void childRemove ( struct child * c ) ;
extern void childDestroy ( struct child * c ) ;
extern HWND childHWND ( struct child * c ) ;
extern void childMinimumSize ( struct child * c , uiWindowsSizing * d , intmax_t * width , intmax_t * height ) ;
extern void childRelayout ( struct child * c , intmax_t x , intmax_t y , intmax_t width , intmax_t height ) ;
extern void childQueueRelayout ( struct child * c ) ;
extern int childVisible ( struct child * c ) ;
extern void childUpdateState ( struct child * c ) ;
extern void childAssignControlIDZOrder ( struct child * c , LONG_PTR * controlID , HWND * insertAfter ) ;
extern void childSetSoleControlID ( struct child * c ) ;
extern HWND childTabPage ( struct child * c ) ;
extern int childMargined ( struct child * c ) ;
extern void childSetMargined ( struct child * c , int margined ) ;
extern int childFlag ( struct child * c ) ;
extern void childSetFlag ( struct child * c , int flag ) ;
extern intmax_t childIntmax ( struct child * c , int n ) ;
extern void childSetIntmax ( struct child * c , int n , intmax_t to ) ;