Trim trailing white spaces on empty lines.
[geeqie.git] / src / pixbuf_util.c
index 2580d98..8fa06cb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -136,13 +136,13 @@ static void register_stock_icon(const gchar *key, GdkPixbuf *pixbuf)
 {
        static GtkIconFactory *icon_factory = NULL;
        GtkIconSet *icon_set;
-       
+
        if (!icon_factory)
                {
                icon_factory = gtk_icon_factory_new();
                gtk_icon_factory_add_default(icon_factory);
                }
-       
+
        icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
        gtk_icon_factory_add(icon_factory, key, icon_set);
 }
@@ -167,7 +167,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
        GError *error = NULL;
 
        icon_theme = gtk_icon_theme_get_default();
-       
+
        if (gtk_icon_theme_has_icon(icon_theme, key)) return FALSE;
 
        pixbuf = gtk_icon_theme_load_icon(icon_theme,
@@ -175,7 +175,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                            64, /* size */
                            0,  /* flags */
                            &error);
-       if (!pixbuf) 
+       if (!pixbuf)
                {
                if (error)
                        {
@@ -183,7 +183,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                        g_error_free(error);
                        error = NULL;
                        }
-                       
+
                if (strchr(icon, '.'))
                        {
                        /* try again without extension */
@@ -203,7 +203,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                }
 
        if (!pixbuf) return FALSE;
-       
+
        register_stock_icon(key, pixbuf);
        return TRUE;
 }
@@ -231,7 +231,7 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h,
 GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height)
 {
        GdkPixbuf *pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); /* FIXME use different images according to FORMAT_CLASS */
-       
+
        if (requested_width && requested_height)
                {
                gint w = gdk_pixbuf_get_width(pixbuf);
@@ -349,10 +349,6 @@ GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise)
        gint dw, dh, drs;
        guchar *s_pix;
        guchar *d_pix;
-#if 0
-       guchar *sp;
-       guchar *dp;
-#endif
        gint i, j;
        gint a;
        GdkPixbuf *buffer;
@@ -512,7 +508,7 @@ GdkPixbuf *pixbuf_apply_orientation(GdkPixbuf *pixbuf, gint orientation)
 {
        GdkPixbuf *dest;
        GdkPixbuf *tmp = NULL;
-       
+
        switch (orientation)
                {
                case EXIF_ORIENTATION_TOP_LEFT:
@@ -780,32 +776,35 @@ void pixbuf_draw_layout(GdkPixbuf *pixbuf, PangoLayout *layout, GtkWidget *widge
                        gint x, gint y,
                        guint8 r, guint8 g, guint8 b, guint8 a)
 {
-       GdkPixmap *pixmap;
        GdkPixbuf *buffer;
        gint w, h;
-       GdkGC *gc;
        gint sx, sy;
        gint dw, dh;
-
-       if (!widget || !widget->window) return;
+       cairo_surface_t *source;
+       cairo_t *cr;
 
        pango_layout_get_pixel_size(layout, &w, &h);
        if (w < 1 || h < 1) return;
 
-       pixmap = gdk_pixmap_new(widget->window, w, h, -1);
-
-       gc = gdk_gc_new(widget->window);
-       gdk_gc_copy(gc, widget->style->black_gc);
-       gdk_draw_rectangle(pixmap, gc, TRUE, 0, 0, w, h);
-       gdk_gc_copy(gc, widget->style->white_gc);
-       gdk_draw_layout(pixmap, gc, 0, 0, layout);
-       g_object_unref(gc);
-
-       buffer = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, w, h);
-       gdk_pixbuf_get_from_drawable(buffer, pixmap,
-                                    gdk_drawable_get_colormap(widget->window),
-                                    0, 0, 0, 0, w, h);
-       g_object_unref(pixmap);
+       source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
+
+       cr = cairo_create (source);
+       cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_rectangle (cr, 0, 0, w, h);
+       cairo_fill (cr);
+       cairo_set_source_rgb(cr, 1, 1, 1);
+       pango_cairo_show_layout (cr, layout);
+       cairo_destroy (cr);
+
+       buffer = gdk_pixbuf_new_from_data (cairo_image_surface_get_data (source),
+                                          GDK_COLORSPACE_RGB,
+                                          cairo_image_surface_get_format (source) == CAIRO_FORMAT_ARGB32,
+                                          8,
+                                          cairo_image_surface_get_width (source),
+                                          cairo_image_surface_get_height (source),
+                                          cairo_image_surface_get_stride (source),
+                                          NULL,
+                                          NULL);
 
        sx = 0;
        sy = 0;
@@ -834,6 +833,7 @@ void pixbuf_draw_layout(GdkPixbuf *pixbuf, PangoLayout *layout, GtkWidget *widge
                         r, g, b, a);
 
        g_object_unref(buffer);
+       cairo_surface_destroy(source);
 }
 
 /*
@@ -1005,20 +1005,6 @@ static gboolean util_clip_line(gdouble clip_x, gdouble clip_y, gdouble clip_w, g
                if (y1 < clip_y || y2 > clip_y + clip_h) return FALSE;
                }
 
-#if 0
-       if (x1 >= clip_x && x2 <= clip_x + clip_w)
-               {
-               if (y1 < y2)
-                       {
-                       if (y1 >= clip_y && y2 <= clip_y + clip_h) return TRUE;
-                       }
-               else
-                       {
-                       if (y2 >= clip_y && y1 <= clip_y + clip_h) return TRUE;
-                       }
-               }
-#endif
-
        d = x2 - x1;
        if (d > 0.0)
                {