summaryrefslogtreecommitdiff
path: root/savers
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-11-04 22:37:08 -0300
committerPerberos <[email protected]>2011-11-04 22:37:08 -0300
commit1edf6684b4713b0848f425d474fc1a43b073942d (patch)
treef78832545d22866467af640a5bb0b5f7ea3e08c0 /savers
parent497dc1c333aeb0c327f073317e3c55491687f4cd (diff)
downloadmate-screensaver-1edf6684b4713b0848f425d474fc1a43b073942d.tar.bz2
mate-screensaver-1edf6684b4713b0848f425d474fc1a43b073942d.tar.xz
quitando archivos generados por astyle
Diffstat (limited to 'savers')
-rw-r--r--savers/floaters.c.orig1256
-rw-r--r--savers/gs-theme-engine.c.orig216
-rw-r--r--savers/gs-theme-engine.h.orig88
-rw-r--r--savers/gs-theme-window.c.orig208
-rw-r--r--savers/gs-theme-window.h.orig72
-rw-r--r--savers/gste-popsquares.c.orig563
-rw-r--r--savers/gste-popsquares.h.orig57
-rw-r--r--savers/gste-slideshow.c.orig1001
-rw-r--r--savers/gste-slideshow.h.orig69
-rw-r--r--savers/popsquares.c.orig72
-rw-r--r--savers/slideshow.c.orig127
-rw-r--r--savers/xdg-user-dir-lookup.c.orig168
12 files changed, 0 insertions, 3897 deletions
diff --git a/savers/floaters.c.orig b/savers/floaters.c.orig
deleted file mode 100644
index 1fd84f5..0000000
--- a/savers/floaters.c.orig
+++ /dev/null
@@ -1,1256 +0,0 @@
-/*
- * Copyright (C) 2005 Ray Strode <[email protected]>,
- * Matthias Clasen <[email protected]>,
- * Søren Sandmann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Originally written by: Ray Strode <[email protected]>
- *
- * Later contributions by: Matthias Clasen <[email protected]>
- * Søren Sandmann <[email protected]>
- */
-
-#include "config.h"
-
-#include <math.h>
-#include <stdlib.h>
-#include <sysexits.h>
-#include <time.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-
-#ifndef trunc
-#define trunc(x) (((x) > 0.0) ? floor((x)) : -floor(-(x)))
-#endif
-
-#ifndef OPTIMAL_FRAME_RATE
-#define OPTIMAL_FRAME_RATE (25.0)
-#endif
-
-#ifndef STAT_PRINT_FREQUENCY
-#define STAT_PRINT_FREQUENCY (2000)
-#endif
-
-#ifndef FLOATER_MAX_SIZE
-#define FLOATER_MAX_SIZE (128.0)
-#endif
-
-#ifndef FLOATER_MIN_SIZE
-#define FLOATER_MIN_SIZE (16.0)
-#endif
-#ifndef FLOATER_DEFAULT_COUNT
-#define FLOATER_DEFAULT_COUNT (5)
-#endif
-
-#ifndef SMALL_ANGLE
-#define SMALL_ANGLE (0.025 * G_PI)
-#endif
-
-#ifndef BIG_ANGLE
-#define BIG_ANGLE (0.125 * G_PI)
-#endif
-
-#ifndef GAMMA
-#define GAMMA 2.2
-#endif
-
-static gboolean should_show_paths = FALSE;
-static gboolean should_do_rotations = FALSE;
-static gboolean should_print_stats = FALSE;
-static gint max_floater_count = FLOATER_DEFAULT_COUNT;
-static gchar *geometry = NULL;
-static gchar **filenames = NULL;
-
-static GOptionEntry options[] = {
- {"show-paths", 'p', 0, G_OPTION_ARG_NONE, &should_show_paths,
- N_("Show paths that images follow"), NULL},
-
- {"do-rotations", 'r', 0, G_OPTION_ARG_NONE, &should_do_rotations,
- N_("Occasionally rotate images as they move"), NULL},
-
- {"print-stats", 's', 0, G_OPTION_ARG_NONE, &should_print_stats,
- N_("Print out frame rate and other statistics"), NULL},
-
- {"number-of-images", 'n', 0, G_OPTION_ARG_INT, &max_floater_count,
- N_("The maximum number of images to keep on screen"), N_("MAX_IMAGES")},
-
- {"geometry", 0, 0, G_OPTION_ARG_STRING, &geometry,
- N_("The initial size and position of window"), N_("WIDTHxHEIGHT+X+Y")},
-
- {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames,
- N_("The source image to use"), NULL},
-
- {NULL}
-};
-
-
-typedef struct _Point Point;
-typedef struct _Path Path;
-typedef struct _Rectangle Rectangle;
-typedef struct _ScreenSaverFloater ScreenSaverFloater;
-typedef struct _CachedSource CachedSource;
-typedef struct _ScreenSaver ScreenSaver;
-
-struct _Point
-{
- gdouble x, y;
-};
-
-struct _Path
-{
- Point start_point;
- Point start_control_point;
- Point end_control_point;
- Point end_point;
-
- gdouble x_linear_coefficient,
- y_linear_coefficient;
-
- gdouble x_quadratic_coefficient,
- y_quadratic_coefficient;
-
- gdouble x_cubic_coefficient,
- y_cubic_coefficient;
-
- gdouble duration;
-};
-
-struct _CachedSource
-{
- cairo_pattern_t *pattern;
- gint width, height;
-};
-
-struct _Rectangle
-{
- Point top_left_point;
- Point bottom_right_point;
-};
-
-struct _ScreenSaverFloater
-{
- GdkRectangle bounds;
-
- Point start_position;
- Point position;
-
- gdouble scale;
- gdouble opacity;
-
- Path *path;
- gdouble path_start_time;
- gdouble path_start_scale;
- gdouble path_end_scale;
-
- gdouble angle;
- gdouble angle_increment;
-};
-
-struct _ScreenSaver
-{
- GtkWidget *drawing_area;
- Rectangle canvas_rectangle;
- GHashTable *cached_sources;
-
- char *filename;
-
- gdouble first_update_time;
-
- gdouble last_calculated_stats_time,
- current_calculated_stats_time;
- gint update_count, frame_count;
-
- gdouble updates_per_second;
- gdouble frames_per_second;
-
- guint state_update_timeout_id;
- guint stats_update_timeout_id;
-
- GList *floaters;
- gint max_floater_count;
-
- guint should_do_rotations: 1;
- guint should_show_paths : 1;
- guint draw_ops_pending : 1;
-};
-
-static Path *path_new (Point *start_point,
- Point *start_control_point,
- Point *end_control_point,
- Point *end_point,
- gdouble duration);
-static void path_free (Path *path);
-
-static ScreenSaverFloater *screen_saver_floater_new (ScreenSaver *screen_saver,
- Point *position,
- gdouble scale);
-static void screen_saver_floater_free (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater);
-static gboolean screen_saver_floater_is_off_canvas (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater);
-static gboolean screen_saver_floater_should_bubble_up (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble performance_ratio,
- gdouble *duration);
-static gboolean screen_saver_floater_should_come_on_screen (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble performance_ratio,
- gdouble *duration);
-static Point screen_saver_floater_get_position_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time);
-static gdouble screen_saver_floater_get_scale_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time);
-static gdouble screen_saver_floater_get_angle_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time);
-
-static Path *screen_saver_floater_create_path_to_on_screen (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration);
-static Path *screen_saver_floater_create_path_to_bubble_up (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration);
-static Path *screen_saver_floater_create_path_to_random_point (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration);
-static Path *screen_saver_floater_create_path (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater);
-static void screen_saver_floater_update_state (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time);
-
-static gboolean screen_saver_floater_do_draw (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- cairo_t *context);
-
-static CachedSource *cached_source_new (cairo_pattern_t *pattern,
- gint width,
- gint height);
-static void cached_source_free (CachedSource *source);
-
-static ScreenSaver *screen_saver_new (GtkDrawingArea *drawing_area,
- const gchar *filename,
- gint max_floater_count,
- gboolean should_do_rotations,
- gboolean should_show_paths);
-static void screen_saver_free (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_timestamp (ScreenSaver *screen_saver);
-static void screen_saver_get_initial_state (ScreenSaver *screen_saver);
-static void screen_saver_update_state (ScreenSaver *screen_saver,
- gdouble time);
-static gboolean screen_saver_do_update_state (ScreenSaver *screen_saver);
-static gboolean screen_saver_do_update_stats (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_updates_per_second (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_frames_per_second (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_image_cache_usage (ScreenSaver *screen_saver);
-static void screen_saver_create_floaters (ScreenSaver *screen_saver);
-static void screen_saver_destroy_floaters (ScreenSaver *screen_saver);
-static void screen_saver_on_size_allocate (ScreenSaver *screen_saver,
- GtkAllocation *allocation);
-static void screen_saver_on_expose_event (ScreenSaver *screen_saver,
- GdkEventExpose *event);
-static gboolean do_print_screen_saver_stats (ScreenSaver *screen_saver);
-static GdkPixbuf *gamma_correct (const GdkPixbuf *input_pixbuf);
-
-static CachedSource*
-cached_source_new (cairo_pattern_t *pattern,
- gint width,
- gint height)
-{
- CachedSource *source;
-
- source = g_new (CachedSource, 1);
- source->pattern = cairo_pattern_reference (pattern);
- source->width = width;
- source->height = height;
-
- return source;
-}
-
-static void
-cached_source_free (CachedSource *source)
-{
- if (source == NULL)
- return;
-
- cairo_pattern_destroy (source->pattern);
-
- g_free (source);
-}
-
-static Path *
-path_new (Point *start_point,
- Point *start_control_point,
- Point *end_control_point,
- Point *end_point,
- gdouble duration)
-{
- Path *path;
-
- path = g_new (Path, 1);
- path->start_point = *start_point;
- path->start_control_point = *start_control_point;
- path->end_control_point = *end_control_point;
- path->end_point = *end_point;
- path->duration = duration;
-
- /* we precompute the coefficients to the cubic bezier curve here
- * so that we don't have to do it repeatedly later The equation is:
- *
- * B(t) = A * t^3 + B * t^2 + C * t + start_point
- */
- path->x_linear_coefficient = 3 * (start_control_point->x - start_point->x);
- path->x_quadratic_coefficient = 3 * (end_control_point->x -
- start_control_point->x) -
- path->x_linear_coefficient;
- path->x_cubic_coefficient = end_point->x - start_point->x -
- path->x_linear_coefficient -
- path->x_quadratic_coefficient;
-
- path->y_linear_coefficient = 3 * (start_control_point->y - start_point->y);
- path->y_quadratic_coefficient = 3 * (end_control_point->y -
- start_control_point->y) -
- path->y_linear_coefficient;
- path->y_cubic_coefficient = end_point->y - start_point->y -
- path->y_linear_coefficient -
- path->y_quadratic_coefficient;
- return path;
-}
-
-static void
-path_free (Path *path)
-{
- g_free (path);
-}
-
-static ScreenSaverFloater*
-screen_saver_floater_new (ScreenSaver *screen_saver,
- Point *position,
- gdouble scale)
-{
- ScreenSaverFloater *floater;
-
- floater = g_new (ScreenSaverFloater, 1);
- floater->bounds.width = 0;
- floater->start_position = *position;
- floater->position = *position;
- floater->scale = scale;
- floater->opacity = pow (scale, 1.0 / GAMMA);
- floater->path = NULL;
- floater->path_start_time = 0.0;
- floater->path_start_scale = 1.0;
- floater->path_end_scale = 0.0;
-
- floater->angle = 0.0;
- floater->angle_increment = 0.0;
-
- return floater;
-}
-
-void
-screen_saver_floater_free (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater)
-{
- if (floater == NULL)
- return;
-
- path_free (floater->path);
-
- g_free (floater);
-}
-
-static gboolean
-screen_saver_floater_is_off_canvas (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater)
-{
- if ((floater->position.x < screen_saver->canvas_rectangle.top_left_point.x) ||
- (floater->position.x > screen_saver->canvas_rectangle.bottom_right_point.x) ||
- (floater->position.y < screen_saver->canvas_rectangle.top_left_point.y) ||
- (floater->position.y > screen_saver->canvas_rectangle.bottom_right_point.y))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-screen_saver_floater_should_come_on_screen (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble performance_ratio,
- gdouble *duration)
-{
-
- if (!screen_saver_floater_is_off_canvas (screen_saver, floater))
- return FALSE;
-
- if ((abs (performance_ratio - .5) >= G_MINDOUBLE) &&
- (g_random_double () > .5))
- {
- if (duration)
- *duration = g_random_double_range (3.0, 7.0);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-screen_saver_floater_should_bubble_up (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble performance_ratio,
- gdouble *duration)
-{
-
- if ((performance_ratio < .5) && (g_random_double () > .5))
- {
- if (duration)
- *duration = performance_ratio * 30.0;
-
- return TRUE;
- }
-
- if ((floater->scale < .3) && (g_random_double () > .6))
- {
- if (duration)
- *duration = 30.0;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static Point
-screen_saver_floater_get_position_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time)
-{
- Point point;
-
- time = time / floater->path->duration;
-
- point.x = floater->path->x_cubic_coefficient * (time * time * time) +
- floater->path->x_quadratic_coefficient * (time * time) +
- floater->path->x_linear_coefficient * (time) +
- floater->path->start_point.x;
- point.y = floater->path->y_cubic_coefficient * (time * time * time) +
- floater->path->y_quadratic_coefficient * (time * time) +
- floater->path->y_linear_coefficient * (time) +
- floater->path->start_point.y;
-
- return point;
-}
-
-static gdouble
-screen_saver_floater_get_scale_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time)
-{
- gdouble completion_ratio, total_scale_growth, new_scale;
-
- completion_ratio = time / floater->path->duration;
- total_scale_growth = (floater->path_end_scale - floater->path_start_scale);
- new_scale = floater->path_start_scale + total_scale_growth * completion_ratio;
-
- return CLAMP (new_scale, 0.0, 1.0);
-}
-
-static gdouble
-screen_saver_floater_get_angle_from_time (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time)
-{
- gdouble completion_ratio;
- gdouble total_rotation;
-
- completion_ratio = time / floater->path->duration;
- total_rotation = floater->angle_increment * floater->path->duration;
-
- return floater->angle + total_rotation * completion_ratio;
-}
-
-static Path *
-screen_saver_floater_create_path_to_on_screen (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration)
-{
- Point start_position, end_position, start_control_point, end_control_point;
- start_position = floater->position;
-
- end_position.x = g_random_double_range (.25, .75) *
- (screen_saver->canvas_rectangle.top_left_point.x +
- screen_saver->canvas_rectangle.bottom_right_point.x);
- end_position.y = g_random_double_range (.25, .75) *
- (screen_saver->canvas_rectangle.top_left_point.y +
- screen_saver->canvas_rectangle.bottom_right_point.y);
-
- start_control_point.x = start_position.x + .9 * (end_position.x - start_position.x);
- start_control_point.y = start_position.y + .9 * (end_position.y - start_position.y);
-
- end_control_point.x = start_position.x + 1.0 * (end_position.x - start_position.x);
- end_control_point.y = start_position.y + 1.0 * (end_position.y - start_position.y);
-
- return path_new (&start_position, &start_control_point, &end_control_point,
- &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path_to_bubble_up (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration)
-{
- Point start_position, end_position, start_control_point, end_control_point;
-
- start_position = floater->position;
- end_position.x = start_position.x;
- end_position.y = screen_saver->canvas_rectangle.top_left_point.y - FLOATER_MAX_SIZE;
- start_control_point.x = .5 * start_position.x;
- start_control_point.y = .5 * start_position.y;
- end_control_point.x = 1.5 * end_position.x;
- end_control_point.y = .5 * end_position.y;
-
- return path_new (&start_position, &start_control_point, &end_control_point,
- &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path_to_random_point (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble duration)
-{
- Point start_position, end_position, start_control_point, end_control_point;
-
- start_position = floater->position;
-
- end_position.x = start_position.x +
- (g_random_double_range (-.5, .5) * 4 * FLOATER_MAX_SIZE);
- end_position.y = start_position.y +
- (g_random_double_range (-.5, .5) * 4 * FLOATER_MAX_SIZE);
-
- start_control_point.x = start_position.x + .95 * (end_position.x - start_position.x);
- start_control_point.y = start_position.y + .95 * (end_position.y - start_position.y);
-
- end_control_point.x = start_position.x + 1.0 * (end_position.x - start_position.x);
- end_control_point.y = start_position.y + 1.0 * (end_position.y - start_position.y);
-
- return path_new (&start_position, &start_control_point, &end_control_point,
- &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater)
-{
- gdouble performance_ratio;
- gdouble duration;
-
- performance_ratio =
- screen_saver_get_frames_per_second (screen_saver) / OPTIMAL_FRAME_RATE;
-
- if (abs (performance_ratio) <= G_MINDOUBLE)
- performance_ratio = 1.0;
-
- if (screen_saver_floater_should_bubble_up (screen_saver, floater, performance_ratio, &duration))
- return screen_saver_floater_create_path_to_bubble_up (screen_saver, floater, duration);
-
- if (screen_saver_floater_should_come_on_screen (screen_saver, floater, performance_ratio, &duration))
- return screen_saver_floater_create_path_to_on_screen (screen_saver, floater, duration);
-
- return screen_saver_floater_create_path_to_random_point (screen_saver, floater,
- g_random_double_range (3.0, 7.0));
-}
-
-static void
-screen_saver_floater_update_state (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- gdouble time)
-{
- gdouble performance_ratio;
-
- performance_ratio =
- screen_saver_get_frames_per_second (screen_saver) / OPTIMAL_FRAME_RATE;
-
- if (floater->path == NULL)
- {
- floater->path = screen_saver_floater_create_path (screen_saver, floater);
- floater->path_start_time = time;
-
- floater->path_start_scale = floater->scale;
-
- if (g_random_double () > .5)
- floater->path_end_scale = g_random_double_range (0.10, performance_ratio);
-
- /* poor man's distribution */
- if (screen_saver->should_do_rotations &&
- (g_random_double () < .75 * performance_ratio))
- {
- gint r;
-
- r = g_random_int_range (0, 100);
- if (r < 80)
- floater->angle_increment = 0.0;
- else if (r < 95)
- floater->angle_increment = g_random_double_range (-SMALL_ANGLE, SMALL_ANGLE);
- else
- floater->angle_increment = g_random_double_range (-BIG_ANGLE, BIG_ANGLE);
- }
- }
-
- if (time < (floater->path_start_time + floater->path->duration))
- {
- gdouble path_time;
-
- path_time = time - floater->path_start_time;
-
- floater->position =
- screen_saver_floater_get_position_from_time (screen_saver, floater,
- path_time);
- floater->scale =
- screen_saver_floater_get_scale_from_time (screen_saver, floater, path_time);
-
- floater->angle =
- screen_saver_floater_get_angle_from_time (screen_saver, floater, path_time);
-
- floater->opacity = pow (floater->scale, 1.0 / GAMMA);
- }
- else
- {
- path_free (floater->path);
-
- floater->path = NULL;
- floater->path_start_time = 0.0;
- }
-}
-
-static GdkPixbuf *
-gamma_correct (const GdkPixbuf *input_pixbuf)
-{
- gint x, y, width, height, rowstride;
- GdkPixbuf *output_pixbuf;
- guchar *pixels;
-
- output_pixbuf = gdk_pixbuf_copy (input_pixbuf);
- pixels = gdk_pixbuf_get_pixels (output_pixbuf);
-
- width = gdk_pixbuf_get_width (output_pixbuf);
- height = gdk_pixbuf_get_height (output_pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (output_pixbuf);
-
- for (y = 0; y < height; y++)
- for (x = 0; x < width; x++)
- {
- guchar *alpha_channel;
- guchar opacity;
-
- alpha_channel = pixels + y * (rowstride / 4) + x + 3;
- opacity = (guchar) (255 * pow ((*alpha_channel / 255.0), 1.0 / GAMMA));
-
- *alpha_channel = opacity;
- }
-
- return output_pixbuf;
-}
-
-static gboolean
-screen_saver_floater_do_draw (ScreenSaver *screen_saver,
- ScreenSaverFloater *floater,
- cairo_t *context)
-{
- gint size;
- CachedSource *source;
-
- size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
- FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
- source = g_hash_table_lookup (screen_saver->cached_sources, GINT_TO_POINTER (size));
-
- if (source == NULL)
- {
- GdkPixbuf *pixbuf;
- GError *error;
-
- pixbuf = NULL;
- error = NULL;
-
- pixbuf = gdk_pixbuf_new_from_file_at_size (screen_saver->filename, size, -1,
- &error);
- if (pixbuf == NULL)
- {
- g_assert (error != NULL);
- g_printerr ("%s", _(error->message));
- g_error_free (error);
- return FALSE;
- }
-
- if (gdk_pixbuf_get_has_alpha (pixbuf))
- gamma_correct (pixbuf);
-
- gdk_cairo_set_source_pixbuf (context, pixbuf, 0.0, 0.0);
-
- source = cached_source_new (cairo_get_source (context),
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf));
- g_object_unref (pixbuf);
- g_hash_table_insert (screen_saver->cached_sources, GINT_TO_POINTER (size),
- source);
- }
-
- cairo_save (context);
-
- if (screen_saver->should_do_rotations && (abs (floater->angle) > G_MINDOUBLE))
- {
- floater->bounds.width = G_SQRT2 * source->width + 2;
- floater->bounds.height = G_SQRT2 * source->height + 2;
- floater->bounds.x = (int) (floater->position.x - .5 * G_SQRT2 * source->width) - 1;
- floater->bounds.y = (int) (floater->position.y - .5 * G_SQRT2 * source->height) - 1;
-
- cairo_translate (context,
- trunc (floater->position.x),
- trunc (floater->position.y));
- cairo_rotate (context, floater->angle);
- cairo_translate (context,
- -trunc (floater->position.x),
- -trunc (floater->position.y));
- }
- else
- {
- floater->bounds.width = source->width + 2;
- floater->bounds.height = source->height + 2;
- floater->bounds.x = (int) (floater->position.x - .5 * source->width) - 1;
- floater->bounds.y = (int) (floater->position.y - .5 * source->height) - 1;
- }
-
- cairo_translate (context,
- trunc (floater->position.x - .5 * source->width),
- trunc (floater->position.y - .5 * source->height));
-
- cairo_set_source (context, source->pattern);
-
- cairo_rectangle (context,
- trunc (.5 * (source->width - floater->bounds.width)),
- trunc (.5 * (source->height - floater->bounds.height)),
- floater->bounds.width, floater->bounds.height);
-
- cairo_clip (context);
- cairo_paint_with_alpha (context, floater->opacity);
- cairo_restore (context);
-
- if (screen_saver->should_show_paths && (floater->path != NULL))
- {
- gdouble dash_pattern[] = { 5.0 };
- gint size;
-
- size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->path_start_scale),
- FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
- cairo_save (context);
- cairo_set_source_rgba (context, 1.0, 1.0, 1.0, .2 * floater->opacity);
- cairo_move_to (context,
- floater->path->start_point.x,
- floater->path->start_point.y);
- cairo_curve_to (context,
- floater->path->start_control_point.x,
- floater->path->start_control_point.y,
- floater->path->end_control_point.x,
- floater->path->end_control_point.y,
- floater->path->end_point.x,
- floater->path->end_point.y);
- cairo_set_line_cap (context, CAIRO_LINE_CAP_ROUND);
- cairo_stroke (context);
- cairo_set_source_rgba (context, 1.0, 0.0, 0.0, .5 * floater->opacity);
- cairo_rectangle (context,
- floater->path->start_point.x - 3,
- floater->path->start_point.y - 3,
- 6, 6);
- cairo_fill (context);
- cairo_set_source_rgba (context, 0.0, 0.5, 0.0, .5 * floater->opacity);
- cairo_arc (context,
- floater->path->start_control_point.x,
- floater->path->start_control_point.y,
- 3, 0.0, 2.0 * G_PI);
- cairo_stroke (context);
- cairo_set_source_rgba (context, 0.5, 0.0, 0.5, .5 * floater->opacity);
- cairo_arc (context,
- floater->path->end_control_point.x,
- floater->path->end_control_point.y,
- 3, 0.0, 2.0 * G_PI);
- cairo_stroke (context);
- cairo_set_source_rgba (context, 0.0, 0.0, 1.0, .5 * floater->opacity);
- cairo_rectangle (context,
- floater->path->end_point.x - 3,
- floater->path->end_point.y - 3,
- 6, 6);
- cairo_fill (context);
-
- cairo_set_dash (context, dash_pattern, G_N_ELEMENTS (dash_pattern), 0);
- cairo_set_source_rgba (context, .5, .5, .5, .2 * floater->scale);
- cairo_move_to (context, floater->path->start_point.x,
- floater->path->start_point.y);
- cairo_line_to (context, floater->path->start_control_point.x,
- floater->path->start_control_point.y);
- cairo_stroke (context);
-
- cairo_move_to (context, floater->path->end_point.x,
- floater->path->end_point.y);
- cairo_line_to (context, floater->path->end_control_point.x,
- floater->path->end_control_point.y);
- cairo_stroke (context);
-
- cairo_restore (context);
- }
-
- return TRUE;
-}
-
-static ScreenSaver *
-screen_saver_new (GtkDrawingArea *drawing_area,
- const gchar *filename,
- gint max_floater_count,
- gboolean should_do_rotations,
- gboolean should_show_paths)
-{
- ScreenSaver *screen_saver;
-
- screen_saver = g_new (ScreenSaver, 1);
- screen_saver->filename = g_strdup (filename);
- screen_saver->drawing_area = GTK_WIDGET (drawing_area);
- screen_saver->cached_sources =
- g_hash_table_new_full (NULL, NULL, NULL,
- (GDestroyNotify) cached_source_free);
-
- g_signal_connect_swapped (G_OBJECT (drawing_area), "size-allocate",
- G_CALLBACK (screen_saver_on_size_allocate),
- screen_saver);
-
- g_signal_connect_swapped (G_OBJECT (drawing_area), "expose-event",
- G_CALLBACK (screen_saver_on_expose_event),
- screen_saver);
-
- screen_saver->first_update_time = 0.0;
- screen_saver->current_calculated_stats_time = 0.0;
- screen_saver->last_calculated_stats_time = 0.0;
- screen_saver->update_count = 0;
- screen_saver->frame_count = 0;
- screen_saver->updates_per_second = 0.0;
- screen_saver->frames_per_second = 0.0;
- screen_saver->floaters = NULL;
- screen_saver->max_floater_count = max_floater_count;
-
- screen_saver->should_show_paths = should_show_paths;
- screen_saver->should_do_rotations = should_do_rotations;
-
- screen_saver_get_initial_state (screen_saver);
-
- screen_saver->state_update_timeout_id =
- g_timeout_add (1000 / (2.0 * OPTIMAL_FRAME_RATE),
- (GSourceFunc) screen_saver_do_update_state, screen_saver);
-
- screen_saver->stats_update_timeout_id =
- g_timeout_add (1000, (GSourceFunc) screen_saver_do_update_stats,
- screen_saver);
-
- return screen_saver;
-}
-
-static void
-screen_saver_free (ScreenSaver *screen_saver)
-{
- if (screen_saver == NULL)
- return;
-
- g_free (screen_saver->filename);
-
- g_hash_table_destroy (screen_saver->cached_sources);
-
- if (screen_saver->state_update_timeout_id != 0)
- g_source_remove (screen_saver->state_update_timeout_id);
-
- if (screen_saver->stats_update_timeout_id != 0)
- g_source_remove (screen_saver->stats_update_timeout_id);
-
- screen_saver_destroy_floaters (screen_saver);
-
- g_free (screen_saver);
-}
-
-static gdouble
-screen_saver_get_timestamp (ScreenSaver *screen_saver)
-{
- const gdouble microseconds_per_second = (gdouble ) G_USEC_PER_SEC;
- gdouble timestamp;
- GTimeVal now = { 0L, /* zero-filled */ };
-
- g_get_current_time (&now);
- timestamp = ((microseconds_per_second * now.tv_sec) + now.tv_usec) /
- microseconds_per_second;
-
- return timestamp;
-}
-
-static void
-screen_saver_create_floaters (ScreenSaver *screen_saver)
-{
- gint i;
-
- for (i = 0; i < screen_saver->max_floater_count; i++)
- {
- ScreenSaverFloater *floater;
- Point position;
- gdouble scale;
-
- position.x = g_random_double_range (screen_saver->canvas_rectangle.top_left_point.x,
- screen_saver->canvas_rectangle.bottom_right_point.x);
- position.y = g_random_double_range (screen_saver->canvas_rectangle.top_left_point.y,
- screen_saver->canvas_rectangle.bottom_right_point.y);
-
- scale = g_random_double ();
-
- floater = screen_saver_floater_new (screen_saver, &position, scale);
-
- screen_saver->floaters = g_list_prepend (screen_saver->floaters,
- floater);
- }
-}
-
-static gdouble
-screen_saver_get_updates_per_second (ScreenSaver *screen_saver)
-{
- return screen_saver->updates_per_second;
-}
-
-static gdouble
-screen_saver_get_frames_per_second (ScreenSaver *screen_saver)
-{
- return screen_saver->frames_per_second;
-}
-
-static gdouble
-screen_saver_get_image_cache_usage (ScreenSaver *screen_saver)
-{
- static const gdouble cache_capacity = (FLOATER_MAX_SIZE - FLOATER_MIN_SIZE + 1);
-
- return g_hash_table_size (screen_saver->cached_sources) / cache_capacity;
-}
-
-static void
-screen_saver_destroy_floaters (ScreenSaver *screen_saver)
-{
- if (screen_saver->floaters == NULL)
- return;
-
- g_list_foreach (screen_saver->floaters, (GFunc) screen_saver_floater_free,
- NULL);
- g_list_free (screen_saver->floaters);
-
- screen_saver->floaters = NULL;
-}
-
-static void
-screen_saver_on_size_allocate (ScreenSaver *screen_saver,
- GtkAllocation *allocation)
-{
- Rectangle canvas_rectangle;
-
- canvas_rectangle.top_left_point.x = allocation->x - .1 * allocation->width;
- canvas_rectangle.top_left_point.y = allocation->y - .1 * allocation->height;
-
- canvas_rectangle.bottom_right_point.x = allocation->x + (1.1 * allocation->width);
- canvas_rectangle.bottom_right_point.y = allocation->y + (1.1 * allocation->height);
-
- screen_saver->canvas_rectangle = canvas_rectangle;
-}
-
-static gint
-compare_floaters (ScreenSaverFloater *a,
- ScreenSaverFloater *b)
-{
- if (a->scale > b->scale)
- return 1;
- else if (abs (a->scale - b->scale) <= G_MINDOUBLE)
- return 0;
- else
- return -1;
-}
-
-static void
-screen_saver_on_expose_event (ScreenSaver *screen_saver,
- GdkEventExpose *event)
-{
- GList *tmp;
- cairo_t *context;
-
- if (screen_saver->floaters == NULL)
- screen_saver_create_floaters (screen_saver);
-
- context = gdk_cairo_create (screen_saver->drawing_area->window);
-
- cairo_rectangle (context,
- (double) event->area.x,
- (double) event->area.y,
- (double) event->area.width,
- (double) event->area.height);
- cairo_clip (context);
-
- screen_saver->floaters = g_list_sort (screen_saver->floaters,
- (GCompareFunc)compare_floaters);
-
- for (tmp = screen_saver->floaters; tmp != NULL; tmp = tmp->next)
- {
- ScreenSaverFloater *floater;
- GdkRectangle rect;
- gint size;
-
- floater = (ScreenSaverFloater *) tmp->data;
-
- size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
- FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
- rect.x = (int) (floater->position.x - .5 * G_SQRT2 * size);
- rect.y = (int) (floater->position.y - .5 * G_SQRT2 * size);
- rect.width = G_SQRT2 * size;
- rect.height = G_SQRT2 * size;
-
- if (!gdk_region_rect_in (event->region, &rect))
- continue;
-
- if (!screen_saver_floater_do_draw (screen_saver, floater, context))
- {
- gtk_main_quit ();
- break;
- }
- }
-
- cairo_destroy (context);
-
- screen_saver->draw_ops_pending = TRUE;
- screen_saver->frame_count++;
-}
-
-static void
-screen_saver_update_state (ScreenSaver *screen_saver,
- gdouble time)
-{
- GList *tmp;
-
- tmp = screen_saver->floaters;
- while (tmp != NULL)
- {
- ScreenSaverFloater *floater;
- floater = (ScreenSaverFloater *) tmp->data;
-
- screen_saver_floater_update_state (screen_saver, floater, time);
-
- if (GTK_WIDGET_REALIZED (screen_saver->drawing_area)
- && (floater->bounds.width > 0) && (floater->bounds.height > 0))
- {
- gint size;
- size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
- FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
- gtk_widget_queue_draw_area (screen_saver->drawing_area,
- floater->bounds.x,
- floater->bounds.y,
- floater->bounds.width,
- floater->bounds.height);
-
- /* the edges could concievably be spread across two
- * pixels so we add +2 to invalidated region
- */
- if (screen_saver->should_do_rotations)
- gtk_widget_queue_draw_area (screen_saver->drawing_area,
- (int) (floater->position.x -
- .5 * G_SQRT2 * size),
- (int) (floater->position.y -
- .5 * G_SQRT2 * size),
- G_SQRT2 * size + 2,
- G_SQRT2 * size + 2);
- else
- gtk_widget_queue_draw_area (screen_saver->drawing_area,
- (int) (floater->position.x -
- .5 * size),
- (int) (floater->position.y -
- .5 * size),
- size + 2, size + 2);
-
- if (screen_saver->should_show_paths)
- gtk_widget_queue_draw (screen_saver->drawing_area);
- }
-
- tmp = tmp->next;
- }
-}
-
-static void
-screen_saver_get_initial_state (ScreenSaver *screen_saver)
-{
- screen_saver->first_update_time = screen_saver_get_timestamp (screen_saver);
- screen_saver_update_state (screen_saver, 0.0);
-}
-
-static gboolean
-screen_saver_do_update_state (ScreenSaver *screen_saver)
-{
- gdouble current_update_time;
-
- /* flush pending requests to the X server and block for
- * replies before proceeding to help prevent the X server from
- * getting overrun with requests
- */
- if (screen_saver->draw_ops_pending)
- {
- gdk_flush ();
- screen_saver->draw_ops_pending = FALSE;
- }
-
- current_update_time = screen_saver_get_timestamp (screen_saver);
- screen_saver_update_state (screen_saver, current_update_time -
- screen_saver->first_update_time);
- screen_saver->update_count++;
- return TRUE;
-}
-
-static gboolean
-screen_saver_do_update_stats (ScreenSaver *screen_saver)
-{
- gdouble last_calculated_stats_time, seconds_since_last_stats_update;
-
- last_calculated_stats_time = screen_saver->current_calculated_stats_time;
- screen_saver->current_calculated_stats_time =
- screen_saver_get_timestamp (screen_saver);
- screen_saver->last_calculated_stats_time = last_calculated_stats_time;
-
- if (abs (last_calculated_stats_time) <= G_MINDOUBLE)
- return TRUE;
-
- seconds_since_last_stats_update =
- screen_saver->current_calculated_stats_time - last_calculated_stats_time;
-
- screen_saver->updates_per_second =
- screen_saver->update_count / seconds_since_last_stats_update;
- screen_saver->frames_per_second =
- screen_saver->frame_count / seconds_since_last_stats_update;
-
- screen_saver->update_count = 0;
- screen_saver->frame_count = 0;
-
- return TRUE;
-}
-
-static gboolean
-do_print_screen_saver_stats (ScreenSaver *screen_saver)
-{
-
- g_print ("updates per second: %.2f, frames per second: %.2f, "
- "image cache %.0f%% full\n",
- screen_saver_get_updates_per_second (screen_saver),
- screen_saver_get_frames_per_second (screen_saver),
- screen_saver_get_image_cache_usage (screen_saver) * 100.0);
-
- return TRUE;
-}
-
-int
-main (int argc,
- char *argv[])
-{
- ScreenSaver *screen_saver;
- GtkWidget *window;
- GtkWidget *drawing_area;
-
- GtkStateType state;
-
- GError *error;
-
- error = NULL;
-
- bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- gtk_init_with_args (&argc, &argv,
- /* translators: the word "image" here
- * represents a command line argument
- */
- _("image - floats images around the screen"),
- options, GETTEXT_PACKAGE, &error);
-
-
- if (error != NULL)
- {
- g_printerr (_("%s. See --help for usage information.\n"),
- _(error->message));
- g_error_free (error);
- return EX_SOFTWARE;
- }
-
- if ((filenames == NULL) || (filenames[0] == NULL) ||
- (filenames[1] != NULL))
- {
- g_printerr (_("You must specify one image. See --help for usage "
- "information.\n"));
- return EX_USAGE;
- }
-
- window = gs_theme_window_new ();
-
- g_signal_connect (G_OBJECT (window), "delete-event",
- G_CALLBACK (gtk_main_quit), NULL);
-
- drawing_area = gtk_drawing_area_new ();
-
- state = (GtkStateType) 0;
- while (state < (GtkStateType) G_N_ELEMENTS (drawing_area->style->bg))
- {
- gtk_widget_modify_bg (drawing_area, state, &drawing_area->style->mid[state]);
- state++;
- }
-
- gtk_widget_show (drawing_area);
- gtk_container_add (GTK_CONTAINER (window), drawing_area);
-
- screen_saver = screen_saver_new (GTK_DRAWING_AREA (drawing_area),
- filenames[0], max_floater_count,
- should_do_rotations, should_show_paths);
- g_strfreev (filenames);
-
- if (should_print_stats)
- g_timeout_add (STAT_PRINT_FREQUENCY,
- (GSourceFunc) do_print_screen_saver_stats,
- screen_saver);
-
- if ((geometry == NULL)
- || !gtk_window_parse_geometry (GTK_WINDOW (window), geometry))
- gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-
- gtk_widget_show (window);
-
- gtk_main ();
-
- screen_saver_free (screen_saver);
-
- return EX_OK;
-}
diff --git a/savers/gs-theme-engine.c.orig b/savers/gs-theme-engine.c.orig
deleted file mode 100644
index 9724e5b..0000000
--- a/savers/gs-theme-engine.c.orig
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gs-theme-engine-marshal.h"
-
-static void gs_theme_engine_class_init (GSThemeEngineClass *klass);
-static void gs_theme_engine_init (GSThemeEngine *engine);
-static void gs_theme_engine_finalize (GObject *object);
-
-struct GSThemeEnginePrivate
-{
- gpointer reserved;
-};
-
-#define GS_THEME_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_THEME_ENGINE, GSThemeEnginePrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_ABSTRACT_TYPE (GSThemeEngine, gs_theme_engine, GTK_TYPE_DRAWING_AREA)
-
-void
-_gs_theme_engine_profile_log (const char *func,
- const char *note,
- const char *format,
- ...)
-{
- va_list args;
- char *str;
- char *formatted;
-
- va_start (args, format);
- formatted = g_strdup_vprintf (format, args);
- va_end (args);
-
- if (func != NULL) {
- str = g_strdup_printf ("MARK: %s %s: %s %s", g_get_prgname(), func, note ? note : "", formatted);
- } else {
- str = g_strdup_printf ("MARK: %s: %s %s", g_get_prgname(), note ? note : "", formatted);
- }
-
- g_free (formatted);
-
- access (str, F_OK);
- g_free (str);
-}
-
-static void
-gs_theme_engine_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GSThemeEngine *self;
-
- self = GS_THEME_ENGINE (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gs_theme_engine_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GSThemeEngine *self;
-
- self = GS_THEME_ENGINE (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gs_theme_engine_clear (GtkWidget *widget)
-{
- GdkColor color = { 0, 0x0000, 0x0000, 0x0000 };
- GdkColormap *colormap;
- GtkStateType state;
-
- g_return_if_fail (GS_IS_THEME_ENGINE (widget));
-
- if (! GTK_WIDGET_VISIBLE (widget)) {
- return;
- }
-
- state = (GtkStateType) 0;
- while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg)) {
- gtk_widget_modify_bg (widget, state, &color);
- state++;
- }
-
- colormap = gdk_drawable_get_colormap (widget->window);
- gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE);
- gdk_window_set_background (widget->window, &color);
- gdk_window_clear (widget->window);
- gdk_flush ();
-}
-
-static gboolean
-gs_theme_engine_real_map_event (GtkWidget *widget,
- GdkEventAny *event)
-{
- gboolean handled = FALSE;
-
- gs_theme_engine_clear (widget);
-
- return handled;
-}
-
-static void
-gs_theme_engine_class_init (GSThemeEngineClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gs_theme_engine_finalize;
- object_class->get_property = gs_theme_engine_get_property;
- object_class->set_property = gs_theme_engine_set_property;
-
- widget_class->map_event = gs_theme_engine_real_map_event;
-
- g_type_class_add_private (klass, sizeof (GSThemeEnginePrivate));
-}
-
-static void
-gs_theme_engine_init (GSThemeEngine *engine)
-{
- engine->priv = GS_THEME_ENGINE_GET_PRIVATE (engine);
-}
-
-static void
-gs_theme_engine_finalize (GObject *object)
-{
- GSThemeEngine *engine;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GS_IS_THEME_ENGINE (object));
-
- engine = GS_THEME_ENGINE (object);
-
- g_return_if_fail (engine->priv != NULL);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-void
-gs_theme_engine_get_window_size (GSThemeEngine *engine,
- int *width,
- int *height)
-{
- if (width != NULL) {
- *width = 0;
- }
- if (height != NULL) {
- *height = 0;
- }
-
- g_return_if_fail (GS_IS_THEME_ENGINE (engine));
-
- if (! GTK_WIDGET_VISIBLE (GTK_WIDGET (engine))) {
- return;
- }
-
- gdk_window_get_geometry (GTK_WIDGET (engine)->window,
- NULL,
- NULL,
- width,
- height,
- NULL);
-}
-
-GdkWindow *
-gs_theme_engine_get_window (GSThemeEngine *engine)
-{
- g_return_val_if_fail (GS_IS_THEME_ENGINE (engine), NULL);
-
- return GTK_WIDGET (engine)->window;
-}
diff --git a/savers/gs-theme-engine.h.orig b/savers/gs-theme-engine.h.orig
deleted file mode 100644
index 5c6fd30..0000000
--- a/savers/gs-theme-engine.h.orig
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Authors: William Jon McCann <[email protected]>
- *
- */
-
-#ifndef __GS_THEME_ENGINE_H
-#define __GS_THEME_ENGINE_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_THEME_ENGINE (gs_theme_engine_get_type ())
-#define GS_THEME_ENGINE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_THEME_ENGINE, GSThemeEngine))
-#define GS_THEME_ENGINE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_THEME_ENGINE, GSThemeEngineClass))
-#define GS_IS_THEME_ENGINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_THEME_ENGINE))
-#define GS_IS_THEME_ENGINE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_THEME_ENGINE))
-#define GS_THEME_ENGINE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_THEME_ENGINE, GSThemeEngineClass))
-
-typedef struct GSThemeEnginePrivate GSThemeEnginePrivate;
-
-typedef struct
-{
- GtkDrawingArea parent;
- GSThemeEnginePrivate *priv;
-} GSThemeEngine;
-
-typedef struct
-{
- GtkDrawingAreaClass parent_class;
-
- /* for signals later if needed */
- gpointer reserved_1;
- gpointer reserved_2;
- gpointer reserved_3;
- gpointer reserved_4;
-} GSThemeEngineClass;
-
-GType gs_theme_engine_get_type (void);
-
-void gs_theme_engine_get_window_size (GSThemeEngine *engine,
- int *width,
- int *height);
-GdkWindow *gs_theme_engine_get_window (GSThemeEngine *engine);
-
-#define ENABLE_PROFILING 1
-#ifdef ENABLE_PROFILING
-#ifdef G_HAVE_ISO_VARARGS
-#define gs_theme_engine_profile_start(...) _gs_theme_engine_profile_log (G_STRFUNC, "start", __VA_ARGS__)
-#define gs_theme_engine_profile_end(...) _gs_theme_engine_profile_log (G_STRFUNC, "end", __VA_ARGS__)
-#define gs_theme_engine_profile_msg(...) _gs_theme_engine_profile_log (NULL, NULL, __VA_ARGS__)
-#elif defined(G_HAVE_GNUC_VARARGS)
-#define gs_theme_engine_profile_start(format...) _gs_theme_engine_profile_log (G_STRFUNC, "start", format)
-#define gs_theme_engine_profile_end(format...) _gs_theme_engine_profile_log (G_STRFUNC, "end", format)
-#define gs_theme_engine_profile_msg(format...) _gs_theme_engine_profile_log (NULL, NULL, format)
-#endif
-#else
-#define gs_theme_engine_profile_start(...)
-#define gs_theme_engine_profile_end(...)
-#define gs_theme_engine_profile_msg(...)
-#endif
-
-void _gs_theme_engine_profile_log (const char *func,
- const char *note,
- const char *format,
- ...) G_GNUC_PRINTF (3, 4);
-
-G_END_DECLS
-
-#endif /* __GS_THEME_ENGINE_H */
diff --git a/savers/gs-theme-window.c.orig b/savers/gs-theme-window.c.orig
deleted file mode 100644
index 805387c..0000000
--- a/savers/gs-theme-window.c.orig
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * gs-theme-window.c - special toplevel for screensavers
- *
- * Copyright (C) 2005 Ray Strode <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Originally written by: Ray Strode <[email protected]>
- */
-
-#include "config.h"
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-
-static void gs_theme_window_finalize (GObject *object);
-static void gs_theme_window_real_realize (GtkWidget *widget);
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_TYPE (GSThemeWindow, gs_theme_window, GTK_TYPE_WINDOW)
-
-#define MIN_SIZE 10
-
-static void
-gs_theme_window_class_init (GSThemeWindowClass *klass)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = G_OBJECT_CLASS (klass);
- widget_class = GTK_WIDGET_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gs_theme_window_finalize;
-
- widget_class->realize = gs_theme_window_real_realize;
-}
-
-static void
-force_no_pixmap_background (GtkWidget *widget)
-{
- static gboolean first_time = TRUE;
-
- if (first_time) {
- gtk_rc_parse_string ("\n"
- " style \"gs-theme-engine-style\"\n"
- " {\n"
- " bg_pixmap[NORMAL] = \"<none>\"\n"
- " bg_pixmap[ACTIVE] = \"<none>\"\n"
- " bg_pixmap[PRELIGHT] = \"<none>\"\n"
- " bg_pixmap[SELECTED] = \"<none>\"\n"
- " bg_pixmap[INSENSITIVE] = \"<none>\"\n"
- " bg[NORMAL] = \"#000000\"\n"
- " bg[ACTIVE] = \"#000000\"\n"
- " bg[PRELIGHT] = \"#000000\"\n"
- " bg[SELECTED] = \"#000000\"\n"
- " bg[INSENSITIVE] = \"#000000\"\n"
- " }\n"
- " widget \"gs-window*\" style : highest \"gs-theme-engine-style\"\n"
- "\n");
- first_time = FALSE;
- }
-
- gtk_widget_set_name (widget, "gs-window");
-}
-
-static void
-gs_theme_window_init (GSThemeWindow *window)
-{
- force_no_pixmap_background (GTK_WIDGET (window));
-}
-
-static void
-gs_theme_window_finalize (GObject *object)
-{
- GSThemeWindow *window;
- GObjectClass *parent_class;
-
- window = GS_THEME_WINDOW (object);
-
- parent_class = G_OBJECT_CLASS (gs_theme_window_parent_class);
-
- if (parent_class->finalize != NULL)
- parent_class->finalize (object);
-}
-
-static void
-gs_theme_window_real_realize (GtkWidget *widget)
-{
- GdkWindow *window;
- Window remote_xwindow;
- GtkRequisition requisition;
- GtkAllocation allocation;
- const char *preview_xid;
- int x;
- int y;
- int width;
- int height;
- int event_mask;
-
- event_mask = 0;
- window = NULL;
- preview_xid = g_getenv ("XSCREENSAVER_WINDOW");
-
- if (preview_xid != NULL) {
- char *end;
-
- remote_xwindow = (Window) strtoul (preview_xid, &end, 0);
-
- if ((remote_xwindow != 0) && (end != NULL) &&
- ((*end == ' ') || (*end == '\0')) &&
- ((remote_xwindow < G_MAXULONG) || (errno != ERANGE))) {
- window = gdk_window_foreign_new (remote_xwindow);
-
- if (window != NULL) {
- /* This is a kludge; we need to set the same
- * flags gs-window-x11.c does, to ensure they
- * don't get unset by gtk_window_map() later.
- */
- gtk_window_set_decorated (GTK_WINDOW (widget), FALSE);
-
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (widget), TRUE);
- gtk_window_set_skip_pager_hint (GTK_WINDOW (widget), TRUE);
-
- gtk_window_set_keep_above (GTK_WINDOW (widget), TRUE);
-
- gtk_window_fullscreen (GTK_WINDOW (widget));
-
- event_mask = GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK;
- gtk_widget_set_events (widget, gtk_widget_get_events (widget) | event_mask);
- }
- }
- }
-
- if (window == NULL) {
- GtkWidgetClass *parent_class;
-
- parent_class = GTK_WIDGET_CLASS (gs_theme_window_parent_class);
-
- if (parent_class->realize != NULL)
- parent_class->realize (widget);
-
- return;
- }
-
- gtk_style_set_background (widget->style,
- window,
- GTK_STATE_NORMAL);
- gdk_window_set_decorations (window, (GdkWMDecoration) 0);
- gdk_window_set_events (window, gdk_window_get_events (window) | event_mask);
-
- widget->window = window;
- gdk_window_set_user_data (window, widget);
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
- gdk_window_get_geometry (window, &x, &y, &width, &height, NULL);
-
- if (width < MIN_SIZE || height < MIN_SIZE) {
- g_critical ("This window is way too small to use");
- exit (1);
- }
-
- gtk_widget_size_request (widget, &requisition);
- allocation.x = x;
- allocation.y = y;
- allocation.width = width;
- allocation.height = height;
- gtk_widget_size_allocate (widget, &allocation);
- gtk_window_resize (GTK_WINDOW (widget), width, height);
-}
-
-GtkWidget *
-gs_theme_window_new (void)
-{
- GSThemeWindow *window;
-
- window = g_object_new (GS_TYPE_THEME_WINDOW,
- "type", GTK_WINDOW_TOPLEVEL,
- NULL);
-
- return GTK_WIDGET (window);
-}
diff --git a/savers/gs-theme-window.h.orig b/savers/gs-theme-window.h.orig
deleted file mode 100644
index cfc5edf..0000000
--- a/savers/gs-theme-window.h.orig
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * gs-theme-window.h - special toplevel for screensavers
- *
- * Copyright (C) 2005 Ray Strode <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Originally written by: Ray Strode <[email protected]>
- */
-
-#ifndef GS_THEME_WINDOW_H
-#define GS_THEME_WINDOW_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_THEME_WINDOW (gs_theme_window_get_type ())
-#define GS_THEME_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GS_TYPE_THEME_WINDOW, GSThemeWindow))
-#define GS_THEME_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GS_TYPE_THEME_WINDOW, GSThemeWindowClass))
-#define GS_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GS_TYPE_THEME_WINDOW))
-#define GS_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GS_TYPE_THEME_WINDOW))
-#define GS_THEME_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GS_TYPE_THEME_WINDOW, GSThemeWindowClass))
-
-typedef struct _GSThemeWindow GSThemeWindow;
-typedef struct _GSThemeWindowClass GSThemeWindowClass;
-
-struct _GSThemeWindow
-{
- GtkWindow parent;
-
- /*< private >*/
- /* reserved for priv pointer */
- gpointer reserved;
-};
-
-struct _GSThemeWindowClass
-{
- GtkWindowClass parent_class;
-
- /* for signals later if needed */
- gpointer reserved_1;
- gpointer reserved_2;
- gpointer reserved_3;
- gpointer reserved_4;
-};
-
-#ifndef GS_HIDE_FUNCTION_DECLARATIONS
-GType gs_theme_window_get_type (void);
-GtkWidget *gs_theme_window_new (void);
-#endif
-
-G_END_DECLS
-#endif /* GS_THEME_WINDOW_H */
diff --git a/savers/gste-popsquares.c.orig b/savers/gste-popsquares.c.orig
deleted file mode 100644
index cda78c7..0000000
--- a/savers/gste-popsquares.c.orig
+++ /dev/null
@@ -1,563 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gste-popsquares.h"
-
-static void gste_popsquares_class_init (GSTEPopsquaresClass *klass);
-static void gste_popsquares_init (GSTEPopsquares *engine);
-static void gste_popsquares_finalize (GObject *object);
-
-typedef struct _square {
- int x, y, w, h;
- int color;
-} square;
-
-struct GSTEPopsquaresPrivate
-{
- guint timeout_id;
-
- int ncolors;
- int subdivision;
-
- GdkGC *gc;
- GdkColor *colors;
- square *squares;
-
-};
-
-#define GSTE_POPSQUARES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquaresPrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_TYPE (GSTEPopsquares, gste_popsquares, GS_TYPE_THEME_ENGINE)
-
-static void
-hsv_to_rgb (int h,
- double s,
- double v,
- unsigned short *r,
- unsigned short *g,
- unsigned short *b)
-{
- double H, S, V, R, G, B;
- double p1, p2, p3;
- double f;
- int i;
-
- if (s < 0) {
- s = 0;
- }
- if (v < 0) {
- v = 0;
- }
- if (s > 1) {
- s = 1;
- }
- if (v > 1) {
- v = 1;
- }
-
- S = s; V = v;
- H = (h % 360) / 60.0;
- i = H;
- f = H - i;
- p1 = V * (1 - S);
- p2 = V * (1 - (S * f));
- p3 = V * (1 - (S * (1 - f)));
-
- if (i == 0) {
- R = V;
- G = p3;
- B = p1;
- } else if (i == 1) {
- R = p2;
- G = V;
- B = p1;
- } else if (i == 2) {
- R = p1;
- G = V;
- B = p3;
- } else if (i == 3) {
- R = p1;
- G = p2;
- B = V;
- } else if (i == 4) {
- R = p3;
- G = p1;
- B = V;
- } else {
- R = V;
- G = p1;
- B = p2;
- }
-
- *r = R * 65535;
- *g = G * 65535;
- *b = B * 65535;
-}
-
-static void
-rgb_to_hsv (unsigned short r,
- unsigned short g,
- unsigned short b,
- int *h,
- double *s,
- double *v)
-{
- double R, G, B, H, S, V;
- double cmax, cmin;
- double cmm;
- int imax;
-
- R = ((double) r) / 65535.0;
- G = ((double) g) / 65535.0;
- B = ((double) b) / 65535.0;
- cmax = R;
- cmin = G;
- imax = 1;
-
- if (cmax < G) {
- cmax = G; cmin = R; imax = 2;
- }
- if (cmax < B) {
- cmax = B; imax = 3;
- }
- if (cmin > B) {
- cmin = B;
- }
-
- cmm = cmax - cmin;
- V = cmax;
-
- if (cmm == 0) {
- S = H = 0;
- } else {
- S = cmm / cmax;
- if (imax == 1) {
- H = (G - B) / cmm;
- } else if (imax == 2) {
- H = 2.0 + (B - R) / cmm;
- } else {
- /*if (imax == 3)*/
- H = 4.0 + (R - G) / cmm;
- }
-
- if (H < 0) {
- H += 6.0;
- }
- }
-
- *h = (H * 60.0);
- *s = S;
- *v = V;
-}
-
-static void
-make_color_ramp (GdkColormap *colormap,
- int h1,
- double s1,
- double v1,
- int h2,
- double s2,
- double v2,
- GdkColor *colors,
- int n_colors,
- gboolean closed,
- gboolean allocate,
- gboolean writable)
-{
- double dh, ds, dv; /* deltas */
- int i;
- int ncolors, wanted;
- int total_ncolors = n_colors;
-
- wanted = total_ncolors;
- if (closed) {
- wanted = (wanted / 2) + 1;
- }
-
- ncolors = total_ncolors;
-
- memset (colors, 0, n_colors * sizeof (*colors));
-
- if (closed) {
- ncolors = (ncolors / 2) + 1;
- }
-
- /* Note: unlike other routines in this module, this function assumes that
- if h1 and h2 are more than 180 degrees apart, then the desired direction
- is always from h1 to h2 (rather than the shorter path.) make_uniform
- depends on this.
- */
- dh = ((double)h2 - (double)h1) / ncolors;
- ds = (s2 - s1) / ncolors;
- dv = (v2 - v1) / ncolors;
-
- for (i = 0; i < ncolors; i++) {
- hsv_to_rgb ((int) (h1 + (i * dh)),
- (s1 + (i * ds)),
- (v1 + (i * dv)),
- &colors [i].red,
- &colors [i].green,
- &colors [i].blue);
- if (allocate) {
- gdk_colormap_alloc_color (colormap,
- &colors [i],
- writable,
- TRUE);
- }
- }
-
- if (closed) {
- for (i = ncolors; i < n_colors; i++) {
- colors [i] = colors [n_colors - i];
- }
- }
-
-}
-
-static void
-randomize_square_colors (square *squares,
- int nsquares,
- int ncolors)
-{
- int i;
- square *s;
-
- s = squares;
-
- for (i = 0; i < nsquares; i++) {
- s[i].color = g_random_int_range (0, ncolors);
- }
-}
-
-static void
-set_colors (GdkWindow *window,
- GdkColor *fg,
- GdkColor *bg)
-{
- GtkWidget *widget;
- GdkColor color;
-
- widget = gtk_invisible_new ();
-
- color = widget->style->dark [GTK_STATE_SELECTED];
- fg->red = color.red;
- fg->green = color.green;
- fg->blue = color.blue;
- color = widget->style->bg [GTK_STATE_SELECTED];
- bg->red = color.red;
- bg->green = color.green;
- bg->blue = color.blue;
-}
-
-static void
-gste_popsquares_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GSTEPopsquares *self;
-
- self = GSTE_POPSQUARES (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gste_popsquares_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GSTEPopsquares *self;
-
- self = GSTE_POPSQUARES (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-setup_squares (GSTEPopsquares *pop)
-{
- int window_width;
- int window_height;
- int nsquares;
- int x, y;
- int sw, sh, gw, gh;
- GdkWindow *window;
-
- window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
- if (window == NULL) {
- return;
- }
-
- gs_theme_engine_get_window_size (GS_THEME_ENGINE (pop), &window_width, &window_height);
-
- sw = window_width / pop->priv->subdivision;
- sh = window_height / pop->priv->subdivision;
-
- gw = pop->priv->subdivision;
- gh = pop->priv->subdivision;
- nsquares = gw * gh;
-
- if (pop->priv->squares) {
- g_free (pop->priv->squares);
- }
- pop->priv->squares = g_new0 (square, nsquares);
-
- for (y = 0; y < gh; y++) {
- for (x = 0; x < gw; x++) {
- square *s = (square *) &pop->priv->squares [gw * y + x];
- s->w = sw;
- s->h = sh;
- s->x = x * sw;
- s->y = y * sh;
- }
- }
-}
-
-static void
-setup_colors (GSTEPopsquares *pop)
-{
- double s1, v1, s2, v2 = 0;
- int h1, h2 = 0;
- int nsquares;
- GdkColor fg;
- GdkColor bg;
- GdkWindow *window;
-
- window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
- if (window == NULL) {
- return;
- }
-
- set_colors (window, &fg, &bg);
-
- if (pop->priv->gc) {
- g_object_unref (pop->priv->gc);
- }
- pop->priv->gc = gdk_gc_new (window);
-
- if (pop->priv->colors) {
- g_free (pop->priv->colors);
- }
- pop->priv->colors = g_new0 (GdkColor, pop->priv->ncolors);
-
- rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1);
- rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2);
-
- make_color_ramp (gtk_widget_get_colormap (GTK_WIDGET (pop)),
- h1, s1, v1,
- h2, s2, v2,
- pop->priv->colors,
- pop->priv->ncolors,
- TRUE,
- TRUE,
- FALSE);
-
- nsquares = pop->priv->subdivision * pop->priv->subdivision;
-
- randomize_square_colors (pop->priv->squares, nsquares, pop->priv->ncolors);
-}
-
-static void
-gste_popsquares_real_show (GtkWidget *widget)
-{
- GSTEPopsquares *pop = GSTE_POPSQUARES (widget);
-
- /* start */
- setup_squares (pop);
- setup_colors (pop);
-
- if (GTK_WIDGET_CLASS (parent_class)->show) {
- GTK_WIDGET_CLASS (parent_class)->show (widget);
- }
-}
-
-static gboolean
-gste_popsquares_real_expose (GtkWidget *widget,
- GdkEventExpose *event)
-{
- gboolean handled = FALSE;
-
- /* draw */
-
- /* FIXME: should double buffer? */
-
- if (GTK_WIDGET_CLASS (parent_class)->expose_event) {
- handled = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
- }
-
- return handled;
-}
-
-static gboolean
-gste_popsquares_real_configure (GtkWidget *widget,
- GdkEventConfigure *event)
-{
- GSTEPopsquares *pop = GSTE_POPSQUARES (widget);
- gboolean handled = FALSE;
-
- /* resize */
-
- /* just reset everything */
- setup_squares (pop);
- setup_colors (pop);
-
- /* schedule a redraw */
- gtk_widget_queue_draw (widget);
-
- if (GTK_WIDGET_CLASS (parent_class)->configure_event) {
- handled = GTK_WIDGET_CLASS (parent_class)->configure_event (widget, event);
- }
-
- return handled;
-}
-
-static void
-gste_popsquares_class_init (GSTEPopsquaresClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gste_popsquares_finalize;
- object_class->get_property = gste_popsquares_get_property;
- object_class->set_property = gste_popsquares_set_property;
-
- widget_class->show = gste_popsquares_real_show;
- widget_class->expose_event = gste_popsquares_real_expose;
- widget_class->configure_event = gste_popsquares_real_configure;
-
- g_type_class_add_private (klass, sizeof (GSTEPopsquaresPrivate));
-}
-
-static gboolean
-draw_iter (GSTEPopsquares *pop)
-{
- int border = 1;
- gboolean twitch = FALSE;
- int x, y;
- int sw, sh, gw, gh;
- int nsquares;
- int window_width;
- int window_height;
- GdkWindow *window;
-
- window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
- if (window == NULL) {
- return TRUE;
- }
-
- gs_theme_engine_get_window_size (GS_THEME_ENGINE (pop),
- &window_width,
- &window_height);
- sw = window_width / pop->priv->subdivision;
- sh = window_height / pop->priv->subdivision;
-
- gw = pop->priv->subdivision;
- gh = pop->priv->subdivision;
- nsquares = gw * gh;
-
- for (y = 0; y < gh; y++) {
- for (x = 0; x < gw; x++) {
- square *s = (square *) &pop->priv->squares [gw * y + x];
-
- gdk_gc_set_foreground (pop->priv->gc, &(pop->priv->colors [s->color]));
- gdk_draw_rectangle (window, pop->priv->gc, TRUE, s->x, s->y,
- border ? s->w - border : s->w,
- border ? s->h - border : s->h);
- s->color++;
-
- if (s->color == pop->priv->ncolors) {
- if (twitch && ((g_random_int_range (0, 4)) == 0)) {
- randomize_square_colors (pop->priv->squares, nsquares, pop->priv->ncolors);
- } else {
- s->color = g_random_int_range (0, pop->priv->ncolors);
- }
- }
- }
- }
-
- return TRUE;
-}
-
-static void
-gste_popsquares_init (GSTEPopsquares *pop)
-{
- int delay;
-
- pop->priv = GSTE_POPSQUARES_GET_PRIVATE (pop);
-
- pop->priv->ncolors = 128;
- pop->priv->subdivision = 5;
-
- delay = 25;
- pop->priv->timeout_id = g_timeout_add (delay, (GSourceFunc)draw_iter, pop);
-}
-
-static void
-gste_popsquares_finalize (GObject *object)
-{
- GSTEPopsquares *pop;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GSTE_IS_POPSQUARES (object));
-
- pop = GSTE_POPSQUARES (object);
-
- g_return_if_fail (pop->priv != NULL);
-
- if (pop->priv->timeout_id > 0) {
- g_source_remove (pop->priv->timeout_id);
- pop->priv->timeout_id = 0;
- }
-
- g_free (pop->priv->squares);
- g_free (pop->priv->colors);
- g_object_unref (pop->priv->gc);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
diff --git a/savers/gste-popsquares.h.orig b/savers/gste-popsquares.h.orig
deleted file mode 100644
index 4139652..0000000
--- a/savers/gste-popsquares.h.orig
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Authors: William Jon McCann <[email protected]>
- *
- */
-
-#ifndef __GSTE_POPSQUARES_H
-#define __GSTE_POPSQUARES_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include "gs-theme-engine.h"
-
-G_BEGIN_DECLS
-
-#define GSTE_TYPE_POPSQUARES (gste_popsquares_get_type ())
-#define GSTE_POPSQUARES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquares))
-#define GSTE_POPSQUARES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSTE_TYPE_POPSQUARES, GSTEPopsquaresClass))
-#define GSTE_IS_POPSQUARES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSTE_TYPE_POPSQUARES))
-#define GSTE_IS_POPSQUARES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSTE_TYPE_POPSQUARES))
-#define GSTE_POPSQUARES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquaresClass))
-
-typedef struct GSTEPopsquaresPrivate GSTEPopsquaresPrivate;
-
-typedef struct
-{
- GSThemeEngine parent;
- GSTEPopsquaresPrivate *priv;
-} GSTEPopsquares;
-
-typedef struct
-{
- GSThemeEngineClass parent_class;
-} GSTEPopsquaresClass;
-
-GType gste_popsquares_get_type (void);
-GSThemeEngine *gste_popsquares_new (void);
-
-G_END_DECLS
-
-#endif /* __GSTE_POPSQUARES_H */
diff --git a/savers/gste-slideshow.c.orig b/savers/gste-slideshow.c.orig
deleted file mode 100644
index 8ea83bd..0000000
--- a/savers/gste-slideshow.c.orig
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005-2006 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gste-slideshow.h"
-
-static void gste_slideshow_class_init (GSTESlideshowClass *klass);
-static void gste_slideshow_init (GSTESlideshow *engine);
-static void gste_slideshow_finalize (GObject *object);
-
-struct GSTESlideshowPrivate
-{
- /* Image at full opacity */
- cairo_pattern_t *pat1;
- /* Image at partial opacity */
- cairo_pattern_t *pat2;
- /* Alpha of pat2 */
- gdouble alpha2;
- /* edges of pat2 */
- int pat2top;
- int pat2bottom;
- int pat2left;
- int pat2right;
-
- /* backbuffer that we do all the alpha drawing into (no round
- * trips to the X server when the server doesn't support drawing
- * pixmaps with alpha?) */
- cairo_surface_t *surf;
-
- gint64 fade_ticks;
-
- GThread *load_thread;
- GAsyncQueue *op_q;
- GAsyncQueue *results_q;
-
- guint results_pull_id;
- guint update_image_id;
-
- GSList *filename_list;
- char *images_location;
- gboolean sort_images;
- int window_width;
- int window_height;
- PangoColor *background_color;
- gboolean no_stretch_hint;
-
- guint timeout_id;
-
- GTimer *timer;
- gboolean fade_disabled;
-};
-
-enum {
- PROP_0,
- PROP_IMAGES_LOCATION,
- PROP_SORT_IMAGES,
- PROP_SOLID_BACKGROUND,
- PROP_NO_STRETCH_HINT
-};
-
-#define GSTE_SLIDESHOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshowPrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_TYPE (GSTESlideshow, gste_slideshow, GS_TYPE_THEME_ENGINE)
-
-#define N_FADE_TICKS 10
-#define MINIMUM_FPS 3.0
-#define DEFAULT_IMAGES_LOCATION DATADIR "/pixmaps/backgrounds"
-#define IMAGE_LOAD_TIMEOUT 10000
-
-typedef struct _Op
-{
- char *location;
- GSTESlideshow *slideshow;
-} Op;
-
-typedef struct _OpResult
-{
- GdkPixbuf *pixbuf;
-} OpResult;
-
-static gboolean
-push_load_image_func (GSTESlideshow *show)
-{
- Op *op;
-
- gs_theme_engine_profile_msg ("Starting a new image load");
-
- op = g_new (Op, 1);
-
- op->location = g_strdup (show->priv->images_location);
- op->slideshow = g_object_ref (show);
-
- g_async_queue_push (show->priv->op_q, op);
-
- show->priv->update_image_id = 0;
-
- return FALSE;
-}
-
-static void
-start_new_load (GSTESlideshow *show,
- guint timeout)
-{
- gs_theme_engine_profile_msg ("Scheduling a new image load");
-
- /* queue a new load */
- if (show->priv->update_image_id <= 0) {
- show->priv->update_image_id = g_timeout_add_full (G_PRIORITY_LOW, timeout,
- (GSourceFunc)push_load_image_func,
- show, NULL);
- }
-}
-
-static void
-start_fade (GSTESlideshow *show,
- GdkPixbuf *pixbuf)
-{
- int pw;
- int ph;
- int x;
- int y;
- cairo_t *cr;
- int window_width;
- int window_height;
-
- gs_theme_engine_profile_start ("start");
-
- window_width = show->priv->window_width;
- window_height = show->priv->window_height;
-
- if (show->priv->pat2 != NULL) {
- cairo_pattern_destroy (show->priv->pat2);
- }
-
- pw = gdk_pixbuf_get_width (pixbuf);
- ph = gdk_pixbuf_get_height (pixbuf);
- x = (window_width - pw) / 2;
- y = (window_height - ph) / 2;
-
- if (gdk_pixbuf_get_has_alpha (pixbuf) && show->priv->background_color) {
- GdkPixbuf *colored;
- guint32 color;
- GdkPixmap *pixmap;
-
- color = (show->priv->background_color->red << 16)
- + (show->priv->background_color->green / 256 << 8)
- + show->priv->background_color->blue / 256;
- colored = gdk_pixbuf_composite_color_simple (pixbuf,
- pw, ph,
- GDK_INTERP_BILINEAR,
- 255,
- 256,
- color,
- color);
- pixmap = gdk_pixmap_new (NULL, ph, pw, gdk_visual_get_system ()->depth);
-
- gdk_draw_pixbuf (pixmap, NULL, colored, 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_MAX, 0, 0);
- gdk_pixbuf_get_from_drawable (pixbuf, pixmap, NULL, 0, 0, 0, 0, -1, -1);
-
- g_object_unref (pixmap);
-
- g_object_unref(colored);
- }
-
- cr = cairo_create (show->priv->surf);
-
- /* XXX Handle out of memory? */
- gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y);
- show->priv->pat2 = cairo_pattern_reference (cairo_get_source (cr));
- show->priv->pat2top = y;
- show->priv->pat2bottom = y + ph;
- show->priv->pat2left = x;
- show->priv->pat2right = x + pw;
-
- cairo_destroy (cr);
-
- show->priv->fade_ticks = 0;
- g_timer_start (show->priv->timer);
-
- gs_theme_engine_profile_end ("end");
-}
-
-static void
-finish_fade (GSTESlideshow *show)
-{
- gs_theme_engine_profile_start ("start");
-
- if (show->priv->pat1 != NULL) {
- cairo_pattern_destroy (show->priv->pat1);
- }
-
- show->priv->pat1 = show->priv->pat2;
- show->priv->pat2 = NULL;
-
- start_new_load (show, IMAGE_LOAD_TIMEOUT);
-
- gs_theme_engine_profile_end ("end");
-}
-
-static void
-update_display (GSTESlideshow *show)
-{
- int window_width;
- int window_height;
- cairo_t *cr;
-
- gs_theme_engine_profile_start ("start");
-
- cr = cairo_create (show->priv->surf);
-
- gs_theme_engine_get_window_size (GS_THEME_ENGINE (show),
- &window_width,
- &window_height);
-
- if (show->priv->pat2 != NULL) {
- /* fade out areas not covered by the new image */
- /* top */
- cairo_rectangle (cr, 0, 0, window_width, show->priv->pat2top);
- if (show->priv->background_color) {
- cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
- show->priv->background_color->green / 65535.0,
- show->priv->background_color->blue / 65535.0, show->priv->alpha2);
- } else {
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
- }
- cairo_fill (cr);
- /* left (excluding what's covered by top and bottom) */
- cairo_rectangle (cr, 0, show->priv->pat2top,
- show->priv->pat2left,
- show->priv->pat2bottom - show->priv->pat2top);
- if (show->priv->background_color) {
- cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
- show->priv->background_color->green / 65535.0,
- show->priv->background_color->blue / 65535.0, show->priv->alpha2);
- } else {
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
- }
- cairo_fill (cr);
- /* bottom */
- cairo_rectangle (cr, 0, show->priv->pat2bottom, window_width,
- window_height - show->priv->pat2bottom);
- if (show->priv->background_color) {
- cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
- show->priv->background_color->green / 65535.0,
- show->priv->background_color->blue / 65535.0, show->priv->alpha2);
- } else {
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
- }
- cairo_fill (cr);
- /* right (excluding what's covered by top and bottom) */
- cairo_rectangle (cr, show->priv->pat2right,
- show->priv->pat2top,
- window_width - show->priv->pat2right,
- show->priv->pat2bottom - show->priv->pat2top);
- if (show->priv->background_color) {
- cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
- show->priv->background_color->green / 65535.0,
- show->priv->background_color->blue / 65535.0, show->priv->alpha2);
- } else {
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
- }
- cairo_fill (cr);
-
- gs_theme_engine_profile_start ("paint pattern to surface");
- cairo_set_source (cr, show->priv->pat2);
-
- cairo_paint_with_alpha (cr, show->priv->alpha2);
- gs_theme_engine_profile_end ("paint pattern to surface");
- } else {
- if (show->priv->pat1 != NULL) {
- cairo_set_source (cr, show->priv->pat1);
- cairo_paint (cr);
- }
- }
-
- cairo_destroy (cr);
-
- /* paint the image buffer into the window */
- cr = gdk_cairo_create (GTK_WIDGET (show)->window);
-
- cairo_set_source_surface (cr, show->priv->surf, 0, 0);
-
- gs_theme_engine_profile_start ("paint surface to window");
- cairo_paint (cr);
- gs_theme_engine_profile_end ("paint surface to window");
-
- cairo_destroy (cr);
-
- gs_theme_engine_profile_end ("end");
-}
-
-static gboolean
-draw_iter (GSTESlideshow *show)
-{
- double old_opacity;
- double new_opacity;
-
- if (show->priv->pat2 != NULL) {
- gdouble fps;
- gdouble elapsed;
-
- if (show->priv->fade_disabled) {
- show->priv->alpha2 = 1.0;
- update_display (show);
- finish_fade (show);
- return TRUE;
- }
-
- /* we are in a fade */
- show->priv->fade_ticks++;
-
- /*
- * We have currently drawn pat2 with old_opacity, and we
- * want to set alpha2 so that drawing pat2 at alpha2
- * yields it drawn with new_opacity
- *
- * Solving
- * new_opacity = 1 - (1 - alpha2) * (1 - old_opacity)
- * yields
- * alpha2 = 1 - (1 - new_opacity) / (1 - old_opacity)
- *
- * XXX This assumes that cairo doesn't correct alpha for
- * the color profile. However, any error is guaranteed
- * to be cleaned up by the last iteration, where alpha2
- * becomes 1 because new_opacity is 1.
- */
- old_opacity = (double) (show->priv->fade_ticks - 1) /
- (double) N_FADE_TICKS;
- new_opacity = (double) show->priv->fade_ticks /
- (double) N_FADE_TICKS;
- show->priv->alpha2 = 1.0 - (1.0 - new_opacity) /
- (1.0 - old_opacity);
-
- update_display (show);
-
- elapsed = g_timer_elapsed (show->priv->timer, NULL);
- fps = (gdouble)show->priv->fade_ticks / elapsed;
- if (fps < MINIMUM_FPS) {
- g_warning ("Getting less than %.2f frames per second, disabling fade", MINIMUM_FPS);
- show->priv->fade_ticks = N_FADE_TICKS - 1;
- show->priv->fade_disabled = TRUE;
- }
-
- if (show->priv->fade_ticks >= N_FADE_TICKS) {
- finish_fade (show);
- }
- }
-
- return TRUE;
-}
-
-static void
-process_new_pixbuf (GSTESlideshow *show,
- GdkPixbuf *pixbuf)
-{
- gs_theme_engine_profile_msg ("Processing a new image");
-
- if (pixbuf != NULL) {
- start_fade (show, pixbuf);
- } else {
- start_new_load (show, 10);
- }
-}
-
-static void
-op_result_free (OpResult *result)
-{
- if (result == NULL) {
- return;
- }
-
- if (result->pixbuf != NULL) {
- g_object_unref (result->pixbuf);
- }
-
- g_free (result);
-}
-
-static gboolean
-results_pull_func (GSTESlideshow *show)
-{
- OpResult *result;
-
- GDK_THREADS_ENTER ();
-
- g_async_queue_lock (show->priv->results_q);
-
- result = g_async_queue_try_pop_unlocked (show->priv->results_q);
- g_assert (result);
-
- while (result != NULL) {
- process_new_pixbuf (show, result->pixbuf);
- op_result_free (result);
-
- result = g_async_queue_try_pop_unlocked (show->priv->results_q);
- }
-
- show->priv->results_pull_id = 0;
-
- g_async_queue_unlock (show->priv->results_q);
-
- GDK_THREADS_LEAVE ();
-
- return FALSE;
-}
-
-static GdkPixbuf *
-scale_pixbuf (GdkPixbuf *pixbuf,
- int max_width,
- int max_height,
- gboolean no_stretch_hint)
-{
- int pw;
- int ph;
- float scale_factor_x = 1.0;
- float scale_factor_y = 1.0;
- float scale_factor = 1.0;
-
- pw = gdk_pixbuf_get_width (pixbuf);
- ph = gdk_pixbuf_get_height (pixbuf);
-
- /* If the image is less than 256 wide or high then it
- is probably a thumbnail and we should ignore it */
- if (pw < 256 || ph < 256) {
- return NULL;
- }
-
- /* Determine which dimension requires the smallest scale. */
- scale_factor_x = (float) max_width / (float) pw;
- scale_factor_y = (float) max_height / (float) ph;
-
- if (scale_factor_x > scale_factor_y) {
- scale_factor = scale_factor_y;
- } else {
- scale_factor = scale_factor_x;
- }
-
- /* always scale down, allow to disable scaling up */
- if (scale_factor < 1.0 || !no_stretch_hint) {
- int scale_x;
- int scale_y;
-
- scale_x = (int) (pw * scale_factor);
- scale_y = (int) (ph * scale_factor);
- return gdk_pixbuf_scale_simple (pixbuf,
- scale_x,
- scale_y,
- GDK_INTERP_BILINEAR);
- } else {
- return g_object_ref (pixbuf);
- }
-}
-
-static void
-add_files_to_list (GSList **list,
- const char *base)
-{
- GDir *d;
- const char *d_name;
-
- d = g_dir_open (base, 0, NULL);
- if (d == NULL) {
- g_warning ("Could not open directory: %s", base);
- return;
- }
-
- while ((d_name = g_dir_read_name (d)) != NULL) {
- char *path;
-
- /* skip hidden files */
- if (d_name[0] == '.') {
- continue;
- }
-
- path = g_build_filename (base, d_name, NULL);
- if (g_file_test (path, G_FILE_TEST_IS_DIR)) {
- add_files_to_list (list, path);
- g_free (path);
- } else {
- *list = g_slist_prepend (*list, path);
- }
- }
-
- g_dir_close (d);
-}
-
-static GSList *
-build_filename_list_local_dir (const char *base)
-{
- GSList *list = NULL;
-
- add_files_to_list (&list, base);
-
- return list;
-}
-
-static int
-gste_strcmp_compare_func (gconstpointer string_a, gconstpointer string_b)
-{
- return strcmp (string_a == NULL ? "" : string_a,
- string_b == NULL ? "" : string_b);
-}
-
-
-static GdkPixbuf *
-get_pixbuf_from_local_dir (GSTESlideshow *show,
- const char *location)
-{
- GdkPixbuf *pixbuf, *transformed_pixbuf;
- char *filename;
- int i;
- GSList *l;
-
- /* rebuild the cache */
- if (show->priv->filename_list == NULL) {
- show->priv->filename_list = build_filename_list_local_dir (location);
- }
-
- if (show->priv->filename_list == NULL) {
- return NULL;
- } else {
- if (show->priv->sort_images) {
- show->priv->filename_list = g_slist_sort (show->priv->filename_list, gste_strcmp_compare_func);
- }
- }
-
- /* get a random filename if needed */
- if (! show->priv->sort_images) {
- i = g_random_int_range (0, g_slist_length (show->priv->filename_list));
- l = g_slist_nth (show->priv->filename_list, i);
- } else {
- l = show->priv->filename_list;
- }
- filename = l->data;
-
- pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
-
- if (pixbuf != NULL) {
- transformed_pixbuf = gdk_pixbuf_apply_embedded_orientation (pixbuf);
- g_object_unref (pixbuf);
- } else {
- transformed_pixbuf = NULL;
- }
-
- g_free (filename);
- show->priv->filename_list = g_slist_delete_link (show->priv->filename_list, l);
-
- return transformed_pixbuf;
-}
-
-static GdkPixbuf *
-get_pixbuf_from_location (GSTESlideshow *show,
- const char *location)
-{
- GdkPixbuf *pixbuf = NULL;
- gboolean is_dir;
-
- if (location == NULL) {
- return NULL;
- }
-
- is_dir = g_file_test (location, G_FILE_TEST_IS_DIR);
-
- if (is_dir) {
- pixbuf = get_pixbuf_from_local_dir (show, location);
- }
-
- return pixbuf;
-}
-
-static GdkPixbuf *
-get_pixbuf (GSTESlideshow *show,
- const char *location,
- int width,
- int height)
-{
- GdkPixbuf *pixbuf;
- GdkPixbuf *scaled = NULL;
-
- if (location == NULL) {
- return NULL;
- }
-
- pixbuf = get_pixbuf_from_location (show, location);
-
- if (pixbuf != NULL) {
- scaled = scale_pixbuf (pixbuf, width, height, show->priv->no_stretch_hint);
- g_object_unref (pixbuf);
- }
-
- return scaled;
-}
-
-static void
-op_load_image (GSTESlideshow *show,
- const char *location)
-{
- OpResult *op_result;
- int window_width;
- int window_height;
-
- window_width = show->priv->window_width;
- window_height = show->priv->window_height;
-
- op_result = g_new0 (OpResult, 1);
-
- op_result->pixbuf = get_pixbuf (show,
- location,
- window_width,
- window_height);
-
- GDK_THREADS_ENTER ();
- g_async_queue_lock (show->priv->results_q);
- g_async_queue_push_unlocked (show->priv->results_q, op_result);
-
- if (show->priv->results_pull_id == 0) {
- show->priv->results_pull_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE,
- (GSourceFunc)results_pull_func,
- show, NULL);
- }
-
- g_async_queue_unlock (show->priv->results_q);
- GDK_THREADS_LEAVE ();
-}
-
-static gpointer
-load_threadfunc (GAsyncQueue *op_q)
-{
- Op *op;
-
- op = g_async_queue_pop (op_q);
- while (op) {
- op_load_image (op->slideshow,
- op->location);
-
- if (op->slideshow != NULL) {
- g_object_unref (op->slideshow);
- }
- g_free (op->location);
- g_free (op);
-
- op = g_async_queue_pop (op_q);
- }
-
- return NULL;
-}
-
-void
-gste_slideshow_set_images_location (GSTESlideshow *show,
- const char *location)
-{
- g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
- g_free (show->priv->images_location);
- show->priv->images_location = g_strdup (location);
-}
-
-
-void
-gste_slideshow_set_sort_images (GSTESlideshow *show,
- gboolean sort_images)
-{
- g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
- show->priv->sort_images = sort_images;
-}
-
-void
-gste_slideshow_set_no_stretch_hint (GSTESlideshow *show,
- gboolean no_stretch_hint)
-{
- g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
- show->priv->no_stretch_hint = no_stretch_hint;
-}
-
-void
-gste_slideshow_set_background_color (GSTESlideshow *show,
- const char *background_color)
-{
- g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
- if (show->priv->background_color != NULL) {
- g_slice_free (PangoColor, show->priv->background_color);
- show->priv->background_color = NULL;
- }
-
- if (background_color != NULL) {
- show->priv->background_color = g_slice_new (PangoColor);
-
- if (pango_color_parse (show->priv->background_color, background_color) == FALSE) {
- g_slice_free (PangoColor, show->priv->background_color);
- show->priv->background_color = NULL;
- }
- }
-}
-
-static void
-gste_slideshow_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GSTESlideshow *self;
-
- self = GSTE_SLIDESHOW (object);
-
- switch (prop_id) {
- case PROP_IMAGES_LOCATION:
- gste_slideshow_set_images_location (self, g_value_get_string (value));
- break;
- case PROP_SORT_IMAGES:
- gste_slideshow_set_sort_images (self, g_value_get_boolean (value));
- break;
- case PROP_SOLID_BACKGROUND:
- gste_slideshow_set_background_color (self, g_value_get_string (value));
- break;
- case PROP_NO_STRETCH_HINT:
- gste_slideshow_set_no_stretch_hint (self, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gste_slideshow_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GSTESlideshow *self;
-
- self = GSTE_SLIDESHOW (object);
-
- switch (prop_id) {
- case PROP_IMAGES_LOCATION:
- g_value_set_string (value, self->priv->images_location);
- break;
- case PROP_SORT_IMAGES:
- g_value_set_boolean (value, self->priv->sort_images);
- break;
- case PROP_SOLID_BACKGROUND:
- {
- char *color = NULL;
- color = pango_color_to_string (self->priv->background_color);
- g_value_set_string (value, color);
- g_free (color);
- break;
- }
- case PROP_NO_STRETCH_HINT:
- g_value_set_boolean (value, self->priv->no_stretch_hint);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gste_slideshow_real_show (GtkWidget *widget)
-{
- GSTESlideshow *show = GSTE_SLIDESHOW (widget);
- int delay;
-
- if (GTK_WIDGET_CLASS (parent_class)->show) {
- GTK_WIDGET_CLASS (parent_class)->show (widget);
- }
-
- start_new_load (show, 10);
-
- delay = 25;
- show->priv->timeout_id = g_timeout_add (delay, (GSourceFunc)draw_iter, show);
-
- if (show->priv->timer != NULL) {
- g_timer_destroy (show->priv->timer);
- }
- show->priv->timer = g_timer_new ();
-}
-
-static gboolean
-gste_slideshow_real_expose (GtkWidget *widget,
- GdkEventExpose *event)
-{
- GSTESlideshow *show = GSTE_SLIDESHOW (widget);
- gboolean handled = FALSE;
-
- update_display (show);
-
- if (GTK_WIDGET_CLASS (parent_class)->expose_event) {
- handled = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
- }
-
- return handled;
-}
-
-static gboolean
-gste_slideshow_real_configure (GtkWidget *widget,
- GdkEventConfigure *event)
-{
- GSTESlideshow *show = GSTE_SLIDESHOW (widget);
- gboolean handled = FALSE;
- cairo_t *cr;
-
- /* resize */
- gs_theme_engine_get_window_size (GS_THEME_ENGINE (show),
- &show->priv->window_width,
- &show->priv->window_height);
-
- gs_theme_engine_profile_msg ("Resize to x:%d y:%d",
- show->priv->window_width,
- show->priv->window_height);
-
- if (show->priv->surf != NULL) {
- cairo_surface_destroy (show->priv->surf);
- }
-
- cr = gdk_cairo_create (widget->window);
- show->priv->surf = cairo_surface_create_similar (cairo_get_target (cr),
- CAIRO_CONTENT_COLOR,
- show->priv->window_width,
- show->priv->window_height);
- cairo_destroy (cr);
-
- /* schedule a redraw */
- gtk_widget_queue_draw (widget);
-
- if (GTK_WIDGET_CLASS (parent_class)->configure_event) {
- handled = GTK_WIDGET_CLASS (parent_class)->configure_event (widget, event);
- }
-
- return handled;
-}
-
-static void
-gste_slideshow_class_init (GSTESlideshowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gste_slideshow_finalize;
- object_class->get_property = gste_slideshow_get_property;
- object_class->set_property = gste_slideshow_set_property;
-
- widget_class->show = gste_slideshow_real_show;
- widget_class->expose_event = gste_slideshow_real_expose;
- widget_class->configure_event = gste_slideshow_real_configure;
-
- g_type_class_add_private (klass, sizeof (GSTESlideshowPrivate));
-
- g_object_class_install_property (object_class,
- PROP_IMAGES_LOCATION,
- g_param_spec_string ("images-location",
- NULL,
- NULL,
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_SORT_IMAGES,
- g_param_spec_boolean ("sort-images",
- NULL,
- NULL,
- FALSE,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_SOLID_BACKGROUND,
- g_param_spec_string ("background-color",
- NULL,
- NULL,
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_NO_STRETCH_HINT,
- g_param_spec_boolean ("no-stretch",
- NULL,
- NULL,
- FALSE,
- G_PARAM_READWRITE));
-}
-
-static void
-set_colormap (GtkWidget *widget)
-{
- GdkScreen *screen;
- GdkColormap *colormap;
-
- screen = gtk_widget_get_screen (widget);
- colormap = gdk_screen_get_rgba_colormap (screen);
- if (colormap == NULL) {
- colormap = gdk_screen_get_rgb_colormap (screen);
- }
-
- gtk_widget_set_colormap (widget, colormap);
-}
-
-static void
-gste_slideshow_init (GSTESlideshow *show)
-{
- GError *error;
-
- show->priv = GSTE_SLIDESHOW_GET_PRIVATE (show);
-
- show->priv->images_location = g_strdup (DEFAULT_IMAGES_LOCATION);
-
- show->priv->op_q = g_async_queue_new ();
- show->priv->results_q = g_async_queue_new ();
-
- error = NULL;
- show->priv->load_thread = g_thread_create ((GThreadFunc)load_threadfunc, show->priv->op_q, FALSE, &error);
- if (show->priv->load_thread == NULL) {
- g_error ("Could not create a thread to load images: %s",
- error->message);
- g_error_free (error);
- exit (-1);
- }
-
- set_colormap (GTK_WIDGET (show));
-}
-
-static void
-gste_slideshow_finalize (GObject *object)
-{
- GSTESlideshow *show;
- gpointer result;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GSTE_IS_SLIDESHOW (object));
-
- show = GSTE_SLIDESHOW (object);
-
- g_return_if_fail (show->priv != NULL);
-
- if (show->priv->surf) {
- cairo_surface_destroy (show->priv->surf);
- }
-
- if (show->priv->timeout_id > 0) {
- g_source_remove (show->priv->timeout_id);
- show->priv->timeout_id = 0;
- }
-
- if (show->priv->results_pull_id > 0) {
- g_source_remove (show->priv->results_pull_id);
- }
-
- if (show->priv->results_q != NULL) {
- result = g_async_queue_try_pop (show->priv->results_q);
-
- while (result) {
- result = g_async_queue_try_pop (show->priv->results_q);
- }
- g_async_queue_unref (show->priv->results_q);
- }
-
- g_free (show->priv->images_location);
- show->priv->images_location = NULL;
-
- if (show->priv->background_color) {
- g_slice_free (PangoColor, show->priv->background_color);
- show->priv->background_color = NULL;
- }
-
- if (show->priv->timer != NULL) {
- g_timer_destroy (show->priv->timer);
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
diff --git a/savers/gste-slideshow.h.orig b/savers/gste-slideshow.h.orig
deleted file mode 100644
index 5d7ec7c..0000000
--- a/savers/gste-slideshow.h.orig
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Authors: William Jon McCann <[email protected]>
- *
- */
-
-#ifndef __GSTE_SLIDESHOW_H
-#define __GSTE_SLIDESHOW_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include "gs-theme-engine.h"
-
-G_BEGIN_DECLS
-
-#define GSTE_TYPE_SLIDESHOW (gste_slideshow_get_type ())
-#define GSTE_SLIDESHOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshow))
-#define GSTE_SLIDESHOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSTE_TYPE_SLIDESHOW, GSTESlideshowClass))
-#define GSTE_IS_SLIDESHOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSTE_TYPE_SLIDESHOW))
-#define GSTE_IS_SLIDESHOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSTE_TYPE_SLIDESHOW))
-#define GSTE_SLIDESHOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshowClass))
-
-typedef struct GSTESlideshowPrivate GSTESlideshowPrivate;
-
-typedef struct
-{
- GSThemeEngine parent;
- GSTESlideshowPrivate *priv;
-} GSTESlideshow;
-
-typedef struct
-{
- GSThemeEngineClass parent_class;
-} GSTESlideshowClass;
-
-GType gste_slideshow_get_type (void);
-GSThemeEngine *gste_slideshow_new (void);
-
-void gste_slideshow_set_images_location (GSTESlideshow *show,
- const char *location);
-
-void gste_slideshow_set_sort_images (GSTESlideshow *show,
- gboolean sort_image);
-
-void gste_slideshow_set_background_color (GSTESlideshow *show,
- const char *background_color);
-
-void gste_slideshow_set_no_stretch_hint (GSTESlideshow *show,
- gboolean no_stretch_hint);
-
-G_END_DECLS
-
-#endif /* __GSTE_SLIDESHOW_H */
diff --git a/savers/popsquares.c.orig b/savers/popsquares.c.orig
deleted file mode 100644
index 04ea19d..0000000
--- a/savers/popsquares.c.orig
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include <glib/gi18n.h>
-
-#include "gs-theme-window.h"
-#include "gs-theme-engine.h"
-#include "gste-popsquares.h"
-
-int
-main (int argc, char **argv)
-{
- GSThemeEngine *engine;
- GtkWidget *window;
- GError *error;
-
- bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- error = NULL;
-
- if (!gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error)) {
- g_printerr (_("%s. See --help for usage information.\n"),
- error->message);
- g_error_free (error);
- exit (1);
- }
-
- window = gs_theme_window_new ();
- g_signal_connect (G_OBJECT (window), "delete-event",
- G_CALLBACK (gtk_main_quit), NULL);
-
- g_set_prgname ("popsquares");
-
- engine = g_object_new (GSTE_TYPE_POPSQUARES, NULL);
- gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (engine));
-
- gtk_widget_show (GTK_WIDGET (engine));
-
- gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
- gtk_widget_show (window);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/savers/slideshow.c.orig b/savers/slideshow.c.orig
deleted file mode 100644
index f18dc5c..0000000
--- a/savers/slideshow.c.orig
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-#include "gs-theme-engine.h"
-#include "gste-slideshow.h"
-
-#include "xdg-user-dir-lookup.h"
-
-int
-main (int argc, char **argv)
-{
- GSThemeEngine *engine;
- GtkWidget *window;
- GError *error;
- gboolean ret;
- char *location = NULL;
- char *background_color = NULL;
- gboolean sort_images = FALSE;
- gboolean no_stretch = FALSE;
- GOptionEntry entries [] = {
- { "location", 0, 0, G_OPTION_ARG_STRING, &location,
- N_("Location to get images from"), N_("PATH") },
- { "background-color", 0, 0, G_OPTION_ARG_STRING, &background_color,
- N_("Color to use for images background"), N_("\"#rrggbb\"") },
- { "sort-images", 0, 0, G_OPTION_ARG_NONE, &sort_images,
- N_("Do not randomize pictures from location"), NULL },
- { "no-stretch", 0, 0, G_OPTION_ARG_NONE, &no_stretch,
- N_("Do not try to stretch images on screen"), NULL },
- { NULL }
- };
-
- bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- error = NULL;
-
- g_thread_init (NULL);
- ret = gtk_init_with_args (&argc, &argv,
- NULL,
- entries,
- NULL,
- &error);
- if (! ret) {
- g_message ("%s", error->message);
- g_error_free (error);
- exit (1);
- }
-
- g_chdir (g_get_home_dir ());
-
- g_set_prgname ("slideshow");
-
- window = gs_theme_window_new ();
- g_signal_connect (G_OBJECT (window), "delete-event",
- G_CALLBACK (gtk_main_quit), NULL);
-
- engine = g_object_new (GSTE_TYPE_SLIDESHOW, NULL);
-
- if (location == NULL) {
- location = xdg_user_dir_lookup ("PICTURES");
- if (location == NULL ||
- strcmp (location, "/tmp") == 0 ||
- strcmp (location, g_get_home_dir ()) == 0) {
- free (location);
- location = g_build_filename (g_get_home_dir (), "Pictures", NULL);
- }
- }
-
- if (location != NULL) {
- g_object_set (engine, "images-location", location, NULL);
- }
-
- if (sort_images) {
- g_object_set (engine, "sort-images", sort_images, NULL);
- }
-
- if (background_color != NULL) {
- g_object_set (engine, "background-color", background_color, NULL);
- }
-
- if (no_stretch) {
- g_object_set (engine, "no-stretch", no_stretch, NULL);
- }
-
- gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (engine));
-
- gtk_widget_show (GTK_WIDGET (engine));
-
- gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
- gtk_widget_show (window);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/savers/xdg-user-dir-lookup.c.orig b/savers/xdg-user-dir-lookup.c.orig
deleted file mode 100644
index a6b2fb1..0000000
--- a/savers/xdg-user-dir-lookup.c.orig
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- This file is not licenced under the GPL like the rest of the code.
- Its is under the MIT license, to encourage reuse by cut-and-paste.
-
- Copyright (c) 2007 Red Hat, inc
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xdg-user-dir-lookup.h"
-
-char *
-xdg_user_dir_lookup (const char *type)
-{
- FILE *file;
- char *home_dir, *config_home, *config_file;
- char buffer[512];
- char *user_dir;
- char *p, *d;
- int len;
- int relative;
-
- home_dir = getenv ("HOME");
-
- if (home_dir == NULL)
- return strdup ("/tmp");
-
- config_home = getenv ("XDG_CONFIG_HOME");
- if (config_home == NULL || config_home[0] == 0)
- {
- config_file = malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1);
- strcpy (config_file, home_dir);
- strcat (config_file, "/.config/user-dirs.dirs");
- }
- else
- {
- config_file = malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1);
- strcpy (config_file, config_home);
- strcat (config_file, "/user-dirs.dirs");
- }
-
- file = fopen (config_file, "r");
- free (config_file);
- if (file == NULL)
- goto error;
-
- user_dir = NULL;
- while (fgets (buffer, sizeof (buffer), file))
- {
- /* Remove newline at end */
- len = strlen (buffer);
- if (len > 0 && buffer[len-1] == '\n')
- buffer[len-1] = 0;
-
- p = buffer;
- while (*p == ' ' || *p == '\t')
- p++;
-
- if (strncmp (p, "XDG_", 4) != 0)
- continue;
- p += 4;
- if (strncmp (p, type, strlen (type)) != 0)
- continue;
- p += strlen (type);
- if (strncmp (p, "_DIR", 4) != 0)
- continue;
- p += 4;
-
- while (*p == ' ' || *p == '\t')
- p++;
-
- if (*p != '=')
- continue;
- p++;
-
- while (*p == ' ' || *p == '\t')
- p++;
-
- if (*p != '"')
- continue;
- p++;
-
- relative = 0;
- if (strncmp (p, "$HOME/", 6) == 0)
- {
- p += 6;
- relative = 1;
- }
- else if (*p != '/')
- continue;
-
- if (relative)
- {
- user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);
- strcpy (user_dir, home_dir);
- strcat (user_dir, "/");
- }
- else
- {
- user_dir = malloc (strlen (p) + 1);
- *user_dir = 0;
- }
-
- d = user_dir + strlen (user_dir);
- while (*p && *p != '"')
- {
- if ((*p == '\\') && (*(p+1) != 0))
- p++;
- *d++ = *p++;
- }
- *d = 0;
- }
- fclose (file);
-
- if (user_dir)
- return user_dir;
-
- error:
- /* Special case desktop for historical compatibility */
- if (strcmp (type, "DESKTOP") == 0)
- {
- user_dir = malloc (strlen (home_dir) + strlen ("/Desktop") + 1);
- strcpy (user_dir, home_dir);
- strcat (user_dir, "/Desktop");
- return user_dir;
- }
- else
- return strdup (home_dir);
-}
-
-#ifdef STANDALONE
-
-int
-main (int argc, char *argv[])
-{
- if (argc != 2)
- {
- fprintf (stderr, "Usage %s <dir-type>\n", argv[0]);
- exit (1);
- }
-
- printf ("%s\n", xdg_user_dir_lookup (argv[1]));
- return 0;
-}
-
-#endif