#include #include #include "c_fl_text_display.h" #include "c_fl_text_buffer.h" typedef void (hook)(void*); typedef hook* hook_p; class My_Text_Display : public Fl_Text_Display { public: using Fl_Text_Display::Fl_Text_Display; friend void text_display_set_draw_hook(TEXTDISPLAY td, void * d); friend void fl_text_display_draw(TEXTDISPLAY td); protected: void draw(); void real_draw(); hook_p draw_hook; }; void My_Text_Display::draw() { (*draw_hook)(this->user_data()); } void My_Text_Display::real_draw() { Fl_Text_Display::draw(); } void text_display_set_draw_hook(TEXTDISPLAY td, void * d) { reinterpret_cast(td)->draw_hook = reinterpret_cast(d); } void fl_text_display_draw(TEXTDISPLAY td) { reinterpret_cast(td)->real_draw(); } TEXTDISPLAY new_fl_text_display(int x, int y, int w, int h, char* label) { My_Text_Display *td = new My_Text_Display(x, y, w, h, label); return td; } void free_fl_text_display(TEXTDISPLAY td) { delete reinterpret_cast(td); } // this actually never gets called, since an access to the text_buffer // object is stored on the Ada side of things TEXTBUFFER fl_text_display_get_buffer(TEXTDISPLAY td) { return reinterpret_cast(td)->buffer(); } void fl_text_display_set_buffer(TEXTDISPLAY td, TEXTBUFFER tb) { reinterpret_cast(td)->buffer(reinterpret_cast(tb)); } int fl_text_display_get_text_color(TEXTDISPLAY td) { return reinterpret_cast(td)->textcolor(); } void fl_text_display_set_text_color(TEXTDISPLAY td, int c) { reinterpret_cast(td)->textcolor(static_cast(c)); } int fl_text_display_get_text_font(TEXTDISPLAY td) { return reinterpret_cast(td)->textfont(); } void fl_text_display_set_text_font(TEXTDISPLAY td, int f) { reinterpret_cast(td)->textfont(static_cast(f)); } int fl_text_display_get_text_size(TEXTDISPLAY td) { return reinterpret_cast(td)->textsize(); } void fl_text_display_set_text_size(TEXTDISPLAY td, int s) { reinterpret_cast(td)->textsize(static_cast(s)); } int fl_text_display_get_insert_pos(TEXTDISPLAY td) { return reinterpret_cast(td)->insert_position(); } void fl_text_display_set_insert_pos(TEXTDISPLAY td, int p) { reinterpret_cast(td)->insert_position(p); } void fl_text_display_show_insert_pos(TEXTDISPLAY td) { reinterpret_cast(td)->show_insert_position(); } void fl_text_display_next_word(TEXTDISPLAY td) { reinterpret_cast(td)->next_word(); } void fl_text_display_previous_word(TEXTDISPLAY td) { reinterpret_cast(td)->previous_word(); } void fl_text_display_wrap_mode(TEXTDISPLAY td, int w, int m) { reinterpret_cast(td)->wrap_mode(w, m); } int fl_text_display_skip_lines(TEXTDISPLAY td, int s, int l, int p) { return reinterpret_cast(td)->skip_lines(s, l, p); } int fl_text_display_rewind_lines(TEXTDISPLAY td, int s, int l) { return reinterpret_cast(td)->rewind_lines(s, l); } void fl_text_display_linenumber_width(TEXTDISPLAY td, int w) { reinterpret_cast(td)->linenumber_width(w); }