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.
27
#include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
28
#include <pango/pangoxft.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
235
/*! An RrImage is a sort of meta-image. It can contain multiple versions of
236
an image at different sizes, which may or may not be completely different
242
/*! An array of "originals", that is of RrPictures that have been added
243
to the image in various sizes, and that have not been resized. These
244
are explicitly added to the RrImage. */
245
RrImagePic **original;
247
/*! An array of "resized" pictures. When an "original" RrPicture
248
needs to be resized for drawing, it is saved in here so that it doesn't
249
need to be resized again. These are automatically added to the
251
RrImagePic **resized;
255
/* these are the same on all endian machines because it seems to be dependant
256
on the endianness of the gfx card, not the cpu. */
257
#define RrDefaultAlphaOffset 24
258
#define RrDefaultRedOffset 16
259
#define RrDefaultGreenOffset 8
260
#define RrDefaultBlueOffset 0
262
#define RrDefaultFontFamily "arial,sans"
263
#define RrDefaultFontSize 8
264
#define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
265
#define RrDefaultFontSlant RR_FONTSLANT_NORMAL
267
RrInstance* RrInstanceNew (Display *display, gint screen);
268
void RrInstanceFree (RrInstance *inst);
270
Display* RrDisplay (const RrInstance *inst);
271
gint RrScreen (const RrInstance *inst);
272
Window RrRootWindow (const RrInstance *inst);
273
Visual* RrVisual (const RrInstance *inst);
274
gint RrDepth (const RrInstance *inst);
275
Colormap RrColormap (const RrInstance *inst);
276
gint RrRedOffset (const RrInstance *inst);
277
gint RrGreenOffset (const RrInstance *inst);
278
gint RrBlueOffset (const RrInstance *inst);
279
gint RrRedShift (const RrInstance *inst);
280
gint RrGreenShift (const RrInstance *inst);
281
gint RrBlueShift (const RrInstance *inst);
282
gint RrRedMask (const RrInstance *inst);
283
gint RrGreenMask (const RrInstance *inst);
284
gint RrBlueMask (const RrInstance *inst);
286
RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
287
RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
288
void RrColorFree (RrColor *in);
290
gint RrColorRed (const RrColor *c);
291
gint RrColorGreen (const RrColor *c);
292
gint RrColorBlue (const RrColor *c);
293
gulong RrColorPixel (const RrColor *c);
294
GC RrColorGC (RrColor *c);
296
RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
297
RrAppearance *RrAppearanceCopy (RrAppearance *a);
298
void RrAppearanceFree (RrAppearance *a);
299
void RrAppearanceRemoveTextures(RrAppearance *a);
300
void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
301
/*! Always call this when changing the type of a texture in an appearance */
302
void RrAppearanceClearTextures(RrAppearance *a);
304
RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
305
gint size, RrFontWeight weight, RrFontSlant slant);
306
RrFont *RrFontOpenDefault (const RrInstance *inst);
307
void RrFontClose (RrFont *f);
308
RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
309
gint shadow_offset_x, gint shadow_offset_y,
310
gboolean flow, gint maxwidth);
311
gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
312
gint RrFontMaxCharWidth (const RrFont *f);
314
/* Paint into the appearance. The old pixmap is returned (if there was one). It
315
is the responsibility of the caller to call XFreePixmap on the return when
317
Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
318
void RrPaint (RrAppearance *a, Window win, gint w, gint h);
319
void RrMinSize (RrAppearance *a, gint *w, gint *h);
320
gint RrMinWidth (RrAppearance *a);
321
/* For text textures, if flow is TRUE, then the string must be set before
322
calling this, otherwise it doesn't need to be */
323
gint RrMinHeight (RrAppearance *a);
324
void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
326
gboolean RrPixmapToRGBA(const RrInstance *inst,
327
Pixmap pmap, Pixmap mask,
328
gint *w, gint *h, RrPixel32 **data);
330
/*! Create a new image cache for RrImages.
331
@param max_resized_saved The number of resized copies of an image to save
333
RrImageCache* RrImageCacheNew(gint max_resized_saved);
334
void RrImageCacheRef(RrImageCache *self);
335
void RrImageCacheUnref(RrImageCache *self);
337
/*! Finds an image in the cache, if it is already in there */
338
RrImage* RrImageCacheFind(RrImageCache *self,
339
RrPixel32 *data, gint w, gint h);
341
RrImage* RrImageNew(RrImageCache *cache);
342
void RrImageRef(RrImage *im);
343
void RrImageUnref(RrImage *im);
345
void RrImageAddPicture(RrImage *im, RrPixel32 *data, gint w, gint h);
346
void RrImageRemovePicture(RrImage *im, gint w, gint h);
350
#endif /*__render_h*/