summaryrefslogtreecommitdiff
path: root/body/c_fl_text_display.cpp
diff options
context:
space:
mode:
authorJedidiah Barber <contact@jedbarber.id.au>2025-02-01 23:49:05 +1300
committerJedidiah Barber <contact@jedbarber.id.au>2025-02-01 23:49:05 +1300
commite644b575c5f7ae9b78df2bb6985ec352a7c0f0e0 (patch)
treecb6883439bcb5943f8507d3c5e7c1a087045ff34 /body/c_fl_text_display.cpp
parentad10541237cbb2f1047bfafa7386f3784f828c42 (diff)
Filled holes in Fl_Text_Display API, fixed some Shortcut subprogram inconsistencies
Diffstat (limited to 'body/c_fl_text_display.cpp')
-rw-r--r--body/c_fl_text_display.cpp267
1 files changed, 263 insertions, 4 deletions
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<Fl_Text_Display*>(td)->buffer(static_cast<Fl_Text_Buffer*>(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<Fl_Text_Display*>(td));
+}
+
+void fl_text_display_buffer_predelete_cb(int p, int d, TEXTDISPLAY td) {
+ Friend_Text_Display::buffer_predelete_cb(p, d, static_cast<Fl_Text_Display*>(td));
+}
+
@@ -87,6 +149,10 @@ void fl_text_display_highlight_data2(TEXTDISPLAY td, TEXTBUFFER tb, void * st, i
len, us, reinterpret_cast<Fl_Text_Display::Unfinished_Style_Cb>(cb), a);
}
+int fl_text_display_position_style(TEXTDISPLAY td, int s, int l, int i) {
+ return static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->previous_word();
}
+
+
+
void fl_text_display_wrap_mode(TEXTDISPLAY td, int w, int m) {
static_cast<Fl_Text_Display*>(td)->wrap_mode(w, m);
}
+int fl_text_display_wrapped_row(TEXTDISPLAY td, int r) {
+ return static_cast<Fl_Text_Display*>(td)->wrapped_row(r);
+}
+
+int fl_text_display_wrapped_column(TEXTDISPLAY td, int r, int c) {
+ return static_cast<Fl_Text_Display*>(td)->wrapped_column(r, c);
+}
+
+int fl_text_display_wrap_uses_character(TEXTDISPLAY td, int lep) {
+ return (static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->*(&Friend_Text_Display::wrapped_line_counter))
+ (static_cast<Fl_Text_Buffer*>(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<Fl_Text_Display*>(td)->rewind_lines(s, l);
}
+void fl_text_display_calc_last_char(TEXTDISPLAY td) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::calc_last_char))();
+}
+
+void fl_text_display_calc_line_starts(TEXTDISPLAY td, int s, int f) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::calc_line_starts))(s, f);
+}
+
+void fl_text_display_offset_line_starts(TEXTDISPLAY td, int t) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::offset_line_starts))(t);
+}
+
+
+
+
+void fl_text_display_absolute_top_line_number(TEXTDISPLAY td, int c) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::absolute_top_line_number))(c);
+}
+
+int fl_text_display_get_absolute_top_line_number(TEXTDISPLAY td) {
+ return (static_cast<Fl_Text_Display*>(td)->*
+ (&Friend_Text_Display::get_absolute_top_line_number))();
+}
+
+void fl_text_display_maintain_absolute_top_line_number(TEXTDISPLAY td, int s) {
+ (static_cast<Fl_Text_Display*>(td)->*
+ (&Friend_Text_Display::maintain_absolute_top_line_number))(s);
+}
+
+int fl_text_display_maintaining_absolute_top_line_number(TEXTDISPLAY td) {
+ return (static_cast<Fl_Text_Display*>(td)->*
+ (&Friend_Text_Display::maintaining_absolute_top_line_number))();
+}
+
+void fl_text_display_reset_absolute_top_line_number(TEXTDISPLAY td) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::reset_absolute_top_line_number))();
+}
+
+
+
+
+int fl_text_display_empty_vlines(TEXTDISPLAY td) {
+ return (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::empty_vlines))();
+}
+
+int fl_text_display_longest_vline(TEXTDISPLAY td) {
+ return (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::longest_vline))();
+}
+
+int fl_text_display_vline_length(TEXTDISPLAY td, int l) {
+ return (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::vline_length))(l);
+}
+
@@ -276,6 +445,32 @@ void fl_text_display_set_linenumber_width(TEXTDISPLAY td, int w) {
static_cast<Fl_Text_Display*>(td)->linenumber_width(w);
}
+const char * fl_text_display_get_linenumber_format(TEXTDISPLAY td) {
+ return static_cast<Fl_Text_Display*>(td)->linenumber_format();
+}
+
+void fl_text_display_set_linenumber_format(TEXTDISPLAY td, const char * v) {
+ static_cast<Fl_Text_Display*>(td)->linenumber_format(v);
+}
+
+
+
+
+double fl_text_display_measure_proportional_character(TEXTDISPLAY td, const char * str,
+ int xpix, int pos)
+{
+ return (static_cast<Fl_Text_Display*>(td)->*
+ (&Friend_Text_Display::measure_proportional_character))(str, xpix, pos);
+}
+
+int fl_text_display_measure_vline(TEXTDISPLAY td, int line) {
+ return (static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->scroll(l, 1);
+void fl_text_display_scroll(TEXTDISPLAY td, int l, int c) {
+ static_cast<Fl_Text_Display*>(td)->scroll(l, c);
+}
+
+int fl_text_display_scroll2(TEXTDISPLAY td, int l, int p) {
+ return (static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->scrollbar_width(w);
}
+void fl_text_display_update_h_scrollbar(TEXTDISPLAY td) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::update_h_scrollbar))();
+}
+void fl_text_display_update_v_scrollbar(TEXTDISPLAY td) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::update_v_scrollbar))();
+}
-void fl_text_display_redisplay_range(TEXTDISPLAY td, int s, int f) {
- static_cast<Fl_Text_Display*>(td)->redisplay_range(s,f);
+
+
+int fl_text_display_get_shortcut(TEXTDISPLAY td) {
+ return static_cast<Fl_Text_Display*>(td)->shortcut();
}
+void fl_text_display_set_shortcut(TEXTDISPLAY td, int s) {
+ static_cast<Fl_Text_Display*>(td)->shortcut(s);
+}
+
+
+
+
+void fl_text_display_resize(TEXTDISPLAY td, int x, int y, int w, int h) {
+ static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->*(&Friend_Text_Display::clear_rect))(s, x, y, w, h);
+}
+
+void fl_text_display_display_insert(TEXTDISPLAY td) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::display_insert))();
+}
+
+void fl_text_display_redisplay_range(TEXTDISPLAY td, int s, int f) {
+ static_cast<Fl_Text_Display*>(td)->redisplay_range(s,f);
+}
void fl_text_display_draw(TEXTDISPLAY td) {
static_cast<My_Text_Display*>(td)->Fl_Text_Display::draw();
}
+void fl_text_display_draw_cursor(TEXTDISPLAY td, int x, int y) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::draw_cursor))(x, y);
+}
+
+void fl_text_display_draw_line_numbers(TEXTDISPLAY td, int c) {
+ (static_cast<Fl_Text_Display*>(td)->*(&Friend_Text_Display::draw_line_numbers))(c!=0);
+}
+
+void fl_text_display_draw_range(TEXTDISPLAY td, int s, int f) {
+ (static_cast<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(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<Fl_Text_Display*>(td)->*(&Friend_Text_Display::draw_vline))
+ (line, left, right, lchar, rchar);
+}
+
int fl_text_display_handle(TEXTDISPLAY td, int e) {
return static_cast<My_Text_Display*>(td)->Fl_Text_Display::handle(e);
}