diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2010-11-27 20:49:27 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2010-11-27 20:49:27 +0000 |
| commit | 1a793cdbc31f9fedaf282b8a348851b412e662f1 (patch) | |
| tree | 8cd6f27e578cb08d4b78162fe32e8cd252e1cd89 | |
| parent | c6e46fed45d803243805975ea3f2c5f73e84654f (diff) | |
Tab is now alway 8 characters wide.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7896 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | FL/Fl_Text_Display.H | 9 | ||||
| -rw-r--r-- | src/Fl_Text_Display.cxx | 12 | ||||
| -rw-r--r-- | test/editor.cxx | 2 |
3 files changed, 14 insertions, 9 deletions
diff --git a/FL/Fl_Text_Display.H b/FL/Fl_Text_Display.H index 0812fe52a..ae5356c00 100644 --- a/FL/Fl_Text_Display.H +++ b/FL/Fl_Text_Display.H @@ -287,7 +287,7 @@ public: \param x number of pixels form the left margin \return an approximate column number based on the main font */ - double x_to_col(double y); + double x_to_col(double y) const; /** Convert a column number into an x pixel position. @@ -295,7 +295,7 @@ public: \return number of pixels form the left margin to the left of an average sized character */ - double col_to_x(double col); + double col_to_x(double col) const; protected: // Most (all?) of this stuff should only be called from resize() or @@ -445,7 +445,10 @@ protected: int mModifyingTabDistance; /* Whether tab distance is being modified */ - double mColumnScale; /* Width in pixels of an average character */ + mutable double mColumnScale; /* Width in pixels of an average character. This + value is calculated as needed (lazy eval); it + needs to be mutable so that it can be calculated + within a method marked as "const" */ Fl_Color mCursor_color; diff --git a/src/Fl_Text_Display.cxx b/src/Fl_Text_Display.cxx index 99bf82749..cd3ff4e67 100644 --- a/src/Fl_Text_Display.cxx +++ b/src/Fl_Text_Display.cxx @@ -1750,8 +1750,9 @@ int Fl_Text_Display::handle_vline( int w = 0; if (prevChar=='\t') { // draw a single Tab space + int tab = col_to_x(8); int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x; - w = (((xAbs/100)+1)*100) - xAbs; + w = (((xAbs/tab)+1)*tab) - xAbs; if (mode==DRAW_LINE) draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 ); if (mode==FIND_INDEX && startX+w>rightClip) { @@ -1782,8 +1783,9 @@ int Fl_Text_Display::handle_vline( int w = 0; if (currChar=='\t') { // draw a single Tab space + int tab = col_to_x(8); int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x; - w = (((xAbs/100)+1)*100) - xAbs; + w = (((xAbs/tab)+1)*tab) - xAbs; if (mode==DRAW_LINE) draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 ); if (mode==FIND_INDEX) { @@ -3759,7 +3761,7 @@ int Fl_Text_Display::handle(int event) { /* Convert an x pixel position into a column number. */ -double Fl_Text_Display::x_to_col(double y) +double Fl_Text_Display::x_to_col(double y) const { if (!mColumnScale) { mColumnScale = string_width("Mitg", 4, 'A') / 4.0; @@ -3769,9 +3771,9 @@ double Fl_Text_Display::x_to_col(double y) /** - Convert a column number into an y pixel position. + Convert a column number into an x pixel position. */ -double Fl_Text_Display::col_to_x(double col) +double Fl_Text_Display::col_to_x(double col) const { if (!mColumnScale) { // recalculate column scale value diff --git a/test/editor.cxx b/test/editor.cxx index 49c8d10a9..ff4829eed 100644 --- a/test/editor.cxx +++ b/test/editor.cxx @@ -775,7 +775,7 @@ Fl_Window* new_view() { w->editor = new Fl_Text_Editor(0, 30, 660, 370); w->editor->textfont(FL_COURIER); w->editor->textsize(TS); - //w->editor->wrap_mode(Fl_Text_Editor::WRAP_AT_BOUNDS, 100); + w->editor->wrap_mode(Fl_Text_Editor::WRAP_AT_BOUNDS, 250); w->editor->buffer(textbuf); w->editor->textfont(FL_HELVETICA); textbuf->text( |
