1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
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
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.
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.
18 See the COPYING file for a copy of the GNU General Public License.
24 #include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
25 #include <pango/pangoxft.h>
30 #include "obrender/geom.h"
31 #include "obrender/version.h"
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;
50 typedef guint32 RrPixel32;
51 typedef guint16 RrPixel16;
52 typedef guchar RrPixel8;
69 RR_SURFACE_SPLIT_VERTICAL,
70 RR_SURFACE_HORIZONTAL,
73 RR_SURFACE_CROSS_DIAGONAL,
75 RR_SURFACE_MIRROR_HORIZONTAL
93 /* Put middle first so it's the default */
103 RR_FONTWEIGHT_NORMAL,
104 RR_FONTWEIGHT_SEMIBOLD,
106 RR_FONTWEIGHT_ULTRABOLD
116 RrSurfaceColorType grad;
121 RrColor *border_color;
123 RrColor *bevel_light;
124 RrColor *interlace_color;
127 RrAppearance *parent;
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;
137 struct _RrTextureText {
142 gint shadow_offset_x;
143 gint shadow_offset_y;
144 RrColor *shadow_color;
145 gboolean shortcut; /*!< Underline a character */
146 guint shortcut_pos; /*!< Position in bytes of the character to underline */
147 RrEllipsizeMode ellipsize;
148 gboolean flow; /* allow multiple lines. must set maxwidth below */
150 guchar shadow_alpha; /* at the bottom to improve alignment */
153 struct _RrPixmapMask {
154 const RrInstance *inst;
161 struct _RrTextureMask {
166 struct _RrTextureRGBA {
171 /* size and position to draw at (if these are zero, then it will be
172 drawn to fill the entire texture */
179 struct _RrTextureImage {
182 /* size and position to draw at (if these are zero, then it will be
183 drawn to fill the entire texture */
190 struct _RrTextureLineArt {
198 union _RrTextureData {
200 RrTextureImage image;
203 RrTextureLineArt lineart;
207 /* If changing the type of a texture, you should DEFINITELY call
208 RrAppearanceClearTextures() first! */
213 struct _RrAppearance {
214 const RrInstance *inst;
222 /* cached for internal use */
226 /*! Holds a RGBA image picture */
230 /* The sum of all the pixels. This is used to compare pictures if their
233 /* The name of the image. This is used to determine
234 if the named image already is loaded. May be NULL if the image
235 was not loaded from disk. */
239 typedef void (*RrImageDestroyFunc)(RrImage *image, gpointer data);
241 /*! An RrImage is a sort of meta-image. It can contain multiple versions of
242 an image at different sizes, which may or may not be completely different
248 /*! An array of "originals", that is of RrPictures that have been added
249 to the image in various sizes, and that have not been resized. These
250 are explicitly added to the RrImage. */
251 RrImagePic **original;
253 /*! An array of "resized" pictures. When an "original" RrPicture
254 needs to be resized for drawing, it is saved in here so that it doesn't
255 need to be resized again. These are automatically added to the
257 RrImagePic **resized;
260 /* This function (if not NULL) will be called just before destroying
262 RrImageDestroyFunc destroy_func;
263 gpointer destroy_data;
266 /* these are the same on all endian machines because it seems to be dependant
267 on the endianness of the gfx card, not the cpu. */
268 #define RrDefaultAlphaOffset 24
269 #define RrDefaultRedOffset 16
270 #define RrDefaultGreenOffset 8
271 #define RrDefaultBlueOffset 0
273 #define RrDefaultFontFamily "arial,sans"
274 #define RrDefaultFontSize 8
275 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
276 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
278 RrInstance* RrInstanceNew (Display *display, gint screen);
279 void RrInstanceFree (RrInstance *inst);
281 Display* RrDisplay (const RrInstance *inst);
282 gint RrScreen (const RrInstance *inst);
283 Window RrRootWindow (const RrInstance *inst);
284 Visual* RrVisual (const RrInstance *inst);
285 gint RrDepth (const RrInstance *inst);
286 Colormap RrColormap (const RrInstance *inst);
287 gint RrRedOffset (const RrInstance *inst);
288 gint RrGreenOffset (const RrInstance *inst);
289 gint RrBlueOffset (const RrInstance *inst);
290 gint RrRedShift (const RrInstance *inst);
291 gint RrGreenShift (const RrInstance *inst);
292 gint RrBlueShift (const RrInstance *inst);
293 gint RrRedMask (const RrInstance *inst);
294 gint RrGreenMask (const RrInstance *inst);
295 gint RrBlueMask (const RrInstance *inst);
297 RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
298 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
299 void RrColorFree (RrColor *in);
301 gint RrColorRed (const RrColor *c);
302 gint RrColorGreen (const RrColor *c);
303 gint RrColorBlue (const RrColor *c);
304 gulong RrColorPixel (const RrColor *c);
305 GC RrColorGC (RrColor *c);
307 RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
308 RrAppearance *RrAppearanceCopy (RrAppearance *a);
309 void RrAppearanceFree (RrAppearance *a);
310 void RrAppearanceRemoveTextures(RrAppearance *a);
311 void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
312 /*! Always call this when changing the type of a texture in an appearance */
313 void RrAppearanceClearTextures(RrAppearance *a);
315 RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
316 gint size, RrFontWeight weight, RrFontSlant slant);
317 RrFont *RrFontOpenDefault (const RrInstance *inst);
318 void RrFontClose (RrFont *f);
319 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
320 gint shadow_offset_x, gint shadow_offset_y,
321 gboolean flow, gint maxwidth);
322 gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
323 gint RrFontMaxCharWidth (const RrFont *f);
325 /* Paint into the appearance. The old pixmap is returned (if there was one). It
326 is the responsibility of the caller to call XFreePixmap on the return when
328 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
329 void RrPaint (RrAppearance *a, Window win, gint w, gint h);
330 void RrMinSize (RrAppearance *a, gint *w, gint *h);
331 gint RrMinWidth (RrAppearance *a);
332 /* For text textures, if flow is TRUE, then the string must be set before
333 calling this, otherwise it doesn't need to be */
334 gint RrMinHeight (RrAppearance *a);
335 void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
337 gboolean RrPixmapToRGBA(const RrInstance *inst,
338 Pixmap pmap, Pixmap mask,
339 gint *w, gint *h, RrPixel32 **data);
341 /*! Create a new image cache for RrImages.
342 @param max_resized_saved The number of resized copies of an image to save
344 RrImageCache* RrImageCacheNew(gint max_resized_saved);
345 void RrImageCacheRef(RrImageCache *self);
346 void RrImageCacheUnref(RrImageCache *self);
348 /*! Finds an image in the cache, if it is already in there */
349 RrImage* RrImageCacheFind(RrImageCache *self,
350 RrPixel32 *data, gint w, gint h);
351 /*! Finds an image in the cache, by searching for the name of the image */
352 RrImage* RrImageCacheFindName(RrImageCache *self,
355 RrImage* RrImageNew(RrImageCache *cache);
356 void RrImageRef(RrImage *im);
357 void RrImageUnref(RrImage *im);
359 void RrImageAddPicture(RrImage *im, const RrPixel32 *data, gint w, gint h);
360 /*! Adds a picture by name, from a file on disk.
361 @name Can be a full path to an image, or it can be a name as per the
362 freedesktop.org icon spec. */
363 gboolean RrImageAddPictureName(RrImage *im, const gchar *name);
364 void RrImageRemovePicture(RrImage *im, gint w, gint h);
368 #endif /*__render_h*/