diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp b/Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp new file mode 100644 index 00000000..ad6000f3 --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp @@ -0,0 +1,113 @@ +#include "precomp.h" +#include <api/wnd/api_wnd.h> + +#include "rootwndholder.h" +#include <api/wnd/notifmsg.h> +#include <tataki/canvas/canvas.h> + + +RootWndHolder::RootWndHolder() { + privptr = NULL; +} + +RootWndHolder::~RootWndHolder() { +} + +void RootWndHolder::rootwndholder_getRect(RECT *r) { + if (isInited()) + getClientRect(r); + else + MEMSET(r, 0, sizeof(RECT)); +} + +int RootWndHolder::onInit() { + ROOTWNDHOLDER_PARENT::onInit(); + ifc_window *w = rootwndholder_getRootWnd(); + if (w) { + checkInit(w); + setName(rootwndholder_getRootWnd()->getRootWndName()); + } + return 1; +} + +void RootWndHolder::checkInit(ifc_window *w) { + if (w && !w->isInited()) { + if (w->getParent() == NULL) + w->setParent(this); +// w->setStartHidden(getStartHidden()); + w->init(this); + } +} + +int RootWndHolder::onResize() { + int rv = ROOTWNDHOLDER_PARENT::onResize(); + if (!isInited()) return 1; + ifc_window *held = rootwndholder_getRootWnd(); + if (!held) return rv; + RECT r; + rootwndholder_getRect(&r); + if (renderRatioActive() && !held->handleRatio()) + multRatio(&r); + held->resize(r.left, r.top, r.right-r.left, r.bottom-r.top); + return rv; +} + +/*void RootWndHolder::onSetVisible(int v) { + ROOTWNDHOLDER_PARENT::onSetVisible(v); + if (!rootwndholder_getRootWnd()) return; + rootwndholder_getRootWnd()->setVisible(v); +}*/ + +int RootWndHolder::onActivate() { + int r = ROOTWNDHOLDER_PARENT::onActivate(); + if (rootwndholder_getRootWnd()) + rootwndholder_getRootWnd()->onActivate(); + return r; +} + +int RootWndHolder::onDeactivate() { + int r = ROOTWNDHOLDER_PARENT::onDeactivate(); + if (rootwndholder_getRootWnd()) + rootwndholder_getRootWnd()->onDeactivate(); + return r; +} + +int RootWndHolder::getPreferences(int what) { + if (rootwndholder_getRootWnd()) + return rootwndholder_getRootWnd()->getPreferences(what); + return ROOTWNDHOLDER_PARENT::getPreferences(what); +} + +ifc_window *RootWndHolder::rootwndholder_getRootWnd() { + return privptr; +} + +void RootWndHolder::rootwndholder_setRootWnd(ifc_window *w) { + if (privptr == w) return; + privptr = w; + checkInit(w); + if (isPostOnInit()) + onResize(); +} + +int RootWndHolder::onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source) { + if (rootwndholder_getRootWnd()) + return rootwndholder_getRootWnd()->onAction(action, param, x, y, p1, p2, data, datalen, source); + return ROOTWNDHOLDER_PARENT::onAction(action, param, x, y, p1, p2, data, datalen, source); +} + +int RootWndHolder::childNotify(ifc_window *child, int msg, intptr_t param1, intptr_t param2) { + if (msg == ChildNotify::NAMECHANGED && child == rootwndholder_getRootWnd()) + setName(child->getRootWndName()); + return passNotifyUp(child, msg, (int)param1, (int)param2); +} + +int RootWndHolder::onPaint(Canvas *c) { + int rt = ROOTWNDHOLDER_PARENT::onPaint(c); + if (wantRenderBaseTexture()) { + RECT r; + rootwndholder_getRect(&r); + WASABI_API_WND->skin_renderBaseTexture(getBaseTextureWindow(), c, r, this); + } + return rt; +}
\ No newline at end of file |