--- rxvt-unicode/src/rxvtperl.xs 2012/06/04 15:43:22 1.161 +++ rxvt-unicode/src/rxvtperl.xs 2012/06/05 15:18:24 1.169 @@ -54,6 +54,8 @@ typedef char * octet_string; typedef char * utf8_string; +typedef int render_repeat_mode; + typedef GdkPixbuf * urxvt__pixbuf; typedef rxvt_img * urxvt__img; @@ -802,7 +804,7 @@ const_iv (XIMVisibleToForward), const_iv (XIMVisibleToBackword), const_iv (XIMVisibleToCenter), -#if HAVE_XRENDER +#if XRENDER const_iv (PictStandardARGB32), const_iv (PictStandardRGB24), const_iv (PictStandardA8), @@ -847,6 +849,22 @@ void _exit (int status) +void +catch_fatal (SV *block) + PROTOTYPE: & + CODE: + try + { + PUSHMARK (SP); + PUTBACK; + call_sv (block, G_VOID | G_DISCARD); + SPAGAIN; + } + catch (const rxvt_failure_exception &e) + { + croak ("rxvt_fatal exception caught, trying to continue."); + } + NV NOW () CODE: @@ -980,7 +998,19 @@ void rxvt_term::set_should_invoke (int htype, int inc) CODE: - THIS->perl.should_invoke [htype] += inc; + uint8_t &count = THIS->perl.should_invoke [htype]; + uint8_t prev = count; + count += inc; + if (!prev != !count) + { + // hook status changed, react + switch (htype) + { + case HOOK_POSITION_CHANGE: + if (count) + THIS->get_window_origin (THIS->parent_x, THIS->parent_y); + } + } int rxvt_term::grab_button (int button, U32 modifiers, Window window = THIS->vt) @@ -1247,10 +1277,17 @@ OUTPUT: RETVAL -Window -rxvt_term::vt () +int +rxvt_term::parent_x () CODE: - RETVAL = THIS->vt; + RETVAL = THIS->parent_x; + OUTPUT: + RETVAL + +int +rxvt_term::parent_y () + CODE: + RETVAL = THIS->parent_y; OUTPUT: RETVAL @@ -1936,6 +1973,28 @@ ############################################################################# # fancy bg bloatstuff (TODO: should be moved up somewhere) +# TODO: ugly +void +rxvt_term::get_geometry () + PPCODE: + EXTEND (SP, 4); + PUSHs (sv_2mortal (newSViv (THIS->parent_x))); + PUSHs (sv_2mortal (newSViv (THIS->parent_y))); + PUSHs (sv_2mortal (newSViv (THIS->szHint.width))); + PUSHs (sv_2mortal (newSViv (THIS->szHint.height))); + +#if HAVE_IMG + +rxvt_img * +rxvt_term::new_img (SV *format, int width, int height) + CODE: + XRenderPictFormat *f = SvOK (format) + ? XRenderFindStandardFormat (THIS->dpy, SvIV (format)) + : XRenderFindVisualFormat (THIS->dpy, THIS->visual); + RETVAL = new rxvt_img (THIS, f, width, height); + OUTPUT: + RETVAL + #if ENABLE_TRANSPARENCY #if 0 @@ -1988,6 +2047,8 @@ #endif +#endif + ############################################################################# # urxvt::overlay ############################################################################# @@ -2029,6 +2090,34 @@ # rxvt_img *new (rxvt_screen *screen, XRenderPictFormat *format, int width, int height) # rxvt_img *rxvt_img (rxvt_screen *screen, XRenderPictFormat *format, int width, int height, Pixmap pixmap); +int +rxvt_img::w () + CODE: + RETVAL = THIS->w; + OUTPUT: + RETVAL + +int +rxvt_img::h () + CODE: + RETVAL = THIS->h; + OUTPUT: + RETVAL + +bool +rxvt_img::shared () + CODE: + RETVAL = THIS->shared; + OUTPUT: + RETVAL + +Pixmap +rxvt_img::pm () + CODE: + RETVAL = THIS->pm; + OUTPUT: + RETVAL + void rxvt_img::fill (SV *c) INIT: @@ -2041,7 +2130,7 @@ CODE: delete THIS; -void +rxvt_img * rxvt_img::blur (int rh, int rv) void @@ -2057,17 +2146,23 @@ rxvt_img::clone () rxvt_img * -rxvt_img::scale (int new_width, int new_height) +rxvt_img::sub_rect (int x, int y, int width, int height, render_repeat_mode repeat = RepeatNormal) rxvt_img * -rxvt_img::transform (int new_width, int new_height, int repeat, NV p11, NV p12, NV p13, NV p21, NV p22, NV p23, NV p31, NV p32, NV p33) +rxvt_img::transform (int new_width, int new_height, NV p11, NV p12, NV p13, NV p21, NV p22, NV p23, NV p31, NV p32, NV p33, render_repeat_mode repeat = RepeatNormal) INIT: double matrix[9] = { p11, p12, p13, p21, p22, p23, p31, p32, p33 }; - C_ARGS: new_width, new_height, repeat, matrix + C_ARGS: new_width, new_height, matrix, repeat + +rxvt_img * +rxvt_img::scale (int new_width, int new_height) + +rxvt_img * +rxvt_img::rotate (int new_width, int new_height, int x, int y, NV phi, render_repeat_mode repeat = RepeatNormal) #endif