ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvttoolkit.h
Revision: 1.30
Committed: Fri Jun 8 20:04:12 2007 UTC (16 years, 11 months ago) by sasha
Content type: text/plain
Branch: MAIN
Changes since 1.29: +7 -0 lines
Log Message:
added preliminary support to use libAfterImage for background pixmap loading and rendering of transparency effects including blending of pixmap over background using several methods, and gaussian blurr of the transparency background

File Contents

# Content
1 /*----------------------------------------------------------------------*
2 * File: rxvttoolkit.h - provide toolkit-functionality for rxvt.
3 *----------------------------------------------------------------------*
4 *
5 * All portions of code are copyright by their respective author/s.
6 * Copyright (c) 2003-2006 Marc Lehmann <pcg@goof.com>
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 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *----------------------------------------------------------------------*/
22
23 #ifndef RXVT_TOOLKIT_H
24 #define RXVT_TOOLKIT_H
25
26 #include <X11/Xlib.h>
27
28 #if XFT
29 # include <X11/Xft/Xft.h>
30 #endif
31
32 #include "iom.h"
33
34 #include "rxvtlib.h"
35 #include "rxvtutil.h"
36
37 #include "callback.h"
38
39 // see rxvttoolkit.C:xa_names, which must be kept in sync
40 enum {
41 XA_TEXT,
42 XA_COMPOUND_TEXT,
43 XA_UTF8_STRING,
44 XA_MULTIPLE,
45 XA_TARGETS,
46 XA_TIMESTAMP,
47 XA_VT_SELECTION,
48 XA_INCR,
49 XA_WM_PROTOCOLS,
50 XA_WM_DELETE_WINDOW,
51 XA_CLIPBOARD,
52 XA_AVERAGE_WIDTH,
53 XA_WEIGHT_NAME,
54 XA_SLANT,
55 XA_CHARSET_REGISTRY,
56 XA_CHARSET_ENCODING,
57 #if ENABLE_FRILLS
58 XA_MOTIF_WM_HINTS,
59 #endif
60 #if ENABLE_EWMH
61 XA_NET_WM_PID,
62 XA_NET_WM_NAME,
63 XA_NET_WM_ICON_NAME,
64 XA_NET_WM_PING,
65 #endif
66 #if USE_XIM
67 XA_WM_LOCALE_NAME,
68 XA_XIM_SERVERS,
69 #endif
70 #if TRANSPARENT
71 XA_XROOTPMAP_ID,
72 XA_ESETROOT_PMAP_ID,
73 #endif
74 #if ENABLE_XEMBED
75 XA_XEMBED,
76 XA_XEMBED_INFO,
77 #endif
78 #if !ENABLE_MINIMAL
79 // these are usually allocated by other subsystens, but we do it
80 // here to avoid a server roundtrip.
81 XA_SCREEN_RESOURCES,
82 XA_XDCCC_LINEAR_RGB_CORRECTION,
83 XA_XDCCC_LINEAR_RGB_MATRICES,
84 XA_WM_COLORMAP_WINDOWS,
85 XA_WM_STATE,
86 XA_cursor,
87 # if USE_XIM
88 // various selection targets used by XIM
89 XA_TRANSPORT,
90 XA_LOCALES,
91 XA__XIM_PROTOCOL,
92 XA__XIM_XCONNECT,
93 XA__XIM_MOREDATA,
94 # endif
95 #endif
96 NUM_XA
97 };
98
99 struct rxvt_term;
100 struct rxvt_display;
101
102 struct im_watcher;
103 struct xevent_watcher;
104
105 struct refcounted {
106 int referenced;
107 char *id;
108
109 refcounted (const char *id);
110 bool ref_init () { return false; }
111 void ref_next () { }
112 ~refcounted ();
113 };
114
115 template<class T>
116 struct refcache : vector<T *> {
117 T *get (const char *id);
118 void put (T *obj);
119 void clear ();
120
121 ~refcache ()
122 {
123 clear ();
124 }
125 };
126
127 /////////////////////////////////////////////////////////////////////////////
128
129 struct rxvt_screen;
130
131 struct rxvt_drawable {
132 rxvt_screen *screen;
133 Drawable drawable;
134 operator Drawable() { return drawable; }
135
136 #if XFT
137 XftDraw *xftdrawable;
138 operator XftDraw *();
139 #endif
140
141 rxvt_drawable (rxvt_screen *screen, Drawable drawable)
142 : screen(screen),
143 #if XFT
144 xftdrawable(0),
145 #endif
146 drawable(drawable)
147 { }
148
149 #if XFT
150 ~rxvt_drawable ();
151 #endif
152 };
153
154 /////////////////////////////////////////////////////////////////////////////
155
156 #ifdef USE_XIM
157 struct rxvt_xim : refcounted {
158 void destroy ();
159 rxvt_display *display;
160
161 //public
162 XIM xim;
163
164 rxvt_xim (const char *id) : refcounted (id) { }
165 bool ref_init ();
166 ~rxvt_xim ();
167 };
168 #endif
169
170 struct rxvt_screen {
171 rxvt_display *display;
172 Display *dpy;
173 int depth;
174 Visual *visual;
175 Colormap cmap;
176
177 #if XFT
178 // scratch pixmap
179 rxvt_drawable *scratch_area;
180 int scratch_w, scratch_h;
181
182 rxvt_drawable &scratch_drawable (int w, int h);
183
184 rxvt_screen ();
185 #endif
186
187 void set (rxvt_display *disp);
188 void select_visual (int bitdepth);
189 void clear ();
190 };
191
192 #ifdef HAVE_AFTERIMAGE
193 struct ASVisual;
194 #endif
195
196 struct rxvt_display : refcounted {
197 io_manager_vec<xevent_watcher> xw;
198
199 io_watcher x_ev; void x_cb (io_watcher &w, short revents);
200
201 #ifdef USE_XIM
202 refcache<rxvt_xim> xims;
203 vector<im_watcher *> imw;
204
205 void im_change_cb ();
206 void im_change_check ();
207 #endif
208
209 //public
210 Display *dpy;
211 int screen;
212 Window root;
213 #ifdef HAVE_AFTERIMAGE
214 struct ASVisual *asv;
215 #endif
216 rxvt_term *selection_owner;
217 Atom xa[NUM_XA];
218 bool is_local;
219 #ifdef POINTER_BLANK
220 Cursor blank_cursor;
221 #endif
222
223 rxvt_display (const char *id);
224 XrmDatabase get_resources (bool refresh);
225 bool ref_init ();
226 void ref_next ();
227 ~rxvt_display ();
228
229 void flush ();
230 Atom atom (const char *name);
231 void set_selection_owner (rxvt_term *owner);
232
233 void reg (xevent_watcher *w);
234 void unreg (xevent_watcher *w);
235
236 #ifdef USE_XIM
237 void reg (im_watcher *w);
238 void unreg (im_watcher *w);
239
240 rxvt_xim *get_xim (const char *locale, const char *modifiers);
241 void put_xim (rxvt_xim *xim);
242 #endif
243 };
244
245 #ifdef USE_XIM
246 struct im_watcher : watcher, callback<void (void)> {
247 template<class O, class M>
248 im_watcher (O object, M method)
249 : callback<void (void)> (object, method)
250 { }
251
252 void start (rxvt_display *display)
253 {
254 display->reg (this);
255 }
256 void stop (rxvt_display *display)
257 {
258 display->unreg (this);
259 }
260 };
261 #endif
262
263 struct xevent_watcher : watcher, callback<void (XEvent &)> {
264 Window window;
265
266 template<class O, class M>
267 xevent_watcher (O object, M method)
268 : callback<void (XEvent &)> (object, method)
269 { }
270
271 void start (rxvt_display *display, Window window)
272 {
273 this->window = window;
274 display->reg (this);
275 }
276 void stop (rxvt_display *display)
277 {
278 display->unreg (this);
279 }
280 };
281
282 extern refcache<rxvt_display> displays;
283
284 /////////////////////////////////////////////////////////////////////////////
285
286 typedef unsigned long Pixel;
287
288 struct rgba {
289 unsigned short r, g, b, a;
290
291 enum { MIN_CC = 0x0000, MAX_CC = 0xffff };
292
293 rgba ()
294 { }
295
296 rgba (unsigned short r, unsigned short g, unsigned short b, unsigned short a = MAX_CC)
297 : r(r), g(g), b(b), a(a)
298 { }
299 };
300
301 struct rxvt_color {
302 #if XFT
303 XftColor c;
304 #else
305 XColor c;
306 #endif
307
308 operator Pixel () const { return c.pixel; }
309
310 bool operator == (const rxvt_color &b) const { return Pixel (*this) == Pixel (b); }
311 bool operator != (const rxvt_color &b) const { return Pixel (*this) != Pixel (b); }
312
313 bool alloc (rxvt_screen *screen, const rgba &color);
314 void free (rxvt_screen *screen);
315
316 void get (rgba &color);
317 void get (XColor &color);
318
319 bool set (rxvt_screen *screen, const char *name);
320 bool set (rxvt_screen *screen, const rgba &color);
321
322 void fade (rxvt_screen *screen, int percent, rxvt_color &result, const rgba &to = rgba (0, 0, 0));
323 };
324
325 #endif
326