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;
49 typedef struct _RrButton RrButton;
51 typedef guint32 RrPixel32;
52 typedef guint16 RrPixel16;
53 typedef guchar RrPixel8;
72 RR_SURFACE_SPLIT_VERTICAL,
73 RR_SURFACE_HORIZONTAL,
76 RR_SURFACE_CROSS_DIAGONAL,
78 RR_SURFACE_MIRROR_HORIZONTAL,
99 /* Put middle first so it's the default */
105 RR_ELLIPSIZE_NUM_TYPES
110 RR_FONTWEIGHT_NORMAL,
111 RR_FONTWEIGHT_SEMIBOLD,
113 RR_FONTWEIGHT_ULTRABOLD,
114 RR_FONTWEIGHT_NUM_TYPES
120 RR_FONTSLANT_OBLIQUE,
121 RR_FONTSLANT_NUM_TYPES
125 RrSurfaceColorType grad;
130 RrColor *border_color;
132 RrColor *bevel_light;
133 RrColor *interlace_color;
136 RrAppearance *parent;
139 RrPixel32 *pixel_data;
140 gint bevel_dark_adjust; /* 0-255, default is 64 */
141 gint bevel_light_adjust; /* 0-255, default is 128 */
142 RrColor *split_primary;
143 RrColor *split_secondary;
146 struct _RrTextureText {
151 gint shadow_offset_x;
152 gint shadow_offset_y;
153 RrColor *shadow_color;
154 gboolean shortcut; /*!< Underline a character */
155 guint shortcut_pos; /*!< Position in bytes of the character to underline */
156 RrEllipsizeMode ellipsize;
157 gboolean flow; /* allow multiple lines. must set maxwidth below */
159 guchar shadow_alpha; /* at the bottom to improve alignment */
162 struct _RrPixmapMask {
163 const RrInstance *inst;
170 struct _RrTextureMask {
175 struct _RrTextureRGBA {
180 /* size and position to draw at (if these are zero, then it will be
181 drawn to fill the entire texture */
188 struct _RrTextureImage {
191 /* size and position to draw at (if these are zero, then it will be
192 drawn to fill the entire texture */
199 struct _RrTextureLineArt {
207 union _RrTextureData {
209 RrTextureImage image;
212 RrTextureLineArt lineart;
216 /* If changing the type of a texture, you should DEFINITELY call
217 RrAppearanceClearTextures() first! */
222 struct _RrAppearance {
223 const RrInstance *inst;
231 /* cached for internal use */
235 /*! Holds a RGBA image picture */
239 /* The sum of all the pixels. This is used to compare pictures if their
242 /* The name of the image. This is used to determine
243 if the named image already is loaded. May be NULL if the image
244 was not loaded from disk. */
248 typedef void (*RrImageDestroyFunc)(RrImage *image, gpointer data);
250 /*! An RrImage is a sort of meta-image. It can contain multiple versions of
251 an image at different sizes, which may or may not be completely different
257 /*! An array of "originals", that is of RrPictures that have been added
258 to the image in various sizes, and that have not been resized. These
259 are explicitly added to the RrImage. */
260 RrImagePic **original;
262 /*! An array of "resized" pictures. When an "original" RrPicture
263 needs to be resized for drawing, it is saved in here so that it doesn't
264 need to be resized again. These are automatically added to the
266 RrImagePic **resized;
269 /* This function (if not NULL) will be called just before destroying
271 RrImageDestroyFunc destroy_func;
272 gpointer destroy_data;
275 /* these are the same on all endian machines because it seems to be dependant
276 on the endianness of the gfx card, not the cpu. */
277 #define RrDefaultAlphaOffset 24
278 #define RrDefaultRedOffset 16
279 #define RrDefaultGreenOffset 8
280 #define RrDefaultBlueOffset 0
282 #define RrDefaultFontFamily "arial,sans"
283 #define RrDefaultFontSize 8
284 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
285 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
287 RrInstance* RrInstanceNew (Display *display, gint screen);
288 void RrInstanceFree (RrInstance *inst);
290 Display* RrDisplay (const RrInstance *inst);
291 gint RrScreen (const RrInstance *inst);
292 Window RrRootWindow (const RrInstance *inst);
293 Visual* RrVisual (const RrInstance *inst);
294 gint RrDepth (const RrInstance *inst);
295 Colormap RrColormap (const RrInstance *inst);
296 gint RrRedOffset (const RrInstance *inst);
297 gint RrGreenOffset (const RrInstance *inst);
298 gint RrBlueOffset (const RrInstance *inst);
299 gint RrRedShift (const RrInstance *inst);
300 gint RrGreenShift (const RrInstance *inst);
301 gint RrBlueShift (const RrInstance *inst);
302 gint RrRedMask (const RrInstance *inst);
303 gint RrGreenMask (const RrInstance *inst);
304 gint RrBlueMask (const RrInstance *inst);
306 RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
307 RrColor *RrColorCopy (RrColor *c);
308 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
309 void RrColorFree (RrColor *in);
311 gint RrColorRed (const RrColor *c);
312 gint RrColorGreen (const RrColor *c);
313 gint RrColorBlue (const RrColor *c);
314 gulong RrColorPixel (const RrColor *c);
315 GC RrColorGC (RrColor *c);
317 RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
318 RrAppearance *RrAppearanceCopy (RrAppearance *a);
319 void RrAppearanceFree (RrAppearance *a);
320 void RrAppearanceRemoveTextures(RrAppearance *a);
321 void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
322 /*! Always call this when changing the type of a texture in an appearance */
323 void RrAppearanceClearTextures(RrAppearance *a);
325 RrButton *RrButtonNew (const RrInstance *inst);
326 void RrButtonFree(RrButton *b);
328 RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
329 gint size, RrFontWeight weight, RrFontSlant slant);
330 RrFont *RrFontOpenDefault (const RrInstance *inst);
331 void RrFontClose (RrFont *f);
332 /*! Returns an RrSize, that was allocated with g_slice_new(). Use g_slice_free() to
334 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
335 gint shadow_offset_x, gint shadow_offset_y,
336 gboolean flow, gint maxwidth);
337 gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
338 gint RrFontMaxCharWidth (const RrFont *f);
340 /* Paint into the appearance. The old pixmap is returned (if there was one). It
341 is the responsibility of the caller to call XFreePixmap on the return when
343 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
344 void RrPaint (RrAppearance *a, Window win, gint w, gint h);
345 void RrMinSize (RrAppearance *a, gint *w, gint *h);
346 gint RrMinWidth (RrAppearance *a);
347 /* For text textures, if flow is TRUE, then the string must be set before
348 calling this, otherwise it doesn't need to be */
349 gint RrMinHeight (RrAppearance *a);
350 void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
352 gboolean RrPixmapToRGBA(const RrInstance *inst,
353 Pixmap pmap, Pixmap mask,
354 gint *w, gint *h, RrPixel32 **data);
356 /*! Create a new image cache for RrImages.
357 @param max_resized_saved The number of resized copies of an image to save
359 RrImageCache* RrImageCacheNew(gint max_resized_saved);
360 void RrImageCacheRef(RrImageCache *self);
361 void RrImageCacheUnref(RrImageCache *self);
363 /*! Finds an image in the cache, if it is already in there */
364 RrImage* RrImageCacheFind(RrImageCache *self,
365 RrPixel32 *data, gint w, gint h);
366 /*! Finds an image in the cache, by searching for the name of the image */
367 RrImage* RrImageCacheFindName(RrImageCache *self,
370 RrImage* RrImageNew(RrImageCache *cache);
371 void RrImageRef(RrImage *im);
372 void RrImageUnref(RrImage *im);
374 void RrImageAddPicture(RrImage *im, const RrPixel32 *data, gint w, gint h);
375 /*! Adds a picture by name, from a file on disk.
376 @name Can be a full path to an image, or it can be a name as per the
377 freedesktop.org icon spec. */
378 gboolean RrImageAddPictureName(RrImage *im, const gchar *name);
379 void RrImageRemovePicture(RrImage *im, gint w, gint h);
383 #endif /*__render_h*/