first_visible_row = 1;
got_visible_row = 1;
}
-
- if( (k+text_height >= get_h() - bottom_margin ||
- (row_end >= wtext_len && k < get_h() - bottom_margin &&
+
+ if( (k+text_height >= get_h() - bottom_margin ||
+ (row_end >= wtext_len && k < get_h() - bottom_margin &&
k + text_height > 0)) )
last_visible_row = 1;
// Cursor is inside vertical range of row
- if((cursor_y >= top_margin &&
- cursor_y < get_h() - bottom_margin &&
+ if((cursor_y >= top_margin &&
+ cursor_y < get_h() - bottom_margin &&
cursor_y >= k && cursor_y < k + text_height) ||
// Cursor is above 1st row
(cursor_y < k + text_height && first_visible_row) ||
if((column2 + column1) / 2 >= cursor_x) {
result = j - 1;
done = 1;
-// printf("BC_TextBox::get_cursor_letter %d %d %d %d\n",
+// printf("BC_TextBox::get_cursor_letter %d %d %d %d\n",
// __LINE__, result, first_visible_row, last_visible_row);
}
column1 = column2;
}
-// printf("BC_TextBox::get_cursor_letter %d cursor_y=%d k=%d h=%d %d %d\n",
+// printf("BC_TextBox::get_cursor_letter %d cursor_y=%d k=%d h=%d %d %d\n",
// __LINE__, cursor_y, k, get_h(), first_visible_row, last_visible_row);
if(result < 0) result = 0;
if(result > wtext_len) {
}
}
if(wtext[i] == '\n') i++;
-
+
if(i >= wtext_len && !done) {
result = wtext_len;
}
if( letter1 > wtext_len ) letter1 = wtext_len;
if( letter2 > wtext_len ) letter2 = wtext_len;
if( !wtext_len ) return;
-
- while( letter1 > 0 && iswalnum(wtext[letter1]) ) --letter1;
- if( letter1 < wtext_len && iswspace(wtext[letter1]) ) ++letter1;
-
- while( letter2 < wtext_len && iswalnum(wtext[letter2]) ) ++letter2;
+ for( int i=letter1; i>=0 && iswalnum(wtext[i]); --i ) letter1 = i;
+ for( int i=letter2; i<wtext_len && iswalnum(wtext[i]); ) letter2 = ++i;
if( letter2 < wtext_len && wtext[letter2] == ' ' ) ++letter2;
}
void BC_TextBox::select_line(int &letter1, int &letter2, int ibeam_letter)
{
int wtext_len = wtext_update();
- if(!wtext_len) return;
-
letter1 = letter2 = ibeam_letter;
-
-// Rewind to previous linefeed
- do {
- if( wtext[letter1] != '\n' ) letter1--;
- } while( letter1 > 0 && wtext[letter1] != '\n' );
- if( wtext[letter1] == '\n' ) letter1++;
-
-// Advance to next linefeed
- do {
- if( wtext[letter2] != '\n' ) letter2++;
- } while( letter2 < wtext_len && wtext[letter2] != '\n' );
- if( letter2 < wtext_len && wtext[letter2] == '\n') letter2++;
-
- if(letter1 < 0) letter1 = 0;
- if(letter2 < 0) letter2 = 0;
- if(letter1 > wtext_len) letter1 = wtext_len;
- if(letter2 > wtext_len) letter2 = wtext_len;
+ if( letter1 < 0 ) letter1 = 0;
+ if( letter2 < 0 ) letter2 = 0;
+ if( letter1 > wtext_len ) letter1 = wtext_len;
+ if( letter2 > wtext_len ) letter2 = wtext_len;
+ if( !wtext_len ) return;
+ for( int i=letter1; i>=0 && wtext[i]!='\n'; --i ) letter1 = i;
+ for( int i=letter2; i<wtext_len && wtext[i]!='\n'; ) letter2 = ++i;
}
void BC_TextBox::copy_selection(int clipboard_num)
//printf("BC_TextBoxSuggestions::handle_event %d\n", __LINE__);
- text_box->highlight_letter1 =
- text_box->highlight_letter2 =
+ text_box->highlight_letter1 =
+ text_box->highlight_letter2 =
text_box->ibeam_letter = text_box->tstrlen();
text_box->wtext_update();
text_box->draw(1);
this->text->wset_selection(char1, char2, ibeam);
}
+int BC_ScrollTextBox::get_ibeam_letter()
+{
+ return this->text->get_ibeam_letter();
+}
+