diff options
Diffstat (limited to 'applets')
-rw-r--r-- | applets/clock/clock-face.c | 12 | ||||
-rw-r--r-- | applets/clock/clock-utils.c | 204 | ||||
-rw-r--r-- | applets/clock/clock-utils.h | 2 | ||||
-rw-r--r-- | applets/clock/clock.c | 16 | ||||
-rw-r--r-- | applets/clock/test-system-timezone.c | 4 | ||||
-rw-r--r-- | applets/fish/fish.c | 4 | ||||
-rw-r--r-- | applets/notification_area/fixedtip.c | 4 | ||||
-rw-r--r-- | applets/notification_area/na-tray-child.c | 4 | ||||
-rw-r--r-- | applets/notification_area/na-tray-manager.c | 11 | ||||
-rw-r--r-- | applets/notification_area/testtray.c | 6 |
10 files changed, 214 insertions, 53 deletions
diff --git a/applets/clock/clock-face.c b/applets/clock/clock-face.c index 25c0b182..558201ab 100644 --- a/applets/clock/clock-face.c +++ b/applets/clock/clock-face.c @@ -15,10 +15,9 @@ #include <math.h> #include <time.h> -#include <librsvg/rsvg.h> - #include "clock-face.h" #include "clock-location.h" +#include "clock-utils.h" static GHashTable *pixbuf_cache = NULL; @@ -506,18 +505,13 @@ clock_face_load_face (ClockFace *this, gint width, gint height) name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size], "-", daytime_string[priv->timeofday], ".svg", NULL); - priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name, - width, height, - NULL); + priv->face_pixbuf = clock_utils_pixbuf_from_svg_file_at_size (name, width, height); g_free (name); if (!priv->face_pixbuf) { name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size], ".svg", NULL); - priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name, - width, - height, - NULL); + priv->face_pixbuf = clock_utils_pixbuf_from_svg_file_at_size (name, width, height); g_free (name); } diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c index d0dfe2de..4ba93fef 100644 --- a/applets/clock/clock-utils.c +++ b/applets/clock/clock-utils.c @@ -34,6 +34,9 @@ #include <gtk/gtk.h> +#include <librsvg/rsvg.h> +#include <librsvg/rsvg-cairo.h> + #include "clock.h" #include "clock-utils.h" @@ -125,3 +128,204 @@ clock_utils_display_help (GtkWidget *widget, gtk_widget_show (dialog); } } + +#if !GTK_CHECK_VERSION (3, 0, 0) +/* code copied from GTK3 gdkpixbuf-drawable.c */ +static cairo_format_t +gdk_cairo_format_for_content (cairo_content_t content) +{ + switch (content) + { + case CAIRO_CONTENT_COLOR: + return CAIRO_FORMAT_RGB24; + case CAIRO_CONTENT_ALPHA: + return CAIRO_FORMAT_A8; + case CAIRO_CONTENT_COLOR_ALPHA: + default: + return CAIRO_FORMAT_ARGB32; + } +} + +static cairo_surface_t * +gdk_cairo_surface_coerce_to_image (cairo_surface_t *surface, + cairo_content_t content, + int src_x, + int src_y, + int width, + int height) +{ + cairo_surface_t *copy; + cairo_t *cr; + + copy = cairo_image_surface_create (gdk_cairo_format_for_content (content), + width, + height); + + cr = cairo_create (copy); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_set_source_surface (cr, surface, -src_x, -src_y); + cairo_paint (cr); + cairo_destroy (cr); + + return copy; +} + +static void +convert_alpha (guchar *dest_data, + int dest_stride, + guchar *src_data, + int src_stride, + int src_x, + int src_y, + int width, + int height) +{ + int x, y; + + src_data += src_stride * src_y + src_x * 4; + + for (y = 0; y < height; y++) { + guint32 *src = (guint32 *) src_data; + + for (x = 0; x < width; x++) { + guint alpha = src[x] >> 24; + + if (alpha == 0) + { + dest_data[x * 4 + 0] = 0; + dest_data[x * 4 + 1] = 0; + dest_data[x * 4 + 2] = 0; + } + else + { + dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha; + dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha; + dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha; + } + dest_data[x * 4 + 3] = alpha; + } + + src_data += src_stride; + dest_data += dest_stride; + } +} + +static void +convert_no_alpha (guchar *dest_data, + int dest_stride, + guchar *src_data, + int src_stride, + int src_x, + int src_y, + int width, + int height) +{ + int x, y; + + src_data += src_stride * src_y + src_x * 4; + + for (y = 0; y < height; y++) { + guint32 *src = (guint32 *) src_data; + + for (x = 0; x < width; x++) { + dest_data[x * 3 + 0] = src[x] >> 16; + dest_data[x * 3 + 1] = src[x] >> 8; + dest_data[x * 3 + 2] = src[x]; + } + + src_data += src_stride; + dest_data += dest_stride; + } +} + +GdkPixbuf * +gdk_pixbuf_get_from_surface (cairo_surface_t *surface, + gint src_x, + gint src_y, + gint width, + gint height) +{ + cairo_content_t content; + GdkPixbuf *dest; + + /* General sanity checks */ + g_return_val_if_fail (surface != NULL, NULL); + g_return_val_if_fail (width > 0 && height > 0, NULL); + + content = cairo_surface_get_content (surface) | CAIRO_CONTENT_COLOR; + dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + !!(content & CAIRO_CONTENT_ALPHA), + 8, + width, height); + + if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE && + cairo_image_surface_get_format (surface) == gdk_cairo_format_for_content (content)) + surface = cairo_surface_reference (surface); + else + { + surface = gdk_cairo_surface_coerce_to_image (surface, content, + src_x, src_y, + width, height); + src_x = 0; + src_y = 0; + } + cairo_surface_flush (surface); + if (cairo_surface_status (surface) || dest == NULL) + { + cairo_surface_destroy (surface); + return NULL; + } + + if (gdk_pixbuf_get_has_alpha (dest)) + convert_alpha (gdk_pixbuf_get_pixels (dest), + gdk_pixbuf_get_rowstride (dest), + cairo_image_surface_get_data (surface), + cairo_image_surface_get_stride (surface), + src_x, src_y, + width, height); + else + convert_no_alpha (gdk_pixbuf_get_pixels (dest), + gdk_pixbuf_get_rowstride (dest), + cairo_image_surface_get_data (surface), + cairo_image_surface_get_stride (surface), + src_x, src_y, + width, height); + + cairo_surface_destroy (surface); + return dest; +} +#endif + +GdkPixbuf * +clock_utils_pixbuf_from_svg_file_at_size (const char *name, int width, int height) +{ + RsvgHandle *handle = NULL; + RsvgDimensionData svg_dimensions; + GdkPixbuf *pixbuf = NULL; + cairo_surface_t *surface = NULL; + cairo_matrix_t matrix; + cairo_t *cr = NULL; + + handle = rsvg_handle_new_from_file (name, NULL); + if (!handle) + return NULL; + + rsvg_handle_get_dimensions (handle, &svg_dimensions); + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create (surface); + cairo_matrix_init_scale (&matrix, + ((double) width / svg_dimensions.width), + ((double) height / svg_dimensions.height)); + cairo_transform (cr, &matrix); + rsvg_handle_render_cairo (handle, cr); + cairo_destroy (cr); + + pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height); + cairo_surface_destroy (surface); + + rsvg_handle_close (handle, NULL); + + return pixbuf; +} + diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h index da54094f..647f7222 100644 --- a/applets/clock/clock-utils.h +++ b/applets/clock/clock-utils.h @@ -50,6 +50,8 @@ void clock_utils_display_help (GtkWidget *widget, const char *doc_id, const char *link_id); +GdkPixbuf * clock_utils_pixbuf_from_svg_file_at_size (const char *name, int width, int height); + #ifdef __cplusplus } #endif diff --git a/applets/clock/clock.c b/applets/clock/clock.c index 4592698e..efaba2fd 100644 --- a/applets/clock/clock.c +++ b/applets/clock/clock.c @@ -186,7 +186,9 @@ struct _ClockData { /* Used to count the number of clock instances. It's there to know when we * should free resources that are shared. */ +/* FIXME unused variable, remove? static int clock_numbers = 0; +*/ static void update_clock (ClockData * cd); static void update_tooltip (ClockData * cd); @@ -2907,7 +2909,6 @@ temperature_combo_changed (GtkComboBox *combo, ClockData *cd) { int value; int old_value; - const gchar *str; value = gtk_combo_box_get_active (combo) + 2; old_value = cd->temperature_unit; @@ -2923,7 +2924,6 @@ speed_combo_changed (GtkComboBox *combo, ClockData *cd) { int value; int old_value; - const gchar *str; value = gtk_combo_box_get_active (combo) + 2; old_value = cd->speed_unit; @@ -2960,9 +2960,7 @@ fill_prefs_window (ClockData *cd) GtkCellRenderer *renderer; GtkTreeViewColumn *col; GtkListStore *store; -#if GTK_CHECK_VERSION (3, 0, 0) GtkTreeIter iter; -#endif int i; /* Set the 12 hour / 24 hour widget */ @@ -3025,14 +3023,9 @@ fill_prefs_window (ClockData *cd) gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL); for (i = 0; temperatures[i] != -1; i++) -#if GTK_CHECK_VERSION (3, 0, 0) gtk_list_store_insert_with_values (store, &iter, -1, 0, mateweather_prefs_get_temp_display_name (temperatures[i]), -1); -#else - gtk_combo_box_append_text (GTK_COMBO_BOX (widget), - mateweather_prefs_get_temp_display_name (temperatures[i])); -#endif if (cd->temperature_unit > 0) gtk_combo_box_set_active (GTK_COMBO_BOX (widget), @@ -3049,14 +3042,9 @@ fill_prefs_window (ClockData *cd) gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL); for (i = 0; speeds[i] != -1; i++) -#if GTK_CHECK_VERSION (3, 0, 0) gtk_list_store_insert_with_values (store, &iter, -1, 0, mateweather_prefs_get_speed_display_name (speeds[i]), -1); -#else - gtk_combo_box_append_text (GTK_COMBO_BOX (widget), - mateweather_prefs_get_speed_display_name (speeds[i])); -#endif if (cd->speed_unit > 0) gtk_combo_box_set_active (GTK_COMBO_BOX (widget), diff --git a/applets/clock/test-system-timezone.c b/applets/clock/test-system-timezone.c index 8e3e26af..79084618 100644 --- a/applets/clock/test-system-timezone.c +++ b/applets/clock/test-system-timezone.c @@ -93,10 +93,6 @@ main (int argc, retval = 0; -#if !GLIB_CHECK_VERSION (2, 36, 0) - g_type_init (); -#endif - context = g_option_context_new (""); g_option_context_add_main_entries (context, options, NULL); diff --git a/applets/fish/fish.c b/applets/fish/fish.c index c4a91d88..f9a69435 100644 --- a/applets/fish/fish.c +++ b/applets/fish/fish.c @@ -850,10 +850,6 @@ static void display_fortune_dialog(FishApplet* fish) gtk_window_set_icon_name (GTK_WINDOW (fish->fortune_dialog), FISH_ICON); -#if !GTK_CHECK_VERSION (3, 0, 0) - gtk_dialog_set_has_separator ( - GTK_DIALOG (fish->fortune_dialog), FALSE); -#endif gtk_dialog_set_default_response ( GTK_DIALOG (fish->fortune_dialog), GTK_RESPONSE_CLOSE); diff --git a/applets/notification_area/fixedtip.c b/applets/notification_area/fixedtip.c index 7bd61409..ded3dbb6 100644 --- a/applets/notification_area/fixedtip.c +++ b/applets/notification_area/fixedtip.c @@ -179,12 +179,8 @@ na_fixed_tip_position (NaFixedTip *fixedtip) #endif gdk_window_get_origin (parent_window, &root_x, &root_y); -#if GTK_CHECK_VERSION(3, 0, 0) parent_width = gdk_window_get_width(parent_window); parent_height = gdk_window_get_height(parent_window); -#else - gdk_drawable_get_size(GDK_DRAWABLE(parent_window), &parent_width, &parent_height); -#endif screen_width = gdk_screen_get_width (screen); screen_height = gdk_screen_get_height (screen); diff --git a/applets/notification_area/na-tray-child.c b/applets/notification_area/na-tray-child.c index 84fddf64..9ff5c739 100644 --- a/applets/notification_area/na-tray-child.c +++ b/applets/notification_area/na-tray-child.c @@ -492,11 +492,7 @@ na_tray_child_force_redraw (NaTrayChild *child) gtk_widget_get_allocation (widget, &allocation); xev.xexpose.type = Expose; -#if GTK_CHECK_VERSION (3, 0, 0) xev.xexpose.window = GDK_WINDOW_XID (plug_window); -#else - xev.xexpose.window = GDK_WINDOW_XWINDOW (plug_window); -#endif xev.xexpose.x = 0; xev.xexpose.y = 0; xev.xexpose.width = allocation.width; diff --git a/applets/notification_area/na-tray-manager.c b/applets/notification_area/na-tray-manager.c index 1a2acc7f..1483bcd0 100644 --- a/applets/notification_area/na-tray-manager.c +++ b/applets/notification_area/na-tray-manager.c @@ -27,11 +27,6 @@ #include "na-tray-manager.h" #include <gtk/gtk.h> -#if GTK_CHECK_VERSION (3, 0, 0) -#define GDK_WINDOW_XWINDOW GDK_WINDOW_XID -#else -#include <gdkconfig.h> -#endif #include <glib/gi18n.h> #if defined (GDK_WINDOWING_X11) #include <gdk/gdkx.h> @@ -646,7 +641,7 @@ na_tray_manager_set_orientation_property (NaTrayManager *manager) SYSTEM_TRAY_ORIENTATION_VERT; XChangeProperty (GDK_DISPLAY_XDISPLAY (display), - GDK_WINDOW_XWINDOW (window), + GDK_WINDOW_XID (window), orientation_atom, XA_CARDINAL, 32, PropModeReplace, @@ -706,7 +701,7 @@ na_tray_manager_set_visual_property (NaTrayManager *manager) data[0] = XVisualIDFromVisual (xvisual); XChangeProperty (GDK_DISPLAY_XDISPLAY (display), - GDK_WINDOW_XWINDOW (window), + GDK_WINDOW_XID (window), visual_atom, XA_VISUALID, 32, PropModeReplace, @@ -784,7 +779,7 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, xev.data.l[0] = timestamp; xev.data.l[1] = gdk_x11_atom_to_xatom_for_display (display, manager->selection_atom); - xev.data.l[2] = GDK_WINDOW_XWINDOW (window); + xev.data.l[2] = GDK_WINDOW_XID (window); xev.data.l[3] = 0; /* manager specific data */ xev.data.l[4] = 0; /* manager specific data */ diff --git a/applets/notification_area/testtray.c b/applets/notification_area/testtray.c index 9feed828..f19663cd 100644 --- a/applets/notification_area/testtray.c +++ b/applets/notification_area/testtray.c @@ -162,15 +162,9 @@ create_tray_on_screen (GdkScreen *screen, label = gtk_label_new_with_mnemonic ("_Orientation:"); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION (3, 0, 0) combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Horizontal"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Vertical"); -#else - combo = gtk_combo_box_new_text (); - gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Horizontal"); - gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Vertical"); -#endif g_signal_connect (combo, "changed", G_CALLBACK (orientation_changed_cb), data); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); |