[evince] libview: use css to draw the background of presentations
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] libview: use css to draw the background of presentations
- Date: Sun, 19 Jun 2016 11:27:12 +0000 (UTC)
commit 2b352b3a632e400a3ed19f1af4b5ffe4a41d1171
Author: Felipe Borges <felipeborges gnome org>
Date: Wed May 4 13:19:22 2016 +0200
libview: use css to draw the background of presentations
With the recent changes in gtk+, widgets have to draw themselves,
causing the current use of gdk_window_set_background_rgba to fail.
https://bugzilla.gnome.org/show_bug.cgi?id=765557
libview/ev-view-presentation.c | 83 +++++++++++++++++++++++++++++----------
shell/evince.css | 8 ++++
2 files changed, 69 insertions(+), 22 deletions(-)
---
diff --git a/libview/ev-view-presentation.c b/libview/ev-view-presentation.c
index 4a79eba..0239c93 100644
--- a/libview/ev-view-presentation.c
+++ b/libview/ev-view-presentation.c
@@ -113,8 +113,10 @@ static void ev_view_presentation_set_cursor_for_location (EvViewPresentation *pv
G_DEFINE_TYPE (EvViewPresentation, ev_view_presentation, GTK_TYPE_WIDGET)
+#if !GTK_CHECK_VERSION(3, 20, 0)
static GdkRGBA black = { 0., 0., 0., 1. };
static GdkRGBA white = { 1., 1., 1., 1. };
+#endif
static void
ev_view_presentation_set_normal (EvViewPresentation *pview)
@@ -125,8 +127,13 @@ ev_view_presentation_set_normal (EvViewPresentation *pview)
return;
pview->state = EV_PRESENTATION_NORMAL;
- gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
- gtk_widget_queue_draw (widget);
+#if GTK_CHECK_VERSION(3, 20, 0)
+ gtk_style_context_remove_class (gtk_widget_get_style_context (widget),
+ "white-mode");
+#else
+ gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
+ gtk_widget_queue_draw (widget);
+#endif
}
static void
@@ -138,8 +145,13 @@ ev_view_presentation_set_black (EvViewPresentation *pview)
return;
pview->state = EV_PRESENTATION_BLACK;
- gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
- gtk_widget_queue_draw (widget);
+#if GTK_CHECK_VERSION(3, 20, 0)
+ gtk_style_context_remove_class (gtk_widget_get_style_context (widget),
+ "white-mode");
+#else
+ gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
+ gtk_widget_queue_draw (widget);
+#endif
}
static void
@@ -151,8 +163,13 @@ ev_view_presentation_set_white (EvViewPresentation *pview)
return;
pview->state = EV_PRESENTATION_WHITE;
- gdk_window_set_background_rgba (gtk_widget_get_window (widget), &white);
- gtk_widget_queue_draw (widget);
+#if GTK_CHECK_VERSION(3, 20, 0)
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget),
+ "white-mode");
+#else
+ gdk_window_set_background_rgba (gtk_widget_get_window (widget), &white);
+ gtk_widget_queue_draw (widget);
+#endif
}
static void
@@ -1065,6 +1082,15 @@ ev_view_presentation_draw (GtkWidget *widget,
GdkRectangle overlap;
cairo_surface_t *surface;
GdkRectangle clip_rect;
+#if GTK_CHECK_VERSION(3, 20, 0)
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (pview));
+ gtk_render_background (context, cr,
+ 0, 0,
+ gtk_widget_get_allocated_width (widget),
+ gtk_widget_get_allocated_height (widget));
+#endif
if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect))
return FALSE;
@@ -1484,6 +1510,10 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
widget_class->motion_notify_event = ev_view_presentation_motion_notify_event;
widget_class->scroll_event = ev_view_presentation_scroll_event;
+#if GTK_CHECK_VERSION(3, 20, 0)
+ gtk_widget_class_set_css_name (widget_class, "evpresentationview");
+#endif
+
gobject_class->constructor = ev_view_presentation_constructor;
gobject_class->set_property = ev_view_presentation_set_property;
gobject_class->get_property = ev_view_presentation_get_property;
@@ -1587,28 +1617,37 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
}
+#if !GTK_CHECK_VERSION(3, 20, 0)
static void
-ev_view_presentation_init (EvViewPresentation *pview)
+ev_view_presentation_init_css(void)
{
static gsize initialization_value = 0;
+ if (g_once_init_enter (&initialization_value)) {
+ GtkCssProvider *provider;
+
+ provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (provider,
+ "EvViewPresentation {\n"
+ " background-color: black; }",
+ -1, NULL);
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ g_object_unref (provider);
+ g_once_init_leave (&initialization_value, 1);
+ }
+}
+#endif
+
+static void
+ev_view_presentation_init (EvViewPresentation *pview)
+{
gtk_widget_set_can_focus (GTK_WIDGET (pview), TRUE);
pview->is_constructing = TRUE;
-
- if (g_once_init_enter (&initialization_value)) {
- GtkCssProvider *provider;
-
- provider = gtk_css_provider_new ();
- gtk_css_provider_load_from_data (provider,
- "EvViewPresentation {\n"
- " background-color: black; }",
- -1, NULL);
- gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
- GTK_STYLE_PROVIDER (provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- g_object_unref (provider);
- g_once_init_leave (&initialization_value, 1);
- }
+#if !GTK_CHECK_VERSION(3, 20, 0)
+ ev_view_presentation_init_css();
+#endif
}
GtkWidget *
diff --git a/shell/evince.css b/shell/evince.css
index d8c4613..b8dd5fd 100644
--- a/shell/evince.css
+++ b/shell/evince.css
@@ -55,3 +55,11 @@ EvSidebarThumbnails.page-thumbnail.inverted {
GtkIconView {
gtk-key-bindings: MoveCursor;
}
+
+evpresentationview {
+ background-color: black;
+}
+
+evpresentationview.white-mode {
+ background-color: white;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]