+/*** Scrolling ***/
+static void scroll_to_current_page (EvView *view,
+ GtkOrientation orientation);
+static void ev_view_set_scroll_adjustments (EvView *view,
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
+static void view_update_range_and_current_page (EvView *view);
+static void set_scroll_adjustment (EvView *view,
+ GtkOrientation orientation,
+ GtkAdjustment *adjustment);
+static void ev_view_set_scroll_adjustments (EvView *view,
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
+static void add_scroll_binding_keypad (GtkBindingSet *binding_set,
+ guint keyval,
+ GtkScrollType scroll,
+ gboolean horizontal);
+static void ev_view_binding_activated (EvView *view,
+ GtkScrollType scroll,
+ gboolean horizontal);
+static void ensure_rectangle_is_visible (EvView *view,
+ GdkRectangle *rect);
+
+/*** Geometry computations ***/
+static void compute_border (EvView *view,
+ int width,
+ int height,
+ GtkBorder *border);
+static void get_page_y_offset (EvView *view,
+ int page,
+ double zoom,
+ int *y_offset);
+static gboolean get_page_extents (EvView *view,
+ gint page,
+ GdkRectangle *page_area,
+ GtkBorder *border);
+static void view_rect_to_doc_rect (EvView *view,
+ GdkRectangle *view_rect,
+ GdkRectangle *page_area,
+ EvRectangle *doc_rect);
+static void doc_rect_to_view_rect (EvView *view,
+ int page,
+ EvRectangle *doc_rect,
+ GdkRectangle *view_rect);
+static void find_page_at_location (EvView *view,
+ gdouble x,
+ gdouble y,
+ gint *page,
+ gint *x_offset,
+ gint *y_offset);
+
+/*** Hyperrefs ***/
+static EvLink* get_link_at_location (EvView *view,
+ gdouble x,
+ gdouble y);
+static void go_to_link (EvView *view,
+ EvLink *link);
+static char* status_message_from_link (EvView *view,
+ EvLink *link);
+
+/*** GtkWidget implementation ***/
+static void ev_view_size_request_continuous_dual_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_continuous (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_dual_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_single_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void ev_view_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void ev_view_realize (GtkWidget *widget);
+static void ev_view_unrealize (GtkWidget *widget);
+static gboolean ev_view_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event);
+static gboolean ev_view_expose_event (GtkWidget *widget,
+ GdkEventExpose *event);
+static gboolean ev_view_button_press_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean ev_view_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event);
+static gboolean ev_view_button_release_event (GtkWidget *widget,
+ GdkEventButton *event);
+
+/*** Drawing ***/
+static guint32 ev_gdk_color_to_rgb (const GdkColor *color);
+static void draw_rubberband (GtkWidget *widget,
+ GdkWindow *window,
+ const GdkRectangle *rect,
+ guchar alpha);
+static void highlight_find_results (EvView *view,
+ int page);
+static void draw_one_page (EvView *view,
+ gint page,
+ GdkRectangle *page_area,
+ GtkBorder *border,
+ GdkRectangle *expose_area);
+
+/*** Callbacks ***/
+static void find_changed_cb (EvDocument *document,
+ int page,
+ EvView *view);
+static void job_finished_cb (EvPixbufCache *pixbuf_cache,
+ EvView *view);
+static void page_changed_cb (EvPageCache *page_cache,
+ int new_page,
+ EvView *view);
+static void on_adjustment_value_changed (GtkAdjustment *adjustment,
+ EvView *view);
+
+/*** GObject ***/
+static void ev_view_finalize (GObject *object);
+static void ev_view_destroy (GtkObject *object);
+static void ev_view_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void ev_view_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void ev_view_class_init (EvViewClass *class);
+static void ev_view_init (EvView *view);
+
+/*** Zoom and sizing ***/
+static double zoom_for_size_fit_width (int doc_width,
+ int doc_height,
+ int target_width,
+ int target_height,
+ int vsb_width);
+static double zoom_for_size_best_fit (int doc_width,
+ int doc_height,
+ int target_width,
+ int target_height,
+ int vsb_width,
+ int hsb_width);
+static void ev_view_zoom_for_size_presentation (EvView *view,
+ int width,
+ int height);
+static void ev_view_zoom_for_size_continuous_and_dual_page (EvView *view,
+ int width,
+ int height,
+ int vsb_width,
+ int hsb_height);
+static void ev_view_zoom_for_size_continuous (EvView *view,
+ int width,
+ int height,
+ int vsb_width,
+ int hsb_height);
+static void ev_view_zoom_for_size_dual_page (EvView *view,
+ int width,
+ int height,
+ int vsb_width,
+ int hsb_height);
+static void ev_view_zoom_for_size_single_page (EvView *view,
+ int width,
+ int height,
+ int vsb_width,
+ int hsb_height);
+/*** Cursors ***/
+static GdkCursor* ev_view_create_invisible_cursor (void);
+static void ev_view_set_cursor (EvView *view,
+ EvViewCursor new_cursor);
+
+/*** Status messages ***/
+static void ev_view_set_status (EvView *view,
+ const char *message);
+static void update_find_status_message (EvView *view);
+static void ev_view_set_find_status (EvView *view,
+ const char *message);
+/*** Find ***/
+static void jump_to_find_result (EvView *view);
+static void jump_to_find_page (EvView *view);
+
+/*** Selection ***/
+static void compute_selections (EvView *view,
+ GdkRectangle *view_rect);
+static void clear_selection (EvView *view);
+static char* get_selected_text (EvView *ev_view);
+static void ev_view_primary_get_cb (GtkClipboard *clipboard,
+ GtkSelectionData *selection_data,
+ guint info,
+ gpointer data);
+static void ev_view_primary_clear_cb (GtkClipboard *clipboard,
+ gpointer data);
+static void ev_view_update_primary_selection (EvView *ev_view);