// Programmed by Jedidiah Barber // Released into the public domain #include #include #include "c_fl_text_display.h" #include "c_fl_text_buffer.h" // Exports from Ada extern "C" void widget_draw_hook(void * ud); extern "C" int widget_handle_hook(void * ud, int e); // Attaching all relevant hooks and friends class My_Text_Display : public Fl_Text_Display { public: using Fl_Text_Display::Fl_Text_Display; friend void fl_text_display_draw(TEXTDISPLAY td); friend int fl_text_display_handle(TEXTDISPLAY td, int e); void draw(); int handle(int e); }; void My_Text_Display::draw() { widget_draw_hook(this->user_data()); } int My_Text_Display::handle(int e) { return widget_handle_hook(this->user_data(), e); } // Flattened C API 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)); } void fl_text_display_highlight_data(TEXTDISPLAY td, TEXTBUFFER tb, void * st, int len) { reinterpret_cast(td)->highlight_data (reinterpret_cast(tb), reinterpret_cast(st), len, 0, 0, 0); } void fl_text_display_highlight_data2(TEXTDISPLAY td, TEXTBUFFER tb, void * st, int len, char us, void * cb, void * a) { reinterpret_cast(td)->highlight_data (reinterpret_cast(tb), reinterpret_cast(st), len, us, reinterpret_cast(cb), a); } double fl_text_display_col_to_x(TEXTDISPLAY td, double c) { return reinterpret_cast(td)->col_to_x(c); } double fl_text_display_x_to_col(TEXTDISPLAY td, double x) { return reinterpret_cast(td)->x_to_col(x); } int fl_text_display_in_selection(TEXTDISPLAY td, int x, int y) { return reinterpret_cast(td)->in_selection(x, y); } int fl_text_display_position_to_xy(TEXTDISPLAY td, int p, int * x, int * y) { return reinterpret_cast(td)->position_to_xy(p, x, y); } unsigned int fl_text_display_get_cursor_color(TEXTDISPLAY td) { return reinterpret_cast(td)->cursor_color(); } void fl_text_display_set_cursor_color(TEXTDISPLAY td, unsigned int c) { reinterpret_cast(td)->cursor_color(c); } void fl_text_display_set_cursor_style(TEXTDISPLAY td, int s) { reinterpret_cast(td)->cursor_style(s); } void fl_text_display_hide_cursor(TEXTDISPLAY td) { reinterpret_cast(td)->hide_cursor(); } void fl_text_display_show_cursor(TEXTDISPLAY td) { reinterpret_cast(td)->show_cursor(); } unsigned int fl_text_display_get_text_color(TEXTDISPLAY td) { return reinterpret_cast(td)->textcolor(); } void fl_text_display_set_text_color(TEXTDISPLAY td, unsigned 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)); } void fl_text_display_insert(TEXTDISPLAY td, char * i) { reinterpret_cast(td)->insert(i); } void fl_text_display_overstrike(TEXTDISPLAY td, char * t) { reinterpret_cast(td)->overstrike(t); } 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(); } int fl_text_display_word_start(TEXTDISPLAY td, int p) { return reinterpret_cast(td)->word_start(p); } int fl_text_display_word_end(TEXTDISPLAY td, int p) { return reinterpret_cast(td)->word_end(p); } 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_line_start(TEXTDISPLAY td, int s) { return reinterpret_cast(td)->line_start(s); } int fl_text_display_line_end(TEXTDISPLAY td, int s, int p) { return reinterpret_cast(td)->line_end(s, p); } int fl_text_display_count_lines(TEXTDISPLAY td, int s, int f, int p) { return reinterpret_cast(td)->count_lines(s, f, p); } 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); } unsigned int fl_text_display_get_linenumber_align(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_align(); } void fl_text_display_set_linenumber_align(TEXTDISPLAY td, unsigned int a) { reinterpret_cast(td)->linenumber_align(a); } unsigned int fl_text_display_get_linenumber_bgcolor(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_bgcolor(); } void fl_text_display_set_linenumber_bgcolor(TEXTDISPLAY td, unsigned int c) { reinterpret_cast(td)->linenumber_bgcolor(c); } unsigned int fl_text_display_get_linenumber_fgcolor(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_fgcolor(); } void fl_text_display_set_linenumber_fgcolor(TEXTDISPLAY td, unsigned int c) { reinterpret_cast(td)->linenumber_fgcolor(c); } int fl_text_display_get_linenumber_font(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_font(); } void fl_text_display_set_linenumber_font(TEXTDISPLAY td, int f) { reinterpret_cast(td)->linenumber_font(f); } int fl_text_display_get_linenumber_size(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_size(); } void fl_text_display_set_linenumber_size(TEXTDISPLAY td, int s) { reinterpret_cast(td)->linenumber_size(s); } int fl_text_display_get_linenumber_width(TEXTDISPLAY td) { return reinterpret_cast(td)->linenumber_width(); } void fl_text_display_set_linenumber_width(TEXTDISPLAY td, int w) { reinterpret_cast(td)->linenumber_width(w); } int fl_text_display_move_down(TEXTDISPLAY td) { return reinterpret_cast(td)->move_down(); } int fl_text_display_move_left(TEXTDISPLAY td) { return reinterpret_cast(td)->move_left(); } int fl_text_display_move_right(TEXTDISPLAY td) { return reinterpret_cast(td)->move_right(); } int fl_text_display_move_up(TEXTDISPLAY td) { return reinterpret_cast(td)->move_up(); } void fl_text_display_scroll(TEXTDISPLAY td, int l) { reinterpret_cast(td)->scroll(l, 1); } unsigned int fl_text_display_get_scrollbar_align(TEXTDISPLAY td) { return reinterpret_cast(td)->scrollbar_align(); } void fl_text_display_set_scrollbar_align(TEXTDISPLAY td, unsigned int a) { reinterpret_cast(td)->scrollbar_align(a); } int fl_text_display_get_scrollbar_width(TEXTDISPLAY td) { return reinterpret_cast(td)->scrollbar_width(); } void fl_text_display_set_scrollbar_width(TEXTDISPLAY td, int w) { reinterpret_cast(td)->scrollbar_width(w); } void fl_text_display_redisplay_range(TEXTDISPLAY td, int s, int f) { reinterpret_cast(td)->redisplay_range(s,f); } void fl_text_display_draw(TEXTDISPLAY td) { reinterpret_cast(td)->Fl_Text_Display::draw(); } int fl_text_display_handle(TEXTDISPLAY td, int e) { return reinterpret_cast(td)->Fl_Text_Display::handle(e); }