Update...
[colloquium.git] / src / presentation.h
1 /*
2  * presentation.h
3  *
4  * Colloquium - A tiny presentation program
5  *
6  * Copyright (c) 2011 Thomas White <taw@bitwiz.org.uk>
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #ifndef PRESENTATION_H
24 #define PRESENTATION_H
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include <gtk/gtk.h>
31
32 #include "stylesheet.h"
33 #include "stylesheet-editor.h"
34
35 struct slide
36 {
37         struct presentation *parent;
38         struct slide_template *st;
39
40         /* Any of these may be NULL */
41         cairo_surface_t *rendered_proj;
42         cairo_surface_t *rendered_edit;
43
44         /* This should always be present (and up to date). */
45         cairo_surface_t *rendered_thumb;
46
47         int              num_objects;
48         struct object  **objects;
49
50         char *notes;
51 };
52
53
54 enum drag_reason
55 {
56         DRAG_REASON_NONE,
57         DRAG_REASON_CREATE,
58         DRAG_REASON_IMPORT,
59         DRAG_REASON_TOOL,
60 };
61
62
63 enum drag_status
64 {
65         DRAG_STATUS_NONE,
66         DRAG_STATUS_COULD_DRAG,
67         DRAG_STATUS_DRAGGING,
68 };
69
70
71 struct prefs
72 {
73         int b_splits;
74         int open_notes;
75 };
76
77
78 struct presentation
79 {
80         char             *titlebar;
81         char             *filename;
82         int               completely_empty;
83         int              *num_presentations;
84
85         struct prefs     *prefs;
86
87         GtkWidget        *window;
88         GtkWidget        *drawingarea;
89         GtkUIManager     *ui;
90         GtkActionGroup   *action_group;
91         GtkIMContext     *im_context;
92         struct notes     *notes;
93
94         /* Pointers to the current "editing" and "projection" slides */
95         struct slide     *cur_edit_slide;
96         struct slide     *cur_proj_slide;
97         struct slide     *cur_notes_slide;
98         int               slideshow_linked;
99
100         /* This is the "native" size of the slide.  It only exists to give
101          * font size some meaning in the context of a somewhat arbitrary DPI */
102         double            slide_width;
103         double            slide_height;
104
105         /* Width of a slide in the editor, projector or thumbnail (pixels) */
106         int               edit_slide_width;
107         int               proj_slide_width;
108         int               thumb_slide_width;
109
110         /* This is just to help with rendering the slides within the
111          * editing window. */
112         double            border_offs_x;
113         double            border_offs_y;
114
115         struct frame     *cur_frame;
116
117         /* Stylesheet */
118         StyleSheet       *ss;
119
120         /* Dialogue boxes */
121         StylesheetWindow *stylesheetwindow;
122
123         /* Slideshow stuff */
124         GtkWidget        *slideshow;
125         GtkWidget        *ss_drawingarea;
126         GdkCursor        *blank_cursor;
127         int               ss_blank;
128         char              ss_geom[256];
129
130         /* Rubber band boxes and related stuff */
131         double            start_corner_x;
132         double            start_corner_y;
133         double            drag_corner_x;
134         double            drag_corner_y;
135         enum drag_reason  drag_reason;
136         enum drag_status  drag_status;
137
138         /* Stuff to do with drag and drop import of "content" */
139         int               drag_preview_pending;
140         int               have_drag_data;
141         int               drag_highlight;
142         double            import_width;
143         double            import_height;
144         int               import_acceptable;
145
146         /* All the images used in the presentation */
147         struct image_store *image_store;
148
149         unsigned int      num_slides;
150         struct slide    **slides;
151 };
152
153
154 struct frame
155 {
156         struct frame_class *cl;
157
158         struct frame      **children;
159         int                 n_children;
160
161         char               *sc;  /* Storycode */
162 };
163
164
165 extern struct presentation *new_presentation(void);
166 extern void free_presentation(struct presentation *p);
167
168 extern struct slide *new_slide(void);
169 extern struct slide *add_slide(struct presentation *p, int pos);
170 extern int insert_slide(struct presentation *p, struct slide *s, int pos);
171 extern void free_slide(struct slide *s);
172
173 extern void get_titlebar_string(struct presentation *p);
174
175 extern struct frame *find_frame_at_position(struct slide *s,
176                                             double x, double y);
177
178 extern int slide_number(struct presentation *p, struct slide *s);
179
180 #define UNUSED __attribute__((unused))
181
182 #endif  /* PRESENTATION_H */