]> Dogcows Code - chaz/openbox/blob - render/render.h
you can create dialog windows called "prompts" which have a message and some buttons...
[chaz/openbox] / 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 "render/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 gint bevel_dark_adjust; /* 0-255, default is 64 */
127 gint bevel_light_adjust; /* 0-255, default is 128 */
128 RrColor *split_primary;
129 RrColor *split_secondary;
130 };
131
132 struct _RrTextureText {
133 RrFont *font;
134 RrJustify justify;
135 RrColor *color;
136 const gchar *string;
137 gint shadow_offset_x;
138 gint shadow_offset_y;
139 RrColor *shadow_color;
140 guchar shadow_alpha;
141 gboolean shortcut; /*!< Underline a character */
142 guint shortcut_pos; /*!< Position in bytes of the character to underline */
143 RrEllipsizeMode ellipsize;
144 gint maxwidth;
145 };
146
147 struct _RrPixmapMask {
148 const RrInstance *inst;
149 Pixmap mask;
150 gint width;
151 gint height;
152 gchar *data;
153 };
154
155 struct _RrTextureMask {
156 RrColor *color;
157 RrPixmapMask *mask;
158 };
159
160 struct _RrTextureRGBA {
161 gint width;
162 gint height;
163 gint alpha;
164 RrPixel32 *data;
165 /* cached scaled so we don't have to scale often */
166 gint cwidth;
167 gint cheight;
168 RrPixel32 *cache;
169 };
170
171 struct _RrTextureLineArt {
172 RrColor *color;
173 gint x1;
174 gint y1;
175 gint x2;
176 gint y2;
177 };
178
179 union _RrTextureData {
180 RrTextureRGBA rgba;
181 RrTextureText text;
182 RrTextureMask mask;
183 RrTextureLineArt lineart;
184 };
185
186 struct _RrTexture {
187 RrTextureType type;
188 RrTextureData data;
189 };
190
191 struct _RrAppearance {
192 const RrInstance *inst;
193
194 RrSurface surface;
195 gint textures;
196 RrTexture *texture;
197 Pixmap pixmap;
198 XftDraw *xftdraw;
199
200 /* cached for internal use */
201 gint w, h;
202 };
203
204 /* these are the same on all endian machines because it seems to be dependant
205 on the endianness of the gfx card, not the cpu. */
206 #define RrDefaultAlphaOffset 24
207 #define RrDefaultRedOffset 16
208 #define RrDefaultGreenOffset 8
209 #define RrDefaultBlueOffset 0
210
211 #define RrDefaultFontFamily "arial,sans"
212 #define RrDefaultFontSize 8
213 #define RrDefaultFontWeight RR_FONTWEIGHT_NORMAL
214 #define RrDefaultFontSlant RR_FONTSLANT_NORMAL
215
216 RrInstance* RrInstanceNew (Display *display, gint screen);
217 void RrInstanceFree (RrInstance *inst);
218
219 Display* RrDisplay (const RrInstance *inst);
220 gint RrScreen (const RrInstance *inst);
221 Window RrRootWindow (const RrInstance *inst);
222 Visual* RrVisual (const RrInstance *inst);
223 gint RrDepth (const RrInstance *inst);
224 Colormap RrColormap (const RrInstance *inst);
225 gint RrRedOffset (const RrInstance *inst);
226 gint RrGreenOffset (const RrInstance *inst);
227 gint RrBlueOffset (const RrInstance *inst);
228 gint RrRedShift (const RrInstance *inst);
229 gint RrGreenShift (const RrInstance *inst);
230 gint RrBlueShift (const RrInstance *inst);
231 gint RrRedMask (const RrInstance *inst);
232 gint RrGreenMask (const RrInstance *inst);
233 gint RrBlueMask (const RrInstance *inst);
234
235 RrColor *RrColorNew (const RrInstance *inst, gint r, gint g, gint b);
236 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
237 void RrColorFree (RrColor *in);
238
239 gint RrColorRed (const RrColor *c);
240 gint RrColorGreen (const RrColor *c);
241 gint RrColorBlue (const RrColor *c);
242 gulong RrColorPixel (const RrColor *c);
243 GC RrColorGC (RrColor *c);
244
245 RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex);
246 RrAppearance *RrAppearanceCopy (RrAppearance *a);
247 void RrAppearanceFree (RrAppearance *a);
248 void RrAppearanceRemoveTextures(RrAppearance *a);
249 void RrAppearanceAddTextures(RrAppearance *a, gint numtex);
250
251 RrFont *RrFontOpen (const RrInstance *inst, const gchar *name,
252 gint size, RrFontWeight weight, RrFontSlant slant);
253 RrFont *RrFontOpenDefault (const RrInstance *inst);
254 void RrFontClose (RrFont *f);
255 RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
256 gint shadow_offset_x, gint shadow_offset_y,
257 gint maxwidth);
258 gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
259 gint RrFontMaxCharWidth (const RrFont *f);
260
261 /* Paint into the appearance. The old pixmap is returned (if there was one). It
262 is the responsibility of the caller to call XFreePixmap on the return when
263 it is non-null. */
264 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
265 void RrPaint (RrAppearance *a, Window win, gint w, gint h);
266 void RrMinSize (RrAppearance *a, gint *w, gint *h);
267 gint RrMinWidth (RrAppearance *a);
268 gint RrMinHeight (RrAppearance *a);
269 void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
270
271 gboolean RrPixmapToRGBA(const RrInstance *inst,
272 Pixmap pmap, Pixmap mask,
273 gint *w, gint *h, RrPixel32 **data);
274
275 G_END_DECLS
276
277 #endif /*__render_h*/
This page took 0.043107 seconds and 4 git commands to generate.