0a384772e9caf4562b16f11b73464a2d0b841f8d
[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
83 extern int stylesheet_get_slide_default_size(Stylesheet *s, double *w, double *h);
84
85 extern int stylesheet_set_geometry(Stylesheet *s, const char *stn, struct frame_geom geom);
86 extern int stylesheet_set_font(Stylesheet *s, const char *stn, char *font);
87 extern int stylesheet_set_alignment(Stylesheet *s, const char *stn, enum alignment align);
88 extern int stylesheet_set_padding(Stylesheet *s, const char *stn, struct length padding[4]);
89 extern int stylesheet_set_paraspace(Stylesheet *s, const char *stn, struct length paraspace[4]);
90 extern int stylesheet_set_fgcol(Stylesheet *s, const char *stn, struct colour fgcol);
91 extern int stylesheet_set_background(Stylesheet *s, const char *stn, enum gradient grad,
92                                      struct colour bgcol, struct colour bgcol2);
93
94 extern int stylesheet_get_geometry(Stylesheet *s, const char *stn,
95                                    struct frame_geom *geom);
96 extern const char *stylesheet_get_font(Stylesheet *s, const char *stn,
97                                        struct colour *fgcol, enum alignment *alignment);
98 extern int stylesheet_get_background(Stylesheet *s, const char *stn,
99                                      enum gradient *grad, struct colour *bgcol,
100                                      struct colour *bgcol2);
101 extern int stylesheet_get_padding(Stylesheet *s, const char *stn,
102                                   struct length padding[4]);
103 extern int stylesheet_get_paraspace(Stylesheet *s, const char *stn,
104                                     struct length paraspace[4]);
105
106 extern int stylesheet_get_num_substyles(Stylesheet *s, const char *stn);
107 extern const char *stylesheet_get_substyle_name(Stylesheet *s, const char *stn, int i);
108
109 extern char *stylesheet_serialise(Stylesheet *s);
110
111 extern const char *stylesheet_get_friendly_name(const char *in);
112
113 #endif /* STYLESHEET_H */