From 9348c8013431bbd5de165d8fbac13b783d983324 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Mon, 1 May 2017 11:49:21 +1000 Subject: Draw method implemented for all Window subpackages --- src/c_fl_menu_window.cpp | 60 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 9 deletions(-) (limited to 'src/c_fl_menu_window.cpp') 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(n)->draw_hook = reinterpret_cast(d); +} + + +void fl_menu_window_draw(MENUWINDOW n) { + reinterpret_cast(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(m); + delete reinterpret_cast(m); } + + void fl_menu_window_show(MENUWINDOW m) { - reinterpret_cast(m)->show(); + reinterpret_cast(m)->show(); } void fl_menu_window_hide(MENUWINDOW m) { - reinterpret_cast(m)->hide(); + reinterpret_cast(m)->hide(); } void fl_menu_window_flush(MENUWINDOW m) { - reinterpret_cast(m)->flush(); + reinterpret_cast(m)->flush(); } void fl_menu_window_set_overlay(MENUWINDOW m) { - reinterpret_cast(m)->set_overlay(); + reinterpret_cast(m)->set_overlay(); } void fl_menu_window_clear_overlay(MENUWINDOW m) { - reinterpret_cast(m)->clear_overlay(); + reinterpret_cast(m)->clear_overlay(); } unsigned int fl_menu_window_overlay(MENUWINDOW m) { - return reinterpret_cast(m)->overlay(); + return reinterpret_cast(m)->overlay(); } -- cgit