]> icculus.org git repositories - mikachu/openbox.git/blob - render/render.h
back out r5812. you do want that there
[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     gchar shadow_alpha;
129 };
130
131 struct _RrPixmapMask {
132     const RrInstance *inst;
133     Pixmap mask;
134     gint width;
135     gint height;
136     gchar *data;
137 };
138
139 struct _RrTextureMask {
140     RrColor *color;
141     RrPixmapMask *mask;
142 };
143
144 struct _RrTextureRGBA {
145     gint width;
146     gint height;
147     RrPixel32 *data;
148 /* cached scaled so we don't have to scale often */
149     gint cwidth;
150     gint cheight;
151     RrPixel32 *cache;
152 };
153
154 struct _RrTextureLineArt {
155     RrColor *color;
156     gint x1;
157     gint y1;
158     gint x2;
159     gint y2;
160 };
161
162 union _RrTextureData {
163     RrTextureRGBA rgba;
164     RrTextureText text;
165     RrTextureMask mask;
166     RrTextureLineArt lineart;
167 };
168
169 struct _RrTexture {
170     RrTextureType type;
171     RrTextureData data;
172 };
173
174 struct _RrAppearance {
175     const RrInstance *inst;
176
177     RrSurface surface;
178     gint textures;
179     RrTexture *texture;
180     Pixmap pixmap;
181     XftDraw *xftdraw;
182
183     /* cached for internal use */
184     gint w, h;
185 };
186
187 /* these are the same on all endian machines because it seems to be dependant
188    on the endianness of the gfx card, not the cpu. */
189 #define RrDefaultAlphaOffset 24
190 #define RrDefaultRedOffset 16
191 #define RrDefaultGreenOffset 8
192 #define RrDefaultBlueOffset 0
193
194 #define RrDefaultFontFamily       "arial,sans"
195 #define RrDefaultFontSize         8
196 #define RrDefaultFontWeight       RR_FONTWEIGHT_NORMAL
197 #define RrDefaultFontSlant        RR_FONTSLANT_NORMAL
198
199 RrInstance* RrInstanceNew (Display *display, gint screen);
200 void        RrInstanceFree (RrInstance *inst);
201
202 Display* RrDisplay      (const RrInstance *inst);
203 gint     RrScreen       (const RrInstance *inst);
204 Window   RrRootWindow   (const RrInstance *inst);
205 Visual*  RrVisual       (const RrInstance *inst);
206 gint     RrDepth        (const RrInstance *inst);
207 Colormap RrColormap     (const RrInstance *inst);
208 gint     RrRedOffset    (const RrInstance *inst);
209 gint     RrGreenOffset  (const RrInstance *inst);
210 gint     RrBlueOffset   (const RrInstance *inst);
211 gint     RrRedShift     (const RrInstance *inst);
212 gint     RrGreenShift   (const RrInstance *inst);
213 gint     RrBlueShift    (const RrInstance *inst);
214 gint     RrRedMask      (const RrInstance *inst);
215 gint     RrGreenMask    (const RrInstance *inst);
216 gint     RrBlueMask     (const RrInstance *inst);
217
218 RrColor *RrColorNew   (const RrInstance *inst, gint r, gint g, gint b);
219 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
220 void     RrColorFree  (RrColor *in);
221
222 gint     RrColorRed   (const RrColor *c);
223 gint     RrColorGreen (const RrColor *c);
224 gint     RrColorBlue  (const RrColor *c);
225 gulong   RrColorPixel (const RrColor *c);
226 GC       RrColorGC    (RrColor *c);
227
228 RrAppearance *RrAppearanceNew  (const RrInstance *inst, gint numtex);
229 RrAppearance *RrAppearanceCopy (RrAppearance *a);
230 void          RrAppearanceFree (RrAppearance *a);
231
232 RrFont *RrFontOpen          (const RrInstance *inst, const gchar *name, gint size,
233                              RrFontWeight weight, RrFontSlant slant);
234 RrFont *RrFontOpenDefault   (const RrInstance *inst);
235 void    RrFontClose         (RrFont *f);
236 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
237                              gint shadow_offset_x, gint shadow_offset_y);
238 gint    RrFontHeight        (const RrFont *f, gint shadow_offset_y);
239 gint    RrFontMaxCharWidth  (const RrFont *f);
240
241 /* Paint into the appearance. The old pixmap is returned (if there was one). It
242    is the responsibility of the caller to call XFreePixmap on the return when
243    it is non-null. */
244 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
245 void   RrPaint       (RrAppearance *a, Window win, gint w, gint h);
246 void   RrMinsize     (RrAppearance *a, gint *w, gint *h);
247 void   RrMargins     (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
248
249 gboolean RrPixmapToRGBA(const RrInstance *inst,
250                         Pixmap pmap, Pixmap mask,
251                         gint *w, gint *h, RrPixel32 **data);
252
253 G_END_DECLS
254
255 #endif /*__render_h*/