aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/paintcb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/paintcb.cpp')
-rw-r--r--Src/Wasabi/api/wnd/paintcb.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/paintcb.cpp b/Src/Wasabi/api/wnd/paintcb.cpp
new file mode 100644
index 00000000..974ba998
--- /dev/null
+++ b/Src/Wasabi/api/wnd/paintcb.cpp
@@ -0,0 +1,52 @@
+#include "precomp.h"
+#include "paintcb.h"
+#include "api_window.h"
+
+#define CBCLASS PaintCallbackInfoI
+START_DISPATCH;
+ CB(PAINTCBINFO_GETCANVAS, getCanvas);
+ CB(PAINTCBINFO_GETREGION, getRegion);
+END_DISPATCH;
+
+PaintCallback::PaintCallback(ifc_window *w) {
+ monitorWindow(w);
+}
+
+PaintCallback::~PaintCallback() {
+ if (wnd != NULL) viewer_delViewItem(wnd);
+}
+
+void PaintCallback::monitorWindow(ifc_window *w) {
+ if (wnd != NULL) {
+ viewer_delViewItem(wnd);
+ wnd = NULL;
+ }
+ if (w != NULL) {
+ viewer_addViewItem(w);
+ wnd = w;
+ }
+}
+
+int PaintCallback::viewer_onItemDeleted(ifc_window *item) {
+ ASSERT(item == wnd);//jic
+ onWindowDeleted(wnd);
+ wnd = NULL;
+ return 1;
+}
+
+int PaintCallback::viewer_onEvent(ifc_window *item, int event, intptr_t param, void *ptr, size_t ptrlen) {
+ PaintCallbackInfo *info = reinterpret_cast<PaintCallbackInfo *>(ptr);
+ switch (event) {
+ case ifc_window::Event_ONPAINT:
+ if (param == BEFOREPAINT)
+ onBeforePaint(info);
+ else
+ onAfterPaint(info);
+ break;
+ case ifc_window::Event_ONINVALIDATE:
+ onInvalidation(info);
+ break;
+ }
+ return 1;
+}
+