Skip to content

Commit 1d90b70

Browse files
raveit65raveit65
authored andcommitted
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 view: Redraw ev-view-presentation when setting normal and black mode. The black and normal mode are the same from the CSS point of view. The difference is that in the draw function the page is not drawn in black mode. Hence, we need to explicitly queue a redraw in these cases. Since setting the white mode add a CSS class, this queues the redraw for us. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=772390. origin commits: https://git.gnome.org/browse/evince/commit/?id=2b352b3 https://git.gnome.org/browse/evince/commit/?id=b3f49f4 Fixes #232
1 parent 1b1f2c5 commit 1d90b70

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

‎libview/ev-view-presentation.c‎

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,6 @@ static void ev_view_presentation_set_cursor_for_location (EvViewPresentation *pv
116116

117117
G_DEFINE_TYPE (EvViewPresentation, ev_view_presentation, GTK_TYPE_WIDGET)
118118

119-
static GdkRGBA black = { 0., 0., 0., 1. };
120-
static GdkRGBA white = { 1., 1., 1., 1. };
121-
122119
static void
123120
ev_view_presentation_set_normal (EvViewPresentation *pview)
124121
{
@@ -128,7 +125,8 @@ ev_view_presentation_set_normal (EvViewPresentation *pview)
128125
return;
129126

130127
pview->state = EV_PRESENTATION_NORMAL;
131-
gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
128+
gtk_style_context_remove_class (gtk_widget_get_style_context (widget),
129+
"white-mode");
132130
gtk_widget_queue_draw (widget);
133131
}
134132

@@ -141,7 +139,8 @@ ev_view_presentation_set_black (EvViewPresentation *pview)
141139
return;
142140

143141
pview->state = EV_PRESENTATION_BLACK;
144-
gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black);
142+
gtk_style_context_remove_class (gtk_widget_get_style_context (widget),
143+
"white-mode");
145144
gtk_widget_queue_draw (widget);
146145
}
147146

@@ -154,8 +153,8 @@ ev_view_presentation_set_white (EvViewPresentation *pview)
154153
return;
155154

156155
pview->state = EV_PRESENTATION_WHITE;
157-
gdk_window_set_background_rgba (gtk_widget_get_window (widget), &white);
158-
gtk_widget_queue_draw (widget);
156+
gtk_style_context_add_class (gtk_widget_get_style_context (widget),
157+
"white-mode");
159158
}
160159

161160
static void
@@ -1026,6 +1025,13 @@ ev_view_presentation_draw (GtkWidget *widget,
10261025
cairo_surface_t *surface;
10271026
cairo_rectangle_int_t clip_rect;
10281027
GdkRectangle *area = &clip_rect;
1028+
GtkStyleContext *context;
1029+
1030+
context = gtk_widget_get_style_context (GTK_WIDGET (pview));
1031+
gtk_render_background (context, cr,
1032+
0, 0,
1033+
gtk_widget_get_allocated_width (widget),
1034+
gtk_widget_get_allocated_height (widget));
10291035

10301036
if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect))
10311037
return FALSE;
@@ -1413,6 +1419,8 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
14131419
widget_class->motion_notify_event = ev_view_presentation_motion_notify_event;
14141420
widget_class->scroll_event = ev_view_presentation_scroll_event;
14151421

1422+
gtk_widget_class_set_css_name (widget_class, "evpresentationview");
1423+
14161424
gobject_class->dispose = ev_view_presentation_dispose;
14171425

14181426
gobject_class->constructor = ev_view_presentation_constructor;
@@ -1514,25 +1522,8 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
15141522
static void
15151523
ev_view_presentation_init (EvViewPresentation *pview)
15161524
{
1517-
static gsize initialization_value = 0;
1518-
15191525
gtk_widget_set_can_focus (GTK_WIDGET (pview), TRUE);
1520-
pview->is_constructing = TRUE;
1521-
1522-
if (g_once_init_enter (&initialization_value)) {
1523-
GtkCssProvider *provider;
1524-
1525-
provider = gtk_css_provider_new ();
1526-
gtk_css_provider_load_from_data (provider,
1527-
"EvViewPresentation {\n"
1528-
" background-color: black; }",
1529-
-1, NULL);
1530-
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
1531-
GTK_STYLE_PROVIDER (provider),
1532-
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
1533-
g_object_unref (provider);
1534-
g_once_init_leave (&initialization_value, 1);
1535-
}
1526+
pview->is_constructing = TRUE;
15361527
}
15371528

15381529
GtkWidget *

‎shell/atril.css‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
11
#ev-fullscreen-toolbar {
22

33
}
4+
5+
#ev-loading-message {
6+
background-color: @theme_selected_bg_color;
7+
color: @theme_selected_fg_color;
8+
border-radius: 3px;
9+
padding: 8px;
10+
}
11+
12+
evpresentationview {
13+
background-color: black;
14+
}
15+
16+
evpresentationview.white-mode {
17+
background-color: white;
18+
}
19+

0 commit comments

Comments
 (0)