1 /* SPDX-License-Identifier: Zlib */
2 
3 #ifndef RENDER_H
4 #define RENDER_H
5 
6 #include <stdbool.h>
7 #include <stdlib.h>
8 #include <glib-object.h>
9 #include <gdk/gdk.h>
10 #include <girara/types.h>
11 #include "types.h"
12 
13 typedef struct zathura_renderer_class_s ZathuraRendererClass;
14 
15 struct zathura_renderer_s
16 {
17   GObject parent;
18 };
19 
20 struct zathura_renderer_class_s
21 {
22   GObjectClass parent_class;
23 };
24 
25 #define ZATHURA_TYPE_RENDERER \
26   (zathura_renderer_get_type())
27 #define ZATHURA_RENDERER(obj) \
28   (G_TYPE_CHECK_INSTANCE_CAST((obj), ZATHURA_TYPE_RENDERER, ZathuraRenderer))
29 #define ZATHURA_RENDERER_CLASS(obj) \
30   (G_TYPE_CHECK_CLASS_CAST((obj), ZATHURA_TYPE_RENDERER, ZathuraRendererClass))
31 #define ZATHURA_IS_RENDERER(obj) \
32   (G_TYPE_CHECK_INSTANCE_TYPE((obj), ZATHURA_TYPE_RENDERER))
33 #define ZATHURA_IS_RENDERER_CLASS(obj) \
34   (G_TYPE_CHECK_CLASS_TYPE((obj), ZATHURA_TYPE_RENDERER))
35 #define ZATHURA_RENDERER_GET_CLASS \
36   (G_TYPE_INSTANCE_GET_CLASS((obj), ZATHURA_TYPE_RENDERER, ZathuraRendererClass))
37 
38 /**
39  * Returns the type of the renderer.
40  * @return the type
41  */
42 GType zathura_renderer_get_type(void) G_GNUC_CONST;
43 /**
44  * Create a renderer.
45  * @return a renderer object
46  */
47 ZathuraRenderer* zathura_renderer_new(size_t cache_size);
48 
49 /**
50  * Return whether recoloring is enabled.
51  * @param renderer a renderer object
52  * @returns true if recoloring is enabled, false otherwise
53  */
54 bool zathura_renderer_recolor_enabled(ZathuraRenderer* renderer);
55 /**
56  * Enable/disable recoloring.
57  * @param renderer a renderer object
58  * @param enable whether to enable or disable recoloring
59  */
60 void zathura_renderer_enable_recolor(ZathuraRenderer* renderer, bool enable);
61 /**
62  * Return whether hue should be preserved while recoloring.
63  * @param renderer a renderer object
64  * @returns true if hue should be preserved, false otherwise
65  */
66 bool zathura_renderer_recolor_hue_enabled(ZathuraRenderer* renderer);
67 /**
68  * Enable/disable preservation of hue while recoloring.
69  * @param renderer a renderer object
70  * @param enable whether to enable or disable hue preservation
71  */
72 void zathura_renderer_enable_recolor_hue(ZathuraRenderer* renderer,
73     bool enable);
74 /**
75  * Return whether images should be recolored while recoloring.
76  * @param renderer a renderer object
77  * @returns true if images should be recolored, false otherwise
78  */
79 bool zathura_renderer_recolor_reverse_video_enabled(ZathuraRenderer* renderer);
80 /**
81  * Enable/disable recoloring of images while recoloring.
82  * @param renderer a renderer object
83  * @param enable or disable images recoloring
84  */
85 void zathura_renderer_enable_recolor_reverse_video(ZathuraRenderer* renderer,
86     bool enable);
87 /**
88  * Set light and dark colors for recoloring.
89  * @param renderer a renderer object
90  * @param light light color
91  * @param dark dark color
92  */
93 void zathura_renderer_set_recolor_colors(ZathuraRenderer* renderer,
94     const GdkRGBA* light, const GdkRGBA* dark);
95 /**
96  * Set light and dark colors for recoloring.
97  * @param renderer a renderer object
98  * @param light light color
99  * @param dark dark color
100  */
101 void zathura_renderer_set_recolor_colors_str(ZathuraRenderer* renderer,
102     const char* light, const char* dark);
103 /**
104  * Get light and dark colors for recoloring.
105  * @param renderer a renderer object
106  * @param light light color
107  * @param dark dark color
108  */
109 void zathura_renderer_get_recolor_colors(ZathuraRenderer* renderer,
110     GdkRGBA* light, GdkRGBA* dark);
111 /**
112  * Stop rendering.
113  * @param renderer a render object
114  */
115 void zathura_renderer_stop(ZathuraRenderer* renderer);
116 
117 /**
118  * Lock the render thread. This is useful if you want to render on your own (e.g
119  * for printing).
120  *
121  * @param renderer renderer object
122  */
123 void zathura_renderer_lock(ZathuraRenderer* renderer);
124 
125 /**
126  * Unlock the render thread.
127  *
128  * @param renderer renderer object.
129  */
130 void zathura_renderer_unlock(ZathuraRenderer* renderer);
131 
132 /**
133  * Add a page to the page cache.
134  *
135  * @param renderer renderer object.
136  * @param page_index The index of the page to be cached.
137  */
138 void zathura_renderer_page_cache_add(ZathuraRenderer* renderer,
139     unsigned int page_index);
140 
141 
142 typedef struct zathura_render_request_class_s ZathuraRenderRequestClass;
143 
144 struct zathura_render_request_s
145 {
146   GObject parent;
147 };
148 
149 struct zathura_render_request_class_s
150 {
151   GObjectClass parent_class;
152 };
153 
154 #define ZATHURA_TYPE_RENDER_REQUEST \
155   (zathura_render_request_get_type())
156 #define ZATHURA_RENDER_REQUEST(obj) \
157   (G_TYPE_CHECK_INSTANCE_CAST((obj), ZATHURA_TYPE_RENDER_REQUEST, \
158                               ZathuraRenderRequest))
159 #define ZATHURA_RENDER_REQUEST_CLASS(obj) \
160   (G_TYPE_CHECK_CLASS_CAST((obj), ZATHURA_TYPE_RENDER_REQUEST, \
161                            ZathuraRenderRequestClass))
162 #define ZATHURA_IS_RENDER_REQUEST(obj) \
163   (G_TYPE_CHECK_INSTANCE_TYPE((obj), ZATHURA_TYPE_RENDER_REQUEST))
164 #define ZATHURA_IS_RENDER_REQUEST_CLASS(obj) \
165   (G_TYPE_CHECK_CLASS_TYPE((obj), ZATHURA_TYPE_RENDER_REQUEST))
166 #define ZATHURA_RENDER_REQUEST_GET_CLASS \
167   (G_TYPE_INSTANCE_GET_CLASS((obj), ZATHURA_TYPE_RENDER_REQUEST, \
168                              ZathuraRenderRequestClass))
169 
170 /**
171  * Returns the type of the render request.
172  * @return the type
173  */
174 GType zathura_page_render_info_get_type(void) G_GNUC_CONST;
175 /**
176  * Create a render request object
177  * @param renderer a renderer object
178  * @param page the page to be displayed
179  * @returns render request object
180  */
181 ZathuraRenderRequest* zathura_render_request_new(ZathuraRenderer* renderer,
182     zathura_page_t* page);
183 
184 /**
185  * Add a page to the render thread list that should be rendered.
186  *
187  * @param request request object of the page that should be renderer
188  * @param last_view_time last view time of the page
189  */
190 void zathura_render_request(ZathuraRenderRequest* request,
191     gint64 last_view_time);
192 
193 /**
194  * Abort an existing render request.
195  *
196  * @param request request that should be aborted
197  */
198 void zathura_render_request_abort(ZathuraRenderRequest* request);
199 
200 /**
201  * Update the time the page associated to the render request has been viewed the
202  * last time.
203  *
204  * @param request request that should be updated
205  */
206 void zathura_render_request_update_view_time(ZathuraRenderRequest* request);
207 
208 /**
209  * Set "plain" rendering mode, i.e. disabling scaling, recoloring, etc.
210  * @param request request that should be updated
211  * @param render_plain "plain" rendering setting
212  */
213 void zathura_render_request_set_render_plain(ZathuraRenderRequest* request,
214     bool render_plain);
215 
216 /**
217  * Get "plain" rendering mode, i.e. disabling scaling, recoloring, etc.
218  * @param request request that should be updated
219  * @returns "plain" rendering setting
220  */
221 bool zathura_render_request_get_render_plain(ZathuraRenderRequest* request);
222 
223 /**
224  * This function is used to unmark all pages as not rendered. This should
225  * be used if all pages should be rendered again (e.g.: the zoom level or the
226  * colors have changed)
227  *
228  * @param zathura Zathura object
229  */
230 void render_all(zathura_t* zathura);
231 
232 #endif // RENDER_H
233