aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/rootwndholder.cpp113
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