summaryrefslogtreecommitdiff
path: root/src/gsd-media-keys-window.c
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2014-01-16 15:18:49 +0100
committerStefano Karapetsas <[email protected]>2014-01-16 15:18:49 +0100
commit4fd2ae34e50e63ef562356f804dbdea81341f4e2 (patch)
tree7a6ae12e358e5eb40fe5da532b67826832921ea6 /src/gsd-media-keys-window.c
parent971fadd332e3c46a4586441b7d116a9bfc4b2e9e (diff)
downloadmate-power-manager-4fd2ae34e50e63ef562356f804dbdea81341f4e2.tar.bz2
mate-power-manager-4fd2ae34e50e63ef562356f804dbdea81341f4e2.tar.xz
Copy paste latest OSD code from mate-settings-daemon
Diffstat (limited to 'src/gsd-media-keys-window.c')
-rw-r--r--src/gsd-media-keys-window.c551
1 files changed, 97 insertions, 454 deletions
diff --git a/src/gsd-media-keys-window.c b/src/gsd-media-keys-window.c
index fdc1ea1..67d2402 100644
--- a/src/gsd-media-keys-window.c
+++ b/src/gsd-media-keys-window.c
@@ -2,19 +2,22 @@
*
* Copyright (C) 2006-2007 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.
+ * 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.
*
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * 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., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*
*/
@@ -29,22 +32,11 @@
#include "gsd-media-keys-window.h"
-#define DIALOG_TIMEOUT 2000 /* dialog timeout in ms */
-#define DIALOG_FADE_TIMEOUT 1500 /* timeout before fade starts */
-#define FADE_TIMEOUT 10 /* timeout in ms between each frame of the fade */
-
-#define BG_ALPHA 0.75
-#define FG_ALPHA 1.00
+#define MSD_MEDIA_KEYS_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_TYPE_MEDIA_KEYS_WINDOW, MsdMediaKeysWindowPrivate))
-#define GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindowPrivate))
-
-struct GsdMediaKeysWindowPrivate
+struct MsdMediaKeysWindowPrivate
{
- guint is_composited : 1;
- guint hide_timeout_id;
- guint fade_timeout_id;
- double fade_out_alpha;
- GsdMediaKeysWindowAction action;
+ MsdMediaKeysWindowAction action;
char *icon_name;
gboolean show_level;
@@ -55,97 +47,10 @@ struct GsdMediaKeysWindowPrivate
GtkWidget *progress;
};
-G_DEFINE_TYPE (GsdMediaKeysWindow, gsd_media_keys_window, GTK_TYPE_WINDOW)
-
-static gboolean
-fade_timeout (GsdMediaKeysWindow *window)
-{
- if (window->priv->fade_out_alpha <= 0.0) {
- gtk_widget_hide (GTK_WIDGET (window));
-
- /* Reset it for the next time */
- window->priv->fade_out_alpha = 1.0;
- window->priv->fade_timeout_id = 0;
-
- return FALSE;
- } else {
- GdkRectangle rect;
- GtkWidget *win = GTK_WIDGET (window);
- GtkAllocation allocation;
-
- window->priv->fade_out_alpha -= 0.10;
-
- rect.x = 0;
- rect.y = 0;
- gtk_widget_get_allocation (win, &allocation);
- rect.width = allocation.width;
- rect.height = allocation.height;
-
- gtk_widget_realize (win);
- gdk_window_invalidate_rect (gtk_widget_get_window (win), &rect, FALSE);
- }
-
- return TRUE;
-}
-
-static gboolean
-hide_timeout (GsdMediaKeysWindow *window)
-{
- if (window->priv->is_composited) {
- window->priv->hide_timeout_id = 0;
- window->priv->fade_timeout_id = g_timeout_add (FADE_TIMEOUT,
- (GSourceFunc) fade_timeout,
- window);
- } else {
- gtk_widget_hide (GTK_WIDGET (window));
- }
-
- return FALSE;
-}
-
-static void
-remove_hide_timeout (GsdMediaKeysWindow *window)
-{
- if (window->priv->hide_timeout_id != 0) {
- g_source_remove (window->priv->hide_timeout_id);
- window->priv->hide_timeout_id = 0;
- }
-
- if (window->priv->fade_timeout_id != 0) {
- g_source_remove (window->priv->fade_timeout_id);
- window->priv->fade_timeout_id = 0;
- window->priv->fade_out_alpha = 1.0;
- }
-}
-
-static void
-add_hide_timeout (GsdMediaKeysWindow *window)
-{
- int timeout;
-
- if (window->priv->is_composited) {
- timeout = DIALOG_FADE_TIMEOUT;
- } else {
- timeout = DIALOG_TIMEOUT;
- }
- window->priv->hide_timeout_id = g_timeout_add (timeout,
- (GSourceFunc) hide_timeout,
- window);
-}
+G_DEFINE_TYPE (MsdMediaKeysWindow, msd_media_keys_window, MSD_TYPE_OSD_WINDOW)
static void
-update_window (GsdMediaKeysWindow *window)
-{
- remove_hide_timeout (window);
- add_hide_timeout (window);
-
- if (window->priv->is_composited) {
- gtk_widget_queue_draw (GTK_WIDGET (window));
- }
-}
-
-static void
-volume_controls_set_visible (GsdMediaKeysWindow *window,
+volume_controls_set_visible (MsdMediaKeysWindow *window,
gboolean visible)
{
if (window->priv->progress == NULL)
@@ -159,7 +64,7 @@ volume_controls_set_visible (GsdMediaKeysWindow *window,
}
static void
-window_set_icon_name (GsdMediaKeysWindow *window,
+window_set_icon_name (MsdMediaKeysWindow *window,
const char *name)
{
if (window->priv->image == NULL)
@@ -170,11 +75,11 @@ window_set_icon_name (GsdMediaKeysWindow *window,
}
static void
-action_changed (GsdMediaKeysWindow *window)
+action_changed (MsdMediaKeysWindow *window)
{
- if (! window->priv->is_composited) {
+ if (!msd_osd_window_is_composited (MSD_OSD_WINDOW (window))) {
switch (window->priv->action) {
- case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
+ case MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
volume_controls_set_visible (window, TRUE);
if (window->priv->volume_muted) {
@@ -184,7 +89,7 @@ action_changed (GsdMediaKeysWindow *window)
}
break;
- case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
+ case MSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
volume_controls_set_visible (window, window->priv->show_level);
window_set_icon_name (window, window->priv->icon_name);
break;
@@ -194,15 +99,15 @@ action_changed (GsdMediaKeysWindow *window)
}
}
- update_window (window);
+ msd_osd_window_update_and_hide (MSD_OSD_WINDOW (window));
}
static void
-volume_level_changed (GsdMediaKeysWindow *window)
+volume_level_changed (MsdMediaKeysWindow *window)
{
- update_window (window);
+ msd_osd_window_update_and_hide (MSD_OSD_WINDOW (window));
- if (!window->priv->is_composited && window->priv->progress != NULL) {
+ if (!msd_osd_window_is_composited (MSD_OSD_WINDOW (window)) && window->priv->progress != NULL) {
double fraction;
fraction = (double) window->priv->volume_level / 100.0;
@@ -213,11 +118,11 @@ volume_level_changed (GsdMediaKeysWindow *window)
}
static void
-volume_muted_changed (GsdMediaKeysWindow *window)
+volume_muted_changed (MsdMediaKeysWindow *window)
{
- update_window (window);
+ msd_osd_window_update_and_hide (MSD_OSD_WINDOW (window));
- if (! window->priv->is_composited) {
+ if (!msd_osd_window_is_composited (MSD_OSD_WINDOW (window))) {
if (window->priv->volume_muted) {
window_set_icon_name (window, "audio-volume-muted");
} else {
@@ -227,46 +132,46 @@ volume_muted_changed (GsdMediaKeysWindow *window)
}
void
-gsd_media_keys_window_set_action (GsdMediaKeysWindow *window,
- GsdMediaKeysWindowAction action)
+msd_media_keys_window_set_action (MsdMediaKeysWindow *window,
+ MsdMediaKeysWindowAction action)
{
- g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
- g_return_if_fail (action == GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
+ g_return_if_fail (MSD_IS_MEDIA_KEYS_WINDOW (window));
+ g_return_if_fail (action == MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
if (window->priv->action != action) {
window->priv->action = action;
action_changed (window);
} else {
- update_window (window);
+ msd_osd_window_update_and_hide (MSD_OSD_WINDOW (window));
}
}
void
-gsd_media_keys_window_set_action_custom (GsdMediaKeysWindow *window,
+msd_media_keys_window_set_action_custom (MsdMediaKeysWindow *window,
const char *icon_name,
gboolean show_level)
{
- g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+ g_return_if_fail (MSD_IS_MEDIA_KEYS_WINDOW (window));
g_return_if_fail (icon_name != NULL);
- if (window->priv->action != GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM ||
+ if (window->priv->action != MSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM ||
g_strcmp0 (window->priv->icon_name, icon_name) != 0 ||
window->priv->show_level != show_level) {
- window->priv->action = GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM;
+ window->priv->action = MSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM;
g_free (window->priv->icon_name);
window->priv->icon_name = g_strdup (icon_name);
window->priv->show_level = show_level;
action_changed (window);
} else {
- update_window (window);
+ msd_osd_window_update_and_hide (MSD_OSD_WINDOW (window));
}
}
void
-gsd_media_keys_window_set_volume_muted (GsdMediaKeysWindow *window,
+msd_media_keys_window_set_volume_muted (MsdMediaKeysWindow *window,
gboolean muted)
{
- g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+ g_return_if_fail (MSD_IS_MEDIA_KEYS_WINDOW (window));
if (window->priv->volume_muted != muted) {
window->priv->volume_muted = muted;
@@ -275,10 +180,10 @@ gsd_media_keys_window_set_volume_muted (GsdMediaKeysWindow *window,
}
void
-gsd_media_keys_window_set_volume_level (GsdMediaKeysWindow *window,
+msd_media_keys_window_set_volume_level (MsdMediaKeysWindow *window,
int level)
{
- g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+ g_return_if_fail (MSD_IS_MEDIA_KEYS_WINDOW (window));
if (window->priv->volume_level != level) {
window->priv->volume_level = level;
@@ -286,60 +191,8 @@ gsd_media_keys_window_set_volume_level (GsdMediaKeysWindow *window,
}
}
-static void
-rounded_rectangle (cairo_t* cr,
- gdouble aspect,
- gdouble x,
- gdouble y,
- gdouble corner_radius,
- gdouble width,
- gdouble height)
-{
- gdouble radius = corner_radius / aspect;
-
- cairo_move_to (cr, x + radius, y);
-
- cairo_line_to (cr,
- x + width - radius,
- y);
- cairo_arc (cr,
- x + width - radius,
- y + radius,
- radius,
- -90.0f * G_PI / 180.0f,
- 0.0f * G_PI / 180.0f);
- cairo_line_to (cr,
- x + width,
- y + height - radius);
- cairo_arc (cr,
- x + width - radius,
- y + height - radius,
- radius,
- 0.0f * G_PI / 180.0f,
- 90.0f * G_PI / 180.0f);
- cairo_line_to (cr,
- x + radius,
- y + height);
- cairo_arc (cr,
- x + radius,
- y + height - radius,
- radius,
- 90.0f * G_PI / 180.0f,
- 180.0f * G_PI / 180.0f);
- cairo_line_to (cr,
- x,
- y + radius);
- cairo_arc (cr,
- x + radius,
- y + radius,
- radius,
- 180.0f * G_PI / 180.0f,
- 270.0f * G_PI / 180.0f);
- cairo_close_path (cr);
-}
-
static GdkPixbuf *
-load_pixbuf (GsdMediaKeysWindow *window,
+load_pixbuf (MsdMediaKeysWindow *window,
const char *name,
int icon_size)
{
@@ -355,22 +208,9 @@ load_pixbuf (GsdMediaKeysWindow *window,
pixbuf = gtk_icon_theme_load_icon (theme,
name,
icon_size,
- GTK_ICON_LOOKUP_FORCE_SVG,
+ GTK_ICON_LOOKUP_FORCE_SIZE,
NULL);
- /* make sure the pixbuf is close to the requested size
- * this is necessary because GTK_ICON_LOOKUP_FORCE_SVG
- * seems to be broken */
- if (pixbuf != NULL) {
- int width;
-
- width = gdk_pixbuf_get_width (pixbuf);
- if (width < (float)icon_size * 0.75) {
- g_object_unref (pixbuf);
- pixbuf = NULL;
- }
- }
-
return pixbuf;
}
@@ -396,10 +236,10 @@ draw_eject (cairo_t *cr,
cairo_rel_line_to (cr, -width / 2, -tri_height);
cairo_rel_line_to (cr, -width / 2, tri_height);
cairo_close_path (cr);
- cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+ cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, MSD_OSD_WINDOW_FG_ALPHA);
cairo_fill_preserve (cr);
- cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+ cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, MSD_OSD_WINDOW_FG_ALPHA / 2);
cairo_set_line_width (cr, 2);
cairo_stroke (cr);
}
@@ -458,12 +298,12 @@ draw_cross (cairo_t *cr,
cairo_move_to (cr, cx, cy + size/2.0);
cairo_rel_line_to (cr, size, -size);
- cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+ cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, MSD_OSD_WINDOW_FG_ALPHA / 2);
cairo_set_line_width (cr, 14);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
cairo_stroke_preserve (cr);
- cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+ cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, MSD_OSD_WINDOW_FG_ALPHA);
cairo_set_line_width (cr, 10);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
cairo_stroke (cr);
@@ -497,16 +337,16 @@ draw_speaker (cairo_t *cr,
cairo_line_to (cr, _x0, _y0);
cairo_close_path (cr);
- cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+ cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, MSD_OSD_WINDOW_FG_ALPHA);
cairo_fill_preserve (cr);
- cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+ cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, MSD_OSD_WINDOW_FG_ALPHA / 2);
cairo_set_line_width (cr, 2);
cairo_stroke (cr);
}
static gboolean
-render_speaker (GsdMediaKeysWindow *window,
+render_speaker (MsdMediaKeysWindow *window,
cairo_t *cr,
double _x0,
double _y0,
@@ -545,7 +385,7 @@ render_speaker (GsdMediaKeysWindow *window,
}
gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
- cairo_paint_with_alpha (cr, FG_ALPHA);
+ cairo_paint_with_alpha (cr, MSD_OSD_WINDOW_FG_ALPHA);
g_object_unref (pixbuf);
@@ -553,37 +393,7 @@ render_speaker (GsdMediaKeysWindow *window,
}
static void
-color_reverse (const GdkColor *a,
- GdkColor *b)
-{
- gdouble red;
- gdouble green;
- gdouble blue;
- gdouble h;
- gdouble s;
- gdouble v;
-
- red = (gdouble) a->red / 65535.0;
- green = (gdouble) a->green / 65535.0;
- blue = (gdouble) a->blue / 65535.0;
-
- gtk_rgb_to_hsv (red, green, blue, &h, &s, &v);
-
- v = 0.5 + (0.5 - v);
- if (v > 1.0)
- v = 1.0;
- else if (v < 0.0)
- v = 0.0;
-
- gtk_hsv_to_rgb (h, s, v, &red, &green, &blue);
-
- b->red = red * 65535.0;
- b->green = green * 65535.0;
- b->blue = blue * 65535.0;
-}
-
-static void
-draw_volume_boxes (GsdMediaKeysWindow *window,
+draw_volume_boxes (MsdMediaKeysWindow *window,
cairo_t *cr,
double percentage,
double _x0,
@@ -604,20 +414,20 @@ draw_volume_boxes (GsdMediaKeysWindow *window,
style = gtk_widget_get_style (GTK_WIDGET (window));
/* bar background */
- color_reverse (&style->dark[GTK_STATE_NORMAL], &color);
+ msd_osd_window_color_reverse (&style->dark[GTK_STATE_NORMAL], &color);
r = (float)color.red / 65535.0;
g = (float)color.green / 65535.0;
b = (float)color.blue / 65535.0;
- rounded_rectangle (cr, 1.0, _x0, _y0, height / 6, width, height);
- cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
+ msd_osd_window_draw_rounded_rectangle (cr, 1.0, _x0, _y0, height / 6, width, height);
+ cairo_set_source_rgba (cr, r, g, b, MSD_OSD_WINDOW_FG_ALPHA / 2);
cairo_fill_preserve (cr);
/* bar border */
- color_reverse (&style->light[GTK_STATE_NORMAL], &color);
+ msd_osd_window_color_reverse (&style->light[GTK_STATE_NORMAL], &color);
r = (float)color.red / 65535.0;
g = (float)color.green / 65535.0;
b = (float)color.blue / 65535.0;
- cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
+ cairo_set_source_rgba (cr, r, g, b, MSD_OSD_WINDOW_FG_ALPHA / 2);
cairo_set_line_width (cr, 1);
cairo_stroke (cr);
@@ -628,13 +438,13 @@ draw_volume_boxes (GsdMediaKeysWindow *window,
r = (float)color.red / 65535.0;
g = (float)color.green / 65535.0;
b = (float)color.blue / 65535.0;
- rounded_rectangle (cr, 1.0, _x0 + 0.5, _y0 + 0.5, height / 6 - 0.5, x1, height - 1);
- cairo_set_source_rgba (cr, r, g, b, FG_ALPHA);
+ msd_osd_window_draw_rounded_rectangle (cr, 1.0, _x0 + 0.5, _y0 + 0.5, height / 6 - 0.5, x1, height - 1);
+ cairo_set_source_rgba (cr, r, g, b, MSD_OSD_WINDOW_FG_ALPHA);
cairo_fill (cr);
}
static void
-draw_action_volume (GsdMediaKeysWindow *window,
+draw_action_volume (MsdMediaKeysWindow *window,
cairo_t *cr)
{
int window_width;
@@ -736,7 +546,7 @@ draw_action_volume (GsdMediaKeysWindow *window,
}
static gboolean
-render_custom (GsdMediaKeysWindow *window,
+render_custom (MsdMediaKeysWindow *window,
cairo_t *cr,
double _x0,
double _y0,
@@ -763,7 +573,7 @@ render_custom (GsdMediaKeysWindow *window,
}
gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
- cairo_paint_with_alpha (cr, FG_ALPHA);
+ cairo_paint_with_alpha (cr, MSD_OSD_WINDOW_FG_ALPHA);
g_object_unref (pixbuf);
@@ -771,7 +581,7 @@ render_custom (GsdMediaKeysWindow *window,
}
static void
-draw_action_custom (GsdMediaKeysWindow *window,
+draw_action_custom (MsdMediaKeysWindow *window,
cairo_t *cr)
{
int window_width;
@@ -835,14 +645,20 @@ draw_action_custom (GsdMediaKeysWindow *window,
}
static void
-draw_action (GsdMediaKeysWindow *window,
- cairo_t *cr)
+#if GTK_CHECK_VERSION (3, 0, 0)
+msd_media_keys_window_draw_when_composited (MsdOsdWindow *osd_window,
+#else
+msd_media_keys_window_expose_when_composited (MsdOsdWindow *osd_window,
+#endif
+ cairo_t *cr)
{
+ MsdMediaKeysWindow *window = MSD_MEDIA_KEYS_WINDOW (osd_window);
+
switch (window->priv->action) {
- case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
+ case MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
draw_action_volume (window, cr);
break;
- case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
+ case MSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
draw_action_custom (window, cr);
break;
default:
@@ -850,195 +666,33 @@ draw_action (GsdMediaKeysWindow *window,
}
}
-static gboolean
-on_expose_event (GtkWidget *widget,
- GdkEventExpose *event,
- GsdMediaKeysWindow *window)
-{
- cairo_t *context;
- cairo_t *cr;
- cairo_surface_t *surface;
- int width;
- int height;
- GtkStyle *style;
- GdkColor color;
- double r, g, b;
-
- context = gdk_cairo_create (gtk_widget_get_window (widget));
-
- style = gtk_widget_get_style (widget);
- cairo_set_operator (context, CAIRO_OPERATOR_SOURCE);
- gtk_window_get_size (GTK_WINDOW (widget), &width, &height);
-
- surface = cairo_surface_create_similar (cairo_get_target (context),
- CAIRO_CONTENT_COLOR_ALPHA,
- width,
- height);
-
- if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) {
- goto done;
- }
-
- cr = cairo_create (surface);
- if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
- goto done;
- }
- cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0);
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
- cairo_paint (cr);
-
- /* draw a box */
- rounded_rectangle (cr, 1.0, 0.5, 0.5, height / 10, width-1, height-1);
- color_reverse (&style->bg[GTK_STATE_NORMAL], &color);
- r = (float)color.red / 65535.0;
- g = (float)color.green / 65535.0;
- b = (float)color.blue / 65535.0;
- cairo_set_source_rgba (cr, r, g, b, BG_ALPHA);
- cairo_fill_preserve (cr);
-
- color_reverse (&style->text_aa[GTK_STATE_NORMAL], &color);
- r = (float)color.red / 65535.0;
- g = (float)color.green / 65535.0;
- b = (float)color.blue / 65535.0;
- cairo_set_source_rgba (cr, r, g, b, BG_ALPHA / 2);
- cairo_set_line_width (cr, 1);
- cairo_stroke (cr);
-
- /* draw action */
- draw_action (window, cr);
-
- cairo_destroy (cr);
-
- /* Make sure we have a transparent background */
- cairo_rectangle (context, 0, 0, width, height);
- cairo_set_source_rgba (context, 0.0, 0.0, 0.0, 0.0);
- cairo_fill (context);
-
- cairo_set_source_surface (context, surface, 0, 0);
- cairo_paint_with_alpha (context, window->priv->fade_out_alpha);
-
- done:
- if (surface != NULL) {
- cairo_surface_destroy (surface);
- }
- cairo_destroy (context);
-
- return FALSE;
-}
-
-static void
-gsd_media_keys_window_real_show (GtkWidget *widget)
-{
- GsdMediaKeysWindow *window;
-
- if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show) {
- GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show (widget);
- }
-
- window = GSD_MEDIA_KEYS_WINDOW (widget);
- remove_hide_timeout (window);
- add_hide_timeout (window);
-}
-
-static void
-gsd_media_keys_window_real_hide (GtkWidget *widget)
-{
- GsdMediaKeysWindow *window;
-
- if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide) {
- GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide (widget);
- }
-
- window = GSD_MEDIA_KEYS_WINDOW (widget);
- remove_hide_timeout (window);
-}
-
-static void
-gsd_media_keys_window_real_realize (GtkWidget *widget)
-{
- GdkColormap *colormap;
- GtkAllocation allocation;
- GdkBitmap *mask;
- cairo_t *cr;
-
- colormap = gdk_screen_get_rgba_colormap (gtk_widget_get_screen (widget));
-
- if (colormap != NULL) {
- gtk_widget_set_colormap (widget, colormap);
- }
-
- if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize) {
- GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize (widget);
- }
-
- gtk_widget_get_allocation (widget, &allocation);
- mask = gdk_pixmap_new (gtk_widget_get_window (widget),
- allocation.width,
- allocation.height,
- 1);
- cr = gdk_cairo_create (mask);
-
- cairo_set_source_rgba (cr, 1., 1., 1., 0.);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_paint (cr);
-
- /* make the whole window ignore events */
- gdk_window_input_shape_combine_mask (gtk_widget_get_window (widget), mask, 0, 0);
- g_object_unref (mask);
- cairo_destroy (cr);
-}
-
static void
-gsd_media_keys_window_class_init (GsdMediaKeysWindowClass *klass)
+msd_media_keys_window_class_init (MsdMediaKeysWindowClass *klass)
{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- widget_class->show = gsd_media_keys_window_real_show;
- widget_class->hide = gsd_media_keys_window_real_hide;
- widget_class->realize = gsd_media_keys_window_real_realize;
+ MsdOsdWindowClass *osd_window_class = MSD_OSD_WINDOW_CLASS (klass);
- g_type_class_add_private (klass, sizeof (GsdMediaKeysWindowPrivate));
-}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ osd_window_class->draw_when_composited = msd_media_keys_window_draw_when_composited;
+#else
+ osd_window_class->expose_when_composited = msd_media_keys_window_expose_when_composited;
+#endif
-gboolean
-gsd_media_keys_window_is_valid (GsdMediaKeysWindow *window)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
- return gdk_screen_is_composited (screen) == window->priv->is_composited;
+ g_type_class_add_private (klass, sizeof (MsdMediaKeysWindowPrivate));
}
static void
-gsd_media_keys_window_init (GsdMediaKeysWindow *window)
+msd_media_keys_window_init (MsdMediaKeysWindow *window)
{
GdkScreen *screen;
- window->priv = GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window);
+ window->priv = MSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window);
screen = gtk_widget_get_screen (GTK_WIDGET (window));
- window->priv->is_composited = gdk_screen_is_composited (screen);
-
- if (window->priv->is_composited) {
- gdouble scalew, scaleh, scale;
- gint size;
-
- gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
- gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
-
- /* assume 130x130 on a 640x480 display and scale from there */
- scalew = gdk_screen_get_width (screen) / 640.0;
- scaleh = gdk_screen_get_height (screen) / 480.0;
- scale = MIN (scalew, scaleh);
- size = 130 * MAX (1, scale);
-
- gtk_window_set_default_size (GTK_WINDOW (window), size, size);
- g_signal_connect (window, "expose-event", G_CALLBACK (on_expose_event), window);
-
- window->priv->fade_out_alpha = 1.0;
- } else {
+ if (!msd_osd_window_is_composited (MSD_OSD_WINDOW (window))) {
GtkBuilder *builder;
- const gchar *objects[] = {"acme_frame", NULL};
- GtkWidget *frame;
+ const gchar *objects[] = {"acme_box", NULL};
+ GtkWidget *box;
builder = gtk_builder_new ();
gtk_builder_add_objects_from_file (builder,
@@ -1048,32 +702,21 @@ gsd_media_keys_window_init (GsdMediaKeysWindow *window)
window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image"));
window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar"));
- frame = GTK_WIDGET (gtk_builder_get_object (builder,
- "acme_frame"));
+ box = GTK_WIDGET (gtk_builder_get_object (builder, "acme_box"));
- if (frame != NULL) {
- gtk_container_add (GTK_CONTAINER (window), frame);
- gtk_widget_show_all (frame);
+ if (box != NULL) {
+ gtk_container_add (GTK_CONTAINER (window), box);
+ gtk_widget_show_all (box);
}
/* The builder needs to stay alive until the window
- takes ownership of the frame (and its children) */
+ takes ownership of the box (and its children) */
g_object_unref (builder);
}
}
GtkWidget *
-gsd_media_keys_window_new (void)
+msd_media_keys_window_new (void)
{
- GObject *object;
-
- object = g_object_new (GSD_TYPE_MEDIA_KEYS_WINDOW,
- "type", GTK_WINDOW_POPUP,
- "type-hint", GDK_WINDOW_TYPE_HINT_NOTIFICATION,
- "skip-taskbar-hint", TRUE,
- "skip-pager-hint", TRUE,
- "focus-on-map", FALSE,
- NULL);
-
- return GTK_WIDGET (object);
+ return g_object_new (MSD_TYPE_MEDIA_KEYS_WINDOW, NULL);
}