From aed45245289e3e16d421aa6154dcb803e86addaa Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 9 Jun 2013 23:01:31 +0000
Subject: Fixed a bug when drawing carets at high addresses.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@352 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                    | 12 ++++++++++++
 src/glibext/gbuffersegment.c |  8 +++++---
 src/glibext/gcodebuffer.c    |  1 +
 src/gtkext/gtkbufferview.c   |  5 ++---
 4 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e8d9c4d..18ee7cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+13-06-10  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/glibext/gbuffersegment.c:
+	Change the color of selections.
+
+	* src/glibext/gcodebuffer.c:
+	Define a clip for Cairo.
+
+	* src/gtkext/gtkbufferview.c:
+	Fix a bug when drawing carets at high addresses. Disable the deprecated
+	GDK clip.
+
 13-06-09  Cyrille Bagard <nocbos@gmail.com>
 
 	* pixmaps/Makefile.am:
diff --git a/src/glibext/gbuffersegment.c b/src/glibext/gbuffersegment.c
index 031075c..31f1840 100644
--- a/src/glibext/gbuffersegment.c
+++ b/src/glibext/gbuffersegment.c
@@ -593,9 +593,9 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
 
         case SRS_HIGHLIGHT_SAME:
 
-            segment->cache_bg.red = 0;
-            segment->cache_bg.green = 0;
-            segment->cache_bg.blue = 65535;
+            segment->cache_bg.red = 32768;
+            segment->cache_bg.green = 32768;
+            segment->cache_bg.blue = 32768;
 
             segment->cache_alt_fg.red = 65535 - segment->cache_fg.red;
             segment->cache_alt_fg.green = 65535 - segment->cache_fg.green;
@@ -643,7 +643,9 @@ void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, GFontCache *
                              segment->cache_bg.blue / 65535.0);
 
         cairo_rectangle(cairo, *x, y, segment->logical.width, segment->logical.height);
+        cairo_set_operator(cairo, CAIRO_OPERATOR_DIFFERENCE);
         cairo_fill(cairo);
+        cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
 
     }
 
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 914a3d5..70064e3 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -1381,6 +1381,7 @@ void g_buffer_view_draw(const GBufferView *view, const GdkEventExpose *event, Gd
     cairo = gdk_cairo_create(event->window);
 
     gdk_cairo_region(cairo, event->region);
+    cairo_clip(cairo);
 
     real_x = fake_x + view->left_text;
     real_y = fake_y + event->area.y;
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c
index 6556eb8..7cb1e9b 100644
--- a/src/gtkext/gtkbufferview.c
+++ b/src/gtkext/gtkbufferview.c
@@ -231,8 +231,7 @@ static gboolean gtk_buffer_view_button_press(GtkWidget *widget, GdkEventButton *
 
     if (addr != VMPA_INVALID)
     {
-        //gtk_buffer_view_compute_fake_coord(view, &view->caret.x, &view->caret.y);
-
+        gtk_buffer_view_compute_relative_coords(view, &view->caret.x, &view->caret.y);
 
         printf(" mouse --old-- :: (%d ; %d)\n",
                view->caret.x, view->caret.y);
@@ -436,7 +435,7 @@ static gboolean gtk_buffer_view_expose(GtkWidget *widget, GdkEventExpose *event)
 
     gdk_window_begin_paint_region(drawable, event->region);
 
-    gdk_gc_set_clip_region(pview->gc, event->region);
+    //gdk_gc_set_clip_region(pview->gc, event->region);
 
     style = gtk_widget_get_style(GTK_WIDGET(view));
 
-- 
cgit v0.11.2-87-g4458