--- rxvt-unicode/src/rxvt.h 2011/01/04 23:12:10 1.426 +++ rxvt-unicode/src/rxvt.h 2011/04/07 12:19:41 1.439 @@ -76,6 +76,20 @@ #include #include +#ifdef HAVE_AFTERIMAGE +# include +# undef min +# undef max +#endif + +#ifdef HAVE_PIXBUF +# include +#endif + +#if defined(BG_IMAGE_FROM_FILE) || defined(ENABLE_TRANSPARENCY) +# define HAVE_BG_PIXMAP 1 +#endif + #include "encoding.h" #include "rxvtutil.h" #include "rxvtfont.h" @@ -104,8 +118,6 @@ #include -#include "background.h" - #ifndef STDIN_FILENO # define STDIN_FILENO 0 # define STDOUT_FILENO 1 @@ -155,8 +167,14 @@ void rxvt_exit_failure () THROW ((class rxvt_failure_exception)) NORETURN; char * rxvt_strtrim (char *str) NOTHROW; -char ** rxvt_splitcommastring (const char *cs) NOTHROW; -void rxvt_freecommastring (char **cs) NOTHROW; +char ** rxvt_strsplit (char delim, const char *str) NOTHROW; + +static inline void +rxvt_free_strsplit (char **ptr) NOTHROW +{ + free (ptr[0]); + free (ptr); +} void * rxvt_malloc (size_t size); void * rxvt_calloc (size_t number, size_t size); @@ -371,17 +389,6 @@ #define DEFAULT_RSTYLE (RS_None | (Color_fg << RS_fgShift) | (Color_bg << RS_bgShift)) #define OVERLAY_RSTYLE (RS_None | (Color_Black << RS_fgShift) | (Color_Yellow << RS_bgShift)) -#define Sel_none 0 /* Not waiting */ -#define Sel_normal 0x01 /* normal selection */ -#define Sel_incr 0x02 /* incremental selection */ -#define Sel_direct 0x00 -#define Sel_Primary 0x01 -#define Sel_Secondary 0x02 -#define Sel_Clipboard 0x03 -#define Sel_whereMask 0x0f -#define Sel_CompoundText 0x10 /* last request was COMPOUND_TEXT */ -#define Sel_UTF8String 0x20 /* last request was UTF8_STRING */ - enum { C0_NUL = 0x00, C0_SOH, C0_STX, C0_ETX, C0_EOT, C0_ENQ, C0_ACK, C0_BEL, @@ -892,7 +899,7 @@ int term_start; /* term lines start here */ int view_start; /* scrollback view starts here */ int top_row; /* topmost row index of scrollback */ - Window parent[6]; /* parent identifiers - we're parent[0] */ + Window parent; /* parent identifier */ Window vt; /* vt100 window */ GC gc; /* GC for drawing */ Pixmap pixmap; @@ -1036,10 +1043,8 @@ unsigned char refresh_type, #ifdef META8_OPTION - meta_char, /* Alt-key prefix */ + meta_char; /* Alt-key prefix */ #endif - selection_wait, - selection_type; /* ---------- */ bool rvideo_state, rvideo_mode; #ifndef NO_BELL @@ -1085,20 +1090,109 @@ Atom *xa; /* ---------- */ Time selection_time, - selection_request_time, clipboard_time; + rxvt_selection *selection_req; pid_t cmd_pid; /* process id of child */ - char * incr_buf; - size_t incr_buf_size, incr_buf_fill; /* ---------- */ struct mouse_event MEvent; XComposeStatus compose; static struct termios def_tio; row_col_t oldcursor; #ifdef HAVE_BG_PIXMAP - bgPixmap_t bgPixmap; + void bg_init (); + void bg_destroy (); + + enum { + //subset returned by make_transparency_pixmap + BG_IS_VALID = 1 << 0, + BG_NEEDS_TINT = 1 << 1, + BG_NEEDS_BLUR = 1 << 2, + + BG_EFFECTS_FLAGS = BG_NEEDS_TINT | BG_NEEDS_BLUR, + + BG_PROP_SCALE = 1 << 3, + BG_ROOT_ALIGN = 1 << 4, + BG_GEOMETRY_FLAGS = BG_PROP_SCALE | BG_ROOT_ALIGN, + + BG_TINT_SET = 1 << 5, + BG_TINT_BITAND = 1 << 6, + BG_TINT_FLAGS = BG_NEEDS_TINT | BG_TINT_BITAND, + + BG_HAS_RENDER = 1 << 7, + BG_HAS_RENDER_CONV = 1 << 8, + BG_CLIENT_RENDER = 1 << 9, + + BG_IS_TRANSPARENT = 1 << 10, + BG_NEEDS_REFRESH = 1 << 11, + BG_IS_SIZE_SENSITIVE = 1 << 12, + BG_IS_FROM_FILE = 1 << 13, + }; + + unsigned int bg_flags; + +# ifdef BG_IMAGE_FROM_FILE + void get_image_geometry (int image_width, int image_height, int &w, int &h, int &x, int &y); + bool render_image (unsigned long tr_flags); + + enum { + noScale = 0, + windowScale = 100, + defaultScale = windowScale, + centerAlign = 50, + defaultAlign = centerAlign, + }; + + unsigned int h_scale, v_scale; /* percents of the window size */ + int h_align, v_align; /* percents of the window size: + 0 - left align, 50 - center, 100 - right */ + + bool bg_set_geometry (const char *geom, bool update = false); + void bg_set_default_geometry () + { + h_scale = v_scale = defaultScale; + h_align = v_align = defaultAlign; + } + + bool bg_set_file (const char *file); +# endif + +# ifdef ENABLE_TRANSPARENCY + Pixmap root_pixmap; /* current root pixmap set */ + rxvt_color tint; + int shade; + int h_blurRadius, v_blurRadius; + + bool bg_set_transparent (); + void bg_set_root_pixmap (); + void set_tint_shade_flags (); + bool bg_set_tint (rxvt_color &new_tint); + bool bg_set_shade (const char *shade_str); + bool bg_set_blur (const char *geom); + + bool blur_pixmap (Pixmap pixmap, Visual *visual, int width, int height); + bool tint_pixmap (Pixmap pixmap, Visual *visual, int width, int height); + unsigned long make_transparency_pixmap (); +# endif + + ev_tstamp bg_valid_since; + + Pixmap bg_pixmap; + unsigned int bg_pmap_width, bg_pmap_height; + + int target_x; + int target_y; + bool bg_set_position (int x, int y); + bool bg_window_size_sensitive (); + bool bg_window_position_sensitive (); + + bool bg_render (); + void bg_invalidate () + { + bg_flags &= ~BG_IS_VALID; + } #endif #ifdef HAVE_AFTERIMAGE + ASImage *original_asim; ASVisual *asv; ASImageManager *asimman; @@ -1108,6 +1202,12 @@ asv = create_asvisual_for_id (dpy, display->screen, depth, XVisualIDFromVisual (visual), cmap, NULL); } #endif +#ifdef HAVE_PIXBUF + GdkPixbuf *pixbuf; + bool pixbuf_to_pixmap (GdkPixbuf *pixbuf, Pixmap pixmap, GC gc, + int src_x, int src_y, int dst_x, int dst_y, + unsigned int width, unsigned int height); +#endif #if ENABLE_OVERLAY overlay_base ov; @@ -1191,9 +1291,10 @@ void refresh_check (); void flush (); void flush_cb (ev::timer &w, int revents); ev::timer flush_ev; + void cmdbuf_reify (); + void cmdbuf_append (const char *str, size_t count); bool pty_fill (); void pty_cb (ev::io &w, int revents); ev::io pty_ev; - void incr_cb (ev::timer &w, int revents) NOTHROW; ev::timer incr_ev; #ifdef CURSOR_BLINK void cursor_blink_cb (ev::timer &w, int revents); ev::timer cursor_blink_ev; @@ -1260,7 +1361,6 @@ // command.C void key_press (XKeyEvent &ev); void key_release (XKeyEvent &ev); - unsigned int cmd_write (const char *str, unsigned int count); wchar_t next_char () NOTHROW; wchar_t cmd_getc () THROW ((class out_of_input)); @@ -1297,7 +1397,6 @@ int privcases (int mode, unsigned long bit); void process_terminal_mode (int mode, int priv, unsigned int nargs, const int *arg); void process_sgr_mode (unsigned int nargs, const int *arg); - void process_graphics (); // init.C void init_vars (); const char **init_resources (int argc, const char *const *argv); @@ -1429,7 +1528,7 @@ #endif void scr_touch (bool refresh) NOTHROW; void scr_expose (int x, int y, int width, int height, bool refresh) NOTHROW; - void scr_recolour () NOTHROW; + void scr_recolour (bool refresh = true) NOTHROW; void scr_remap_chars () NOTHROW; void scr_remap_chars (line_t &l) NOTHROW; @@ -1474,10 +1573,7 @@ void scr_dump (int fd) NOTHROW; void selection_check (int check_more) NOTHROW; - void selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW; - void selection_property (Window win, Atom prop) NOTHROW; void selection_request (Time tm, int selnum = Sel_Primary) NOTHROW; - int selection_request_other (Atom target, int selnum) NOTHROW; void selection_clear (bool clipboard = false) NOTHROW; void selection_make (Time tm); bool selection_grab (Time tm, bool clipboard = false) NOTHROW;