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;
71 RR_SURFACE_SPLIT_VERTICAL,
72 RR_SURFACE_HORIZONTAL,
75 RR_SURFACE_CROSS_DIAGONAL,
77 RR_SURFACE_MIRROR_HORIZONTAL,
98 /* Put middle first so it's the default */
104 RR_ELLIPSIZE_NUM_TYPES
109 RR_FONTWEIGHT_NORMAL,
110 RR_FONTWEIGHT_SEMIBOLD,
112 RR_FONTWEIGHT_ULTRABOLD,
113 RR_FONTWEIGHT_NUM_TYPES
119 RR_FONTSLANT_OBLIQUE,
120 RR_FONTSLANT_NUM_TYPES
124 RrSurfaceColorType grad;
129 RrColor *border_color;
131 RrColor *bevel_light;
132 RrColor *interlace_color;
135 RrAppearance *parent;
138 RrPixel32 *pixel_data;
139 gint bevel_dark_adjust; /* 0-255, default is 64 */
140 gint bevel_light_adjust; /* 0-255, default is 128 */
141 RrColor *split_primary;
142 RrColor *split_secondary;
145 struct _RrTextureText {
150 gint shadow_offset_x;
151 gint shadow_offset_y;
152 RrColor *shadow_color;
153 gboolean shortcut; /*!< Underline a character */
154 guint shortcut_pos; /*!< Position in bytes of the character to underline */
155 RrEllipsizeMode ellipsize;
156 gboolean flow; /* allow multiple lines. must set maxwidth below */
158 guchar shadow_alpha; /* at the bottom to improve alignment */
161 struct _RrPixmapMask {
162 const RrInstance *inst;
169 struct _RrTextureMask {
174 struct _RrTextureRGBA {
179 /* size and position to draw at (if these are zero, then it will be
180 drawn to fill the entire texture */
187 struct _RrTextureImage {
190 /* size and position to draw at (if these are zero, then it will be
191 drawn to fill the entire texture */
198 struct _RrTextureLineArt {
206 union _RrTextureData {
208 RrTextureImage image;
211 RrTextureLineArt lineart;
215 /* If changing the type of a texture, you should DEFINITELY call
216 RrAppearanceClearTextures() first! */
221 struct _RrAppearance {
222 const RrInstance *inst;
230 /* cached for internal use */
234 /*! Holds a RGBA image picture */
238 /* The sum of all the pixels. This is used to compare pictures if their
241 /* The name of the image. This is used to determine
242 if the named image already is loaded. May be NULL if the image
243 was not loaded from disk. */
247 typedef void (*RrImageDestroyFunc)(RrImage *image, gpointer data);
249 /*! An RrImage is a sort of meta-image. It can contain multiple versions of
250 an image at different sizes, which may or may not be completely different
256 /*! An array of "originals", that is of RrPictures that have been added
257 to the image in various sizes, and that have not been resized. These
258 are explicitly added to the RrImage. */
259 RrImagePic **original;
261 /*! An array of "resized" pictures. When an "original" RrPicture
262 needs to be resized for drawing, it is saved in here so that it doesn't
263 need to be resized again. These are automatically added to the
265 RrImagePic **resized;
268 /* This function (if not NULL) will be called just before destroying
270 RrImageDestroyFunc destroy_func;
271 gpointer destroy_data;
274 /* these are the same on all endian machines because it seems to be dependant
275 on the endianness of the gfx card, not the cpu. */
276 #define RrDefaultAlphaOffset 24
277 #define RrDefaultRedOffset 16
278 #define RrDefaultGreenOffset 8
279 #define RrDefaultBlueOffset 0
281 #define RrDefaultFontFamily "arial,sans"
282 #define RrDefaultFontSize 8
283 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
284 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
286 RrInstance* RrInstanceNew (Display *display, gint screen);
287 void RrInstanceFree (RrInstance *inst);
289 Display* RrDisplay (const RrInstance *inst);
290 gint RrScreen (const RrInstance *inst);
291 Window RrRootWindow (const RrInstance *inst);
292 Visual* RrVisual (const RrInstance *inst);
293 gint RrDepth (const RrInstance *inst);
294 Colormap RrColormap (const RrInstance *inst);
295 gint RrRedOffset (const RrInstance *inst);
296 gint RrGreenOffset (const RrInstance *inst);
297 gint RrBlueOffset (const RrInstance *inst);
298 gint RrRedShift (const RrInstance *inst);
299 gint RrGreenShift (const RrInstance *inst);
300 gint RrBlueShift (const RrInstance *inst);
301 gint RrRedMask (const RrInstance *inst);
302 gint RrGreenMask (const RrInstance *inst);
303 gint RrBlueMask (const RrInstance *inst);
305 RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
306 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
307 void RrColorFree (RrColor *in);
309 gint RrColorRed (const RrColor *c);
310 gint RrColorGreen (const RrColor *c);
311 gint RrColorBlue (const RrColor *c);
312 gulong RrColorPixel (const RrColor *c);
313 GC RrColorGC (RrColor *c);
315 RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
316 RrAppearance *RrAppearanceCopy (RrAppearance *a);
317 void RrAppearanceFree (RrAppearance *a);
318 void RrAppearanceRemoveTextures(RrAppearance *a);
319 void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
320 /*! Always call this when changing the type of a texture in an appearance */
321 void RrAppearanceClearTextures(RrAppearance *a);
323 RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
324 gint size, RrFontWeight weight, RrFontSlant slant);
325 RrFont *RrFontOpenDefault (const RrInstance *inst);
326 void RrFontClose (RrFont *f);
327 /*! Returns an RrSize, that was allocated with g_slice_new(). Use g_slice_free() to
329 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
330 gint shadow_offset_x, gint shadow_offset_y,
331 gboolean flow, gint maxwidth);
332 gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
333 gint RrFontMaxCharWidth (const RrFont *f);
334 /*! Select a font from a pango description string */
335 void RrFontDescriptionFromString(RrFont *font, gchar *description);
337 /* Paint into the appearance. The old pixmap is returned (if there was one). It
338 is the responsibility of the caller to call XFreePixmap on the return when
340 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
341 void RrPaint (RrAppearance *a, Window win, gint w, gint h);
342 void RrMinSize (RrAppearance *a, gint *w, gint *h);
343 gint RrMinWidth (RrAppearance *a);
344 /* For text textures, if flow is TRUE, then the string must be set before
345 calling this, otherwise it doesn't need to be */
346 gint RrMinHeight (RrAppearance *a);
347 void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
349 gboolean RrPixmapToRGBA(const RrInstance *inst,
350 Pixmap pmap, Pixmap mask,
351 gint *w, gint *h, RrPixel32 **data);
353 /*! Create a new image cache for RrImages.
354 @param max_resized_saved The number of resized copies of an image to save
356 RrImageCache* RrImageCacheNew(gint max_resized_saved);
357 void RrImageCacheRef(RrImageCache *self);
358 void RrImageCacheUnref(RrImageCache *self);
360 /*! Finds an image in the cache, if it is already in there */
361 RrImage* RrImageCacheFind(RrImageCache *self,
362 RrPixel32 *data, gint w, gint h);
363 /*! Finds an image in the cache, by searching for the name of the image */
364 RrImage* RrImageCacheFindName(RrImageCache *self,
367 RrImage* RrImageNew(RrImageCache *cache);
368 void RrImageRef(RrImage *im);
369 void RrImageUnref(RrImage *im);
371 void RrImageAddPicture(RrImage *im, const RrPixel32 *data, gint w, gint h);
372 /*! Adds a picture by name, from a file on disk.
373 @name Can be a full path to an image, or it can be a name as per the
374 freedesktop.org icon spec. */
375 gboolean RrImageAddPictureName(RrImage *im, const gchar *name);
376 void RrImageRemovePicture(RrImage *im, gint w, gint h);
380 #endif /*__render_h*/