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