add hooks for when the window gets/loses focus.
properly refocus draw area. lay base for dragdrop.
This commit is contained in:
parent
a9cacb9dd7
commit
14b7cf1987
|
@ -106,8 +106,6 @@ _UI_EXTERN void uiWindowContentSize(uiWindow *w, int *width, int *height);
|
||||||
_UI_EXTERN void uiWindowSetContentSize(uiWindow *w, int width, int height);
|
_UI_EXTERN void uiWindowSetContentSize(uiWindow *w, int width, int height);
|
||||||
_UI_EXTERN int uiWindowFullscreen(uiWindow *w);
|
_UI_EXTERN int uiWindowFullscreen(uiWindow *w);
|
||||||
_UI_EXTERN void uiWindowSetFullscreen(uiWindow *w, int fullscreen);
|
_UI_EXTERN void uiWindowSetFullscreen(uiWindow *w, int fullscreen);
|
||||||
_UI_EXTERN void uiWindowOnContentSizeChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data);
|
|
||||||
_UI_EXTERN void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *w, void *data), void *data);
|
|
||||||
_UI_EXTERN int uiWindowBorderless(uiWindow *w);
|
_UI_EXTERN int uiWindowBorderless(uiWindow *w);
|
||||||
_UI_EXTERN void uiWindowSetBorderless(uiWindow *w, int borderless);
|
_UI_EXTERN void uiWindowSetBorderless(uiWindow *w, int borderless);
|
||||||
_UI_EXTERN void uiWindowSetChild(uiWindow *w, uiControl *child);
|
_UI_EXTERN void uiWindowSetChild(uiWindow *w, uiControl *child);
|
||||||
|
@ -115,6 +113,12 @@ _UI_EXTERN int uiWindowMargined(uiWindow *w);
|
||||||
_UI_EXTERN void uiWindowSetMargined(uiWindow *w, int margined);
|
_UI_EXTERN void uiWindowSetMargined(uiWindow *w, int margined);
|
||||||
_UI_EXTERN uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar);
|
_UI_EXTERN uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar);
|
||||||
|
|
||||||
|
_UI_EXTERN void uiWindowOnContentSizeChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data);
|
||||||
|
_UI_EXTERN void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *w, void *data), void *data);
|
||||||
|
_UI_EXTERN void uiWindowOnDropFile(uiWindow *w, void (*f)(uiWindow *w, char *file, void *data), void *data);
|
||||||
|
_UI_EXTERN void uiWindowOnGetFocus(uiWindow *w, void (*f)(uiWindow *w, void *data), void *data);
|
||||||
|
_UI_EXTERN void uiWindowOnLoseFocus(uiWindow *w, void (*f)(uiWindow *w, void *data), void *data);
|
||||||
|
|
||||||
typedef struct uiButton uiButton;
|
typedef struct uiButton uiButton;
|
||||||
#define uiButton(this) ((uiButton *) (this))
|
#define uiButton(this) ((uiButton *) (this))
|
||||||
_UI_EXTERN char *uiButtonText(uiButton *b);
|
_UI_EXTERN char *uiButtonText(uiButton *b);
|
||||||
|
|
|
@ -10,16 +10,23 @@ struct uiWindow {
|
||||||
uiControl *child;
|
uiControl *child;
|
||||||
BOOL shownOnce;
|
BOOL shownOnce;
|
||||||
int visible;
|
int visible;
|
||||||
int (*onClosing)(uiWindow *, void *);
|
|
||||||
void *onClosingData;
|
|
||||||
int margined;
|
int margined;
|
||||||
BOOL hasMenubar;
|
BOOL hasMenubar;
|
||||||
void (*onContentSizeChanged)(uiWindow *, void *);
|
|
||||||
void *onContentSizeChangedData;
|
|
||||||
BOOL changingSize;
|
BOOL changingSize;
|
||||||
int fullscreen;
|
int fullscreen;
|
||||||
WINDOWPLACEMENT fsPrevPlacement;
|
WINDOWPLACEMENT fsPrevPlacement;
|
||||||
int borderless;
|
int borderless;
|
||||||
|
|
||||||
|
int (*onClosing)(uiWindow *, void *);
|
||||||
|
void *onClosingData;
|
||||||
|
void (*onContentSizeChanged)(uiWindow *, void *);
|
||||||
|
void *onContentSizeChangedData;
|
||||||
|
void (*onDropFile)(uiWindow *, char *, void *);
|
||||||
|
void *onDropFileData;
|
||||||
|
void (*onGetFocus)(uiWindow *, void *);
|
||||||
|
void *onGetFocusData;
|
||||||
|
void (*onLoseFocus)(uiWindow *, void *);
|
||||||
|
void *onLoseFocusData;
|
||||||
};
|
};
|
||||||
|
|
||||||
// from https://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
|
// from https://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
|
||||||
|
@ -108,6 +115,37 @@ static LRESULT CALLBACK windowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARA
|
||||||
mmi->ptMinTrackSize.x = width;
|
mmi->ptMinTrackSize.x = width;
|
||||||
mmi->ptMinTrackSize.y = height;
|
mmi->ptMinTrackSize.y = height;
|
||||||
return lResult;
|
return lResult;
|
||||||
|
|
||||||
|
case WM_DROPFILES:
|
||||||
|
if (w->onDropFile)
|
||||||
|
{
|
||||||
|
HDROP eggdrop = (HDROP)wParam;
|
||||||
|
WCHAR filename[1024];
|
||||||
|
DragQueryFile(eggdrop, 0, filename, 1024);
|
||||||
|
|
||||||
|
char* filename8 = toUTF8(filename);
|
||||||
|
w->onDropFile(w, filename8, w->onDropFileData);
|
||||||
|
uiFreeText(filename8);
|
||||||
|
|
||||||
|
DragFinish(eggdrop);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_SETFOCUS:
|
||||||
|
if (w->onGetFocus)
|
||||||
|
{
|
||||||
|
w->onGetFocus(w, w->onGetFocusData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_KILLFOCUS:
|
||||||
|
if (w->onLoseFocus)
|
||||||
|
{
|
||||||
|
w->onLoseFocus(w, w->onLoseFocusData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_PRINTCLIENT:
|
case WM_PRINTCLIENT:
|
||||||
// we do no special painting; just erase the background
|
// we do no special painting; just erase the background
|
||||||
// don't worry about the return value; we let DefWindowProcW() handle this message
|
// don't worry about the return value; we let DefWindowProcW() handle this message
|
||||||
|
@ -383,6 +421,24 @@ void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data)
|
||||||
w->onClosingData = data;
|
w->onClosingData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiWindowOnDropFile(uiWindow *w, void (*f)(uiWindow *, char *, void *), void *data)
|
||||||
|
{
|
||||||
|
w->onDropFile = f;
|
||||||
|
w->onDropFileData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowOnGetFocus(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
||||||
|
{
|
||||||
|
w->onGetFocus = f;
|
||||||
|
w->onGetFocusData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowOnLoseFocus(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
||||||
|
{
|
||||||
|
w->onLoseFocus = f;
|
||||||
|
w->onLoseFocusData = data;
|
||||||
|
}
|
||||||
|
|
||||||
int uiWindowBorderless(uiWindow *w)
|
int uiWindowBorderless(uiWindow *w)
|
||||||
{
|
{
|
||||||
return w->borderless;
|
return w->borderless;
|
||||||
|
@ -492,6 +548,10 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar)
|
||||||
uiWindowOnClosing(w, defaultOnClosing, NULL);
|
uiWindowOnClosing(w, defaultOnClosing, NULL);
|
||||||
uiWindowOnContentSizeChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
uiWindowOnContentSizeChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
||||||
|
|
||||||
|
uiWindowOnDropFile(w, NULL, NULL);
|
||||||
|
uiWindowOnGetFocus(w, NULL, NULL);
|
||||||
|
uiWindowOnLoseFocus(w, NULL, NULL);
|
||||||
|
|
||||||
windows[w] = true;
|
windows[w] = true;
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
|
@ -295,6 +295,21 @@ int OnCloseWindow(uiWindow* window, void* blarg)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnDropFile(uiWindow* window, char* file, void* blarg)
|
||||||
|
{
|
||||||
|
printf("DROP: %s\n", file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnGetFocus(uiWindow* window, void* blarg)
|
||||||
|
{
|
||||||
|
uiControlSetFocus(uiControl(MainDrawArea));
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnLoseFocus(uiWindow* window, void* blarg)
|
||||||
|
{
|
||||||
|
// TODO: shit here?
|
||||||
|
}
|
||||||
|
|
||||||
void OnCloseByMenu(uiMenuItem* item, uiWindow* window, void* blarg)
|
void OnCloseByMenu(uiMenuItem* item, uiWindow* window, void* blarg)
|
||||||
{
|
{
|
||||||
uiControlDestroy(uiControl(window));
|
uiControlDestroy(uiControl(window));
|
||||||
|
@ -431,6 +446,9 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, 256, 384, 1);
|
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, 256, 384, 1);
|
||||||
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
|
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
|
||||||
|
uiWindowOnDropFile(MainWindow, OnDropFile, NULL);
|
||||||
|
uiWindowOnGetFocus(MainWindow, OnGetFocus, NULL);
|
||||||
|
uiWindowOnLoseFocus(MainWindow, OnLoseFocus, NULL);
|
||||||
|
|
||||||
uiMenuItemDisable(MenuItem_Pause);
|
uiMenuItemDisable(MenuItem_Pause);
|
||||||
uiMenuItemDisable(MenuItem_Reset);
|
uiMenuItemDisable(MenuItem_Reset);
|
||||||
|
@ -452,7 +470,7 @@ int main(int argc, char** argv)
|
||||||
EmuThread = SDL_CreateThread(EmuThreadFunc, "melonDS magic", NULL);
|
EmuThread = SDL_CreateThread(EmuThreadFunc, "melonDS magic", NULL);
|
||||||
|
|
||||||
uiControlShow(uiControl(MainWindow));
|
uiControlShow(uiControl(MainWindow));
|
||||||
//uiControlSetFocus(uiControl(MainDrawArea)); // TODO: this needs to be done when the window regains focus
|
uiControlSetFocus(uiControl(MainDrawArea));
|
||||||
uiMain();
|
uiMain();
|
||||||
|
|
||||||
EmuRunning = 0;
|
EmuRunning = 0;
|
||||||
|
|
Loading…
Reference in New Issue