[Xfce4-commits] [apps/xfce4-screenshooter] 10/38: More GDK related work to make selection mode work (composited)

noreply at xfce.org noreply at xfce.org
Fri Apr 28 03:07:06 CEST 2017


This is an automated email from the git hooks/post-receive script.

andre pushed a commit to branch master
in repository apps/xfce4-screenshooter.

commit 7d8fcf8fb7cdb04f40cdcc4bd54c9de760b1c8ca
Author: Andre Miranda <andre42m at gmail.com>
Date:   Sun Feb 12 16:27:39 2017 -0300

    More GDK related work to make selection mode work (composited)
---
 lib/screenshooter-capture.c | 72 ++++++++++++++++++++++-----------------------
 1 file changed, 35 insertions(+), 37 deletions(-)

diff --git a/lib/screenshooter-capture.c b/lib/screenshooter-capture.c
index 9477088..88b8df7 100644
--- a/lib/screenshooter-capture.c
+++ b/lib/screenshooter-capture.c
@@ -71,8 +71,8 @@ static GdkPixbuf       *get_rectangle_screenshot            (gint delay);
 static gboolean         cb_key_pressed                      (GtkWidget      *widget,
                                                              GdkEventKey    *event,
                                                              gboolean       *cancelled);
-static gboolean         cb_expose                           (GtkWidget      *widget,
-                                                             GdkEventExpose *event,
+static gboolean         cb_draw                             (GtkWidget      *widget,
+                                                             cairo_t        *cr,
                                                              RubberBandData *rbdata);
 static gboolean         cb_button_pressed                   (GtkWidget      *widget,
                                                              GdkEventButton *event,
@@ -501,35 +501,39 @@ static gboolean cb_key_pressed (GtkWidget   *widget,
 
 
 
-static gboolean cb_expose (GtkWidget *widget,
-                           GdkEventExpose *event,
-                           RubberBandData *rbdata)
+static gboolean cb_draw (GtkWidget *widget,
+                         cairo_t *cr,
+                         RubberBandData *rbdata)
 {
-  GdkRectangle *rects = NULL;
+  cairo_rectangle_t *rects = NULL;
   gint n_rects = 0, i;
 
-  TRACE ("Expose event received.");
+  TRACE ("Draw event received.");
 
-  gdk_region_get_rectangles (event->region, &rects, &n_rects);
+  cairo_rectangle_list_t *list = cairo_copy_clip_rectangle_list (cr);
+  n_rects = list->num_rectangles;
+  rects = list->rectangles;
 
   if (rbdata->rubber_banding)
     {
-      GdkRectangle intersect;
-      cairo_t *cr;
+      cairo_rectangle_int_t intersect;
+      GdkRectangle rect;
 
-      cr = gdk_cairo_create (GDK_DRAWABLE (widget->window));
       cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
 
       for (i = 0; i < n_rects; ++i)
         {
           /* Restore the transparent background */
           cairo_set_source_rgba (cr, 0, 0, 0, BACKGROUND_TRANSPARENCY);
-          gdk_cairo_rectangle (cr, &rects[i]);
+          cairo_rectangle(cr, rects[i].x, rects[i].y, rects[i].width, rects[i].height);
           cairo_fill (cr);
 
-          if (!gdk_rectangle_intersect (&rects[i],
-                                        &rbdata->rectangle,
-                                        &intersect))
+          rect.x = (rects[i].x);
+          rect.y =  (rects[i].y);
+          rect.width = (rects[i].width);
+          rect.height = (rects[i].height);
+
+          if (!gdk_rectangle_intersect (&rect, &rbdata->rectangle, &intersect))
             {
               continue;
             }
@@ -539,28 +543,22 @@ static gboolean cb_expose (GtkWidget *widget,
           gdk_cairo_rectangle (cr, &intersect);
           cairo_fill (cr);
         }
-
-      cairo_destroy (cr);
     }
   else
     {
-      cairo_t *cr;
-
       /* Draw the transparent background */
-      cr = gdk_cairo_create (GDK_DRAWABLE (widget->window));
       cairo_set_source_rgba (cr, 0, 0, 0, BACKGROUND_TRANSPARENCY);
       cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
 
       for (i = 0; i < n_rects; ++i)
         {
-            gdk_cairo_rectangle (cr, &rects[i]);
-            cairo_fill (cr);
+          cairo_rectangle(cr, rects[i].x, rects[i].y, rects[i].width, rects[i].height);
+          cairo_fill (cr);
         }
 
-      cairo_destroy (cr);
     }
 
-  g_free (rects);
+  cairo_rectangle_list_destroy (list);
 
   return FALSE;
 }
@@ -615,9 +613,9 @@ static gboolean cb_motion_notify (GtkWidget *widget,
 {
   if (rbdata->left_pressed)
     {
-      GdkRectangle *new_rect, *new_rect_root;
-      GdkRectangle old_rect, intersect;
-      GdkRegion *region;
+      cairo_rectangle_int_t *new_rect, *new_rect_root;
+      cairo_rectangle_int_t old_rect, intersect;
+      cairo_region_t *region;
 
       TRACE ("Mouse is moving with left button pressed");
 
@@ -652,28 +650,28 @@ static gboolean cb_motion_notify (GtkWidget *widget,
       new_rect_root->width = ABS (rbdata->x_root - event->x_root) + 1;
       new_rect_root->height = ABS (rbdata->y_root - event->y_root) +1;
 
-      region = gdk_region_rectangle (&old_rect);
-      gdk_region_union_with_rect (region, new_rect);
+      region = cairo_region_create_rectangle (&old_rect);
+      cairo_region_union_rectangle (region, new_rect);
 
       /* Try to be smart: don't send the expose event for regions which
        * have already been painted */
       if (gdk_rectangle_intersect (&old_rect, new_rect, &intersect)
           && intersect.width > 2 && intersect.height > 2)
         {
-          GdkRegion *region_intersect;
+          cairo_region_t *region_intersect;
 
           intersect.x += 1;
           intersect.width -= 2;
           intersect.y += 1;
           intersect.height -= 2;
 
-          region_intersect = gdk_region_rectangle(&intersect);
-          gdk_region_subtract(region, region_intersect);
-          gdk_region_destroy(region_intersect);
+          region_intersect = cairo_region_create_rectangle(&intersect);
+          cairo_region_subtract(region, region_intersect);
+          cairo_region_destroy(region_intersect);
         }
 
-      gdk_window_invalidate_region (widget->window, region, TRUE);
-      gdk_region_destroy (region);
+      gdk_window_invalidate_region (gtk_widget_get_window (widget), region, TRUE);
+      cairo_region_destroy (region);
 
       return TRUE;
     }
@@ -716,8 +714,8 @@ static GdkPixbuf
   /* Connect to the interesting signals */
   g_signal_connect (window, "key-press-event",
                     G_CALLBACK (cb_key_pressed), &cancelled);
-  g_signal_connect (window, "expose-event",
-                    G_CALLBACK (cb_expose), &rbdata);
+  g_signal_connect (window, "draw",
+                    G_CALLBACK (cb_draw), &rbdata);
   g_signal_connect (window, "button-press-event",
                     G_CALLBACK (cb_button_pressed), &rbdata);
   g_signal_connect (window, "button-release-event",

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list