]> icculus.org git repositories - mikachu/openbox.git/blob - render/render.h
add an allow_fallback option when opening a theme
[mikachu/openbox.git] / render / render.h
1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
2
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
7
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.
12
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.
17
18    See the COPYING file for a copy of the GNU General Public License.
19 */
20
21 #ifndef __render_h
22 #define __render_h
23
24 #include "geom.h"
25 #include "version.h"
26
27 #include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
28 #include <pango/pangoxft.h>
29 #include <glib.h>
30
31 G_BEGIN_DECLS
32
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 _RrTextureText      RrTextureText;
41 typedef struct _RrTextureLineArt   RrTextureLineArt;
42 typedef struct _RrPixmapMask       RrPixmapMask;
43 typedef struct _RrInstance         RrInstance;
44 typedef struct _RrColor            RrColor;
45
46 typedef guint32 RrPixel32;
47 typedef guint16 RrPixel16;
48 typedef guchar  RrPixel8;
49
50 typedef enum {
51     RR_RELIEF_FLAT,
52     RR_RELIEF_RAISED,
53     RR_RELIEF_SUNKEN
54 } RrReliefType;
55
56 typedef enum {
57     RR_BEVEL_1,
58     RR_BEVEL_2
59 } RrBevelType;
60
61 typedef enum {
62     RR_SURFACE_NONE,
63     RR_SURFACE_PARENTREL,
64     RR_SURFACE_SOLID,
65     RR_SURFACE_SPLIT_VERTICAL,
66     RR_SURFACE_HORIZONTAL,
67     RR_SURFACE_VERTICAL,
68     RR_SURFACE_DIAGONAL,
69     RR_SURFACE_CROSS_DIAGONAL,
70     RR_SURFACE_PYRAMID,
71     RR_SURFACE_MIRROR_HORIZONTAL
72 } RrSurfaceColorType;
73
74 typedef enum {
75     RR_TEXTURE_NONE,
76     RR_TEXTURE_MASK,
77     RR_TEXTURE_TEXT,
78     RR_TEXTURE_LINE_ART,
79     RR_TEXTURE_RGBA
80 } RrTextureType;
81
82 typedef enum {
83     RR_JUSTIFY_LEFT,
84     RR_JUSTIFY_CENTER,
85     RR_JUSTIFY_RIGHT
86 } RrJustify;
87
88 typedef enum {
89     RR_FONTWEIGHT_LIGHT,
90     RR_FONTWEIGHT_NORMAL,
91     RR_FONTWEIGHT_SEMIBOLD,
92     RR_FONTWEIGHT_BOLD,
93     RR_FONTWEIGHT_ULTRABOLD
94 } RrFontWeight;
95
96 typedef enum {
97     RR_FONTSLANT_NORMAL,
98     RR_FONTSLANT_ITALIC,
99     RR_FONTSLANT_OBLIQUE
100 } RrFontSlant;
101
102 struct _RrSurface {
103     RrSurfaceColorType grad;
104     RrReliefType relief;
105     RrBevelType bevel;
106     RrColor *primary;
107     RrColor *secondary;
108     RrColor *border_color;
109     RrColor *bevel_dark; 
110     RrColor *bevel_light;
111     RrColor *interlace_color;
112     gboolean interlaced;
113     gboolean border;
114     RrAppearance *parent;
115     gint parentx;
116     gint parenty;
117     RrPixel32 *pixel_data;
118 };
119
120 struct _RrTextureText {
121     RrFont *font;
122     RrJustify justify;
123     RrColor *color;
124     const gchar *string;
125     gint shadow_offset_x;
126     gint shadow_offset_y;
127     RrColor *shadow_color;
128     guchar shadow_alpha;
129     gboolean shortcut; /*!< Underline a character */
130     guint shortcut_pos; /*!< Position in bytes of the character to underline */
131 };
132
133 struct _RrPixmapMask {
134     const RrInstance *inst;
135     Pixmap mask;
136     gint width;
137     gint height;
138     gchar *data;
139 };
140
141 struct _RrTextureMask {
142     RrColor *color;
143     RrPixmapMask *mask;
144 };
145
146 struct _RrTextureRGBA {
147     gint width;
148     gint height;
149     gint alpha;
150     RrPixel32 *data;
151 /* cached scaled so we don't have to scale often */
152     gint cwidth;
153     gint cheight;
154     RrPixel32 *cache;
155 };
156
157 struct _RrTextureLineArt {
158     RrColor *color;
159     gint x1;
160     gint y1;
161     gint x2;
162     gint y2;
163 };
164
165 union _RrTextureData {
166     RrTextureRGBA rgba;
167     RrTextureText text;
168     RrTextureMask mask;
169     RrTextureLineArt lineart;
170 };
171
172 struct _RrTexture {
173     RrTextureType type;
174     RrTextureData data;
175 };
176
177 struct _RrAppearance {
178     const RrInstance *inst;
179
180     RrSurface surface;
181     gint textures;
182     RrTexture *texture;
183     Pixmap pixmap;
184     XftDraw *xftdraw;
185
186     /* cached for internal use */
187     gint w, h;
188 };
189
190 /* these are the same on all endian machines because it seems to be dependant
191    on the endianness of the gfx card, not the cpu. */
192 #define RrDefaultAlphaOffset 24
193 #define RrDefaultRedOffset 16
194 #define RrDefaultGreenOffset 8
195 #define RrDefaultBlueOffset 0
196
197 #define RrDefaultFontFamily       "arial,sans"
198 #define RrDefaultFontSize         8
199 #define RrDefaultFontWeight       RR_FONTWEIGHT_NORMAL
200 #define RrDefaultFontSlant        RR_FONTSLANT_NORMAL
201
202 RrInstance* RrInstanceNew (Display *display, gint screen);
203 void        RrInstanceFree (RrInstance *inst);
204
205 Display* RrDisplay      (const RrInstance *inst);
206 gint     RrScreen       (const RrInstance *inst);
207 Window   RrRootWindow   (const RrInstance *inst);
208 Visual*  RrVisual       (const RrInstance *inst);
209 gint     RrDepth        (const RrInstance *inst);
210 Colormap RrColormap     (const RrInstance *inst);
211 gint     RrRedOffset    (const RrInstance *inst);
212 gint     RrGreenOffset  (const RrInstance *inst);
213 gint     RrBlueOffset   (const RrInstance *inst);
214 gint     RrRedShift     (const RrInstance *inst);
215 gint     RrGreenShift   (const RrInstance *inst);
216 gint     RrBlueShift    (const RrInstance *inst);
217 gint     RrRedMask      (const RrInstance *inst);
218 gint     RrGreenMask    (const RrInstance *inst);
219 gint     RrBlueMask     (const RrInstance *inst);
220
221 RrColor *RrColorNew   (const RrInstance *inst, gint r, gint g, gint b);
222 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
223 void     RrColorFree  (RrColor *in);
224
225 gint     RrColorRed   (const RrColor *c);
226 gint     RrColorGreen (const RrColor *c);
227 gint     RrColorBlue  (const RrColor *c);
228 gulong   RrColorPixel (const RrColor *c);
229 GC       RrColorGC    (RrColor *c);
230
231 RrAppearance *RrAppearanceNew  (const RrInstance *inst, gint numtex);
232 RrAppearance *RrAppearanceCopy (RrAppearance *a);
233 void          RrAppearanceFree (RrAppearance *a);
234 void          RrAppearanceAddTextures(RrAppearance *a, gint numtex);
235
236 RrFont *RrFontOpen          (const RrInstance *inst, const gchar *name, gint size,
237                              RrFontWeight weight, RrFontSlant slant);
238 RrFont *RrFontOpenDefault   (const RrInstance *inst);
239 void    RrFontClose         (RrFont *f);
240 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
241                              gint shadow_offset_x, gint shadow_offset_y);
242 gint    RrFontHeight        (const RrFont *f, gint shadow_offset_y);
243 gint    RrFontMaxCharWidth  (const RrFont *f);
244
245 /* Paint into the appearance. The old pixmap is returned (if there was one). It
246    is the responsibility of the caller to call XFreePixmap on the return when
247    it is non-null. */
248 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
249 void   RrPaint       (RrAppearance *a, Window win, gint w, gint h);
250 void   RrMinSize     (RrAppearance *a, gint *w, gint *h);
251 gint   RrMinWidth    (RrAppearance *a);
252 gint   RrMinHeight   (RrAppearance *a);
253 void   RrMargins     (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
254
255 gboolean RrPixmapToRGBA(const RrInstance *inst,
256                         Pixmap pmap, Pixmap mask,
257                         gint *w, gint *h, RrPixel32 **data);
258
259 G_END_DECLS
260
261 #endif /*__render_h*/