[Xfce4-commits] [xfce/xfce4-session] 06/30: Port engines/balou to cairo
noreply at xfce.org
noreply at xfce.org
Sun May 15 18:03:25 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 2ce3439456d645cefcb2163a66f22858aebfb2f5
Author: Eric Koegel <eric.koegel at gmail.com>
Date: Tue Mar 22 20:36:08 2016 +0300
Port engines/balou to cairo
---
engines/balou/balou-theme.c | 54 ++++++------
engines/balou/balou-theme.h | 3 +-
engines/balou/balou.c | 211 +++++++++++++-------------------------------
engines/balou/balou.h | 1 -
engines/balou/config.c | 8 +-
engines/balou/engine.c | 1 -
6 files changed, 92 insertions(+), 186 deletions(-)
diff --git a/engines/balou/balou-theme.c b/engines/balou/balou-theme.c
index 708589c..b74542b 100644
--- a/engines/balou/balou-theme.c
+++ b/engines/balou/balou-theme.c
@@ -199,8 +199,7 @@ balou_theme_get_logo (const BalouTheme *theme,
void
balou_theme_draw_gradient (const BalouTheme *theme,
- GdkDrawable *drawable,
- GdkGC *gc,
+ GdkWindow *root,
GdkRectangle logobox,
GdkRectangle textbox)
{
@@ -209,14 +208,19 @@ balou_theme_draw_gradient (const BalouTheme *theme,
gint dgreen;
gint dblue;
gint i;
+ cairo_t *cr;
+
+ cr = gdk_cairo_create (GDK_DRAWABLE (root));
if (gdk_color_equal (&theme->bgcolor1, &theme->bgcolor2))
{
- gdk_gc_set_rgb_fg_color (gc, &theme->bgcolor1);
- gdk_draw_rectangle (drawable, gc, TRUE, logobox.x, logobox.y,
- logobox.width, logobox.height);
- gdk_draw_rectangle (drawable, gc, TRUE, textbox.x, textbox.y,
- textbox.width, textbox.height);
+ gdk_cairo_set_source_color (cr, &theme->bgcolor1);
+
+ gdk_cairo_rectangle (cr, &logobox);
+ cairo_fill (cr);
+
+ gdk_cairo_rectangle (cr, &textbox);
+ cairo_fill (cr);
}
else
{
@@ -231,18 +235,21 @@ balou_theme_draw_gradient (const BalouTheme *theme,
color.green = theme->bgcolor2.green + (i * dgreen / logobox.height);
color.blue = theme->bgcolor2.blue + (i * dblue / logobox.height);
- gdk_gc_set_rgb_fg_color (gc, &color);
- gdk_draw_line (drawable, gc, logobox.x, logobox.y + i,
- logobox.x + logobox.width, logobox.y + i);
+ gdk_cairo_set_source_color (cr, &color);
+ cairo_move_to(cr, logobox.x, logobox.y + i);
+ cairo_line_to(cr, logobox.x + logobox.width, logobox.y + i);
+ cairo_stroke(cr);
}
if (textbox.width != 0 && textbox.height != 0)
{
- gdk_gc_set_rgb_fg_color (gc, &theme->bgcolor1);
- gdk_draw_rectangle (drawable, gc, TRUE, textbox.x, textbox.y,
- textbox.width, textbox.height);
+ gdk_cairo_set_source_color (cr, &theme->bgcolor1);
+ gdk_cairo_rectangle (cr, &textbox);
+ cairo_fill(cr);
}
}
+
+ cairo_destroy (cr);
}
@@ -256,11 +263,10 @@ balou_theme_generate_preview (const BalouTheme *theme,
GdkRectangle logobox;
GdkRectangle textbox;
- GdkPixmap *pixmap;
GdkPixbuf *pixbuf;
GdkPixbuf *scaled;
GdkWindow *root;
- GdkGC *gc;
+ cairo_t *cr;
gint pw, ph;
/* check for a cached preview first */
@@ -286,9 +292,7 @@ balou_theme_generate_preview (const BalouTheme *theme,
}
root = gdk_screen_get_root_window (gdk_screen_get_default ());
- pixmap = gdk_pixmap_new (GDK_DRAWABLE (root), WIDTH, HEIGHT, -1);
- gc = gdk_gc_new (pixmap);
- gdk_gc_set_function (gc, GDK_COPY);
+ cr = gdk_cairo_create(GDK_DRAWABLE(root));
logobox.x = 0;
logobox.y = 0;
@@ -296,8 +300,7 @@ balou_theme_generate_preview (const BalouTheme *theme,
logobox.height = HEIGHT;
textbox.x = 0;
textbox.y = 0;
- balou_theme_draw_gradient (theme, GDK_DRAWABLE (pixmap),
- gc, logobox, textbox);
+ balou_theme_draw_gradient (theme, root, logobox, textbox);
pixbuf = balou_theme_get_logo (theme, WIDTH, HEIGHT);
if (pixbuf != NULL)
@@ -305,20 +308,19 @@ balou_theme_generate_preview (const BalouTheme *theme,
pw = gdk_pixbuf_get_width (pixbuf);
ph = gdk_pixbuf_get_height (pixbuf);
- gdk_draw_pixbuf (GDK_DRAWABLE (pixmap), gc, pixbuf, 0, 0,
- (WIDTH - pw) / 2, (HEIGHT - ph) / 2,
- pw, ph, GDK_RGB_DITHER_NONE, 0, 0);
+ gdk_cairo_set_source_pixbuf (cr, pixbuf, (WIDTH - pw) / 2, (HEIGHT - ph) / 2);
+ cairo_paint (cr);
g_object_unref (G_OBJECT (pixbuf));
}
- pixbuf = gdk_pixbuf_get_from_drawable (NULL, GDK_DRAWABLE (pixmap),
+ /* replace with gdk_pixbuf_get_from_window in GTK 3 */
+ pixbuf = gdk_pixbuf_get_from_drawable (NULL, GDK_DRAWABLE (root),
NULL, 0, 0, 0, 0, WIDTH, HEIGHT);
scaled = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR);
g_object_unref (pixbuf);
- g_object_unref (pixmap);
- g_object_unref (gc);
+ cairo_destroy(cr);
/* store preview */
store_cached_preview (theme, scaled);
diff --git a/engines/balou/balou-theme.h b/engines/balou/balou-theme.h
index 1e2e1ba..d7bd927 100644
--- a/engines/balou/balou-theme.h
+++ b/engines/balou/balou-theme.h
@@ -42,8 +42,7 @@ GdkPixbuf *balou_theme_get_logo (const BalouTheme *theme,
gint available_width,
gint available_height);
void balou_theme_draw_gradient (const BalouTheme *theme,
- GdkDrawable *drawable,
- GdkGC *gc,
+ GdkWindow *root,
GdkRectangle logobox,
GdkRectangle textbox);
GdkPixbuf *balou_theme_generate_preview (const BalouTheme *theme,
diff --git a/engines/balou/balou.c b/engines/balou/balou.c
index 752021b..d98eab5 100644
--- a/engines/balou/balou.c
+++ b/engines/balou/balou.c
@@ -51,10 +51,7 @@ static GdkFilterReturn balou_window_filter (GdkXEvent *xevent,
struct _BalouWindow
{
GdkWindow *window;
- GdkPixmap *backbuf;
PangoLayout *layout;
- GdkGC *gc_copy;
- GdkGC *gc_set;
GdkRectangle area;
GdkRectangle logobox;
GdkRectangle textbox;
@@ -78,15 +75,11 @@ balou_init (Balou *balou,
PangoContext *context;
PangoLayout *layout;
BalouWindow *window;
- GdkColormap *cmap;
GdkCursor *cursor;
GdkScreen *screen;
GdkWindow *root;
GdkPixbuf *pb;
- GdkGCValues gc_values;
- GdkGCValuesMask gc_mask;
- GdkGC *gc_copy;
- GdkGC *gc_set;
+ cairo_t *cr;
gint layout_height;
gint nmonitors;
gint nscreens;
@@ -97,6 +90,8 @@ balou_init (Balou *balou,
gint py;
gint pw;
gint ph;
+ gint ww;
+ gint wh;
balou->theme = theme;
@@ -124,11 +119,6 @@ balou_init (Balou *balou,
nmonitors = gdk_screen_get_n_monitors (screen);
root = gdk_screen_get_root_window (screen);
- /* allocate fore/background colors */
- cmap = gdk_drawable_get_colormap (root);
- gdk_rgb_find_color (cmap, &balou->bgcolor);
- gdk_rgb_find_color (cmap, &balou->fgcolor);
-
/* create pango layout for this screen */
context = gdk_pango_context_get_for_screen (screen);
pango_context_set_font_description (context, description);
@@ -139,23 +129,11 @@ balou_init (Balou *balou,
+ 3;
pango_font_metrics_unref (metrics);
- /* create graphics contexts for this screen */
- gc_mask = GDK_GC_FUNCTION | GDK_GC_EXPOSURES;
- gc_values.function = GDK_COPY;
- gc_values.graphics_exposures = FALSE;
- gc_copy = gdk_gc_new_with_values (root, &gc_values, gc_mask);
- gc_mask |= GDK_GC_FOREGROUND | GDK_GC_BACKGROUND;
- gc_values.foreground = balou->bgcolor;
- gc_values.background = balou->fgcolor;
- gc_set = gdk_gc_new_with_values (root, &gc_values, gc_mask);
-
for (m = 0; m < nmonitors; ++m)
{
window = balou->windows + i;
balou_window_init (window, screen, m, root, cursor);
- window->gc_copy = GDK_GC (g_object_ref (gc_copy));
- window->gc_set = GDK_GC (g_object_ref (gc_set));
window->layout = PANGO_LAYOUT (g_object_ref (layout));
/* calculate box dimensions */
@@ -168,13 +146,10 @@ balou_init (Balou *balou,
window->textbox.height -= window->logobox.height;
balou_theme_draw_gradient (balou->theme,
- window->backbuf,
- gc_copy,
+ root,
window->logobox,
window->textbox);
- gdk_gc_set_rgb_fg_color (gc_copy, &balou->fgcolor);
-
if (mainscreen == screen && mainmonitor == m)
balou->mainwin = window;
@@ -183,8 +158,6 @@ balou_init (Balou *balou,
g_object_unref (context);
g_object_unref (layout);
- g_object_unref (gc_copy);
- g_object_unref (gc_set);
}
/* show splash windows */
@@ -193,9 +166,8 @@ balou_init (Balou *balou,
window = balou->windows + i;
gtk_widget_show_now (window->wmwindow);
- /*gdk_window_set_back_pixmap (window->wmwindow->window,
- window->backbuf, FALSE);*/
- gdk_window_add_filter (window->wmwindow->window,
+
+ gdk_window_add_filter (gtk_widget_get_window (window->wmwindow),
balou_window_filter,
window);
@@ -206,8 +178,18 @@ balou_init (Balou *balou,
}
gdk_flush ();
- /* display logo pixbuf (if any) */
+ /* draw the background and display logo pixbuf (if any) */
window = balou->mainwin;
+
+ cr = gdk_cairo_create (GDK_DRAWABLE (window->window));
+
+ ww = gdk_window_get_width (GDK_WINDOW (window->window));
+ wh = gdk_window_get_height (GDK_WINDOW (window->window));
+
+ gdk_cairo_set_source_color (cr, &balou->bgcolor);
+ cairo_rectangle (cr, 0, 0, ww, wh);
+ cairo_fill (cr);
+
pb = balou_theme_get_logo (balou->theme,
window->logobox.width,
window->logobox.height);
@@ -218,20 +200,13 @@ balou_init (Balou *balou,
px = (window->logobox.width - pw) / 2;
py = (window->logobox.height - ph) / 2;
- gdk_draw_pixbuf (window->backbuf, window->gc_copy, pb, 0, 0,
- px, py, pw, ph, GDK_RGB_DITHER_NONE, 0, 0);
- gdk_window_clear_area (window->window, px, py, pw, ph);
+ gdk_cairo_set_source_pixbuf (cr, pb, px, py);
+ cairo_paint (cr);
+
g_object_unref (pb);
+ cairo_destroy (cr);
}
- /* create fader pixmap */
- balou->fader_pm = gdk_pixmap_new (window->window,
- window->textbox.width,
- window->textbox.height,
- -1);
- gdk_draw_rectangle (balou->fader_pm, window->gc_set, TRUE, 0, 0,
- window->textbox.width, window->textbox.height);
-
pango_font_description_free (description);
gdk_cursor_unref (cursor);
}
@@ -242,10 +217,14 @@ balou_fadein (Balou *balou, const gchar *text)
{
BalouWindow *window = balou->mainwin;
GdkRectangle area;
+ cairo_t *cr;
+ GdkPixbuf *pb;
gint median;
gint th;
gint tw;
gint x;
+ gint ww;
+ gint wh;
pango_layout_set_text (window->layout, text, -1);
pango_layout_get_pixel_size (window->layout, &tw, &th);
@@ -255,16 +234,41 @@ balou_fadein (Balou *balou, const gchar *text)
area.width = tw + BALOU_INCREMENT;
area.height = th;
- gdk_draw_rectangle (balou->fader_pm, window->gc_set, TRUE, 0, 0,
- window->textbox.width, window->textbox.height);
- gdk_draw_layout (balou->fader_pm, window->gc_copy,
- BALOU_INCREMENT, 0, window->layout);
+ ww = gdk_window_get_width (GDK_WINDOW (window->window));
+ wh = gdk_window_get_height (GDK_WINDOW (window->window));
+
+ cr = gdk_cairo_create (GDK_DRAWABLE (window->window));
+
+ gdk_cairo_set_source_color (cr, &balou->bgcolor);
+ cairo_rectangle (cr, 0, 0, ww, wh);
+ cairo_fill (cr);
+
+ pb = balou_theme_get_logo (balou->theme,
+ window->logobox.width,
+ window->logobox.height);
+ if (G_LIKELY (pb != NULL))
+ {
+ gint pw = gdk_pixbuf_get_width (pb);
+ gint ph = gdk_pixbuf_get_height (pb);
+ gint px = (window->logobox.width - pw) / 2;
+ gint py = (window->logobox.height - ph) / 2;
+
+ gdk_cairo_set_source_pixbuf (cr, pb, px, py);
+ cairo_paint (cr);
+
+ g_object_unref (pb);
+ }
median = (window->area.width - area.width) / 2;
for (x = 0; (median - x) > BALOU_INCREMENT; x += BALOU_INCREMENT)
{
- gdk_draw_drawable (window->window, window->gc_copy, balou->fader_pm,
- 0, 0, area.x + x, area.y, area.width, area.height);
+ gdk_cairo_set_source_color (cr, &balou->bgcolor);
+ gdk_cairo_rectangle (cr, &window->textbox);
+ cairo_fill (cr);
+
+ gdk_cairo_set_source_color (cr, &balou->fgcolor);
+ cairo_move_to (cr, x, window->textbox.y);
+ pango_cairo_show_layout (cr, window->layout);
gdk_flush ();
@@ -274,56 +278,10 @@ balou_fadein (Balou *balou, const gchar *text)
area.x += median;
balou->fader_area = area;
- gdk_draw_rectangle (window->backbuf,
- window->gc_set, TRUE,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
-
- gdk_draw_drawable (window->backbuf, window->gc_copy, balou->fader_pm,
- 0, 0, area.x, area.y, area.width, area.height);
-
- gdk_window_clear_area (window->window,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
+ cairo_destroy (cr);
}
-void
-balou_fadeout (Balou *balou)
-{
- BalouWindow *window = balou->mainwin;
- GdkRectangle area = balou->fader_area;
- gint left;
-
- left = (window->textbox.x + window->textbox.width) - BALOU_INCREMENT;
- for (; area.x < left; area.x += BALOU_INCREMENT)
- {
- gdk_draw_drawable (window->window, window->gc_copy, balou->fader_pm,
- 0, 0, area.x, area.y, area.width, area.height);
-
- gdk_flush ();
-
- g_main_context_iteration (NULL, FALSE);
- }
-
- gdk_draw_rectangle (window->backbuf,
- window->gc_set, TRUE,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
-
- gdk_window_clear_area (window->window,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
-}
-
int
balou_run (Balou *balou,
@@ -359,9 +317,6 @@ balou_destroy (Balou *balou)
for (i = 0; i < balou->nwindows; ++i)
balou_window_destroy (balou->windows + i);
g_free (balou->windows);
-
- if (balou->fader_pm != NULL)
- g_object_unref (balou->fader_pm);
}
@@ -399,13 +354,6 @@ balou_window_init (BalouWindow *window,
gtk_window_set_screen (GTK_WINDOW (window->wmwindow), screen);
gtk_window_set_skip_pager_hint (GTK_WINDOW (window->wmwindow), TRUE);
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window->wmwindow), TRUE);
-
- window->backbuf = gdk_pixmap_new (window->window,
- window->area.width,
- window->area.height,
- -1);
-
- gdk_window_set_back_pixmap (window->window, window->backbuf, FALSE);
}
@@ -413,58 +361,19 @@ static void
balou_window_destroy (BalouWindow *window)
{
gdk_window_remove_filter (window->window, balou_window_filter, window);
- if (GTK_WIDGET_REALIZED (window->wmwindow))
+ if (gtk_widget_get_realized (window->wmwindow))
{
- gdk_window_remove_filter (window->wmwindow->window,
+ gdk_window_remove_filter (gtk_widget_get_window(window->wmwindow),
balou_window_filter,
window);
}
gdk_window_destroy (window->window);
gtk_widget_destroy (window->wmwindow);
- g_object_unref (window->backbuf);
g_object_unref (window->layout);
- g_object_unref (window->gc_copy);
- g_object_unref (window->gc_set);
}
-#if 0
-static void
-balou_window_set_text (BalouWindow *window, const gchar *text)
-{
- gint text_x;
- gint text_y;
- gint text_width;
- gint text_height;
-
- pango_layout_set_markup (window->layout, text, -1);
- pango_layout_get_pixel_size (window->layout, &text_width, &text_height);
-
- text_x = (window->textbox.width - text_width) / 2
- + window->textbox.x;
- text_y = (window->textbox.height - text_height) / 2
- + window->textbox.y;
-
- gdk_draw_rectangle (window->backbuf,
- window->gc_set,
- TRUE,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
-
- gdk_draw_layout (window->backbuf, window->gc_copy,
- text_x, text_y, window->layout);
-
- gdk_window_clear_area (window->window,
- window->textbox.x,
- window->textbox.y,
- window->textbox.width,
- window->textbox.height);
-}
-#endif
-
static GdkFilterReturn
balou_window_filter (GdkXEvent *xevent,
@@ -492,5 +401,3 @@ balou_window_filter (GdkXEvent *xevent,
return GDK_FILTER_CONTINUE;
}
-
-
diff --git a/engines/balou/balou.h b/engines/balou/balou.h
index 98da07b..16d626d 100644
--- a/engines/balou/balou.h
+++ b/engines/balou/balou.h
@@ -58,7 +58,6 @@ void balou_init (Balou *balou,
BalouTheme *theme);
void balou_fadein (Balou *balou,
const gchar *text);
-void balou_fadeout (Balou *balou);
int balou_run (Balou *balou,
GtkWidget *dialog);
void balou_destroy (Balou *balou);
diff --git a/engines/balou/config.c b/engines/balou/config.c
index c84094d..f912569 100644
--- a/engines/balou/config.c
+++ b/engines/balou/config.c
@@ -291,7 +291,7 @@ config_dropped (GtkWidget *treeview, GdkDragContext *context,
gboolean succeed = FALSE;
GList *fnames;
- fnames = gnome_uri_list_extract_filenames ((const gchar *) data->data);
+ fnames = gnome_uri_list_extract_filenames ((const gchar *) gtk_selection_data_get_data(data));
if (fnames != NULL)
{
if (g_list_length (fnames) == 1)
@@ -722,7 +722,7 @@ config_drag_begin (GtkWidget *treeview,
gtk_tree_model_get (model, &iter, NAME_COLUMN, &name, -1);
filename = g_strconcat (name, ".tar.gz", NULL);
- gdk_property_change (context->source_window,
+ gdk_property_change (gdk_drag_context_get_source_window(context),
gdk_atom_intern ("XdndDirectSave0", FALSE),
gdk_atom_intern ("text/plain", FALSE), 8,
GDK_PROP_MODE_REPLACE, (const guchar *)filename, strlen (filename));
@@ -756,7 +756,7 @@ config_drag_data_get (GtkWidget *treeview,
switch (info)
{
case TARGET_XDS:
- if (gdk_property_get (context->source_window,
+ if (gdk_property_get (gdk_drag_context_get_source_window(context),
gdk_atom_intern ("XdndDirectSave0", FALSE),
gdk_atom_intern ("text/plain", FALSE),
0, 1024, FALSE, NULL, NULL, &prop_len, &prop_text)
@@ -958,7 +958,7 @@ config_configure (XfsmSplashConfig *config,
NULL);
ui = config_create (config->rc);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), ui, TRUE, TRUE, 6);
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area(GTK_DIALOG (dialog))), ui, TRUE, TRUE, 6);
gtk_widget_show_all (ui);
gtk_dialog_run (GTK_DIALOG (dialog));
diff --git a/engines/balou/engine.c b/engines/balou/engine.c
index 6a18a27..b0304b6 100644
--- a/engines/balou/engine.c
+++ b/engines/balou/engine.c
@@ -61,7 +61,6 @@ engine_next (XfsmSplashEngine *engine,
{
Balou *balou = BALOU (engine->user_data);
- balou_fadeout (balou);
balou_fadein (balou, text);
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list