cea2a531e63748e63f705edb5ccb261057281021
[colloquium.git] / libstorycode / narrative_priv.h
1 /*
2  * narrative_priv.h
3  *
4  * Copyright © 2019 Thomas White <taw@bitwiz.org.uk>
5  *
6  * This file is part of Colloquium.
7  *
8  * Colloquium 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 NARRATIVE_PRIV_H
24 #define NARRATIVE_PRIV_H
25
26 #ifdef HAVE_PANGO
27 #include <pango/pangocairo.h>
28 #endif
29
30 #include "imagestore.h"
31 #include "storycode.h"
32 #include "slide.h"
33
34
35 enum narrative_item_type
36 {
37         NARRATIVE_ITEM_TEXT,
38         NARRATIVE_ITEM_PRESTITLE,
39         NARRATIVE_ITEM_SLIDE,
40         NARRATIVE_ITEM_BP,
41 };
42
43
44 struct narrative_item
45 {
46         enum narrative_item_type type;
47
48         /* Space around the thing (PangoLayout, slide, marker etc) */
49         double space_l;
50         double space_r;
51         double space_t;
52         double space_b;
53
54         /* Size of the thing (PangoLayout, slide, marker etc) */
55         double obj_w;
56         double obj_h;
57
58         /* Total height is obj_h + space_t + space_b.
59          * obj_w + space_l + space_r might be less than width of rendering surface */
60
61         /* For TEXT, BP, PRESTITLE */
62         char *text;
63         enum alignment align;
64 #ifdef HAVE_PANGO
65         PangoLayout *layout;
66 #else
67         void *layout;
68 #endif
69
70         /* For SLIDE */
71         Slide *slide;
72 #ifdef HAVE_CAIRO
73         cairo_surface_t *slide_thumbnail;
74 #else
75         void *slide_thumbnail;
76 #endif
77         int selected;  /* Whether or not this item should be given a "selected" highlight */
78 };
79
80
81 struct _narrative
82 {
83         Stylesheet *stylesheet;
84         ImageStore *imagestore;
85         int saved;
86         const char *language;
87
88         int n_items;
89         struct narrative_item *items;
90
91         double w;
92         double space_l;
93         double space_r;
94         double space_t;
95         double space_b;
96 };
97
98
99 #endif /* NARRATIVE_PRIV_H */