]> Dogcows Code - chaz/openbox/blob - render/render.h
Introducing the icon cache.
[chaz/openbox] / render / render.h
1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
2
3 render.h for the Openbox window manager
4 Copyright (c) 2006 Mikael Magnusson
5 Copyright (c) 2003-2007 Dana Jansens
6 Copyright (c) 2003 Derek Foreman
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 2 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 See the COPYING file for a copy of the GNU General Public License.
19 */
20
21 #ifndef __render_h
22 #define __render_h
23
24 #include "geom.h"
25 #include "render/version.h"
26
27 #include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
28 #include <pango/pangoxft.h>
29 #include <glib.h>
30
31 G_BEGIN_DECLS
32
33 typedef union _RrTextureData RrTextureData;
34 typedef struct _RrAppearance RrAppearance;
35 typedef struct _RrSurface RrSurface;
36 typedef struct _RrFont RrFont;
37 typedef struct _RrTexture RrTexture;
38 typedef struct _RrTextureMask RrTextureMask;
39 typedef struct _RrTextureRGBA RrTextureRGBA;
40 typedef struct _RrTextureImage RrTextureImage;
41 typedef struct _RrTextureText RrTextureText;
42 typedef struct _RrTextureLineArt RrTextureLineArt;
43 typedef struct _RrPixmapMask RrPixmapMask;
44 typedef struct _RrInstance RrInstance;
45 typedef struct _RrColor RrColor;
46 typedef struct _RrImage RrImage;
47 typedef struct _RrImagePic RrImagePic;
48 typedef struct _RrImageCache RrImageCache;
49
50 typedef guint32 RrPixel32;
51 typedef guint16 RrPixel16;
52 typedef guchar RrPixel8;
53
54 typedef enum {
55 RR_RELIEF_FLAT,
56 RR_RELIEF_RAISED,
57 RR_RELIEF_SUNKEN
58 } RrReliefType;
59
60 typedef enum {
61 RR_BEVEL_1,
62 RR_BEVEL_2
63 } RrBevelType;
64
65 typedef enum {
66 RR_SURFACE_NONE,
67 RR_SURFACE_PARENTREL,
68 RR_SURFACE_SOLID,
69 RR_SURFACE_SPLIT_VERTICAL,
70 RR_SURFACE_HORIZONTAL,
71 RR_SURFACE_VERTICAL,
72 RR_SURFACE_DIAGONAL,
73 RR_SURFACE_CROSS_DIAGONAL,
74 RR_SURFACE_PYRAMID,
75 RR_SURFACE_MIRROR_HORIZONTAL
76 } RrSurfaceColorType;
77
78 typedef enum {
79 RR_TEXTURE_NONE,
80 RR_TEXTURE_MASK,
81 RR_TEXTURE_TEXT,
82 RR_TEXTURE_LINE_ART,
83 RR_TEXTURE_RGBA,
84 RR_TEXTURE_IMAGE
85 } RrTextureType;
86
87 typedef enum {
88 RR_JUSTIFY_LEFT,
89 RR_JUSTIFY_CENTER,
90 RR_JUSTIFY_RIGHT
91 } RrJustify;
92
93 /* Put middle first so it's the default */
94 typedef enum {
95 RR_ELLIPSIZE_MIDDLE,
96 RR_ELLIPSIZE_NONE,
97 RR_ELLIPSIZE_START,
98 RR_ELLIPSIZE_END
99 } RrEllipsizeMode;
100
101 typedef enum {
102 RR_FONTWEIGHT_LIGHT,
103 RR_FONTWEIGHT_NORMAL,
104 RR_FONTWEIGHT_SEMIBOLD,
105 RR_FONTWEIGHT_BOLD,
106 RR_FONTWEIGHT_ULTRABOLD
107 } RrFontWeight;
108
109 typedef enum {
110 RR_FONTSLANT_NORMAL,
111 RR_FONTSLANT_ITALIC,
112 RR_FONTSLANT_OBLIQUE
113 } RrFontSlant;
114
115 struct _RrSurface {
116 RrSurfaceColorType grad;
117 RrReliefType relief;
118 RrBevelType bevel;
119 RrColor *primary;
120 RrColor *secondary;
121 RrColor *border_color;
122 RrColor *bevel_dark;
123 RrColor *bevel_light;
124 RrColor *interlace_color;
125 gboolean interlaced;
126 gboolean border;
127 RrAppearance *parent;
128 gint parentx;
129 gint parenty;
130 RrPixel32 *pixel_data;
131 gint bevel_dark_adjust; /* 0-255, default is 64 */
132 gint bevel_light_adjust; /* 0-255, default is 128 */
133 RrColor *split_primary;
134 RrColor *split_secondary;
135 };
136
137 struct _RrTextureText {
138 RrFont *font;
139 RrJustify justify;
140 RrColor *color;
141 const gchar *string;
142 gint shadow_offset_x;
143 gint shadow_offset_y;
144 RrColor *shadow_color;
145 guchar shadow_alpha;
146 gboolean shortcut; /*!< Underline a character */
147 guint shortcut_pos; /*!< Position in bytes of the character to underline */
148 RrEllipsizeMode ellipsize;
149 gboolean flow; /* allow multiple lines. must set maxwidth below */
150 gint maxwidth;
151 };
152
153 struct _RrPixmapMask {
154 const RrInstance *inst;
155 Pixmap mask;
156 gint width;
157 gint height;
158 gchar *data;
159 };
160
161 struct _RrTextureMask {
162 RrColor *color;
163 RrPixmapMask *mask;
164 };
165
166 struct _RrTextureRGBA {
167 gint width;
168 gint height;
169 gint alpha;
170 RrPixel32 *data;
171 /* size and position to draw at (if these are zero, then it will be
172 drawn to fill the entire texture */
173 gint tx;
174 gint ty;
175 gint twidth;
176 gint theight;
177 };
178
179 struct _RrTextureImage {
180 RrImage *image;
181 gint alpha;
182 /* size and position to draw at (if these are zero, then it will be
183 drawn to fill the entire texture */
184 gint tx;
185 gint ty;
186 gint twidth;
187 gint theight;
188 };
189
190 struct _RrTextureLineArt {
191 RrColor *color;
192 gint x1;
193 gint y1;
194 gint x2;
195 gint y2;
196 };
197
198 union _RrTextureData {
199 RrTextureRGBA rgba;
200 RrTextureImage image;
201 RrTextureText text;
202 RrTextureMask mask;
203 RrTextureLineArt lineart;
204 };
205
206 struct _RrTexture {
207 /* If changing the type of a texture, you should DEFINITELY call
208 RrAppearanceClearTextures() first! */
209 RrTextureType type;
210 RrTextureData data;
211 };
212
213 struct _RrAppearance {
214 const RrInstance *inst;
215
216 RrSurface surface;
217 gint textures;
218 RrTexture *texture;
219 Pixmap pixmap;
220 XftDraw *xftdraw;
221
222 /* cached for internal use */
223 gint w, h;
224 };
225
226 /*! Holds a RGBA image picture */
227 struct _RrImagePic {
228 gint width, height;
229 RrPixel32 *data;
230 };
231
232 /*! An RrImage is a sort of meta-image. It can contain multiple versions of
233 an image at different sizes, which may or may not be completely different
234 pictures */
235 struct _RrImage {
236 gint ref;
237 struct _RrImageCache *cache;
238
239 struct _RrImagePic **original;
240 gint n_original;
241 struct _RrImagePic **resized;
242 gint n_resized;
243 };
244
245 /* these are the same on all endian machines because it seems to be dependant
246 on the endianness of the gfx card, not the cpu. */
247 #define RrDefaultAlphaOffset 24
248 #define RrDefaultRedOffset 16
249 #define RrDefaultGreenOffset 8
250 #define RrDefaultBlueOffset 0
251
252 #define RrDefaultFontFamily "arial,sans"
253 #define RrDefaultFontSize 8
254 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
255 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
256
257 RrInstance* RrInstanceNew (Display *display, gint screen);
258 void RrInstanceFree (RrInstance *inst);
259
260 Display* RrDisplay (const RrInstance *inst);
261 gint RrScreen (const RrInstance *inst);
262 Window RrRootWindow (const RrInstance *inst);
263 Visual* RrVisual (const RrInstance *inst);
264 gint RrDepth (const RrInstance *inst);
265 Colormap RrColormap (const RrInstance *inst);
266 gint RrRedOffset (const RrInstance *inst);
267 gint RrGreenOffset (const RrInstance *inst);
268 gint RrBlueOffset (const RrInstance *inst);
269 gint RrRedShift (const RrInstance *inst);
270 gint RrGreenShift (const RrInstance *inst);
271 gint RrBlueShift (const RrInstance *inst);
272 gint RrRedMask (const RrInstance *inst);
273 gint RrGreenMask (const RrInstance *inst);
274 gint RrBlueMask (const RrInstance *inst);
275
276 RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
277 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
278 void RrColorFree (RrColor *in);
279
280 gint RrColorRed (const RrColor *c);
281 gint RrColorGreen (const RrColor *c);
282 gint RrColorBlue (const RrColor *c);
283 gulong RrColorPixel (const RrColor *c);
284 GC RrColorGC (RrColor *c);
285
286 RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
287 RrAppearance *RrAppearanceCopy (RrAppearance *a);
288 void RrAppearanceFree (RrAppearance *a);
289 void RrAppearanceRemoveTextures(RrAppearance *a);
290 void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
291 /*! Always call this when changing the type of a texture in an appearance */
292 void RrAppearanceClearTextures(RrAppearance *a);
293
294 RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
295 gint size, RrFontWeight weight, RrFontSlant slant);
296 RrFont *RrFontOpenDefault (const RrInstance *inst);
297 void RrFontClose (RrFont *f);
298 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
299 gint shadow_offset_x, gint shadow_offset_y,
300 gboolean flow, gint maxwidth);
301 gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
302 gint RrFontMaxCharWidth (const RrFont *f);
303
304 /* Paint into the appearance. The old pixmap is returned (if there was one). It
305 is the responsibility of the caller to call XFreePixmap on the return when
306 it is non-null. */
307 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
308 void RrPaint (RrAppearance *a, Window win, gint w, gint h);
309 void RrMinSize (RrAppearance *a, gint *w, gint *h);
310 gint RrMinWidth (RrAppearance *a);
311 /* For text textures, if flow is TRUE, then the string must be set before
312 calling this, otherwise it doesn't need to be */
313 gint RrMinHeight (RrAppearance *a);
314 void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
315
316 gboolean RrPixmapToRGBA(const RrInstance *inst,
317 Pixmap pmap, Pixmap mask,
318 gint *w, gint *h, RrPixel32 **data);
319
320 RrImageCache* RrImageCacheNew();
321 void RrImageCacheRef(RrImageCache *self);
322 void RrImageCacheUnref(RrImageCache *self);
323
324 /*! Finds an image in the cache, if it is already in there */
325 RrImage* RrImageCacheFind(RrImageCache *self,
326 RrPixel32 *data, gint w, gint h);
327
328 RrImage* RrImageNew(RrImageCache *cache);
329 void RrImageRef(RrImage *im);
330 void RrImageUnref(RrImage *im);
331
332 void RrImageAddPicture(RrImage *im, RrPixel32 *data, gint w, gint h);
333 void RrImageRemovePicture(RrImage *im, gint w, gint h);
334
335 G_END_DECLS
336
337 #endif /*__render_h*/
This page took 0.050728 seconds and 4 git commands to generate.