[Xfce4-commits] [xfce/xfce4-session] 04/30: engines/simple use cairo for drawing

noreply at xfce.org noreply at xfce.org
Sun May 15 18:03:23 CEST 2016


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

eric pushed a commit to branch master
in repository xfce/xfce4-session.

commit bc41515938d2c4412d686c577dc1b4d320bea7b5
Author: Eric Koegel <eric.koegel at gmail.com>
Date:   Mon Mar 21 11:13:29 2016 +0300

    engines/simple use cairo for drawing
    
    And migrate away from some of the stuff that will be deprecated
    in GTK3.
---
 engines/simple/simple.c | 119 ++++++++++++++++++++++--------------------------
 1 file changed, 54 insertions(+), 65 deletions(-)

diff --git a/engines/simple/simple.c b/engines/simple/simple.c
index 98eaff4..138c2c7 100644
--- a/engines/simple/simple.c
+++ b/engines/simple/simple.c
@@ -50,15 +50,14 @@
 typedef struct _Simple Simple;
 struct _Simple
 {
-  gboolean     dialog_active;
-  GdkWindow   *window;
-  GdkPixmap   *pixmap;
-  GdkGC       *gc;
-  PangoLayout *layout;
-  GdkRectangle area;
-  GdkRectangle textbox;
-  GdkColor     bgcolor;
-  GdkColor     fgcolor;
+  gboolean         dialog_active;
+  GdkWindow       *window;
+  PangoLayout     *layout;
+  GdkPixbuf       *logo;
+  GdkRectangle     area;
+  GdkRectangle     textbox;
+  GdkColor         bgcolor;
+  GdkColor         fgcolor;
 };
 
 
@@ -100,12 +99,12 @@ simple_setup (XfsmSplashEngine *engine,
   gchar                *font;
   gchar                *path;
   GdkWindow            *root;
-  GdkPixbuf            *logo = NULL;
   GdkCursor            *cursor;
   Simple               *simple;
   gint                  logo_width;
   gint                  logo_height;
   gint                  text_height;
+  cairo_t              *cr;
 
   simple = (Simple *) engine->user_data;
 
@@ -127,11 +126,16 @@ simple_setup (XfsmSplashEngine *engine,
                                    &geo);
 
   if (path != NULL && g_file_test (path, G_FILE_TEST_IS_REGULAR))
-    logo = gdk_pixbuf_new_from_file (path, NULL);
-  if (logo == NULL)
-    logo = gdk_pixbuf_new_from_inline (-1, fallback, FALSE, NULL);
-  logo_width = gdk_pixbuf_get_width (logo);
-  logo_height = gdk_pixbuf_get_height (logo);
+    simple->logo = gdk_pixbuf_new_from_file (path, NULL);
+  if (simple->logo == NULL)
+  {
+    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+    /* TODO: use GResource or load it as a normal pixbuf */
+    simple->logo = gdk_pixbuf_new_from_inline (-1, fallback, FALSE, NULL);
+    G_GNUC_END_IGNORE_DEPRECATIONS
+  }
+  logo_width = gdk_pixbuf_get_width (simple->logo);
+  logo_height = gdk_pixbuf_get_height (simple->logo);
 
   cursor = gdk_cursor_new (GDK_WATCH);
 
@@ -169,31 +173,15 @@ simple_setup (XfsmSplashEngine *engine,
   simple->window = gdk_window_new (root, &attr, GDK_WA_X | GDK_WA_Y
                                   | GDK_WA_NOREDIR | GDK_WA_CURSOR);
 
-  simple->pixmap = gdk_pixmap_new (simple->window,
-                                   simple->area.width,
-                                   simple->area.height,
-                                   -1);
+  cr = gdk_cairo_create (GDK_DRAWABLE (simple->window));
+  gdk_cairo_set_source_color (cr, &simple->bgcolor);
 
-  gdk_window_set_back_pixmap (simple->window, simple->pixmap, FALSE);
+  cairo_rectangle (cr, 0, 0, simple->area.width, simple->area.height);
+  cairo_fill (cr);
 
-  simple->gc = gdk_gc_new (simple->pixmap);
-  gdk_gc_set_function (simple->gc, GDK_COPY);
-  gdk_gc_set_rgb_fg_color (simple->gc, &simple->bgcolor);
-
-  gdk_draw_rectangle (simple->pixmap,
-                      simple->gc, TRUE,
-                      0, 0,
-                      simple->area.width,
-                      simple->area.height);
-
-  gdk_draw_pixbuf (simple->pixmap,
-                   simple->gc,
-                   logo,
-                   0, 0,
-                   BORDER, BORDER,
-                   logo_width,
-                   logo_height,
-                   GDK_RGB_DITHER_NONE, 0, 0);
+  cairo_move_to (cr, 0, 0);
+  gdk_cairo_set_source_pixbuf (cr, simple->logo, 0, 0);
+  cairo_paint (cr);
 
   gdk_window_add_filter (simple->window, simple_filter, simple);
   gdk_window_show (simple->window);
@@ -205,7 +193,7 @@ simple_setup (XfsmSplashEngine *engine,
   pango_font_metrics_unref (metrics);
   gdk_cursor_unref (cursor);
   g_object_unref (context);
-  g_object_unref (logo);
+  cairo_destroy (cr);
 }
 
 
@@ -215,21 +203,26 @@ simple_next (XfsmSplashEngine *engine, const gchar *text)
   Simple *simple = (Simple *) engine->user_data;
   GdkColor shcolor;
   gint tw, th, tx, ty;
+  cairo_t *cr;
 
   pango_layout_set_text (simple->layout, text, -1);
   pango_layout_get_pixel_size (simple->layout, &tw, &th);
   tx = simple->textbox.x + (simple->textbox.width - tw) / 2;
   ty = simple->textbox.y + (simple->textbox.height - th) / 2;
 
-  gdk_gc_set_rgb_fg_color (simple->gc, &simple->bgcolor);
-  gdk_draw_rectangle (simple->pixmap,
-                      simple->gc, TRUE,
-                      simple->textbox.x,
-                      simple->textbox.y,
-                      simple->textbox.width,
-                      simple->textbox.height);
+  cr = gdk_cairo_create (GDK_DRAWABLE (simple->window));
+
+  /* re-paint the logo */
+  gdk_cairo_set_source_pixbuf (cr, simple->logo, 0, 0);
+  cairo_paint (cr);
 
-  gdk_gc_set_clip_rectangle (simple->gc, &simple->textbox);
+  gdk_cairo_set_source_color (cr, &simple->bgcolor);
+  cairo_rectangle (cr,
+                   simple->textbox.x,
+                   simple->textbox.y,
+                   simple->textbox.width,
+                   simple->textbox.height);
+  cairo_fill (cr);
 
   /* draw shadow */
   shcolor.red = (simple->fgcolor.red + simple->bgcolor.red) / 2;
@@ -239,21 +232,15 @@ simple_next (XfsmSplashEngine *engine, const gchar *text)
   shcolor.green = shcolor.red;
   shcolor.blue = shcolor.red;
 
-  gdk_gc_set_rgb_fg_color (simple->gc, &shcolor);
-  gdk_draw_layout (simple->pixmap, simple->gc,
-                   tx + 2, ty + 2, simple->layout);
-
-  gdk_gc_set_rgb_fg_color (simple->gc, &simple->fgcolor);
-  gdk_draw_layout (simple->pixmap,
-                   simple->gc,
-                   tx, ty,
-                   simple->layout);
-
-  gdk_window_clear_area (simple->window,
-                         simple->textbox.x,
-                         simple->textbox.y,
-                         simple->textbox.width,
-                         simple->textbox.height);
+  gdk_cairo_set_source_color (cr, &shcolor);
+  cairo_move_to (cr, tx + 2, ty + 2);
+  pango_cairo_show_layout (cr, simple->layout);
+
+  gdk_cairo_set_source_color (cr, &simple->fgcolor);
+  cairo_move_to (cr, tx, ty);
+  pango_cairo_show_layout (cr, simple->layout);
+
+  cairo_destroy (cr);
 }
 
 
@@ -289,8 +276,7 @@ simple_destroy (XfsmSplashEngine *engine)
   gdk_window_remove_filter (simple->window, simple_filter, simple);
   gdk_window_destroy (simple->window);
   g_object_unref (simple->layout);
-  g_object_unref (simple->pixmap);
-  g_object_unref (simple->gc);
+  g_object_unref (simple->logo);
   g_free (engine->user_data);
 }
 
@@ -352,7 +338,7 @@ config_configure (XfsmSplashConfig *config,
                                         GTK_RESPONSE_CLOSE,
                                         NULL);
 
-  dbox = GTK_BOX (GTK_DIALOG (dialog)->vbox);
+  dbox = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog)));
 
   frame = xfce_gtk_frame_box_new (_("Font"), &bin);
   gtk_box_pack_start (dbox, frame, FALSE, FALSE, 6);
@@ -487,7 +473,10 @@ config_configure (XfsmSplashConfig *config,
 static GdkPixbuf*
 config_preview (XfsmSplashConfig *config)
 {
+  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  /* TODO: use GResource or load it as a normal pixbuf */
   return gdk_pixbuf_new_from_inline (-1, preview, FALSE, NULL);
+  G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 

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


More information about the Xfce4-commits mailing list