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 */
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
237 struct _RrImageCache
*cache
;
239 struct _RrImagePic
**original
;
241 struct _RrImagePic
**resized
;
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
252 #define RrDefaultFontFamily "arial,sans"
253 #define RrDefaultFontSize 8
254 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
255 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
257 RrInstance
* RrInstanceNew (Display
*display
, gint screen
);
258 void RrInstanceFree (RrInstance
*inst
);
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
);
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
);
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
);
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
);
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
);
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
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
);
316 gboolean
RrPixmapToRGBA(const RrInstance
*inst
,
317 Pixmap pmap
, Pixmap mask
,
318 gint
*w
, gint
*h
, RrPixel32
**data
);
320 RrImageCache
* RrImageCacheNew();
321 void RrImageCacheRef(RrImageCache
*self
);
322 void RrImageCacheUnref(RrImageCache
*self
);
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
);
328 RrImage
* RrImageNew(RrImageCache
*cache
);
329 void RrImageRef(RrImage
*im
);
330 void RrImageUnref(RrImage
*im
);
332 void RrImageAddPicture(RrImage
*im
, RrPixel32
*data
, gint w
, gint h
);
333 void RrImageRemovePicture(RrImage
*im
, gint w
, gint h
);
337 #endif /*__render_h*/