Author: matt
Date: 2008-01-04 12:32:37 -0800 (Fri, 04 Jan 2008)
New Revision: 6011
Log:
Fixed Fl_Text_Display redrawing for focus changes for primary selection and
highlight
Modified:
branches/branch-1.1/src/Fl_Text_Buffer.cxx
branches/branch-1.1/src/Fl_Text_Display.cxx
Modified: branches/branch-1.1/src/Fl_Text_Buffer.cxx
===================================================================
--- branches/branch-1.1/src/Fl_Text_Buffer.cxx 2008-01-04 20:31:52 UTC (rev
6010)
+++ branches/branch-1.1/src/Fl_Text_Buffer.cxx 2008-01-04 20:32:37 UTC (rev
6011)
@@ -669,6 +669,11 @@
redisplay_selection( &oldSelection, &mSecondary );
}
+int Fl_Text_Buffer::secondary_selection_position( int *start, int *end
+ ) {
+ return mSecondary.position( start, end );
+}
+
int Fl_Text_Buffer::secondary_selection_position( int *start, int *end,
int *isRect, int *rectStart, int *rectEnd ) {
return mSecondary.position( start, end, isRect, rectStart,
@@ -709,6 +714,11 @@
redisplay_selection( &oldSelection, &mHighlight );
}
+int Fl_Text_Buffer::highlight_position( int *start, int *end
+ ) {
+ return mHighlight.position( start, end );
+}
+
int Fl_Text_Buffer::highlight_position( int *start, int *end,
int *isRect, int *rectStart, int
*rectEnd ) {
return mHighlight.position( start, end, isRect, rectStart,
Modified: branches/branch-1.1/src/Fl_Text_Display.cxx
===================================================================
--- branches/branch-1.1/src/Fl_Text_Display.cxx 2008-01-04 20:31:52 UTC (rev
6010)
+++ branches/branch-1.1/src/Fl_Text_Display.cxx 2008-01-04 20:32:37 UTC (rev
6011)
@@ -1662,16 +1662,22 @@
font = styleRec->font;
fsize = styleRec->size;
- if (style & (HIGHLIGHT_MASK | PRIMARY_MASK)) {
+ if (style & PRIMARY_MASK) {
if (Fl::focus() == this) background = selection_color();
else background = fl_color_average(color(), selection_color(), 0.5f);
+ } else if (style & HIGHLIGHT_MASK) {
+ if (Fl::focus() == this) background = fl_color_average(color(),
selection_color(), 0.8f);
+ else background = fl_color_average(color(), selection_color(), 0.9f);
} else background = color();
-
foreground = fl_contrast(styleRec->color, background);
- } else if (style & (HIGHLIGHT_MASK | PRIMARY_MASK)) {
+ } else if (style & PRIMARY_MASK) {
if (Fl::focus() == this) background = selection_color();
else background = fl_color_average(color(), selection_color(), 0.5f);
foreground = fl_contrast(textcolor(), background);
+ } else if (style & HIGHLIGHT_MASK) {
+ if (Fl::focus() == this) background = fl_color_average(color(),
selection_color(), 0.8f);
+ else background = fl_color_average(color(), selection_color(), 0.9f);
+ foreground = fl_contrast(textcolor(), background);
} else {
foreground = textcolor();
background = color();
@@ -1707,6 +1713,7 @@
*/
}
+
/*
** Clear a rectangle with the appropriate background color for "style"
*/
@@ -1716,27 +1723,25 @@
if ( width == 0 )
return;
- if ( Fl::focus() != this ) {
- if (style & (HIGHLIGHT_MASK | PRIMARY_MASK)) {
+ if (style & PRIMARY_MASK) {
+ if (Fl::focus()==this) {
+ fl_color(selection_color());
+ } else {
fl_color(fl_color_average(color(), selection_color(), 0.5f));
+ }
+ } else if (style & HIGHLIGHT_MASK) {
+ if (Fl::focus()==this) {
+ fl_color(fl_color_average(color(), selection_color(), 0.8f));
} else {
- fl_color( color() );
+ fl_color(fl_color_average(color(), selection_color(), 0.9f));
}
- fl_rectf( X, Y, width, height );
- } else if ( style & HIGHLIGHT_MASK ) {
- fl_color( fl_contrast(textcolor(), color()) );
- fl_rectf( X, Y, width, height );
- } else if ( style & PRIMARY_MASK ) {
- fl_color( selection_color() );
- fl_rectf( X, Y, width, height );
} else {
fl_color( color() );
- fl_rectf( X, Y, width, height );
}
+ fl_rectf( X, Y, width, height );
}
-
/*
** Draw a cursor with top center at X, y.
*/
@@ -3219,8 +3224,21 @@
case FL_UNFOCUS:
if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
case FL_FOCUS:
- if (buffer()->selected()) redraw();
-
+ if (buffer()->selected()) {
+ int start, end;
+ if (buffer()->selection_position(&start, &end))
+ redisplay_range(start, end);
+ }
+ if (buffer()->secondary_selected()) {
+ int start, end;
+ if (buffer()->secondary_selection_position(&start, &end))
+ redisplay_range(start, end);
+ }
+ if (buffer()->highlight()) {
+ int start, end;
+ if (buffer()->highlight_position(&start, &end))
+ redisplay_range(start, end);
+ }
return 1;
case FL_KEYBOARD:
_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit