]> icculus.org git repositories - mikachu/openbox.git/blob - render/render.h
add osd theme elements
[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 /* Put middle first so it's the default */
89 typedef enum {
90     RR_ELLIPSIZE_MIDDLE,
91     RR_ELLIPSIZE_NONE,
92     RR_ELLIPSIZE_START,
93     RR_ELLIPSIZE_END
94 } RrEllipsizeMode;
95
96 typedef enum {
97     RR_FONTWEIGHT_LIGHT,
98     RR_FONTWEIGHT_NORMAL,
99     RR_FONTWEIGHT_SEMIBOLD,
100     RR_FONTWEIGHT_BOLD,
101     RR_FONTWEIGHT_ULTRABOLD
102 } RrFontWeight;
103
104 typedef enum {
105     RR_FONTSLANT_NORMAL,
106     RR_FONTSLANT_ITALIC,
107     RR_FONTSLANT_OBLIQUE
108 } RrFontSlant;
109
110 struct _RrSurface {
111     RrSurfaceColorType grad;
112     RrReliefType relief;
113     RrBevelType bevel;
114     RrColor *primary;
115     RrColor *secondary;
116     RrColor *border_color;
117     RrColor *bevel_dark; 
118     RrColor *bevel_light;
119     RrColor *interlace_color;
120     gboolean interlaced;
121     gboolean border;
122     RrAppearance *parent;
123     gint parentx;
124     gint parenty;
125     RrPixel32 *pixel_data;
126 };
127
128 struct _RrTextureText {
129     RrFont *font;
130     RrJustify justify;
131     RrColor *color;
132     const gchar *string;
133     gint shadow_offset_x;
134     gint shadow_offset_y;
135     RrColor *shadow_color;
136     guchar shadow_alpha;
137     gboolean shortcut; /*!< Underline a character */
138     guint shortcut_pos; /*!< Position in bytes of the character to underline */
139     RrEllipsizeMode ellipsize;
140 };
141
142 struct _RrPixmapMask {
143     const RrInstance *inst;
144     Pixmap mask;
145     gint width;
146     gint height;
147     gchar *data;
148 };
149
150 struct _RrTextureMask {
151     RrColor *color;
152     RrPixmapMask *mask;
153 };
154
155 struct _RrTextureRGBA {
156     gint width;
157     gint height;
158     gint alpha;
159     RrPixel32 *data;
160 /* cached scaled so we don't have to scale often */
161     gint cwidth;
162     gint cheight;
163     RrPixel32 *cache;
164 };
165
166 struct _RrTextureLineArt {
167     RrColor *color;
168     gint x1;
169     gint y1;
170     gint x2;
171     gint y2;
172 };
173
174 union _RrTextureData {
175     RrTextureRGBA rgba;
176     RrTextureText text;
177     RrTextureMask mask;
178     RrTextureLineArt lineart;
179 };
180
181 struct _RrTexture {
182     RrTextureType type;
183     RrTextureData data;
184 };
185
186 struct _RrAppearance {
187     const RrInstance *inst;
188
189     RrSurface surface;
190     gint textures;
191     RrTexture *texture;
192     Pixmap pixmap;
193     XftDraw *xftdraw;
194
195     /* cached for internal use */
196     gint w, h;
197 };
198
199 /* these are the same on all endian machines because it seems to be dependant
200    on the endianness of the gfx card, not the cpu. */
201 #define RrDefaultAlphaOffset 24
202 #define RrDefaultRedOffset 16
203 #define RrDefaultGreenOffset 8
204 #define RrDefaultBlueOffset 0
205
206 #define RrDefaultFontFamily       "arial,sans"
207 #define RrDefaultFontSize         8
208 #define RrDefaultFontWeight       RR_FONTWEIGHT_NORMAL
209 #define RrDefaultFontSlant        RR_FONTSLANT_NORMAL
210
211 RrInstance* RrInstanceNew (Display *display, gint screen);
212 void        RrInstanceFree (RrInstance *inst);
213
214 Display* RrDisplay      (const RrInstance *inst);
215 gint     RrScreen       (const RrInstance *inst);
216 Window   RrRootWindow   (const RrInstance *inst);
217 Visual*  RrVisual       (const RrInstance *inst);
218 gint     RrDepth        (const RrInstance *inst);
219 Colormap RrColormap     (const RrInstance *inst);
220 gint     RrRedOffset    (const RrInstance *inst);
221 gint     RrGreenOffset  (const RrInstance *inst);
222 gint     RrBlueOffset   (const RrInstance *inst);
223 gint     RrRedShift     (const RrInstance *inst);
224 gint     RrGreenShift   (const RrInstance *inst);
225 gint     RrBlueShift    (const RrInstance *inst);
226 gint     RrRedMask      (const RrInstance *inst);
227 gint     RrGreenMask    (const RrInstance *inst);
228 gint     RrBlueMask     (const RrInstance *inst);
229
230 RrColor *RrColorNew   (const RrInstance *inst, gint r, gint g, gint b);
231 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
232 void     RrColorFree  (RrColor *in);
233
234 gint     RrColorRed   (const RrColor *c);
235 gint     RrColorGreen (const RrColor *c);
236 gint     RrColorBlue  (const RrColor *c);
237 gulong   RrColorPixel (const RrColor *c);
238 GC       RrColorGC    (RrColor *c);
239
240 RrAppearance *RrAppearanceNew  (const RrInstance *inst, gint numtex);
241 RrAppearance *RrAppearanceCopy (RrAppearance *a);
242 void          RrAppearanceFree (RrAppearance *a);
243 void          RrAppearanceAddTextures(RrAppearance *a, gint numtex);
244
245 RrFont *RrFontOpen          (const RrInstance *inst, const gchar *name, gint size,
246                              RrFontWeight weight, RrFontSlant slant);
247 RrFont *RrFontOpenDefault   (const RrInstance *inst);
248 void    RrFontClose         (RrFont *f);
249 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
250                              gint shadow_offset_x, gint shadow_offset_y);
251 gint    RrFontHeight        (const RrFont *f, gint shadow_offset_y);
252 gint    RrFontMaxCharWidth  (const RrFont *f);
253
254 /* Paint into the appearance. The old pixmap is returned (if there was one). It
255    is the responsibility of the caller to call XFreePixmap on the return when
256    it is non-null. */
257 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
258 void   RrPaint       (RrAppearance *a, Window win, gint w, gint h);
259 void   RrMinSize     (RrAppearance *a, gint *w, gint *h);
260 gint   RrMinWidth    (RrAppearance *a);
261 gint   RrMinHeight   (RrAppearance *a);
262 void   RrMargins     (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
263
264 gboolean RrPixmapToRGBA(const RrInstance *inst,
265                         Pixmap pmap, Pixmap mask,
266                         gint *w, gint *h, RrPixel32 **data);
267
268 G_END_DECLS
269
270 #endif /*__render_h*/