summaryrefslogtreecommitdiff
path: root/src/c_fl_text_display.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/c_fl_text_display.cpp')
-rw-r--r--src/c_fl_text_display.cpp80
1 files changed, 61 insertions, 19 deletions
diff --git a/src/c_fl_text_display.cpp b/src/c_fl_text_display.cpp
index b9e59c6..694b8c9 100644
--- a/src/c_fl_text_display.cpp
+++ b/src/c_fl_text_display.cpp
@@ -6,100 +6,142 @@
#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<My_Text_Display*>(td)->draw_hook = reinterpret_cast<hook_p>(d);
+}
+
+
+void fl_text_display_draw(TEXTDISPLAY td) {
+ reinterpret_cast<My_Text_Display*>(td)->real_draw();
+}
+
+
+
+
TEXTDISPLAY new_fl_text_display(int x, int y, int w, int h, char* label) {
- Fl_Text_Display *td = new Fl_Text_Display(x, y, w, h, 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<Fl_Text_Display*>(td);
+ delete reinterpret_cast<My_Text_Display*>(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<Fl_Text_Display*>(td)->buffer();
+ return reinterpret_cast<My_Text_Display*>(td)->buffer();
}
void fl_text_display_set_buffer(TEXTDISPLAY td, TEXTBUFFER tb) {
- reinterpret_cast<Fl_Text_Display*>(td)->buffer(reinterpret_cast<Fl_Text_Buffer*>(tb));
+ reinterpret_cast<My_Text_Display*>(td)->buffer(reinterpret_cast<Fl_Text_Buffer*>(tb));
}
int fl_text_display_get_text_color(TEXTDISPLAY td) {
- return reinterpret_cast<Fl_Text_Display*>(td)->textcolor();
+ return reinterpret_cast<My_Text_Display*>(td)->textcolor();
}
void fl_text_display_set_text_color(TEXTDISPLAY td, int c) {
- reinterpret_cast<Fl_Text_Display*>(td)->textcolor(static_cast<Fl_Color>(c));
+ reinterpret_cast<My_Text_Display*>(td)->textcolor(static_cast<Fl_Color>(c));
}
int fl_text_display_get_text_font(TEXTDISPLAY td) {
- return reinterpret_cast<Fl_Text_Display*>(td)->textfont();
+ return reinterpret_cast<My_Text_Display*>(td)->textfont();
}
void fl_text_display_set_text_font(TEXTDISPLAY td, int f) {
- reinterpret_cast<Fl_Text_Display*>(td)->textfont(static_cast<Fl_Font>(f));
+ reinterpret_cast<My_Text_Display*>(td)->textfont(static_cast<Fl_Font>(f));
}
int fl_text_display_get_text_size(TEXTDISPLAY td) {
- return reinterpret_cast<Fl_Text_Display*>(td)->textsize();
+ return reinterpret_cast<My_Text_Display*>(td)->textsize();
}
void fl_text_display_set_text_size(TEXTDISPLAY td, int s) {
- reinterpret_cast<Fl_Text_Display*>(td)->textsize(static_cast<Fl_Fontsize>(s));
+ reinterpret_cast<My_Text_Display*>(td)->textsize(static_cast<Fl_Fontsize>(s));
}
int fl_text_display_get_insert_pos(TEXTDISPLAY td) {
- return reinterpret_cast<Fl_Text_Display*>(td)->insert_position();
+ return reinterpret_cast<My_Text_Display*>(td)->insert_position();
}
void fl_text_display_set_insert_pos(TEXTDISPLAY td, int p) {
- reinterpret_cast<Fl_Text_Display*>(td)->insert_position(p);
+ reinterpret_cast<My_Text_Display*>(td)->insert_position(p);
}
void fl_text_display_show_insert_pos(TEXTDISPLAY td) {
- reinterpret_cast<Fl_Text_Display*>(td)->show_insert_position();
+ reinterpret_cast<My_Text_Display*>(td)->show_insert_position();
}
void fl_text_display_next_word(TEXTDISPLAY td) {
- reinterpret_cast<Fl_Text_Display*>(td)->next_word();
+ reinterpret_cast<My_Text_Display*>(td)->next_word();
}
void fl_text_display_previous_word(TEXTDISPLAY td) {
- reinterpret_cast<Fl_Text_Display*>(td)->previous_word();
+ reinterpret_cast<My_Text_Display*>(td)->previous_word();
}
void fl_text_display_wrap_mode(TEXTDISPLAY td, int w, int m) {
- reinterpret_cast<Fl_Text_Display*>(td)->wrap_mode(w, m);
+ reinterpret_cast<My_Text_Display*>(td)->wrap_mode(w, m);
}
int fl_text_display_skip_lines(TEXTDISPLAY td, int s, int l, int p) {
- return reinterpret_cast<Fl_Text_Display*>(td)->skip_lines(s, l, p);
+ return reinterpret_cast<My_Text_Display*>(td)->skip_lines(s, l, p);
}
int fl_text_display_rewind_lines(TEXTDISPLAY td, int s, int l) {
- return reinterpret_cast<Fl_Text_Display*>(td)->rewind_lines(s, l);
+ return reinterpret_cast<My_Text_Display*>(td)->rewind_lines(s, l);
}
void fl_text_display_linenumber_width(TEXTDISPLAY td, int w) {
- reinterpret_cast<Fl_Text_Display*>(td)->linenumber_width(w);
+ reinterpret_cast<My_Text_Display*>(td)->linenumber_width(w);
}