… | |
… | |
75 | #if HAVE_PIXBUF |
75 | #if HAVE_PIXBUF |
76 | # include <gdk-pixbuf/gdk-pixbuf.h> |
76 | # include <gdk-pixbuf/gdk-pixbuf.h> |
77 | #endif |
77 | #endif |
78 | |
78 | |
79 | #if XRENDER && (HAVE_PIXBUF || ENABLE_TRANSPARENCY) |
79 | #if XRENDER && (HAVE_PIXBUF || ENABLE_TRANSPARENCY) |
80 | # define HAVE_BG_PIXMAP 1 |
|
|
81 | # define HAVE_IMG 1 |
80 | # define HAVE_IMG 1 |
82 | #endif |
|
|
83 | |
|
|
84 | #if HAVE_BG_PIXMAP |
|
|
85 | # if HAVE_PIXBUF |
|
|
86 | # define BG_IMAGE_FROM_FILE 1 |
|
|
87 | # endif |
|
|
88 | # if ENABLE_TRANSPARENCY |
|
|
89 | # define BG_IMAGE_FROM_ROOT 1 |
|
|
90 | # endif |
|
|
91 | #endif |
81 | #endif |
92 | |
82 | |
93 | #include <ecb.h> |
83 | #include <ecb.h> |
94 | #include "encoding.h" |
84 | #include "encoding.h" |
95 | #include "rxvtutil.h" |
85 | #include "rxvtutil.h" |
… | |
… | |
212 | { |
202 | { |
213 | environ = orig_env; |
203 | environ = orig_env; |
214 | } |
204 | } |
215 | }; |
205 | }; |
216 | |
206 | |
217 | #ifdef HAVE_BG_PIXMAP |
|
|
218 | struct image_effects |
|
|
219 | { |
|
|
220 | bool tint_set; |
|
|
221 | rxvt_color tint; |
|
|
222 | int shade; |
|
|
223 | int h_blurRadius, v_blurRadius; |
|
|
224 | |
|
|
225 | image_effects () |
|
|
226 | { |
|
|
227 | tint_set = |
|
|
228 | h_blurRadius = |
|
|
229 | v_blurRadius = 0; |
|
|
230 | shade = 100; |
|
|
231 | } |
|
|
232 | |
|
|
233 | bool need_tint () |
|
|
234 | { |
|
|
235 | return shade != 100 || tint_set; |
|
|
236 | } |
|
|
237 | |
|
|
238 | bool need_blur () |
|
|
239 | { |
|
|
240 | return h_blurRadius && v_blurRadius; |
|
|
241 | } |
|
|
242 | |
|
|
243 | bool set_tint (const rxvt_color &new_tint); |
|
|
244 | bool set_shade (const char *shade_str); |
|
|
245 | bool set_blur (const char *geom); |
|
|
246 | }; |
|
|
247 | |
|
|
248 | # if BG_IMAGE_FROM_FILE |
|
|
249 | enum { |
|
|
250 | IM_IS_SIZE_SENSITIVE = 1 << 1, |
|
|
251 | IM_KEEP_ASPECT = 1 << 2, |
|
|
252 | IM_ROOT_ALIGN = 1 << 3, |
|
|
253 | IM_TILE = 1 << 4, |
|
|
254 | IM_GEOMETRY_FLAGS = IM_KEEP_ASPECT | IM_ROOT_ALIGN | IM_TILE, |
|
|
255 | }; |
|
|
256 | |
|
|
257 | enum { |
|
|
258 | noScale = 0, |
|
|
259 | windowScale = 100, |
|
|
260 | defaultScale = windowScale, |
|
|
261 | centerAlign = 50, |
|
|
262 | defaultAlign = centerAlign, |
|
|
263 | }; |
|
|
264 | |
|
|
265 | struct rxvt_image : image_effects |
|
|
266 | { |
|
|
267 | unsigned short alpha; |
|
|
268 | uint8_t flags; |
|
|
269 | unsigned int h_scale, v_scale; /* percents of the window size */ |
|
|
270 | int h_align, v_align; /* percents of the window size: |
|
|
271 | 0 - left align, 50 - center, 100 - right */ |
|
|
272 | |
|
|
273 | bool is_size_sensitive () |
|
|
274 | { |
|
|
275 | return (!(flags & IM_TILE) |
|
|
276 | || h_scale || v_scale |
|
|
277 | || (!(flags & IM_ROOT_ALIGN) && (h_align || v_align))); |
|
|
278 | } |
|
|
279 | |
|
|
280 | rxvt_img *img; |
|
|
281 | |
|
|
282 | void destroy () |
|
|
283 | { |
|
|
284 | delete img; |
|
|
285 | img = 0; |
|
|
286 | } |
|
|
287 | |
|
|
288 | rxvt_image (); |
|
|
289 | void set_file_geometry (rxvt_screen *s, const char *file); |
|
|
290 | void set_file (rxvt_screen *s, const char *file); |
|
|
291 | bool set_geometry (const char *geom, bool update = false); |
|
|
292 | }; |
|
|
293 | # endif |
|
|
294 | #endif |
|
|
295 | |
|
|
296 | /* |
207 | /* |
297 | ***************************************************************************** |
208 | ***************************************************************************** |
298 | * STRUCTURES AND TYPEDEFS |
209 | * STRUCTURES AND TYPEDEFS |
299 | ***************************************************************************** |
210 | ***************************************************************************** |
300 | */ |
211 | */ |
… | |
… | |
342 | ***************************************************************************** |
253 | ***************************************************************************** |
343 | */ |
254 | */ |
344 | |
255 | |
345 | /* COLORTERM, TERM environment variables */ |
256 | /* COLORTERM, TERM environment variables */ |
346 | #define COLORTERMENV "rxvt" |
257 | #define COLORTERMENV "rxvt" |
347 | #if BG_IMAGE_FROM_FILE |
258 | #if HAVE_IMG |
348 | # define COLORTERMENVFULL COLORTERMENV "-xpm" |
259 | # define COLORTERMENVFULL COLORTERMENV "-xpm" |
349 | #else |
260 | #else |
350 | # define COLORTERMENVFULL COLORTERMENV |
261 | # define COLORTERMENVFULL COLORTERMENV |
351 | #endif |
262 | #endif |
352 | #ifndef TERMENV |
263 | #ifndef TERMENV |
… | |
… | |
510 | |
421 | |
511 | // deprecated |
422 | // deprecated |
512 | Rxvt_restoreFG = 39, |
423 | Rxvt_restoreFG = 39, |
513 | Rxvt_restoreBG = 49, |
424 | Rxvt_restoreBG = 49, |
514 | |
425 | |
515 | Rxvt_Pixmap = 20, // new bg pixmap |
|
|
516 | Rxvt_dumpscreen = 55, // dump scrollback and all of screen |
426 | Rxvt_dumpscreen = 55, // dump scrollback and all of screen |
517 | |
427 | |
518 | URxvt_locale = 701, // change locale |
428 | URxvt_locale = 701, // change locale |
519 | URxvt_version = 702, // request version |
429 | URxvt_version = 702, // request version |
520 | |
430 | |
521 | URxvt_Color_IT = 704, // change actual 'Italic' colour |
431 | URxvt_Color_IT = 704, // change actual 'Italic' colour |
522 | URxvt_Color_tint = 705, // change actual tint colour |
|
|
523 | URxvt_Color_BD = 706, // change actual 'Bold' color |
432 | URxvt_Color_BD = 706, // change actual 'Bold' color |
524 | URxvt_Color_UL = 707, // change actual 'Underline' color |
433 | URxvt_Color_UL = 707, // change actual 'Underline' color |
525 | URxvt_Color_border = 708, |
434 | URxvt_Color_border = 708, |
526 | |
435 | |
527 | URxvt_font = 710, |
436 | URxvt_font = 710, |
… | |
… | |
601 | Color_HTC, |
510 | Color_HTC, |
602 | #endif |
511 | #endif |
603 | Color_scroll, |
512 | Color_scroll, |
604 | #ifdef RXVT_SCROLLBAR |
513 | #ifdef RXVT_SCROLLBAR |
605 | Color_trough, |
514 | Color_trough, |
606 | #endif |
|
|
607 | #if BG_IMAGE_FROM_ROOT |
|
|
608 | Color_tint, |
|
|
609 | #endif |
515 | #endif |
610 | #if OFF_FOCUS_FADING |
516 | #if OFF_FOCUS_FADING |
611 | Color_fade, |
517 | Color_fade, |
612 | #endif |
518 | #endif |
613 | NRS_COLORS, /* */ |
519 | NRS_COLORS, /* */ |
… | |
… | |
1193 | struct mouse_event MEvent; |
1099 | struct mouse_event MEvent; |
1194 | XComposeStatus compose; |
1100 | XComposeStatus compose; |
1195 | static struct termios def_tio; |
1101 | static struct termios def_tio; |
1196 | row_col_t oldcursor; |
1102 | row_col_t oldcursor; |
1197 | |
1103 | |
1198 | #ifdef HAVE_BG_PIXMAP |
|
|
1199 | void bg_init (); |
|
|
1200 | void bg_destroy (); |
|
|
1201 | |
|
|
1202 | # if BG_IMAGE_FROM_FILE |
|
|
1203 | rxvt_image fimage; |
|
|
1204 | void render_image (rxvt_image &image); |
|
|
1205 | # endif |
|
|
1206 | |
|
|
1207 | # if BG_IMAGE_FROM_ROOT |
|
|
1208 | rxvt_img *root_img; |
|
|
1209 | image_effects root_effects; |
|
|
1210 | |
|
|
1211 | void render_root_image (); |
|
|
1212 | # endif |
|
|
1213 | |
|
|
1214 | ev_tstamp bg_valid_since; |
|
|
1215 | |
|
|
1216 | bool bg_window_size_sensitive (); |
|
|
1217 | bool bg_window_position_sensitive (); |
|
|
1218 | |
|
|
1219 | void bg_render (); |
|
|
1220 | #endif |
|
|
1221 | |
|
|
1222 | #ifdef HAVE_IMG |
1104 | #ifdef HAVE_IMG |
1223 | enum { |
1105 | enum { |
1224 | BG_IS_TRANSPARENT = 1 << 1, |
1106 | BG_IS_TRANSPARENT = 1 << 1, |
1225 | BG_NEEDS_REFRESH = 1 << 2, |
1107 | BG_NEEDS_REFRESH = 1 << 2, |
1226 | BG_INHIBIT_RENDER = 1 << 3, |
|
|
1227 | }; |
1108 | }; |
1228 | |
1109 | |
1229 | uint8_t bg_flags; |
1110 | uint8_t bg_flags; |
1230 | |
1111 | |
1231 | rxvt_img *bg_img; |
1112 | rxvt_img *bg_img; |
… | |
… | |
1295 | void vt_select_input () const NOTHROW |
1176 | void vt_select_input () const NOTHROW |
1296 | { |
1177 | { |
1297 | XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse); |
1178 | XSelectInput (dpy, vt, vt_emask | vt_emask_perl | vt_emask_xim | vt_emask_mouse); |
1298 | } |
1179 | } |
1299 | |
1180 | |
1300 | #if BG_IMAGE_FROM_ROOT || ENABLE_PERL |
1181 | #if ENABLE_PERL |
1301 | void rootwin_cb (XEvent &xev); |
1182 | void rootwin_cb (XEvent &xev); |
1302 | xevent_watcher rootwin_ev; |
1183 | xevent_watcher rootwin_ev; |
1303 | #endif |
|
|
1304 | #ifdef HAVE_BG_PIXMAP |
|
|
1305 | void update_background (); |
|
|
1306 | void update_background_cb (ev::timer &w, int revents); |
|
|
1307 | ev::timer update_background_ev; |
|
|
1308 | #endif |
1184 | #endif |
1309 | |
1185 | |
1310 | void x_cb (XEvent &xev); |
1186 | void x_cb (XEvent &xev); |
1311 | xevent_watcher termwin_ev; |
1187 | xevent_watcher termwin_ev; |
1312 | xevent_watcher vt_ev; |
1188 | xevent_watcher vt_ev; |