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