diff --git a/windows/_uipriv_migrate.hpp b/windows/_uipriv_migrate.hpp new file mode 100644 index 00000000..773d7941 --- /dev/null +++ b/windows/_uipriv_migrate.hpp @@ -0,0 +1,67 @@ + +// menu.c +extern HMENU makeMenubar(void); +extern const uiMenuItem *menuIDToItem(UINT_PTR); +extern void runMenuEvent(WORD, uiWindow *); +extern void freeMenubar(HMENU); +extern void uninitMenus(void); + +// tabpage.c +extern void tabPageMargins(HWND, intmax_t *, intmax_t *, intmax_t *, intmax_t *); +extern HWND newTabPage(void); + +// draw.c +extern HRESULT initDraw(void); +extern void uninitDraw(void); +extern ID2D1HwndRenderTarget *makeHWNDRenderTarget(HWND hwnd); +extern uiDrawContext *newContext(ID2D1RenderTarget *); +extern void freeContext(uiDrawContext *); +extern ID2D1Brush *createSolidColorBrushInternal(ID2D1RenderTarget *rt, double r, double g, double b, double a); + +// dwrite.cpp +#ifdef __cplusplus +extern IDWriteFactory *dwfactory; +#endif +extern HRESULT initDrawText(void); +extern void uninitDrawText(void); +#ifdef __cplusplus +struct fontCollection { + IDWriteFontCollection *fonts; + WCHAR userLocale[LOCALE_NAME_MAX_LENGTH]; + int userLocaleSuccess; +}; +extern fontCollection *loadFontCollection(void); +extern WCHAR *fontCollectionFamilyName(fontCollection *fc, IDWriteFontFamily *family); +extern void fontCollectionFree(fontCollection *fc); +extern WCHAR *fontCollectionCorrectString(fontCollection *fc, IDWriteLocalizedStrings *names); +#endif + +// drawtext.cpp +#ifdef __cplusplus +extern uiDrawTextFont *mkTextFont(IDWriteFont *df, BOOL addRef, WCHAR *family, BOOL copyFamily, double size); +struct dwriteAttr { + uiDrawTextWeight weight; + uiDrawTextItalic italic; + uiDrawTextStretch stretch; + DWRITE_FONT_WEIGHT dweight; + DWRITE_FONT_STYLE ditalic; + DWRITE_FONT_STRETCH dstretch; +}; +extern void attrToDWriteAttr(struct dwriteAttr *attr); +extern void dwriteAttrToAttr(struct dwriteAttr *attr); +#endif +extern void doDrawText(ID2D1RenderTarget *rt, ID2D1Brush *black, double x, double y, uiDrawTextLayout *layout); + +// fontdialog.cpp +#ifdef __cplusplus +struct fontDialogParams { + IDWriteFont *font; + double size; + WCHAR *familyName; + WCHAR *styleName; +}; +extern BOOL showFontDialog(HWND parent, struct fontDialogParams *params); +extern void loadInitialFontDialogParams(struct fontDialogParams *params); +extern void destroyFontDialogParams(struct fontDialogParams *params); +extern WCHAR *fontDialogParamsToString(struct fontDialogParams *params); +#endif diff --git a/windows/area.h b/windows/area.hpp similarity index 100% rename from windows/area.h rename to windows/area.hpp diff --git a/windows/uipriv_windows.h b/windows/uipriv_windows.h deleted file mode 100644 index 3940318e..00000000 --- a/windows/uipriv_windows.h +++ /dev/null @@ -1,188 +0,0 @@ -// 6 january 2015 -#include "winapi.hpp" -#include "../ui.h" -#include "../ui_windows.h" -#undef this // TODO -#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, - msgConsoleEndSession, - msgQueued, - msgD2DScratchPaint, -}; - -// init.c -extern HINSTANCE hInstance; -extern int nCmdShow; -extern HFONT hMessageFont; -extern HBRUSH hollowBrush; - -// util.c -extern int windowClassOf(HWND, ...); -extern void mapWindowRect(HWND, HWND, RECT *); -extern DWORD getStyle(HWND); -extern void setStyle(HWND, DWORD); -extern DWORD getExStyle(HWND); -extern void setExStyle(HWND, DWORD); -extern void clientSizeToWindowSize(HWND, intmax_t *, intmax_t *, BOOL); - -// text.c -extern WCHAR *toUTF16(const char *); -extern char *toUTF8(const WCHAR *); -extern WCHAR *windowText(HWND); - - - - - -///////////////////////////////// - -// resize.c -extern void initResizes(void); -extern void uninitResizes(void); -extern void doResizes(void); -extern void setWindowInsertAfter(HWND, HWND); - -// utilwindow.c -extern HWND utilWindow; -extern const char *initUtilWindow(HICON, HCURSOR); -extern void uninitUtilWindow(void); - -// parent.c -extern void paintContainerBackground(HWND, HDC, RECT *); -extern BOOL handleParentMessages(HWND, UINT, WPARAM, LPARAM, LRESULT *); - -// debug.c -extern HRESULT logLastError(const char *); -extern HRESULT logHRESULT(const char *, HRESULT); -extern HRESULT logMemoryExhausted(const char *); - -// window.c -extern ATOM registerWindowClass(HICON, HCURSOR); -extern void unregisterWindowClass(void); -extern void ensureMinimumWindowSize(uiWindow *); - -// container.c -#define containerClass L"libui_uiContainerClass" -extern ATOM initContainer(HICON, HCURSOR); -extern void uninitContainer(void); -extern HWND newContainer(void); - -// menu.c -extern HMENU makeMenubar(void); -extern const uiMenuItem *menuIDToItem(UINT_PTR); -extern void runMenuEvent(WORD, uiWindow *); -extern void freeMenubar(HMENU); -extern void uninitMenus(void); - -// alloc.c -extern void initAlloc(void); -extern void uninitAlloc(void); - -// events.c -extern BOOL runWM_COMMAND(WPARAM, LPARAM, LRESULT *); -extern BOOL runWM_NOTIFY(WPARAM, LPARAM, LRESULT *); -extern BOOL runWM_HSCROLL(WPARAM, LPARAM, LRESULT *); -extern void issueWM_WININICHANGE(WPARAM, LPARAM); - -// child.c -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); - -// tabpage.c -extern void tabPageMargins(HWND, intmax_t *, intmax_t *, intmax_t *, intmax_t *); -extern HWND newTabPage(void); - -// area.c -#define areaClass L"libui_uiAreaClass" -extern ATOM registerAreaClass(HICON, HCURSOR); -extern void unregisterArea(void); - -// areaevents.c -// TODO merge into registerAreaClass()? -extern int registerAreaFilter(void); - -// draw.c -extern HRESULT initDraw(void); -extern void uninitDraw(void); -extern ID2D1HwndRenderTarget *makeHWNDRenderTarget(HWND hwnd); -extern uiDrawContext *newContext(ID2D1RenderTarget *); -extern void freeContext(uiDrawContext *); -extern ID2D1Brush *createSolidColorBrushInternal(ID2D1RenderTarget *rt, double r, double g, double b, double a); - -// dwrite.cpp -#ifdef __cplusplus -extern IDWriteFactory *dwfactory; -#endif -extern HRESULT initDrawText(void); -extern void uninitDrawText(void); -#ifdef __cplusplus -struct fontCollection { - IDWriteFontCollection *fonts; - WCHAR userLocale[LOCALE_NAME_MAX_LENGTH]; - int userLocaleSuccess; -}; -extern fontCollection *loadFontCollection(void); -extern WCHAR *fontCollectionFamilyName(fontCollection *fc, IDWriteFontFamily *family); -extern void fontCollectionFree(fontCollection *fc); -extern WCHAR *fontCollectionCorrectString(fontCollection *fc, IDWriteLocalizedStrings *names); -#endif - -// drawtext.cpp -#ifdef __cplusplus -extern uiDrawTextFont *mkTextFont(IDWriteFont *df, BOOL addRef, WCHAR *family, BOOL copyFamily, double size); -struct dwriteAttr { - uiDrawTextWeight weight; - uiDrawTextItalic italic; - uiDrawTextStretch stretch; - DWRITE_FONT_WEIGHT dweight; - DWRITE_FONT_STYLE ditalic; - DWRITE_FONT_STRETCH dstretch; -}; -extern void attrToDWriteAttr(struct dwriteAttr *attr); -extern void dwriteAttrToAttr(struct dwriteAttr *attr); -#endif -extern void doDrawText(ID2D1RenderTarget *rt, ID2D1Brush *black, double x, double y, uiDrawTextLayout *layout); - -// fontdialog.cpp -#ifdef __cplusplus -struct fontDialogParams { - IDWriteFont *font; - double size; - WCHAR *familyName; - WCHAR *styleName; -}; -extern BOOL showFontDialog(HWND parent, struct fontDialogParams *params); -extern void loadInitialFontDialogParams(struct fontDialogParams *params); -extern void destroyFontDialogParams(struct fontDialogParams *params); -extern WCHAR *fontDialogParamsToString(struct fontDialogParams *params); -#endif - -// d2dscratch.c -extern ATOM registerD2DScratchClass(HICON, HCURSOR); -extern void unregisterD2DScratchClass(void); -extern HWND newD2DScratch(HWND parent, RECT *rect, HMENU controlID, SUBCLASSPROC subclass, DWORD_PTR subclassData); diff --git a/windows/uipriv_windows_new.hpp b/windows/uipriv_windows.hpp similarity index 82% rename from windows/uipriv_windows_new.hpp rename to windows/uipriv_windows.hpp index a8947c62..c317f65a 100644 --- a/windows/uipriv_windows_new.hpp +++ b/windows/uipriv_windows.hpp @@ -1,4 +1,21 @@ // 21 april 2016 +#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, + msgGetuiWindow, + msgQueued, + msgD2DScratchPaint, +}; // alloc.cpp extern void initAlloc(void); @@ -77,7 +94,28 @@ 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); +// 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 *); + +// container.cpp +#define containerClass L"libui_uiContainerClass" +extern ATOM initContainer(HICON, HCURSOR); +extern void uninitContainer(void); +extern HWND newContainer(void); + + +// TODO +#include "_uipriv_migrate.hpp" // TODO // child.cpp diff --git a/windows/window.cpp b/windows/window.cpp index eead3683..a5325dc1 100644 --- a/windows/window.cpp +++ b/windows/window.cpp @@ -306,6 +306,7 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar) return w; } +// this cannot queue a resize because it's called by the resize handler void ensureMinimumWindowSize(uiWindow *w) { uiWindowsControl *c;