]> Dogcows Code - chaz/openbox/blob - render/render.h
c13894aab9573f666b1185051cf9ecadcc2cc79e
[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 "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*/
This page took 0.049974 seconds and 4 git commands to generate.