]> www.fi.muni.cz Git - evince.git/blob - libview/ev-view-private.h
Move EvView specific code to a libeviview library so that it can be
[evince.git] / libview / ev-view-private.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
2 /* this file is part of evince, a gnome document viewer
3  *
4  *  Copyright (C) 2004 Red Hat, Inc
5  *
6  * Evince is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Evince is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef __EV_VIEW_PRIVATE_H__
22 #define __EV_VIEW_PRIVATE_H__
23
24 #include "ev-view.h"
25 #include "ev-pixbuf-cache.h"
26 #include "ev-page-cache.h"
27 #include "ev-jobs.h"
28 #include "ev-image.h"
29 #include "ev-form-field.h"
30 #include "ev-selection.h"
31 #include "ev-transition-animation.h"
32
33 #define DRAG_HISTORY 10
34
35 /* Information for middle clicking and moving around the doc */
36 typedef struct {
37         gboolean in_drag;
38         GdkPoint start;
39         gdouble hadj;
40         gdouble vadj;
41         guint drag_timeout_id;
42         guint release_timeout_id;
43         GdkPoint buffer[DRAG_HISTORY];
44         GdkPoint momentum;
45 } DragInfo;
46
47 /* Autoscrolling */
48 typedef struct {
49         gboolean autoscrolling;
50         guint last_y;
51         guint start_y;
52         guint timeout_id;       
53 } AutoScrollInfo;
54
55 /* Information for handling selection */
56 typedef struct {
57         gboolean in_drag;
58         GdkPoint start;
59         gboolean in_selection;
60         GList *selections;
61         EvSelectionStyle style;
62 } SelectionInfo;
63
64 /* Information for handling images DND */
65 typedef struct {
66         gboolean in_drag;
67         GdkPoint start;
68         EvImage *image;
69 } ImageDNDInfo;
70
71 typedef enum {
72         SCROLL_TO_KEEP_POSITION,
73         SCROLL_TO_PAGE_POSITION,
74         SCROLL_TO_CENTER,
75         SCROLL_TO_FIND_LOCATION,
76 } PendingScroll;
77
78 typedef enum {
79         EV_VIEW_CURSOR_NORMAL,
80         EV_VIEW_CURSOR_IBEAM,
81         EV_VIEW_CURSOR_LINK,
82         EV_VIEW_CURSOR_WAIT,
83         EV_VIEW_CURSOR_HIDDEN,
84         EV_VIEW_CURSOR_DRAG,
85         EV_VIEW_CURSOR_AUTOSCROLL,
86 } EvViewCursor;
87
88 typedef enum {
89         EV_PRESENTATION_NORMAL,
90         EV_PRESENTATION_BLACK,
91         EV_PRESENTATION_WHITE,
92         EV_PRESENTATION_END
93 } EvPresentationState;
94
95 struct _EvView {
96         GtkLayout layout;
97
98         EvDocument *document;
99
100         /* Find */
101         GList **find_pages;
102         gint find_result;
103         gboolean jump_to_find_result;
104         gboolean highlight_find_results;
105         
106         EvPageCache *page_cache;
107         EvPixbufCache *pixbuf_cache;
108         EvViewCursor cursor;
109         EvJobRender *current_job;
110
111         /* Scrolling */
112         GtkAdjustment *hadjustment;
113         GtkAdjustment *vadjustment;
114
115         gint scroll_x;
116         gint scroll_y;  
117
118         PendingScroll pending_scroll;
119         gboolean      pending_resize;
120         EvPoint       pending_point;
121
122         /* Current geometry */
123     
124         gint start_page;
125         gint end_page;
126         gint current_page;
127
128         gint rotation;
129         gdouble scale;
130         gint spacing;
131         gdouble dpi;
132         gdouble max_scale;
133         gdouble min_scale;
134
135         gboolean loading;
136         gboolean continuous;
137         gboolean dual_page;
138         gboolean fullscreen;
139         gboolean presentation;
140         EvSizingMode sizing_mode;
141         cairo_surface_t *loading_text;
142
143         /* Presentation */
144         EvPresentationState presentation_state;
145         EvSizingMode sizing_mode_saved;
146         double scale_saved;
147         guint  trans_timeout_id;
148
149         /* Common for button press handling */
150         int pressed_button;
151
152         /* Information for middle clicking and dragging around. */
153         DragInfo drag_info;
154         
155         /* Autoscrolling */
156         AutoScrollInfo scroll_info;
157
158         /* Selection */
159         GdkPoint motion;
160         guint selection_update_id;
161         guint selection_scroll_id;
162
163         EvViewSelectionMode selection_mode;
164         SelectionInfo selection_info;
165
166         /* Copy link address selection */
167         EvLinkAction *link_selected;
168
169         /* Image DND */
170         ImageDNDInfo image_dnd_info;
171
172         /* Goto Popup */
173         GtkWidget *goto_window;
174         GtkWidget *goto_entry;
175
176         EvTransitionAnimation *animation;
177 };
178
179 struct _EvViewClass {
180         GtkLayoutClass parent_class;
181
182         void    (*binding_activated)      (EvView         *view,
183                                            GtkScrollType   scroll,
184                                            gboolean        horizontal);
185         void    (*zoom_invalid)           (EvView         *view);
186         void    (*handle_link)            (EvView         *view,
187                                            EvLink         *link);
188         void    (*external_link)          (EvView         *view,
189                                            EvLinkAction   *action);
190         void    (*popup_menu)             (EvView         *view,
191                                            EvLink         *link);
192 };
193
194 #endif  /* __EV_VIEW_PRIVATE_H__ */
195