]> Dogcows Code - chaz/openbox/blob - render/render.h
allow users of obrender to change the ellipsize mode of text textures
[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 /* 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*/
This page took 0.045971 seconds and 5 git commands to generate.