#include "ev-transition-animation.h"
#include "ev-view-cursor.h"
#include "ev-page-cache.h"
-#include "ev-mapping.h"
enum {
PROP_0,
pview->animation = ev_transition_animation_new (effect);
- surface = EV_JOB_RENDER (pview->curr_job)->surface;
+ surface = pview->curr_job ? EV_JOB_RENDER (pview->curr_job)->surface : NULL;
ev_transition_animation_set_origin_surface (pview->animation,
surface != NULL ?
surface : pview->current_surface);
jump = new_page - pview->current_page;
if (jump == -1)
- surface = EV_JOB_RENDER (pview->prev_job)->surface;
+ surface = pview->prev_job ? EV_JOB_RENDER (pview->prev_job)->surface : NULL;
else if (jump == 1)
- surface = EV_JOB_RENDER (pview->next_job)->surface;
+ surface = pview->next_job ? EV_JOB_RENDER (pview->next_job)->surface : NULL;
else
surface = NULL;
if (surface)
/* Goto Window */
#define KEY_IS_NUMERIC(keyval) \
- ((keyval >= GDK_0 && keyval <= GDK_9) || (keyval >= GDK_KP_0 && keyval <= GDK_KP_9))
+ ((keyval >= GDK_KEY_0 && keyval <= GDK_KEY_9) || (keyval >= GDK_KEY_KP_0 && keyval <= GDK_KEY_KP_9))
/* Cut and paste from gtkwindow.c */
static void
EvViewPresentation *pview)
{
switch (event->keyval) {
- case GDK_Escape:
- case GDK_Tab:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
+ case GDK_KEY_Escape:
+ case GDK_KEY_Tab:
+ case GDK_KEY_KP_Tab:
+ case GDK_KEY_ISO_Left_Tab:
ev_view_presentation_goto_window_hide (pview);
return TRUE;
- case GDK_Return:
- case GDK_KP_Enter:
- case GDK_ISO_Enter:
- case GDK_BackSpace:
- case GDK_Delete:
+ case GDK_KEY_Return:
+ case GDK_KEY_KP_Enter:
+ case GDK_KEY_ISO_Enter:
+ case GDK_KEY_BackSpace:
+ case GDK_KEY_Delete:
return FALSE;
default:
if (!KEY_IS_NUMERIC (event->keyval))
static void
ev_view_presentation_goto_window_create (EvViewPresentation *pview)
{
- GtkWidget *frame, *hbox, *toplevel, *label;
+ GtkWidget *frame, *hbox, *label;
+ GtkWindow *toplevel, *goto_window;
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (pview));
+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (pview)));
+ goto_window = GTK_WINDOW (pview->goto_window);
if (pview->goto_window) {
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (pview->goto_window));
- else if (GTK_WINDOW (pview->goto_window)->group)
- gtk_window_group_remove_window (GTK_WINDOW (pview->goto_window)->group,
- GTK_WINDOW (pview->goto_window));
+ if (gtk_window_has_group (toplevel))
+ gtk_window_group_add_window (gtk_window_get_group (toplevel), goto_window);
+ else if (gtk_window_has_group (goto_window))
+ gtk_window_group_remove_window (gtk_window_get_group (goto_window), goto_window);
+
return;
}
pview->goto_window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_window_set_screen (GTK_WINDOW (pview->goto_window),
- gtk_widget_get_screen (GTK_WIDGET (pview)));
+ gtk_window_set_screen (goto_window, gtk_widget_get_screen (GTK_WIDGET (pview)));
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (pview->goto_window));
+ if (gtk_window_has_group (toplevel))
+ gtk_window_group_add_window (gtk_window_get_group (toplevel), goto_window);
- gtk_window_set_modal (GTK_WINDOW (pview->goto_window), TRUE);
+ gtk_window_set_modal (goto_window, TRUE);
g_signal_connect (pview->goto_window, "delete_event",
G_CALLBACK (ev_view_presentation_goto_window_delete_event),
gdouble x,
gdouble y)
{
- GdkRectangle page_area;
- GList *link_mapping;
- EvLink *link;
- gdouble width, height;
- gdouble new_x, new_y;
- gdouble scale;
+ GdkRectangle page_area;
+ EvMappingList *link_mapping;
+ EvLink *link;
+ gdouble width, height;
+ gdouble new_x, new_y;
+ gdouble scale;
if (!pview->page_cache)
return NULL;
}
static void
-ev_view_presentation_destroy (GtkObject *object)
+ev_view_presentation_dispose (GObject *object)
{
EvViewPresentation *pview = EV_VIEW_PRESENTATION (object);
pview->goto_entry = NULL;
}
- GTK_OBJECT_CLASS (ev_view_presentation_parent_class)->destroy (object);
+ G_OBJECT_CLASS (ev_view_presentation_parent_class)->dispose (object);
}
static void
}
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;
area.width = allocation.width;
area.height = allocation.height;
- gtk_paint_layout (gtk_widget_get_style (widget),
- gtk_widget_get_window (widget),
- gtk_widget_get_state (widget),
- FALSE,
- &area,
- widget,
- NULL,
- 15,
- 15,
- layout);
+ gtk_paint_layout (gtk_widget_get_style (widget),
+ cr,
+ gtk_widget_get_state (widget),
+ FALSE,
+ widget,
+ NULL,
+ 15,
+ 15,
+ layout);
pango_font_description_free (font_desc);
g_object_unref (layout);
}
static gboolean
-ev_view_presentation_expose_event (GtkWidget *widget,
- GdkEventExpose *event)
+ev_view_presentation_draw (GtkWidget *widget,
+ cairo_t *cr)
{
EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
GdkRectangle page_area;
GdkRectangle overlap;
cairo_surface_t *surface;
- cairo_t *cr;
+ GdkRectangle clip_rect;
+
+ if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect))
+ return FALSE;
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:
if (ev_transition_animation_ready (pview->animation)) {
ev_view_presentation_get_page_area (pview, &page_area);
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
+ cairo_save (cr);
/* normalize to x=0, y=0 */
cairo_translate (cr, page_area.x, page_area.y);
page_area.width--;
ev_transition_animation_paint (pview->animation, cr, page_area);
- cairo_destroy (cr);
+
+ cairo_restore (cr);
}
return TRUE;
}
ev_view_presentation_get_page_area (pview, &page_area);
- if (gdk_rectangle_intersect (&page_area, &(event->area), &overlap)) {
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
+ if (gdk_rectangle_intersect (&page_area, &clip_rect, &overlap)) {
+ cairo_save (cr);
/* Try to fix rounding errors. See bug #438760 */
if (overlap.width == page_area.width)
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);
+
+ cairo_restore (cr);
}
return FALSE;
EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
if (pview->state == EV_PRESENTATION_END)
- return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+ return gtk_bindings_activate_event (G_OBJECT (widget), event);
switch (event->keyval) {
- case GDK_b:
- case GDK_B:
- case GDK_period:
- case GDK_KP_Decimal:
+ case GDK_KEY_b:
+ case GDK_KEY_B:
+ case GDK_KEY_period:
+ case GDK_KEY_KP_Decimal:
if (pview->state == EV_PRESENTATION_BLACK)
ev_view_presentation_set_normal (pview);
else
ev_view_presentation_set_black (pview);
return TRUE;
- case GDK_w:
- case GDK_W:
+ case GDK_KEY_w:
+ case GDK_KEY_W:
if (pview->state == EV_PRESENTATION_WHITE)
ev_view_presentation_set_normal (pview);
else
ev_view_presentation_set_white (pview);
return TRUE;
- case GDK_Home:
+ case GDK_KEY_Home:
if (pview->state == EV_PRESENTATION_NORMAL) {
ev_view_presentation_update_current_page (pview, 0);
return TRUE;
}
break;
- case GDK_End:
+ case GDK_KEY_End:
if (pview->state == EV_PRESENTATION_NORMAL) {
gint page;
return TRUE;
}
- return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+ return gtk_bindings_activate_event (G_OBJECT (widget), event);
}
static gboolean
attributes.window_type = GDK_WINDOW_CHILD;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
gtk_widget_get_allocation (widget, &allocation);
attributes.x = allocation.x;
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes,
GDK_WA_X | GDK_WA_Y |
- GDK_WA_COLORMAP |
GDK_WA_VISUAL);
gdk_window_set_user_data (window, widget);
GdkModifierType modifiers,
GtkScrollType scroll)
{
- guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left;
+ guint keypad_keyval = keyval - GDK_KEY_Left + GDK_KEY_KP_Left;
gtk_binding_entry_add_signal (binding_set, keyval, modifiers,
"change_page", 1,
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
GtkBindingSet *binding_set;
klass->change_page = ev_view_presentation_change_page;
+ gobject_class->dispose = ev_view_presentation_dispose;
+
widget_class->size_request = ev_view_presentation_size_request;
widget_class->realize = ev_view_presentation_realize;
- widget_class->expose_event = ev_view_presentation_expose_event;
+ widget_class->draw = ev_view_presentation_draw;
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;
widget_class->motion_notify_event = ev_view_presentation_motion_notify_event;
widget_class->scroll_event = ev_view_presentation_scroll_event;
- gtk_object_class->destroy = ev_view_presentation_destroy;
-
gobject_class->constructor = ev_view_presentation_constructor;
gobject_class->set_property = ev_view_presentation_set_property;
G_TYPE_NONE);
binding_set = gtk_binding_set_by_class (klass);
- add_change_page_binding_keypad (binding_set, GDK_Left, 0, GTK_SCROLL_PAGE_BACKWARD);
- add_change_page_binding_keypad (binding_set, GDK_Right, 0, GTK_SCROLL_PAGE_FORWARD);
- add_change_page_binding_keypad (binding_set, GDK_Up, 0, GTK_SCROLL_PAGE_BACKWARD);
- add_change_page_binding_keypad (binding_set, GDK_Down, 0, GTK_SCROLL_PAGE_FORWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_space, 0,
+ add_change_page_binding_keypad (binding_set, GDK_KEY_Left, 0, GTK_SCROLL_PAGE_BACKWARD);
+ add_change_page_binding_keypad (binding_set, GDK_KEY_Right, 0, GTK_SCROLL_PAGE_FORWARD);
+ add_change_page_binding_keypad (binding_set, GDK_KEY_Up, 0, GTK_SCROLL_PAGE_BACKWARD);
+ add_change_page_binding_keypad (binding_set, GDK_KEY_Down, 0, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Page_Down, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Page_Up, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_J, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_J, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_H, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_H, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_L, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_L, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
- gtk_binding_entry_add_signal (binding_set, GDK_K, 0,
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_K, 0,
"change_page", 1,
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
}