summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2010-11-27 20:49:27 +0000
committerMatthias Melcher <fltk@matthiasm.com>2010-11-27 20:49:27 +0000
commit1a793cdbc31f9fedaf282b8a348851b412e662f1 (patch)
tree8cd6f27e578cb08d4b78162fe32e8cd252e1cd89
parentc6e46fed45d803243805975ea3f2c5f73e84654f (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.H9
-rw-r--r--src/Fl_Text_Display.cxx12
-rw-r--r--test/editor.cxx2
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(