summaryrefslogtreecommitdiff
path: root/savers
diff options
context:
space:
mode:
Diffstat (limited to 'savers')
-rw-r--r--savers/floaters.c41
-rw-r--r--savers/gs-theme-window.c11
-rw-r--r--savers/gste-popsquares.c131
3 files changed, 126 insertions, 57 deletions
diff --git a/savers/floaters.c b/savers/floaters.c
index dd0d85e..d565d63 100644
--- a/savers/floaters.c
+++ b/savers/floaters.c
@@ -265,7 +265,7 @@ static CachedSource *cached_source_new (cairo_pattern_t *pattern,
gint height);
static void cached_source_free (CachedSource *source);
-static ScreenSaver *screen_saver_new (GtkDrawingArea *drawing_area,
+static ScreenSaver *screen_saver_new (GtkWidget *drawing_area,
const gchar *filename,
gint max_floater_count,
gboolean should_do_rotations,
@@ -841,7 +841,7 @@ screen_saver_floater_do_draw (ScreenSaver *screen_saver,
}
static ScreenSaver *
-screen_saver_new (GtkDrawingArea *drawing_area,
+screen_saver_new (GtkWidget *drawing_area,
const gchar *filename,
gint max_floater_count,
gboolean should_do_rotations,
@@ -851,7 +851,7 @@ screen_saver_new (GtkDrawingArea *drawing_area,
screen_saver = g_new (ScreenSaver, 1);
screen_saver->filename = g_strdup (filename);
- screen_saver->drawing_area = GTK_WIDGET (drawing_area);
+ screen_saver->drawing_area = drawing_area;
screen_saver->cached_sources =
g_hash_table_new_full (NULL, NULL, NULL,
(GDestroyNotify) cached_source_free);
@@ -1216,15 +1216,13 @@ int
main (int argc,
char *argv[])
{
- ScreenSaver *screen_saver;
- GtkWidget *window;
- GtkWidget *drawing_area;
-#if GTK_CHECK_VERSION (3, 0, 0)
- GdkRGBA bg;
- GdkRGBA fg;
-#else
- GtkStyle *style;
- GtkStateType state;
+ ScreenSaver *screen_saver;
+ GtkWidget *window;
+ GtkWidget *drawing_area;
+#if !GTK_CHECK_VERSION (3, 0, 0)
+ GtkStyle *style;
+ GtkStateType state;
+ GdkColor black = { 0, 0x0000, 0x0000, 0x0000 };
#endif
GError *error;
@@ -1264,25 +1262,14 @@ main (int argc,
g_signal_connect (G_OBJECT (window), "delete-event",
G_CALLBACK (gtk_main_quit), NULL);
- drawing_area = gtk_drawing_area_new ();
+ drawing_area = GTK_WIDGET (gtk_drawing_area_new ());
-#if GTK_CHECK_VERSION (3, 0, 0)
- bg.red = 0;
- bg.green = 0;
- bg.blue = 0;
- bg.alpha = 1.0;
- fg.red = 0.8;
- fg.green = 0.8;
- fg.blue = 0.8;
- fg.alpha = 1.0;
- gtk_widget_override_background_color (drawing_area, 0, &bg);
- gtk_widget_override_color (drawing_area, 0, &fg);
-#else
+#if !GTK_CHECK_VERSION (3, 0, 0)
style = gtk_widget_get_style (drawing_area);
state = (GtkStateType) 0;
while (state < (GtkStateType) G_N_ELEMENTS (style->bg))
{
- gtk_widget_modify_bg (drawing_area, state, &style->mid[state]);
+ gtk_widget_modify_bg (drawing_area, state, &black);
state++;
}
#endif
@@ -1290,7 +1277,7 @@ main (int argc,
gtk_widget_show (drawing_area);
gtk_container_add (GTK_CONTAINER (window), drawing_area);
- screen_saver = screen_saver_new (GTK_DRAWING_AREA (drawing_area),
+ screen_saver = screen_saver_new (drawing_area,
filenames[0], max_floater_count,
should_do_rotations, should_show_paths);
g_strfreev (filenames);
diff --git a/savers/gs-theme-window.c b/savers/gs-theme-window.c
index 0741aad..47c731e 100644
--- a/savers/gs-theme-window.c
+++ b/savers/gs-theme-window.c
@@ -62,6 +62,7 @@ gs_theme_window_class_init (GSThemeWindowClass *klass)
widget_class->realize = gs_theme_window_real_realize;
}
+#if !GTK_CHECK_VERSION (3, 0, 0)
static void
force_no_pixmap_background (GtkWidget *widget)
{
@@ -90,11 +91,16 @@ force_no_pixmap_background (GtkWidget *widget)
gtk_widget_set_name (widget, "gs-window");
}
+#endif
static void
gs_theme_window_init (GSThemeWindow *window)
{
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+#else
force_no_pixmap_background (GTK_WIDGET (window));
+#endif
}
static void
@@ -177,9 +183,14 @@ gs_theme_window_real_realize (GtkWidget *widget)
return;
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gtk_style_context_set_background (gtk_widget_get_style_context (widget),
+ window);
+#else
gtk_style_set_background (gtk_widget_get_style (widget),
window,
GTK_STATE_NORMAL);
+#endif
gdk_window_set_decorations (window, (GdkWMDecoration) 0);
gdk_window_set_events (window, gdk_window_get_events (window) | event_mask);
diff --git a/savers/gste-popsquares.c b/savers/gste-popsquares.c
index 837bb2c..44caa48 100644
--- a/savers/gste-popsquares.c
+++ b/savers/gste-popsquares.c
@@ -51,7 +51,11 @@ struct GSTEPopsquaresPrivate
int ncolors;
int subdivision;
+#if GTK_CHECK_VERSION (3, 0, 0)
+ GdkRGBA *colors;
+#else
GdkColor *colors;
+#endif
square *squares;
};
@@ -63,12 +67,12 @@ 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)
+hsv_to_rgb (int h,
+ double s,
+ double v,
+ double *r,
+ double *g,
+ double *b)
{
double H, S, V, R, G, B;
double p1, p2, p3;
@@ -138,27 +142,27 @@ hsv_to_rgb (int h,
B = p2;
}
- *r = R * 65535;
- *g = G * 65535;
- *b = B * 65535;
+ *r = R;
+ *g = G;
+ *b = B;
}
static void
-rgb_to_hsv (unsigned short r,
- unsigned short g,
- unsigned short b,
- int *h,
- double *s,
- double *v)
+rgb_to_hsv (double r,
+ double g,
+ double 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;
+ R = r;
+ G = g;
+ B = b;
cmax = R;
cmin = G;
imax = 1;
@@ -226,11 +230,13 @@ make_color_ramp (GdkColormap *colormap,
int h2,
double s2,
double v2,
- GdkColor *colors,
- int n_colors,
#if GTK_CHECK_VERSION (3, 0, 0)
+ GdkRGBA *colors,
+ int n_colors,
gboolean closed)
#else
+ GdkColor *colors,
+ int n_colors,
gboolean closed,
gboolean allocate,
gboolean writable)
@@ -267,13 +273,25 @@ make_color_ramp (GdkColormap *colormap,
for (i = 0; i < ncolors; i++)
{
+#if !GTK_CHECK_VERSION (3, 0, 0)
+ double red, green, blue;
+
+#endif
hsv_to_rgb ((int) (h1 + (i * dh)),
(s1 + (i * ds)),
(v1 + (i * dv)),
+#if GTK_CHECK_VERSION (3, 0, 0)
&colors [i].red,
&colors [i].green,
&colors [i].blue);
-#if !GTK_CHECK_VERSION (3, 0, 0)
+ colors [i].alpha = 1.0;
+#else
+ &red, &green, &blue);
+
+ colors [i].red = (guint16) (red * 65535.0);
+ colors [i].green = (guint16) (green * 65535.0);
+ colors [i].blue = (guint16) (blue * 65535.0);
+
if (allocate)
{
gdk_colormap_alloc_color (colormap,
@@ -310,25 +328,55 @@ randomize_square_colors (square *squares,
}
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+static void
+set_colors (GtkWidget *widget,
+ GdkRGBA *fg,
+ GdkRGBA *bg)
+{
+ GtkStyleContext *style;
+
+ style = gtk_widget_get_style_context (widget);
+
+ gtk_style_context_save (style);
+ gtk_style_context_set_state (style, GTK_STATE_FLAG_SELECTED);
+ gtk_style_context_get_background_color (style,
+ gtk_style_context_get_state (style),
+ bg);
+ if (bg->alpha == 0.0)
+ gtk_style_context_get_color (style,
+ gtk_style_context_get_state (style),
+ bg);
+ gtk_style_context_restore (style);
+
+ fg->red = bg->red * 0.7;
+ fg->green = bg->green * 0.7;
+ fg->blue = bg->blue * 0.7;
+ fg->alpha = bg->alpha;
+}
+#else
static void
-set_colors (GdkWindow *window,
+set_colors (GtkWidget *widget,
GdkColor *fg,
GdkColor *bg)
{
- GtkWidget *widget;
+ GtkWidget *style_widget;
+ GtkStyle *style;
GdkColor color;
- widget = gtk_invisible_new ();
+ style_widget = gtk_invisible_new ();
+ style = gtk_widget_get_style (style_widget);
- color = gtk_widget_get_style (widget)->dark [GTK_STATE_SELECTED];
+ color = style->dark [GTK_STATE_SELECTED];
fg->red = color.red;
fg->green = color.green;
fg->blue = color.blue;
- color = gtk_widget_get_style (widget)->bg [GTK_STATE_SELECTED];
+ color = style->bg [GTK_STATE_SELECTED];
bg->red = color.red;
bg->green = color.green;
bg->blue = color.blue;
}
+#endif
static void
gste_popsquares_set_property (GObject *object,
@@ -413,8 +461,13 @@ setup_colors (GSTEPopsquares *pop)
double s1, v1, s2, v2 = 0;
int h1, h2 = 0;
int nsquares;
+#if GTK_CHECK_VERSION (3, 0, 0)
+ GdkRGBA fg;
+ GdkRGBA bg;
+#else
GdkColor fg;
GdkColor bg;
+#endif
GdkWindow *window;
window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
@@ -424,24 +477,37 @@ setup_colors (GSTEPopsquares *pop)
return;
}
- set_colors (window, &fg, &bg);
+ set_colors (GTK_WIDGET (pop), &fg, &bg);
if (pop->priv->colors)
{
g_free (pop->priv->colors);
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ pop->priv->colors = g_new0 (GdkRGBA, pop->priv->ncolors);
+#else
pop->priv->colors = g_new0 (GdkColor, pop->priv->ncolors);
+#endif
+#if GTK_CHECK_VERSION (3, 0, 0)
rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1);
rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2);
-#if GTK_CHECK_VERSION (3, 0, 0)
make_color_ramp (h1, s1, v1,
h2, s2, v2,
pop->priv->colors,
pop->priv->ncolors,
TRUE);
#else
+ rgb_to_hsv ((double) (fg.red / 65535.0),
+ (double) (fg.green / 65535.0),
+ (double) (fg.blue / 65535.0),
+ &h1, &s1, &v1);
+ rgb_to_hsv ((double) (bg.red / 65535.0),
+ (double) (bg.green / 65535.0),
+ (double) (bg.blue / 65535.0),
+ &h2, &s2, &v2);
+
make_color_ramp (gtk_widget_get_colormap (GTK_WIDGET (pop)),
h1, s1, v1,
h2, s2, v2,
@@ -484,10 +550,12 @@ gste_popsquares_real_draw (GtkWidget *widget,
gste_popsquares_real_expose (GtkWidget *widget,
GdkEventExpose *event)
{
+ cairo_t *cr;
+
if (GTK_WIDGET_CLASS (parent_class)->expose_event) {
GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
}
- cairo_t *cr = gdk_cairo_create (event->window);
+ cr = gdk_cairo_create (event->window);
#endif
draw_frame (GSTE_POPSQUARES (widget), cr);
@@ -545,7 +613,6 @@ gste_popsquares_class_init (GSTEPopsquaresClass *klass)
g_type_class_add_private (klass, sizeof (GSTEPopsquaresPrivate));
}
-
static void
draw_frame (GSTEPopsquares *pop,
cairo_t *cr)
@@ -580,7 +647,11 @@ draw_frame (GSTEPopsquares *pop,
{
square *s = (square *) &pop->priv->squares [gw * y + x];
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gdk_cairo_set_source_rgba (cr, &(pop->priv->colors [s->color]));
+#else
gdk_cairo_set_source_color (cr, &(pop->priv->colors [s->color]));
+#endif
cairo_rectangle (cr, s->x, s->y,
border ? s->w - border : s->w,
border ? s->h - border : s->h);