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

Reply via email to