#include "ev-view.h"
#include "ev-pixbuf-cache.h"
#include "ev-page-cache.h"
+#include "ev-image.h"
+#include "ev-form-field.h"
+#include "ev-selection.h"
+#include "ev-transition-animation.h"
+
+#define DRAG_HISTORY 10
/* Information for middle clicking and moving around the doc */
typedef struct {
GdkPoint start;
gdouble hadj;
gdouble vadj;
+ guint drag_timeout_id;
+ guint release_timeout_id;
+ GdkPoint buffer[DRAG_HISTORY];
+ GdkPoint momentum;
} DragInfo;
+/* Autoscrolling */
+typedef struct {
+ gboolean autoscrolling;
+ guint last_y;
+ guint start_y;
+ guint timeout_id;
+} AutoScrollInfo;
+
/* Information for handling selection */
typedef struct {
- gboolean in_selection;
gboolean in_drag;
GdkPoint start;
+ gboolean in_selection;
GList *selections;
+ EvSelectionStyle style;
} SelectionInfo;
+/* Information for handling images DND */
+typedef struct {
+ gboolean in_drag;
+ GdkPoint start;
+ EvImage *image;
+} ImageDNDInfo;
+
typedef enum {
SCROLL_TO_KEEP_POSITION,
- SCROLL_TO_CURRENT_PAGE,
- SCROLL_TO_CENTER
+ SCROLL_TO_PAGE_POSITION,
+ SCROLL_TO_CENTER,
+ SCROLL_TO_FIND_LOCATION,
} PendingScroll;
typedef enum {
EV_VIEW_CURSOR_LINK,
EV_VIEW_CURSOR_WAIT,
EV_VIEW_CURSOR_HIDDEN,
- EV_VIEW_CURSOR_DRAG
+ EV_VIEW_CURSOR_DRAG,
+ EV_VIEW_CURSOR_AUTOSCROLL,
} EvViewCursor;
+typedef enum {
+ EV_PRESENTATION_NORMAL,
+ EV_PRESENTATION_BLACK,
+ EV_PRESENTATION_WHITE,
+ EV_PRESENTATION_END
+} EvPresentationState;
+
struct _EvView {
- GtkWidget parent_instance;
+ GtkLayout layout;
EvDocument *document;
- char *status;
char *find_status;
+ int find_result;
+ gboolean jump_to_find_result;
+ gboolean highlight_find_results;
+
+ EvPageCache *page_cache;
+ EvPixbufCache *pixbuf_cache;
+ EvViewCursor cursor;
+ EvJobRender *current_job;
/* Scrolling */
GtkAdjustment *hadjustment;
GtkAdjustment *vadjustment;
gint scroll_x;
- gint scroll_y;
+ gint scroll_y;
+
+ PendingScroll pending_scroll;
+ gboolean pending_resize;
+ EvPoint pending_point;
+
+ /* Current geometry */
+
+ gint start_page;
+ gint end_page;
+ gint current_page;
+
+ gint rotation;
+ gdouble scale;
+ gint spacing;
+ gdouble dpi;
+ gdouble max_scale;
+ gdouble min_scale;
+
+ gboolean loading;
+ gboolean continuous;
+ gboolean dual_page;
+ gboolean fullscreen;
+ gboolean presentation;
+ EvSizingMode sizing_mode;
+ cairo_surface_t *loading_text;
+
+ /* Presentation */
+ EvPresentationState presentation_state;
+ EvSizingMode sizing_mode_saved;
+ double scale_saved;
+ guint trans_timeout_id;
+
+ /* Common for button press handling */
+ int pressed_button;
/* Information for middle clicking and dragging around. */
DragInfo drag_info;
+
+ /* Autoscrolling */
+ AutoScrollInfo scroll_info;
/* Selection */
- gint motion_x;
- gint motion_y;
+ GdkPoint motion;
guint selection_update_id;
+ guint selection_scroll_id;
EvViewSelectionMode selection_mode;
SelectionInfo selection_info;
- int pressed_button;
- EvViewCursor cursor;
- GtkWidget *link_tooltip;
- EvLink *hovered_link;
-
- EvPageCache *page_cache;
- EvPixbufCache *pixbuf_cache;
+ /* Copy link address selection */
+ EvLinkAction *link_selected;
- gint start_page;
- gint end_page;
- gint current_page;
+ /* Image DND */
+ ImageDNDInfo image_dnd_info;
- EvJobRender *current_job;
-
- int find_page;
- int find_result;
- int spacing;
+#if !GTK_CHECK_VERSION (2, 11, 7)
+ /* Links */
+ GtkWidget *link_tooltip;
+ EvLink *hovered_link;
+#endif
- int rotation;
- double scale;
+ /* Goto Popup */
+ GtkWidget *goto_window;
+ GtkWidget *goto_entry;
- gboolean continuous;
- gboolean dual_page;
- gboolean fullscreen;
- gboolean presentation;
- EvSizingMode sizing_mode;
-
- PendingScroll pending_scroll;
- gboolean pending_resize;
+ EvTransitionAnimation *animation;
};
struct _EvViewClass {
- GtkWidgetClass parent_class;
+ GtkLayoutClass parent_class;
- void (*set_scroll_adjustments) (EvView *view,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
void (*binding_activated) (EvView *view,
- GtkScrollType scroll,
+ EvScrollType scroll,
gboolean horizontal);
void (*zoom_invalid) (EvView *view);
+ void (*handle_link) (EvView *view,
+ EvLink *link);
void (*external_link) (EvView *view,
+ EvLinkAction *action);
+ void (*popup_menu) (EvView *view,
EvLink *link);
};