Found a few more bugs in Fl_Text_* when using wrapping. Vertical slider is still off.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7812 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
bc3437bb15
commit
d9be6bbddf
@ -2681,7 +2681,7 @@ int Fl_Text_Display::empty_vlines() const {
|
||||
entries in the line starts array rather than by scanning for newlines.
|
||||
|
||||
\param visLineNum index of line in visible line array
|
||||
\return number of byytes in this line
|
||||
\return number of bytes in this line
|
||||
*/
|
||||
int Fl_Text_Display::vline_length( int visLineNum ) const {
|
||||
int nextLineStart, lineStartPos;
|
||||
@ -2693,13 +2693,18 @@ int Fl_Text_Display::vline_length( int visLineNum ) const {
|
||||
|
||||
if ( lineStartPos == -1 )
|
||||
return 0;
|
||||
|
||||
if ( visLineNum + 1 >= mNVisibleLines )
|
||||
return mLastChar - lineStartPos;
|
||||
|
||||
nextLineStart = mLineStarts[ visLineNum + 1 ];
|
||||
if ( nextLineStart == -1 )
|
||||
return mLastChar - lineStartPos;
|
||||
if (wrap_uses_character(nextLineStart-1))
|
||||
return nextLineStart-1 - lineStartPos;
|
||||
|
||||
int nextLineStartMinus1 = buffer()->prev_char(nextLineStart);
|
||||
if (wrap_uses_character(nextLineStartMinus1))
|
||||
return nextLineStartMinus1 - lineStartPos;
|
||||
|
||||
return nextLineStart - lineStartPos;
|
||||
}
|
||||
|
||||
@ -2760,7 +2765,7 @@ void Fl_Text_Display::find_wrap_range(const char *deletedText, int pos,
|
||||
countFrom = buf->line_start(pos);
|
||||
}
|
||||
|
||||
IS_UTF8_ALIGNED2(buffer(), countFrom)
|
||||
IS_UTF8_ALIGNED2(buf, countFrom)
|
||||
|
||||
/*
|
||||
** Move forward through the (new) text one line at a time, counting
|
||||
@ -3027,7 +3032,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
*/
|
||||
colNum = 0;
|
||||
width = 0;
|
||||
for (p=lineStart; p<buf->length(); p=buffer()->next_char(p)) {
|
||||
for (p=lineStart; p<buf->length(); p=buf->next_char(p)) {
|
||||
c = buf->char_at(p); // UCS-4
|
||||
|
||||
/* If the character was a newline, count the line and start over,
|
||||
@ -3041,15 +3046,15 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
return;
|
||||
}
|
||||
nLines++;
|
||||
int p1 = buf->next_char(p);
|
||||
if (nLines >= maxLines) {
|
||||
int p1 = buffer()->next_char(p);
|
||||
*retPos = p1;
|
||||
*retLines = nLines;
|
||||
*retLineStart = p1;
|
||||
*retLineEnd = p;
|
||||
return;
|
||||
}
|
||||
lineStart = buffer()->next_char(p);
|
||||
lineStart = p1;
|
||||
colNum = 0;
|
||||
width = 0;
|
||||
} else {
|
||||
@ -3066,28 +3071,28 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
and wrap there */
|
||||
if (colNum > wrapMargin || width > maxWidth) {
|
||||
foundBreak = false;
|
||||
for (b=p; b>=lineStart; b=buffer()->prev_char(b)) {
|
||||
for (b=p; b>=lineStart; b=buf->prev_char(b)) {
|
||||
c = buf->char_at(b);
|
||||
if (c == '\t' || c == ' ') {
|
||||
newLineStart = buffer()->next_char(b);
|
||||
newLineStart = buf->next_char(b);
|
||||
if (countPixels) {
|
||||
colNum = 0;
|
||||
width = 0;
|
||||
// TODO: we should have a much more efficient function already available!
|
||||
int iMax = buffer()->next_char(p);
|
||||
for (i=buffer()->next_char(b); i<iMax; i = buffer()->next_char(i)) {
|
||||
int iMax = buf->next_char(p);
|
||||
for (i=buf->next_char(b); i<iMax; i = buf->next_char(i)) {
|
||||
width += measure_proportional_character(buf->address(i), colNum,
|
||||
i+styleBufOffset);
|
||||
colNum++;
|
||||
}
|
||||
} else
|
||||
colNum = buf->count_displayed_characters(buffer()->next_char(b), buffer()->next_char(p));
|
||||
colNum = buf->count_displayed_characters(buf->next_char(b), buf->next_char(p));
|
||||
foundBreak = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!foundBreak) { /* no whitespace, just break at margin */
|
||||
newLineStart = max(p, buffer()->next_char(lineStart));
|
||||
newLineStart = max(p, buf->next_char(lineStart));
|
||||
const char *s = buf->address(b);
|
||||
colNum++;
|
||||
if (countPixels)
|
||||
@ -3102,7 +3107,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
}
|
||||
nLines++;
|
||||
if (nLines >= maxLines) {
|
||||
*retPos = foundBreak ? buffer()->next_char(b) : max(p, buffer()->next_char(lineStart));
|
||||
*retPos = foundBreak ? buf->next_char(b) : max(p, buf->next_char(lineStart));
|
||||
*retLines = nLines;
|
||||
*retLineStart = lineStart;
|
||||
*retLineEnd = foundBreak ? b : p;
|
||||
@ -3116,7 +3121,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
*retPos = buf->length();
|
||||
*retLines = nLines;
|
||||
if (countLastLineMissingNewLine && colNum > 0)
|
||||
*retLines = buffer()->next_char(*retLines);
|
||||
*retLines = buf->next_char(*retLines);
|
||||
*retLineStart = lineStart;
|
||||
*retLineEnd = buf->length();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user