Implement "revert" button for stylesheet editor
[colloquium.git] / libstorycode / stylesheet.h
1 /*
2  * stylesheet.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 STYLESHEET_H
24 #define STYLESHEET_H
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 typedef struct _stylesheet Stylesheet;
31
32 enum alignment
33 {
34         ALIGN_INHERIT,  /* use whatever the stylesheet says */
35         ALIGN_LEFT,
36         ALIGN_RIGHT,
37         ALIGN_CENTER
38 };
39
40
41 enum length_unit
42 {
43         LENGTH_FRAC,
44         LENGTH_UNIT
45 };
46
47
48 struct colour
49 {
50         double rgba[4];
51         int hexcode;      /* If true, colour came from a hexcode
52                            * (and should be written back as one) */
53 };
54
55
56 struct length
57 {
58         double len;
59         enum length_unit unit;
60 };
61
62
63 struct frame_geom
64 {
65         struct length x;
66         struct length y;
67         struct length w;
68         struct length h;
69 };
70
71
72 enum gradient
73 {
74         GRAD_NONE,
75         GRAD_HORIZ,
76         GRAD_VERT
77 };
78
79
80 extern Stylesheet *stylesheet_new(void);
81 extern void stylesheet_free(Stylesheet *s);
82 extern int stylesheet_set_from_storycode(Stylesheet *ss, const char *sc);
83
84 extern int stylesheet_get_slide_default_size(Stylesheet *s, double *w, double *h);
85
86 extern int stylesheet_set_geometry(Stylesheet *s, const char *stn, struct frame_geom geom);
87 extern int stylesheet_set_font(Stylesheet *s, const char *stn, char *font);
88 extern int stylesheet_set_alignment(Stylesheet *s, const char *stn, enum alignment align);
89 extern int stylesheet_set_padding(Stylesheet *s, const char *stn, struct length padding[4]);
90 extern int stylesheet_set_paraspace(Stylesheet *s, const char *stn, struct length paraspace[4]);
91 extern int stylesheet_set_fgcol(Stylesheet *s, const char *stn, struct colour fgcol);
92 extern int stylesheet_set_background(Stylesheet *s, const char *stn, enum gradient grad,
93                                      struct colour bgcol, struct colour bgcol2);
94
95 extern int stylesheet_get_geometry(Stylesheet *s, const char *stn,
96                                    struct frame_geom *geom);
97 extern const char *stylesheet_get_font(Stylesheet *s, const char *stn,
98                                        struct colour *fgcol, enum alignment *alignment);
99 extern int stylesheet_get_background(Stylesheet *s, const char *stn,
100                                      enum gradient *grad, struct colour *bgcol,
101                                      struct colour *bgcol2);
102 extern int stylesheet_get_padding(Stylesheet *s, const char *stn,
103                                   struct length padding[4]);
104 extern int stylesheet_get_paraspace(Stylesheet *s, const char *stn,
105                                     struct length paraspace[4]);
106
107 extern int stylesheet_get_num_substyles(Stylesheet *s, const char *stn);
108 extern const char *stylesheet_get_substyle_name(Stylesheet *s, const char *stn, int i);
109
110 extern char *stylesheet_serialise(Stylesheet *s);
111
112 extern const char *stylesheet_get_friendly_name(const char *in);
113
114 #endif /* STYLESHEET_H */