33 #ifndef FL_TEXT_DISPLAY_H
34 #define FL_TEXT_DISPLAY_H
39 #include "Fl_Scrollbar.H"
40 #include "Fl_Text_Buffer.H"
100 typedef void (*Unfinished_Style_Cb)(int,
void *);
116 virtual int handle(
int e);
134 void redisplay_range(
int start,
int end);
135 void scroll(
int topLineNum,
int horizOffset);
136 void insert(
const char* text);
137 void overstrike(
const char* text);
138 void insert_position(
int newPos);
145 int position_to_xy(
int pos,
int* x,
int* y)
const;
147 int in_selection(
int x,
int y)
const;
148 void show_insert_position();
154 int count_lines(
int start,
int end,
bool start_pos_is_line_start)
const;
155 int line_start(
int pos)
const;
156 int line_end(
int startPos,
bool startPosIsLineStart)
const;
157 int skip_lines(
int startPos,
int nLines,
bool startPosIsLineStart);
158 int rewind_lines(
int startPos,
int nLines);
159 void next_word(
void);
160 void previous_word(
void);
162 void show_cursor(
int b = 1);
169 void cursor_style(
int style);
212 int word_start(
int pos)
const {
return buffer()->word_start(pos); }
219 int word_end(
int pos)
const {
return buffer()->word_end(pos); }
223 const Style_Table_Entry *styleTable,
224 int nStyles,
char unfinishedStyle,
225 Unfinished_Style_Cb unfinishedHighlightCB,
228 int position_style(
int lineStartPos,
int lineLen,
int lineIndex)
const;
280 int wrapped_column(
int row,
int column)
const;
281 int wrapped_row(
int row)
const;
282 void wrap_mode(
int wrap,
int wrap_margin);
284 virtual void resize(
int X,
int Y,
int W,
int H);
291 double x_to_col(
double x)
const;
299 double col_to_x(
double col)
const;
308 void draw_text(
int X,
int Y,
int W,
int H);
309 void draw_range(
int start,
int end);
310 void draw_cursor(
int,
int);
312 void draw_string(
int style,
int x,
int y,
int toX,
const char *
string,
315 void draw_vline(
int visLineNum,
int leftClip,
int rightClip,
316 int leftCharIndex,
int rightCharIndex);
318 int find_x(
const char *s,
int len,
int style,
int x)
const;
323 FIND_INDEX_FROM_ZERO,
327 int handle_vline(
int mode,
328 int lineStart,
int lineLen,
int leftChar,
int rightChar,
329 int topClip,
int bottomClip,
330 int leftClip,
int rightClip)
const;
332 void draw_line_numbers(
bool clearAll);
334 void clear_rect(
int style,
int x,
int y,
int width,
int height)
const;
335 void display_insert();
337 void offset_line_starts(
int newTopLineNum);
339 void calc_line_starts(
int startLine,
int endLine);
341 void update_line_starts(
int pos,
int charsInserted,
int charsDeleted,
342 int linesInserted,
int linesDeleted,
int *scrolled);
344 void calc_last_char();
346 int position_to_line(
int pos,
int* lineNum )
const;
347 double string_width(
const char*
string,
int length,
int style)
const;
349 static void scroll_timer_cb(
void*);
351 static void buffer_predelete_cb(
int pos,
int nDeleted,
void* cbArg);
352 static void buffer_modified_cb(
int pos,
int nInserted,
int nDeleted,
353 int nRestyled,
const char* deletedText,
358 void update_v_scrollbar();
359 void update_h_scrollbar();
360 int measure_vline(
int visLineNum)
const;
361 int longest_vline()
const;
362 int empty_vlines()
const;
363 int vline_length(
int visLineNum)
const;
364 int xy_to_position(
int x,
int y,
int PosType = CHARACTER_POS)
const;
366 void xy_to_rowcol(
int x,
int y,
int* row,
int* column,
367 int PosType = CHARACTER_POS)
const;
368 void maintain_absolute_top_line_number(
int state);
369 int get_absolute_top_line_number()
const;
370 void absolute_top_line_number(
int oldFirstChar);
371 int maintaining_absolute_top_line_number()
const;
372 void reset_absolute_top_line_number();
373 int position_to_linecol(
int pos,
int* lineNum,
int* column)
const;
374 int scroll_(
int topLineNum,
int horizOffset);
376 void extend_range_for_styles(
int* start,
int* end);
378 void find_wrap_range(
const char *deletedText,
int pos,
int nInserted,
379 int nDeleted,
int *modRangeStart,
int *modRangeEnd,
380 int *linesInserted,
int *linesDeleted);
381 void measure_deleted_lines(
int pos,
int nDeleted);
382 void wrapped_line_counter(
Fl_Text_Buffer *buf,
int startPos,
int maxPos,
383 int maxLines,
bool startPosIsLineStart,
384 int styleBufOffset,
int *retPos,
int *retLines,
385 int *retLineStart,
int *retLineEnd,
386 bool countLastLineMissingNewLine =
true)
const;
387 void find_line_end(
int pos,
bool start_pos_is_line_start,
int *lineEnd,
388 int *nextLineStart)
const;
389 double measure_proportional_character(
const char *s,
int colNum,
int pos)
const;
390 int wrap_uses_character(
int lineEndPos)
const;
392 int damage_range1_start, damage_range1_end;
393 int damage_range2_start, damage_range2_end;
401 int mCursorPreferredXPos;
407 int mFirstChar, mLastChar;
421 int mNeedAbsTopLineNum;
427 int mHorizOffsetHint;
429 const Style_Table_Entry *mStyleTable;
431 char mUnfinishedStyle;
433 Unfinished_Style_Cb mUnfinishedHighlightCB;
435 void* mHighlightCBArg;
444 int mModifyingTabDistance;
447 mutable double mColumnScale;
456 int scrollbar_width_;
458 int dragPos, dragType, dragging;
459 int display_insert_position_hint;
460 struct {
int x,
y,
w,
h; } text_area;
473 int mLineNumLeft, mLineNumWidth;