diff options
author | Jed Barber <jjbarber@y7mail.com> | 2017-05-01 11:49:21 +1000 |
---|---|---|
committer | Jed Barber <jjbarber@y7mail.com> | 2017-05-01 11:49:21 +1000 |
commit | 9348c8013431bbd5de165d8fbac13b783d983324 (patch) | |
tree | 45f10677e9748547665e44ff5de47cbf4e61d9a6 /src/c_fl_double_window.cpp | |
parent | f37664163c9dfa33416845ddd78695c33e6fdaef (diff) |
Draw method implemented for all Window subpackages
Diffstat (limited to 'src/c_fl_double_window.cpp')
-rw-r--r-- | src/c_fl_double_window.cpp | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/src/c_fl_double_window.cpp b/src/c_fl_double_window.cpp index 7f29af8..ff9a596 100644 --- a/src/c_fl_double_window.cpp +++ b/src/c_fl_double_window.cpp @@ -4,29 +4,71 @@ #include "c_fl_double_window.h" +typedef void (hook)(void*); +typedef hook* hook_p; + + + + +class My_Double_Window : public Fl_Double_Window { + public: + using Fl_Double_Window::Fl_Double_Window; + friend void double_window_set_draw_hook(DOUBLEWINDOW n, void * d); + friend void fl_double_window_draw(DOUBLEWINDOW n); + protected: + void draw(); + void real_draw(); + hook_p draw_hook; +}; + + +void My_Double_Window::draw() { + (*draw_hook)(this->user_data()); +} + + +void My_Double_Window::real_draw() { + Fl_Double_Window::draw(); +} + + +void double_window_set_draw_hook(DOUBLEWINDOW n, void * d) { + reinterpret_cast<My_Double_Window*>(n)->draw_hook = reinterpret_cast<hook_p>(d); +} + + +void fl_double_window_draw(DOUBLEWINDOW n) { + reinterpret_cast<My_Double_Window*>(n)->real_draw(); +} + + + + DOUBLEWINDOW new_fl_double_window(int x, int y, int w, int h, char* label) { - Fl_Double_Window *d = new Fl_Double_Window(x, y, w, h, label); + My_Double_Window *d = new My_Double_Window(x, y, w, h, label); return d; } DOUBLEWINDOW new_fl_double_window2(int w, int h) { - Fl_Double_Window *d = new Fl_Double_Window(w, h); + My_Double_Window *d = new My_Double_Window(w, h); return d; } void free_fl_double_window(DOUBLEWINDOW d) { - delete reinterpret_cast<Fl_Double_Window*>(d); + delete reinterpret_cast<My_Double_Window*>(d); } + + void fl_double_window_show(DOUBLEWINDOW d) { - reinterpret_cast<Fl_Double_Window*>(d)->show(); + reinterpret_cast<My_Double_Window*>(d)->show(); } void fl_double_window_hide(DOUBLEWINDOW d) { - reinterpret_cast<Fl_Double_Window*>(d)->hide(); + reinterpret_cast<My_Double_Window*>(d)->hide(); } |