From e644b575c5f7ae9b78df2bb6985ec352a7c0f0e0 Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Sat, 1 Feb 2025 23:49:05 +1300 Subject: Filled holes in Fl_Text_Display API, fixed some Shortcut subprogram inconsistencies --- body/c_fl_text_display.cpp | 267 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 263 insertions(+), 4 deletions(-) (limited to 'body/c_fl_text_display.cpp') diff --git a/body/c_fl_text_display.cpp b/body/c_fl_text_display.cpp index 654d6ce..a50f25d 100644 --- a/body/c_fl_text_display.cpp +++ b/body/c_fl_text_display.cpp @@ -20,6 +20,58 @@ extern "C" int widget_handle_hook(void * ud, int e); +// Non-friend protected access + +class Friend_Text_Display : Fl_Text_Display { +public: + using Fl_Text_Display::buffer_modified_cb; + using Fl_Text_Display::buffer_predelete_cb; + + using Fl_Text_Display::find_line_end; + using Fl_Text_Display::find_x; + using Fl_Text_Display::position_to_line; + using Fl_Text_Display::position_to_linecol; + using Fl_Text_Display::xy_to_position; + using Fl_Text_Display::xy_to_rowcol; + + using Fl_Text_Display::wrap_uses_character; + using Fl_Text_Display::wrapped_line_counter; + + using Fl_Text_Display::calc_last_char; + using Fl_Text_Display::calc_line_starts; + using Fl_Text_Display::offset_line_starts; + + using Fl_Text_Display::absolute_top_line_number; + using Fl_Text_Display::get_absolute_top_line_number; + using Fl_Text_Display::maintain_absolute_top_line_number; + using Fl_Text_Display::maintaining_absolute_top_line_number; + using Fl_Text_Display::reset_absolute_top_line_number; + + using Fl_Text_Display::empty_vlines; + using Fl_Text_Display::longest_vline; + using Fl_Text_Display::vline_length; + + using Fl_Text_Display::measure_proportional_character; + using Fl_Text_Display::measure_vline; + using Fl_Text_Display::string_width; + + using Fl_Text_Display::scroll_; + using Fl_Text_Display::update_h_scrollbar; + using Fl_Text_Display::update_v_scrollbar; + + using Fl_Text_Display::clear_rect; + using Fl_Text_Display::display_insert; + using Fl_Text_Display::draw_cursor; + using Fl_Text_Display::draw_line_numbers; + using Fl_Text_Display::draw_range; + using Fl_Text_Display::draw_string; + using Fl_Text_Display::draw_text; + using Fl_Text_Display::draw_vline; +}; + + + + // Attaching all relevant hooks and friends class My_Text_Display : public Fl_Text_Display { @@ -68,6 +120,16 @@ void fl_text_display_set_buffer(TEXTDISPLAY td, TEXTBUFFER tb) { static_cast(td)->buffer(static_cast(tb)); } +void fl_text_display_buffer_modified_cb(int p, int i, int d, int r, + const char * t, TEXTDISPLAY td) +{ + Friend_Text_Display::buffer_modified_cb(p, i, d, r, t, static_cast(td)); +} + +void fl_text_display_buffer_predelete_cb(int p, int d, TEXTDISPLAY td) { + Friend_Text_Display::buffer_predelete_cb(p, d, static_cast(td)); +} + @@ -87,6 +149,10 @@ void fl_text_display_highlight_data2(TEXTDISPLAY td, TEXTBUFFER tb, void * st, i len, us, reinterpret_cast(cb), a); } +int fl_text_display_position_style(TEXTDISPLAY td, int s, int l, int i) { + return static_cast(td)->position_style(s, l, i); +} + @@ -106,6 +172,32 @@ int fl_text_display_position_to_xy(TEXTDISPLAY td, int p, int * x, int * y) { return static_cast(td)->position_to_xy(p, x, y); } +void fl_text_display_find_line_end(TEXTDISPLAY td, int sp, int spils, int &le, int &nls) { + (static_cast(td)->*(&Friend_Text_Display::find_line_end)) + (sp, spils!=0, &le, &nls); +} + +int fl_text_display_find_x(TEXTDISPLAY td, const char * str, int l, int s, int x) { + return (static_cast(td)->*(&Friend_Text_Display::find_x))(str, l, s, x); +} + +int fl_text_display_position_to_line(TEXTDISPLAY td, int p, int &ln) { + return (static_cast(td)->*(&Friend_Text_Display::position_to_line))(p, &ln); +} + +int fl_text_display_position_to_linecol(TEXTDISPLAY td, int p, int &ln, int &c) { + return (static_cast(td)->*(&Friend_Text_Display::position_to_linecol)) + (p, &ln, &c); +} + +int fl_text_display_xy_to_position(TEXTDISPLAY td, int x, int y, int k) { + return (static_cast(td)->*(&Friend_Text_Display::xy_to_position))(x, y, k); +} + +void fl_text_display_xy_to_rowcol(TEXTDISPLAY td, int x, int y, int &r, int &c, int k) { + (static_cast(td)->*(&Friend_Text_Display::xy_to_rowcol))(x, y, &r, &c, k); +} + @@ -198,10 +290,34 @@ void fl_text_display_previous_word(TEXTDISPLAY td) { static_cast(td)->previous_word(); } + + + void fl_text_display_wrap_mode(TEXTDISPLAY td, int w, int m) { static_cast(td)->wrap_mode(w, m); } +int fl_text_display_wrapped_row(TEXTDISPLAY td, int r) { + return static_cast(td)->wrapped_row(r); +} + +int fl_text_display_wrapped_column(TEXTDISPLAY td, int r, int c) { + return static_cast(td)->wrapped_column(r, c); +} + +int fl_text_display_wrap_uses_character(TEXTDISPLAY td, int lep) { + return (static_cast(td)->*(&Friend_Text_Display::wrap_uses_character))(lep); +} + +void fl_text_display_wrapped_line_counter(TEXTDISPLAY td, void * buf, int startPos, + int maxPos, int maxLines, int spils, int sbo, int &retPos, int &retLines, int &retLineStart, + int &retLineEnd, int cllmnl) +{ + (static_cast(td)->*(&Friend_Text_Display::wrapped_line_counter)) + (static_cast(buf), startPos, maxPos, maxLines, spils!=0, sbo, + &retPos, &retLines, &retLineStart, &retLineEnd, cllmnl!=0); +} + @@ -225,6 +341,59 @@ int fl_text_display_rewind_lines(TEXTDISPLAY td, int s, int l) { return static_cast(td)->rewind_lines(s, l); } +void fl_text_display_calc_last_char(TEXTDISPLAY td) { + (static_cast(td)->*(&Friend_Text_Display::calc_last_char))(); +} + +void fl_text_display_calc_line_starts(TEXTDISPLAY td, int s, int f) { + (static_cast(td)->*(&Friend_Text_Display::calc_line_starts))(s, f); +} + +void fl_text_display_offset_line_starts(TEXTDISPLAY td, int t) { + (static_cast(td)->*(&Friend_Text_Display::offset_line_starts))(t); +} + + + + +void fl_text_display_absolute_top_line_number(TEXTDISPLAY td, int c) { + (static_cast(td)->*(&Friend_Text_Display::absolute_top_line_number))(c); +} + +int fl_text_display_get_absolute_top_line_number(TEXTDISPLAY td) { + return (static_cast(td)->* + (&Friend_Text_Display::get_absolute_top_line_number))(); +} + +void fl_text_display_maintain_absolute_top_line_number(TEXTDISPLAY td, int s) { + (static_cast(td)->* + (&Friend_Text_Display::maintain_absolute_top_line_number))(s); +} + +int fl_text_display_maintaining_absolute_top_line_number(TEXTDISPLAY td) { + return (static_cast(td)->* + (&Friend_Text_Display::maintaining_absolute_top_line_number))(); +} + +void fl_text_display_reset_absolute_top_line_number(TEXTDISPLAY td) { + (static_cast(td)->*(&Friend_Text_Display::reset_absolute_top_line_number))(); +} + + + + +int fl_text_display_empty_vlines(TEXTDISPLAY td) { + return (static_cast(td)->*(&Friend_Text_Display::empty_vlines))(); +} + +int fl_text_display_longest_vline(TEXTDISPLAY td) { + return (static_cast(td)->*(&Friend_Text_Display::longest_vline))(); +} + +int fl_text_display_vline_length(TEXTDISPLAY td, int l) { + return (static_cast(td)->*(&Friend_Text_Display::vline_length))(l); +} + @@ -276,6 +445,32 @@ void fl_text_display_set_linenumber_width(TEXTDISPLAY td, int w) { static_cast(td)->linenumber_width(w); } +const char * fl_text_display_get_linenumber_format(TEXTDISPLAY td) { + return static_cast(td)->linenumber_format(); +} + +void fl_text_display_set_linenumber_format(TEXTDISPLAY td, const char * v) { + static_cast(td)->linenumber_format(v); +} + + + + +double fl_text_display_measure_proportional_character(TEXTDISPLAY td, const char * str, + int xpix, int pos) +{ + return (static_cast(td)->* + (&Friend_Text_Display::measure_proportional_character))(str, xpix, pos); +} + +int fl_text_display_measure_vline(TEXTDISPLAY td, int line) { + return (static_cast(td)->*(&Friend_Text_Display::measure_vline))(line); +} + +double fl_text_display_string_width(TEXTDISPLAY td, const char * str, int len, int s) { + return (static_cast(td)->*(&Friend_Text_Display::string_width))(str, len, s); +} + @@ -298,8 +493,12 @@ int fl_text_display_move_up(TEXTDISPLAY td) { -void fl_text_display_scroll(TEXTDISPLAY td, int l) { - static_cast(td)->scroll(l, 1); +void fl_text_display_scroll(TEXTDISPLAY td, int l, int c) { + static_cast(td)->scroll(l, c); +} + +int fl_text_display_scroll2(TEXTDISPLAY td, int l, int p) { + return (static_cast(td)->*(&Friend_Text_Display::scroll_))(l, p); } unsigned int fl_text_display_get_scrollbar_align(TEXTDISPLAY td) { @@ -318,20 +517,80 @@ void fl_text_display_set_scrollbar_width(TEXTDISPLAY td, int w) { static_cast(td)->scrollbar_width(w); } +void fl_text_display_update_h_scrollbar(TEXTDISPLAY td) { + (static_cast(td)->*(&Friend_Text_Display::update_h_scrollbar))(); +} +void fl_text_display_update_v_scrollbar(TEXTDISPLAY td) { + (static_cast(td)->*(&Friend_Text_Display::update_v_scrollbar))(); +} -void fl_text_display_redisplay_range(TEXTDISPLAY td, int s, int f) { - static_cast(td)->redisplay_range(s,f); + + +int fl_text_display_get_shortcut(TEXTDISPLAY td) { + return static_cast(td)->shortcut(); } +void fl_text_display_set_shortcut(TEXTDISPLAY td, int s) { + static_cast(td)->shortcut(s); +} + + + + +void fl_text_display_resize(TEXTDISPLAY td, int x, int y, int w, int h) { + static_cast(td)->resize(x, y, w, h); +} + + +void fl_text_display_clear_rect(TEXTDISPLAY td, int s, int x, int y, int w, int h) { + (static_cast(td)->*(&Friend_Text_Display::clear_rect))(s, x, y, w, h); +} + +void fl_text_display_display_insert(TEXTDISPLAY td) { + (static_cast(td)->*(&Friend_Text_Display::display_insert))(); +} + +void fl_text_display_redisplay_range(TEXTDISPLAY td, int s, int f) { + static_cast(td)->redisplay_range(s,f); +} void fl_text_display_draw(TEXTDISPLAY td) { static_cast(td)->Fl_Text_Display::draw(); } +void fl_text_display_draw_cursor(TEXTDISPLAY td, int x, int y) { + (static_cast(td)->*(&Friend_Text_Display::draw_cursor))(x, y); +} + +void fl_text_display_draw_line_numbers(TEXTDISPLAY td, int c) { + (static_cast(td)->*(&Friend_Text_Display::draw_line_numbers))(c!=0); +} + +void fl_text_display_draw_range(TEXTDISPLAY td, int s, int f) { + (static_cast(td)->*(&Friend_Text_Display::draw_range))(s, f); +} + +void fl_text_display_draw_string(TEXTDISPLAY td, int s, int x, int y, int r, + const char * str, int n) +{ + (static_cast(td)->*(&Friend_Text_Display::draw_string))(s, x, y, r, str, n); +} + +void fl_text_display_draw_text(TEXTDISPLAY td, int x, int y, int w, int h) { + (static_cast(td)->*(&Friend_Text_Display::draw_text))(x, y, w, h); +} + +void fl_text_display_draw_vline(TEXTDISPLAY td, int line, int left, int right, + int lchar, int rchar) +{ + (static_cast(td)->*(&Friend_Text_Display::draw_vline)) + (line, left, right, lchar, rchar); +} + int fl_text_display_handle(TEXTDISPLAY td, int e) { return static_cast(td)->Fl_Text_Display::handle(e); } -- cgit