… | |
… | |
244 | |
244 | |
245 | ///////////////////////////////////////////////////////////////////////////// |
245 | ///////////////////////////////////////////////////////////////////////////// |
246 | |
246 | |
247 | #define SvOVERLAY(sv) (overlay *)SvPTR (sv, "urxvt::overlay") |
247 | #define SvOVERLAY(sv) (overlay *)SvPTR (sv, "urxvt::overlay") |
248 | |
248 | |
249 | struct overlay { |
249 | class overlay { |
250 | HV *self; |
|
|
251 | bool visible; |
|
|
252 | rxvt_term *THIS; |
250 | rxvt_term *THIS; |
|
|
251 | AV *overlay_av; |
253 | int x, y, w, h; |
252 | int x, y, w, h; |
254 | int border; |
253 | int border; |
255 | text_t **text; |
254 | text_t **text; |
256 | rend_t **rend; |
255 | rend_t **rend; |
257 | |
256 | |
|
|
257 | public: |
|
|
258 | HV *self; |
|
|
259 | |
258 | overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border); |
260 | overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border); |
259 | ~overlay (); |
261 | ~overlay (); |
260 | |
262 | |
261 | void show (); |
263 | void show (); |
262 | void hide (); |
264 | void hide (); |
… | |
… | |
265 | |
267 | |
266 | void set (int x, int y, SV *str, SV *rend); |
268 | void set (int x, int y, SV *str, SV *rend); |
267 | }; |
269 | }; |
268 | |
270 | |
269 | overlay::overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border) |
271 | overlay::overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border) |
270 | : THIS(THIS), x(x_), y(y_), w(w_), h(h_), border(border == 2), visible(false) |
272 | : THIS(THIS), x(x_), y(y_), w(w_), h(h_), border(border == 2), overlay_av (0) |
271 | { |
273 | { |
272 | if (border == 2) |
274 | if (border == 2) |
273 | { |
275 | { |
274 | w += 2; |
276 | w += 2; |
275 | h += 2; |
277 | h += 2; |
… | |
… | |
314 | *rp++ = r; |
316 | *rp++ = r; |
315 | } |
317 | } |
316 | } |
318 | } |
317 | |
319 | |
318 | show (); |
320 | show (); |
319 | THIS->want_refresh = 1; |
|
|
320 | } |
321 | } |
321 | |
322 | |
322 | overlay::~overlay () |
323 | overlay::~overlay () |
323 | { |
324 | { |
324 | hide (); |
325 | hide (); |
… | |
… | |
329 | delete [] rend[y]; |
330 | delete [] rend[y]; |
330 | } |
331 | } |
331 | |
332 | |
332 | delete [] text; |
333 | delete [] text; |
333 | delete [] rend; |
334 | delete [] rend; |
|
|
335 | } |
|
|
336 | |
|
|
337 | void |
|
|
338 | overlay::show () |
|
|
339 | { |
|
|
340 | if (overlay_av) |
|
|
341 | return; |
|
|
342 | |
|
|
343 | overlay_av = (AV *)SvREFCNT_inc (SvRV ( |
|
|
344 | *hv_fetch ((HV *)SvRV ((SV *)THIS->perl.self), "_overlay", 8, 0) |
|
|
345 | )); |
|
|
346 | av_push (overlay_av, newSViv ((long)this)); |
334 | |
347 | |
335 | THIS->want_refresh = 1; |
348 | THIS->want_refresh = 1; |
336 | } |
349 | } |
337 | |
350 | |
338 | void |
351 | void |
339 | overlay::show () |
352 | overlay::hide () |
340 | { |
353 | { |
341 | if (visible) |
354 | if (!overlay_av) |
342 | return; |
355 | return; |
343 | |
356 | |
344 | visible = true; |
|
|
345 | |
|
|
346 | AV *av = (AV *)SvRV (*hv_fetch ((HV *)SvRV ((SV *)THIS->perl.self), "_overlay", 8, 0)); |
|
|
347 | av_push (av, newSViv ((long)this)); |
|
|
348 | } |
|
|
349 | |
|
|
350 | void |
|
|
351 | overlay::hide () |
|
|
352 | { |
|
|
353 | if (!visible) |
|
|
354 | return; |
|
|
355 | |
|
|
356 | visible = false; |
|
|
357 | |
|
|
358 | AV *av = (AV *)SvRV (*hv_fetch ((HV *)SvRV ((SV *)THIS->perl.self), "_overlay", 8, 0)); |
|
|
359 | |
|
|
360 | int i; |
357 | int i; |
361 | |
358 | |
362 | for (i = AvFILL (av); i >= 0; i--) |
359 | for (i = AvFILL (overlay_av); i >= 0; i--) |
363 | if (SvIV (*av_fetch (av, i, 1)) == (long)this) |
360 | if (SvIV (*av_fetch (overlay_av, i, 1)) == (long)this) |
364 | { |
361 | { |
365 | av_delete (av, i, G_DISCARD); |
362 | av_delete (overlay_av, i, G_DISCARD); |
366 | break; |
363 | break; |
367 | } |
364 | } |
368 | |
365 | |
369 | for (; i < AvFILL (av); i++) |
366 | for (; i < AvFILL (overlay_av); i++) |
370 | av_store (av, i, SvREFCNT_inc (*av_fetch (av, i + 1, 0))); |
367 | av_store (overlay_av, i, SvREFCNT_inc (*av_fetch (overlay_av, i + 1, 0))); |
371 | |
368 | |
372 | av_pop (av); |
369 | av_pop (overlay_av); |
|
|
370 | |
|
|
371 | SvREFCNT_dec (overlay_av); |
|
|
372 | overlay_av = 0; |
|
|
373 | |
|
|
374 | THIS->want_refresh = 1; |
373 | } |
375 | } |
374 | |
376 | |
375 | void overlay::swap () |
377 | void overlay::swap () |
376 | { |
378 | { |
377 | int ov_x = max (0, min (MOD (x, THIS->ncol), THIS->ncol - w)); |
379 | int ov_x = max (0, min (MOD (x, THIS->ncol), THIS->ncol - w)); |
… | |
… | |
556 | case DT_STR_LEN: |
558 | case DT_STR_LEN: |
557 | { |
559 | { |
558 | char *str = va_arg (ap, char *); |
560 | char *str = va_arg (ap, char *); |
559 | int len = va_arg (ap, int); |
561 | int len = va_arg (ap, int); |
560 | |
562 | |
561 | printf ("pushing str %p:%d\n", str,len);//D |
|
|
562 | XPUSHs (sv_2mortal (newSVpvn (str, len))); |
563 | XPUSHs (sv_2mortal (newSVpvn (str, len))); |
563 | } |
564 | } |
564 | break; |
565 | break; |
565 | |
566 | |
566 | case DT_WCS_LEN: |
567 | case DT_WCS_LEN: |
… | |
… | |
865 | const_iv (XIMSecondary), |
866 | const_iv (XIMSecondary), |
866 | const_iv (XIMTertiary), |
867 | const_iv (XIMTertiary), |
867 | const_iv (XIMVisibleToForward), |
868 | const_iv (XIMVisibleToForward), |
868 | const_iv (XIMVisibleToBackword), |
869 | const_iv (XIMVisibleToBackword), |
869 | const_iv (XIMVisibleToCenter), |
870 | const_iv (XIMVisibleToCenter), |
870 | |
871 | # if 0 |
871 | const_iv (XIMForwardChar), |
872 | const_iv (XIMForwardChar), |
872 | const_iv (XIMBackwardChar), |
873 | const_iv (XIMBackwardChar), |
873 | const_iv (XIMForwardWord), |
874 | const_iv (XIMForwardWord), |
874 | const_iv (XIMBackwardWord), |
875 | const_iv (XIMBackwardWord), |
875 | const_iv (XIMCaretUp), |
876 | const_iv (XIMCaretUp), |
… | |
… | |
878 | const_iv (XIMPreviousLine), |
879 | const_iv (XIMPreviousLine), |
879 | const_iv (XIMLineStart), |
880 | const_iv (XIMLineStart), |
880 | const_iv (XIMLineEnd), |
881 | const_iv (XIMLineEnd), |
881 | const_iv (XIMAbsolutePosition), |
882 | const_iv (XIMAbsolutePosition), |
882 | const_iv (XIMDontChange), |
883 | const_iv (XIMDontChange), |
|
|
884 | # endif |
883 | # endif |
885 | # endif |
884 | }; |
886 | }; |
885 | |
887 | |
886 | for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); |
888 | for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); |
887 | civ-- > const_iv; ) |
889 | civ-- > const_iv; ) |
… | |
… | |
1608 | CODE: |
1610 | CODE: |
1609 | RETVAL = THIS->charsets [THIS->screen.charset]; |
1611 | RETVAL = THIS->charsets [THIS->screen.charset]; |
1610 | OUTPUT: |
1612 | OUTPUT: |
1611 | RETVAL |
1613 | RETVAL |
1612 | |
1614 | |
1613 | #void |
1615 | void |
1614 | #rxvt_term::selection_clear () |
1616 | rxvt_term::selection_clear () |
1615 | |
1617 | |
1616 | void |
1618 | void |
1617 | rxvt_term::selection_make (Time eventtime, bool rect = false) |
1619 | rxvt_term::selection_make (Time eventtime, bool rect = false) |
1618 | CODE: |
1620 | CODE: |
1619 | THIS->selection.op = SELECTION_CONT; |
1621 | THIS->selection.op = SELECTION_CONT; |