From 3a9028302447ad84363c580b2152f30417186667 Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Wed, 8 Jan 2025 14:33:30 +1300 Subject: Revised Input subhierarchy, separated bindings for Fl_Input and Fl_Input_ widgets --- src/c_fl_input.cpp | 228 ++++++----------------------------------------------- 1 file changed, 26 insertions(+), 202 deletions(-) (limited to 'src/c_fl_input.cpp') diff --git a/src/c_fl_input.cpp b/src/c_fl_input.cpp index ea81472..daccda0 100644 --- a/src/c_fl_input.cpp +++ b/src/c_fl_input.cpp @@ -6,238 +6,62 @@ #include #include "c_fl_input.h" -#include "c_fl_type.h" -class My_Input : public Fl_Input { - public: - using Fl_Input::Fl_Input; - friend void input_set_draw_hook(INPUT i, void * d); - friend void fl_input_draw(INPUT i); - friend void input_set_handle_hook(INPUT i, void * h); - friend int fl_input_handle(INPUT i, int e); - protected: - void draw(); - void real_draw(); - int handle(int e); - int real_handle(int e); - d_hook_p draw_hook; - h_hook_p handle_hook; -}; - -void My_Input::draw() { - (*draw_hook)(this->user_data()); -} - -void My_Input::real_draw() { - Fl_Input::draw(); -} - -int My_Input::handle(int e) { - return (*handle_hook)(this->user_data(), e); -} - -int My_Input::real_handle(int e) { - return Fl_Input::handle(e); -} - -void input_set_draw_hook(INPUT i, void * d) { - reinterpret_cast(i)->draw_hook = reinterpret_cast(d); -} - -void fl_input_draw(INPUT i) { - reinterpret_cast(i)->real_draw(); -} - -void input_set_handle_hook(INPUT i, void * h) { - reinterpret_cast(i)->handle_hook = reinterpret_cast(h); -} - -int fl_input_handle(INPUT i, int e) { - return reinterpret_cast(i)->real_handle(e); -} - +// Exports from Ada +extern "C" void widget_draw_hook(void * ud); +extern "C" int widget_handle_hook(void * ud, int e); -INPUT new_fl_input(int x, int y, int w, int h, char* label) { - My_Input *i = new My_Input(x, y, w, h, label); - return i; -} - -void free_fl_input(INPUT i) { - delete reinterpret_cast(i); -} +// Attaching all relevant hooks and friends +class My_Text_Input : public Fl_Input { +public: + using Fl_Input::Fl_Input; -int fl_input_copy(INPUT i) { - return reinterpret_cast(i)->copy(1); -} - -int fl_input_cut(INPUT i) { - return reinterpret_cast(i)->cut(); -} - -int fl_input_cut2(INPUT i, int b) { - return reinterpret_cast(i)->cut(b); -} - -int fl_input_cut3(INPUT i, int a, int b) { - return reinterpret_cast(i)->cut(a,b); -} - -int fl_input_copy_cuts(INPUT i) { - return reinterpret_cast(i)->copy_cuts(); -} - -int fl_input_undo(INPUT i) { - return reinterpret_cast(i)->undo(); -} - - - - -int fl_input_get_readonly(INPUT i) { - return reinterpret_cast(i)->readonly(); -} - -void fl_input_set_readonly(INPUT i, int t) { - reinterpret_cast(i)->readonly(t); -} - -int fl_input_get_tab_nav(INPUT i) { - return reinterpret_cast(i)->tab_nav(); -} - -void fl_input_set_tab_nav(INPUT i, int t) { - reinterpret_cast(i)->tab_nav(t); -} - -int fl_input_get_wrap(INPUT i) { - return reinterpret_cast(i)->wrap(); -} - -void fl_input_set_wrap(INPUT i, int t) { - reinterpret_cast(i)->wrap(t); -} + friend void fl_text_input_draw(TEXTINPUT t); + friend int fl_text_input_handle(TEXTINPUT t, int e); + void draw(); + int handle(int e); +}; - - -int fl_input_get_input_type(INPUT i) { - return reinterpret_cast(i)->input_type(); -} - -void fl_input_set_input_type(INPUT i, int t) { - reinterpret_cast(i)->input_type(t); -} - -unsigned long fl_input_get_shortcut(INPUT i) { - return reinterpret_cast(i)->shortcut(); -} - -void fl_input_set_shortcut(INPUT i, unsigned long t) { - reinterpret_cast(i)->shortcut(t); -} - -int fl_input_get_mark(INPUT i) { - return reinterpret_cast(i)->mark(); -} - -int fl_input_set_mark(INPUT i, int t) { - return reinterpret_cast(i)->mark(t); -} - -int fl_input_get_position(INPUT i) { - return reinterpret_cast(i)->position(); -} - -int fl_input_set_position(INPUT i, int t) { - return reinterpret_cast(i)->position(t); -} - - - - -unsigned int fl_input_index(INPUT i, int p) { - return reinterpret_cast(i)->index(p); -} - -int fl_input_insert(INPUT i, const char * s, int l) { - return reinterpret_cast(i)->insert(s,l); -} - -int fl_input_replace(INPUT i, int b, int e, const char * s, int l) { - return reinterpret_cast(i)->replace(b,e,s,l); -} - -const char * fl_input_get_value(INPUT i) { - return reinterpret_cast(i)->value(); -} - -void fl_input_set_value(INPUT i, char * s, int len) { - reinterpret_cast(i)->value(s,len); -} - - - - -int fl_input_get_maximum_size(INPUT i) { - return reinterpret_cast(i)->maximum_size(); -} - -void fl_input_set_maximum_size(INPUT i, int t) { - reinterpret_cast(i)->maximum_size(t); +void My_Text_Input::draw() { + widget_draw_hook(this->user_data()); } -int fl_input_get_size(INPUT i) { - return reinterpret_cast(i)->size(); +int My_Text_Input::handle(int e) { + return widget_handle_hook(this->user_data(), e); } -unsigned int fl_input_get_cursor_color(INPUT i) { - return reinterpret_cast(i)->cursor_color(); -} +// Flattened C API -void fl_input_set_cursor_color(INPUT i, unsigned int t) { - reinterpret_cast(i)->cursor_color(t); +TEXTINPUT new_fl_text_input(int x, int y, int w, int h, char * label) { + My_Text_Input * t = new My_Text_Input(x, y, w, h, label); + return t; } -unsigned int fl_input_get_textcolor(INPUT i) { - return reinterpret_cast(i)->textcolor(); +void free_fl_text_input(TEXTINPUT t) { + delete reinterpret_cast(t); } -void fl_input_set_textcolor(INPUT i, unsigned int t) { - reinterpret_cast(i)->textcolor(t); -} -int fl_input_get_textfont(INPUT i) { - return reinterpret_cast(i)->textfont(); -} -void fl_input_set_textfont(INPUT i, int t) { - reinterpret_cast(i)->textfont(t); -} -int fl_input_get_textsize(INPUT i) { - return reinterpret_cast(i)->textsize(); +void fl_text_input_draw(TEXTINPUT t) { + reinterpret_cast(t)->Fl_Input::draw(); } -void fl_input_set_textsize(INPUT i, int t) { - reinterpret_cast(i)->textsize(t); -} - - - - -void fl_input_set_size(INPUT i, int w, int h) { - reinterpret_cast(i)->size(w,h); +int fl_text_input_handle(TEXTINPUT t, int e) { + return reinterpret_cast(t)->Fl_Input::handle(e); } -- cgit