diff options
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(); } |