Move stylesheet deserialization to stylesheet.c
[colloquium.git] / src / stylesheet.h
1 /*
2  * stylesheet.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 STYLESHEET_H
24 #define STYLESHEET_H
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30
31 #include "loadsave.h"
32
33
34 enum justify
35 {
36         J_LEFT   = 0,
37         J_CENTER = 1,
38         J_RIGHT  = 2,
39 };
40
41
42 enum vert_pos
43 {
44         V_TOP     = 0,
45         V_CENTER  = 1,
46         V_BOTTOM  = 2,
47 };
48
49
50 struct style
51 {
52         char              *name;
53
54         double             margin_left;
55         double             margin_right;
56         double             margin_top;
57         double             margin_bottom;
58         double             max_width;
59         int                use_max_width;
60
61         enum justify       halign;
62         enum vert_pos      valign;
63
64         double             offset_x;
65         double             offset_y;
66
67         char              *font;
68         char              *colour;
69         double             alpha;
70 };
71
72
73 enum bgblocktype
74 {
75         BGBLOCK_SOLID,
76         BGBLOCK_GRADIENT_X,
77         BGBLOCK_GRADIENT_Y,
78         BGBLOCK_IMAGE,
79 };
80
81
82 struct bgblock
83 {
84         enum bgblocktype type;
85         double           min_x;
86         double           max_x;
87         double           min_y;
88         double           max_y;
89
90         char            *colour1;
91         double           alpha1;
92         char            *colour2;
93         double           alpha2;
94
95         struct image    *image;
96         GdkPixbuf       *scaled_pb;
97         int              scaled_w;
98         int              scaled_h;
99 };
100
101
102 struct _stylesheet
103 {
104         struct style  **styles;
105         int             n_styles;
106
107         struct bgblock *bgblocks;
108         int             n_bgblocks;
109
110         /* Background stuff */
111 };
112
113
114 typedef struct _stylesheetwindow StylesheetWindow;
115 typedef struct _stylesheet StyleSheet;
116 struct presentation;
117
118 extern StylesheetWindow *open_stylesheet(struct presentation *p);
119
120 extern StyleSheet *new_stylesheet();
121 extern StyleSheet *load_stylesheet(const char *filename);
122 extern void free_stylesheet(StyleSheet *ss);
123 extern void default_stylesheet(StyleSheet *ss);
124
125 extern struct style *new_style(StyleSheet *ss, const char *name);
126
127 extern int save_stylesheet(StyleSheet *ss, const char *filename);
128
129 extern struct style *find_style(StyleSheet *ss, const char *name);
130
131 extern enum justify str_to_halign(char *halign);
132 extern enum vert_pos str_to_valign(char *valign);
133
134 extern StyleSheet *tree_to_stylesheet(struct ds_node *root);
135 extern void write_stylesheet(StyleSheet *ss, struct serializer *ser);
136
137 #endif  /* STYLESHEET_H */