[evince] [libview] Port to rendering-cleanup-next
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] [libview] Port to rendering-cleanup-next
- Date: Sun, 26 Sep 2010 14:45:43 +0000 (UTC)
commit dd353ebb32ac9dfd7a504a09c17fadb3386d7cc8
Author: Christian Persch <chpe gnome org>
Date: Sun Sep 12 14:42:38 2010 +0200
[libview] Port to rendering-cleanup-next
libview/ev-view-presentation.c | 57 ++++++++++++++++++++--
libview/ev-view.c | 102 +++++++++++++++++++++++++++++-----------
2 files changed, 127 insertions(+), 32 deletions(-)
---
diff --git a/libview/ev-view-presentation.c b/libview/ev-view-presentation.c
index 66d3589..8ce8c5d 100644
--- a/libview/ev-view-presentation.c
+++ b/libview/ev-view-presentation.c
@@ -957,7 +957,8 @@ ev_view_presentation_size_request (GtkWidget *widget,
}
static void
-ev_view_presentation_draw_end_page (EvViewPresentation *pview)
+ev_view_presentation_draw_end_page (EvViewPresentation *pview,
+ cairo_t *cr)
{
GtkWidget *widget = GTK_WIDGET (pview);
PangoLayout *layout;
@@ -983,6 +984,17 @@ ev_view_presentation_draw_end_page (EvViewPresentation *pview)
area.width = allocation.width;
area.height = allocation.height;
+#if GTK_CHECK_VERSION (2, 90, 8)
+ gtk_paint_layout (gtk_widget_get_style (widget),
+ cr,
+ gtk_widget_get_state (widget),
+ FALSE,
+ widget,
+ NULL,
+ 15,
+ 15,
+ layout);
+#else
gtk_paint_layout (gtk_widget_get_style (widget),
gtk_widget_get_window (widget),
gtk_widget_get_state (widget),
@@ -993,24 +1005,45 @@ ev_view_presentation_draw_end_page (EvViewPresentation *pview)
15,
15,
layout);
+#endif
pango_font_description_free (font_desc);
g_object_unref (layout);
}
+#if GTK_CHECK_VERSION (2, 90, 8)
+static gboolean
+ev_view_presentation_draw (GtkWidget *widget,
+ cairo_t *cr,
+ int draw_width G_GNUC_UNUSED,
+ int draw_height G_GNUC_UNUSED)
+#else
static gboolean
ev_view_presentation_expose_event (GtkWidget *widget,
GdkEventExpose *event)
+#endif
{
EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
GdkRectangle page_area;
GdkRectangle overlap;
cairo_surface_t *surface;
- cairo_t *cr;
+#if GTK_CHECK_VERSION (2, 90, 8)
+ cairo_rectangle_int_t clip_rect;
+ GdkRectangle *area = &clip_rect;
+#else
+ GdkWindow *bin_window;
+ cairo_t *cr = NULL;
+ GdkRectangle *area = &event->area;
+#endif
+
+#if GTK_CHECK_VERSION (2, 90, 8)
+ if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect))
+ return FALSE;
+#endif
switch (pview->state) {
case EV_PRESENTATION_END:
- ev_view_presentation_draw_end_page (pview);
+ ev_view_presentation_draw_end_page (pview, cr);
return FALSE;
case EV_PRESENTATION_BLACK:
case EV_PRESENTATION_WHITE:
@@ -1023,7 +1056,9 @@ ev_view_presentation_expose_event (GtkWidget *widget,
if (ev_transition_animation_ready (pview->animation)) {
ev_view_presentation_get_page_area (pview, &page_area);
+#if GTK_CHECK_VERSION (2, 90, 8)
cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#endif
/* normalize to x=0, y=0 */
cairo_translate (cr, page_area.x, page_area.y);
@@ -1033,7 +1068,10 @@ ev_view_presentation_expose_event (GtkWidget *widget,
page_area.width--;
ev_transition_animation_paint (pview->animation, cr, page_area);
+
+#if GTK_CHECK_VERSION (2, 90, 8)
cairo_destroy (cr);
+#endif
}
return TRUE;
@@ -1049,8 +1087,10 @@ ev_view_presentation_expose_event (GtkWidget *widget,
}
ev_view_presentation_get_page_area (pview, &page_area);
- if (gdk_rectangle_intersect (&page_area, &(event->area), &overlap)) {
+ if (gdk_rectangle_intersect (&page_area, area, &overlap)) {
+#if !GTK_CHECK_VERSION (2, 90, 8)
cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#endif
/* Try to fix rounding errors. See bug #438760 */
if (overlap.width == page_area.width)
@@ -1059,7 +1099,10 @@ ev_view_presentation_expose_event (GtkWidget *widget,
cairo_rectangle (cr, overlap.x, overlap.y, overlap.width, overlap.height);
cairo_set_source_surface (cr, surface, page_area.x, page_area.y);
cairo_fill (cr);
- cairo_destroy (cr);
+
+#if !GTK_CHECK_VERSION (2, 90, 8)
+ cairo_destroy (cr);
+#endif
}
return FALSE;
@@ -1377,7 +1420,11 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
widget_class->size_request = ev_view_presentation_size_request;
widget_class->realize = ev_view_presentation_realize;
+#if GTK_CHECK_VERSION (2, 90, 8)
+ widget_class->draw = ev_view_presentation_draw;
+#else
widget_class->expose_event = ev_view_presentation_expose_event;
+#endif
widget_class->key_press_event = ev_view_presentation_key_press_event;
widget_class->button_release_event = ev_view_presentation_button_release_event;
widget_class->focus_out_event = ev_view_presentation_focus_out;
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 0607771..1582f18 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -48,6 +48,7 @@
#define EV_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_VIEW, EvViewClass))
#define EV_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_VIEW))
#define EV_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_VIEW, EvViewClass))
+#include <../gnome-games/libgames-support/games-debug.h>
enum {
SIGNAL_BINDING_ACTIVATED,
@@ -157,8 +158,15 @@ static void ev_view_size_allocate (GtkWidget
static void ev_view_realize (GtkWidget *widget);
static gboolean ev_view_scroll_event (GtkWidget *widget,
GdkEventScroll *event);
+#if GTK_CHECK_VERSION (2, 90, 8)
+static gboolean ev_view_draw (GtkWidget *widget,
+ cairo_t *cr,
+ int draw_width,
+ int draw_height);
+#else
static gboolean ev_view_expose_event (GtkWidget *widget,
GdkEventExpose *event);
+#endif
static gboolean ev_view_popup_menu (GtkWidget *widget);
static gboolean ev_view_button_press_event (GtkWidget *widget,
GdkEventButton *event);
@@ -178,10 +186,13 @@ static AtkObject *ev_view_get_accessible (GtkWidget *widget)
/*** Drawing ***/
static void highlight_find_results (EvView *view,
+ cairo_t *cr,
int page);
static void highlight_forward_search_results (EvView *view,
+ cairo_t *cr,
int page);
static void focus_annotation (EvView *view,
+ cairo_t *cr,
int page,
GdkRectangle *clip);
static void draw_one_page (EvView *view,
@@ -3340,14 +3351,28 @@ find_selection_for_page (EvView *view,
return NULL;
}
+#if GTK_CHECK_VERSION (2, 90, 8)
+static gboolean
+ev_view_draw (GtkWidget *widget,
+ cairo_t *cr,
+ int draw_width G_GNUC_UNUSED,
+ int draw_height G_GNUC_UNUSED)
+#else
static gboolean
ev_view_expose_event (GtkWidget *widget,
GdkEventExpose *event)
+#endif
{
EvView *view = EV_VIEW (widget);
- GdkWindow *bin_window;
- cairo_t *cr;
gint i;
+#if GTK_CHECK_VERSION (2, 90, 8)
+ cairo_rectangle_int_t clip_rect;
+ GdkRectangle *area = &clip_rect;
+#else
+ GdkWindow *bin_window;
+ cairo_t *cr;
+ GdkRectangle *area = &event->area;
+#endif
if (view->loading) {
show_loading_window (view);
@@ -3359,8 +3384,13 @@ ev_view_expose_event (GtkWidget *widget,
if (view->document == NULL)
return FALSE;
- bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+#if GTK_CHECK_VERSION (2, 90, 8)
+ if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect))
+ return FALSE;
+#else
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
cr = gdk_cairo_create (bin_window);
+#endif
for (i = view->start_page; i >= 0 && i <= view->end_page; i++) {
GdkRectangle page_area;
@@ -3373,22 +3403,31 @@ ev_view_expose_event (GtkWidget *widget,
page_area.x -= view->scroll_x;
page_area.y -= view->scroll_y;
- draw_one_page (view, i, cr, &page_area, &border, &(event->area), &page_ready);
+ draw_one_page (view, i, cr, &page_area, &border, area, &page_ready);
if (page_ready && view->find_pages && view->highlight_find_results)
- highlight_find_results (view, i);
+ highlight_find_results (view, cr, i);
if (page_ready && EV_IS_DOCUMENT_ANNOTATIONS (view->document))
show_annotation_windows (view, i);
if (page_ready && view->focus_annotation)
- focus_annotation (view, i, &event->area);
+#if GTK_CHECK_VERSION (2, 90, 8)
+ focus_annotation (view, cr, i, &clip_rect);
+#else
+ focus_annotation (view, cr, i, &event->area);
+#endif
if (page_ready && view->synctex_result)
- highlight_forward_search_results (view, i);
+ highlight_forward_search_results (view, cr, i);
}
+#if GTK_CHECK_VERSION (2, 90, 8)
+ if (GTK_WIDGET_CLASS (ev_view_parent_class)->draw)
+ GTK_WIDGET_CLASS (ev_view_parent_class)->draw (widget, cr, draw_width, draw_height);
+#else
cairo_destroy (cr);
if (GTK_WIDGET_CLASS (ev_view_parent_class)->expose_event)
(* GTK_WIDGET_CLASS (ev_view_parent_class)->expose_event) (widget, event);
+#endif
return FALSE;
}
@@ -4203,22 +4242,21 @@ ev_view_style_set (GtkWidget *widget,
static void
draw_rubberband (EvView *view,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *rect,
gdouble alpha)
{
GtkStyle *style;
- GdkColor *fill_color_gdk;
+ const GdkColor *fill_color_gdk;
gdouble r, g, b;
- cairo_t *cr;
style = gtk_widget_get_style (GTK_WIDGET (view));
- fill_color_gdk = gdk_color_copy (&style->base[GTK_STATE_SELECTED]);
+ fill_color_gdk = &style->base[GTK_STATE_SELECTED];
r = fill_color_gdk->red / 65535.;
g = fill_color_gdk->green / 65535.;
b = fill_color_gdk->blue / 65535.;
- cr = gdk_cairo_create (window);
+ cairo_save (cr);
cairo_set_source_rgba (cr, r, g, b, alpha);
cairo_rectangle (cr,
@@ -4231,20 +4269,16 @@ draw_rubberband (EvView *view,
cairo_set_source_rgb (cr, r, g, b);
cairo_stroke (cr);
- cairo_destroy (cr);
-
- gdk_color_free (fill_color_gdk);
+ cairo_restore (cr);
}
static void
-highlight_find_results (EvView *view, int page)
+highlight_find_results (EvView *view,
+ cairo_t *cr,
+ int page)
{
gint i, n_results = 0;
- GdkWindow *bin_window;
-
- bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
-
n_results = ev_view_find_get_n_results (view, page);
for (i = 0; i < n_results; i++) {
@@ -4260,36 +4294,36 @@ highlight_find_results (EvView *view, int page)
rectangle = ev_view_find_get_result (view, page, i);
doc_rect_to_view_rect (view, page, rectangle, &view_rectangle);
- draw_rubberband (view, bin_window, &view_rectangle, alpha);
+ draw_rubberband (view, cr, &view_rectangle, alpha);
}
}
static void
-highlight_forward_search_results (EvView *view, int page)
+highlight_forward_search_results (EvView *view,
+ cairo_t *cr,
+ int page)
{
- GdkWindow *bin_window;
GdkRectangle rect;
- cairo_t *cr;
EvMapping *mapping = view->synctex_result;
if (GPOINTER_TO_INT (mapping->data) != page)
return;
- bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
doc_rect_to_view_rect (view, page, &mapping->area, &rect);
- cr = gdk_cairo_create (bin_window);
+ cairo_save (cr);
cairo_set_source_rgb (cr, 1., 0., 0.);
cairo_rectangle (cr,
rect.x - view->scroll_x,
rect.y - view->scroll_y,
rect.width, rect.height);
cairo_stroke (cr);
- cairo_destroy (cr);
+ cairo_restore (cr);
}
static void
focus_annotation (EvView *view,
+ cairo_t *cr,
gint page,
GdkRectangle *clip)
{
@@ -4302,6 +4336,15 @@ focus_annotation (EvView *view,
return;
doc_rect_to_view_rect (view, page, &mapping->area, &rect);
+#if GTK_CHECK_VERSION (2, 90, 8)
+ gtk_paint_focus (gtk_widget_get_style (widget),
+ cr,
+ gtk_widget_get_state (widget),
+ widget, NULL,
+ rect.x - view->scroll_x,
+ rect.y - view->scroll_y,
+ rect.width + 1, rect.height + 1);
+#else
gtk_paint_focus (gtk_widget_get_style (widget),
gtk_layout_get_bin_window (GTK_LAYOUT (view)),
gtk_widget_get_state (widget),
@@ -4309,6 +4352,7 @@ focus_annotation (EvView *view,
rect.x - view->scroll_x,
rect.y - view->scroll_y,
rect.width + 1, rect.height + 1);
+#endif
}
static void
@@ -4632,7 +4676,11 @@ ev_view_class_init (EvViewClass *class)
object_class->finalize = ev_view_finalize;
+#if GTK_CHECK_VERSION (2, 90, 8)
+ widget_class->draw = ev_view_draw;
+#else
widget_class->expose_event = ev_view_expose_event;
+#endif
widget_class->button_press_event = ev_view_button_press_event;
widget_class->motion_notify_event = ev_view_motion_notify_event;
widget_class->button_release_event = ev_view_button_release_event;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]