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_menu_window.cpp | |
parent | f37664163c9dfa33416845ddd78695c33e6fdaef (diff) |
Draw method implemented for all Window subpackages
Diffstat (limited to 'src/c_fl_menu_window.cpp')
-rw-r--r-- | src/c_fl_menu_window.cpp | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/src/c_fl_menu_window.cpp b/src/c_fl_menu_window.cpp index 66ad6f3..8445978 100644 --- a/src/c_fl_menu_window.cpp +++ b/src/c_fl_menu_window.cpp @@ -4,49 +4,91 @@ #include "c_fl_menu_window.h" +typedef void (hook)(void*); +typedef hook* hook_p; + + + + +class My_Menu_Window : public Fl_Menu_Window { + public: + using Fl_Menu_Window::Fl_Menu_Window; + friend void menu_window_set_draw_hook(MENUWINDOW n, void * d); + friend void fl_menu_window_draw(MENUWINDOW n); + protected: + void draw(); + void real_draw(); + hook_p draw_hook; +}; + + +void My_Menu_Window::draw() { + (*draw_hook)(this->user_data()); +} + + +void My_Menu_Window::real_draw() { + Fl_Menu_Window::draw(); +} + + +void menu_window_set_draw_hook(MENUWINDOW n, void * d) { + reinterpret_cast<My_Menu_Window*>(n)->draw_hook = reinterpret_cast<hook_p>(d); +} + + +void fl_menu_window_draw(MENUWINDOW n) { + reinterpret_cast<My_Menu_Window*>(n)->real_draw(); +} + + + + MENUWINDOW new_fl_menu_window(int x, int y, int w, int h, char* label) { - Fl_Menu_Window *m = new Fl_Menu_Window(x, y, w, h, label); + My_Menu_Window *m = new My_Menu_Window(x, y, w, h, label); return m; } MENUWINDOW new_fl_menu_window2(int w, int h) { - Fl_Menu_Window *m = new Fl_Menu_Window(w, h); + My_Menu_Window *m = new My_Menu_Window(w, h); return m; } void free_fl_menu_window(MENUWINDOW m) { - delete reinterpret_cast<Fl_Menu_Window*>(m); + delete reinterpret_cast<My_Menu_Window*>(m); } + + void fl_menu_window_show(MENUWINDOW m) { - reinterpret_cast<Fl_Menu_Window*>(m)->show(); + reinterpret_cast<My_Menu_Window*>(m)->show(); } void fl_menu_window_hide(MENUWINDOW m) { - reinterpret_cast<Fl_Menu_Window*>(m)->hide(); + reinterpret_cast<My_Menu_Window*>(m)->hide(); } void fl_menu_window_flush(MENUWINDOW m) { - reinterpret_cast<Fl_Menu_Window*>(m)->flush(); + reinterpret_cast<My_Menu_Window*>(m)->flush(); } void fl_menu_window_set_overlay(MENUWINDOW m) { - reinterpret_cast<Fl_Menu_Window*>(m)->set_overlay(); + reinterpret_cast<My_Menu_Window*>(m)->set_overlay(); } void fl_menu_window_clear_overlay(MENUWINDOW m) { - reinterpret_cast<Fl_Menu_Window*>(m)->clear_overlay(); + reinterpret_cast<My_Menu_Window*>(m)->clear_overlay(); } unsigned int fl_menu_window_overlay(MENUWINDOW m) { - return reinterpret_cast<Fl_Menu_Window*>(m)->overlay(); + return reinterpret_cast<My_Menu_Window*>(m)->overlay(); } |