-- Leo's gemini proxy
-- Connecting to git.thebackupbox.net:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini
repo: rxvt-unicode-sixel action: commit revision: path_from: revision_from: 06c7e3ecec57b9597752a4a6814151a17132de97: path_to: revision_to:
commit 06c7e3ecec57b9597752a4a6814151a17132de97 Author: Marc Lehmann <schmorp@schmorp.de> Date: Thu Jun 14 18:59:39 2012 +0000 *** empty log message *** diff --git a/src/rxvtimg.C b/src/rxvtimg.C
--- a/src/rxvtimg.C +++ b/src/rxvtimg.C @@ -4,6 +4,38 @@ #if HAVE_IMG +#if 0 +struct pict +{ + Display *dpy; + Picture pic; + + operator Picture () const + { + return pic; + } + + pict () + : pic (0) + { + } + + pict (rxvt_img *img, XRenderPictFormat *format = 0) + : dpy (img->s->display->dpy) + { + XRenderPictureAttributes pa; + pa.repeat = img->repeat; + pic = XRenderCreatePicture (dpy, img->pm, format ? format : img->format, CPRepeat, &pa); + } + + ~pict () + { + if (pic) + XRenderFreePicture (dpy, pic); + } +}; +#endif + static XRenderPictFormat * find_alpha_format_for (Display *dpy, XRenderPictFormat *format) { @@ -217,7 +249,7 @@ rxvt_img::alloc () } Picture -rxvt_img::src_picture () +rxvt_img::picture () { Display *dpy = s->display->dpy; @@ -251,7 +283,7 @@ rxvt_img::fill (const rgba &c) XRenderColor rc = { c.r, c.g, c.b, c.a }; Display *dpy = s->display->dpy; - Picture src = src_picture (); + Picture src = picture (); XRenderFillRectangle (dpy, PictOpSrc, src, &rc, 0, 0, w, h); XRenderFreePicture (dpy, src); } @@ -267,7 +299,7 @@ rxvt_img::add_alpha () rxvt_img *img = new rxvt_img (s, find_alpha_format_for (dpy, format), x, y, w, h, repeat); img->alloc (); - Picture src = src_picture (); + Picture src = picture (); Picture dst = XRenderCreatePicture (dpy, img->pm, img->format, 0, 0); XRenderComposite (dpy, PictOpSrc, src, None, dst, 0, 0, 0, 0, 0, 0, w, h); @@ -451,7 +483,7 @@ rxvt_img::contrast (int32_t r, int32_t g, int32_t b, int32_t a) Display *dpy = s->display->dpy; - Picture src = src_picture (); + Picture src = picture (); Picture dst = XRenderCreatePicture (dpy, img->pm, format, 0, 0); Picture mul = create_xrender_mask (dpy, pm, True, True); @@ -478,6 +510,32 @@ rxvt_img::contrast (int32_t r, int32_t g, int32_t b, int32_t a) delete img; } +void +rxvt_img::draw (rxvt_img *img, int op, nv mask) +{ + unshare (); + + Display *dpy = s->display->dpy; + Picture src = img->picture (); + Picture dst = picture (); + Picture mask_p = 0; + + if (mask != 1.) + { + mask_p = create_xrender_mask (dpy, img->pm, False, False); + XRenderColor mask_c = { 0, 0, 0, float_to_component (mask) }; + XRenderFillRectangle (dpy, PictOpSrc, mask, &mask_c, 0, 0, 1, 1); + } + + XRenderComposite (dpy, op, src, mask_p, dst, x - img->x, y - img->y, 0, 0, 0, 0, w, h); + + XRenderFreePicture (dpy, src); + XRenderFreePicture (dpy, dst); + + if (mask) + XRenderFreePicture (dpy, mask_p); +} + rxvt_img * rxvt_img::clone () { @@ -500,7 +558,7 @@ rxvt_img::reify () rxvt_img *img = new rxvt_img (s, alpha ? find_alpha_format_for (dpy, format) : format, 0, 0, w, h, repeat); img->alloc (); - Picture src = src_picture (); + Picture src = picture (); Picture dst = XRenderCreatePicture (dpy, img->pm, img->format, 0, 0); if (alpha) @@ -602,7 +660,7 @@ rxvt_img::transform (nv matrix[3][3]) img->alloc (); Display *dpy = s->display->dpy; - Picture src = src_picture (); + Picture src = picture (); Picture dst = XRenderCreatePicture (dpy, img->pm, img->format, 0, 0); XTransform xfrm; @@ -677,7 +735,7 @@ rxvt_img::convert_format (XRenderPictFormat *new_format, const rgba &bg) img->alloc (); Display *dpy = s->display->dpy; - Picture src = src_picture (); + Picture src = picture (); Picture dst = XRenderCreatePicture (dpy, img->pm, new_format, 0, 0); int op = PictOpSrc; @@ -703,7 +761,7 @@ rxvt_img::blend (rxvt_img *img, nv factor) { rxvt_img *img2 = clone (); Display *dpy = s->display->dpy; - Picture src = img->src_picture (); + Picture src = img->picture (); Picture dst = XRenderCreatePicture (dpy, img2->pm, img2->format, 0, 0); Picture mask = create_xrender_mask (dpy, img->pm, False, False); diff --git a/src/rxvtimg.h b/src/rxvtimg.h
--- a/src/rxvtimg.h +++ b/src/rxvtimg.h @@ -14,7 +14,7 @@ class rxvt_img { void destroy (); - Picture src_picture (); + Picture picture (); public: typedef double nv; @@ -93,6 +93,8 @@ public: float_to_component (a)); } + void draw (rxvt_img *img, int op = PictOpSrc, nv mask = 1.); + // copy rxvt_img *reify (); // make x, y 0, make real width/height rxvt_img *blur (int rh, int rv); diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs
--- a/src/rxvtperl.xs +++ b/src/rxvtperl.xs @@ -69,8 +69,10 @@ parse_rgba (SV *sv, rxvt_screen *s = 0) { rgba c; - if (AV *av = (AV *)SvRV (sv)) + if (SvROK (sv)) { + AV *av = (AV *)SvRV (sv); + if (SvTYPE ((SV *)av) != SVt_PVAV) croak ("colour must be either a colour string, or an array,"); @@ -911,6 +913,62 @@ BOOT: const_iv (RepeatNormal), const_iv (RepeatPad), const_iv (RepeatReflect), + // all versions + const_iv (PictOpClear), + const_iv (PictOpSrc), + const_iv (PictOpDst), + const_iv (PictOpOver), + const_iv (PictOpOverReverse), + const_iv (PictOpIn), + const_iv (PictOpInReverse), + const_iv (PictOpOut), + const_iv (PictOpOutReverse), + const_iv (PictOpAtop), + const_iv (PictOpAtopReverse), + const_iv (PictOpXor), + const_iv (PictOpAdd), + const_iv (PictOpSaturate), + // 0.2+ + const_iv (PictOpDisjointClear), + const_iv (PictOpDisjointSrc), + const_iv (PictOpDisjointDst), + const_iv (PictOpDisjointOver), + const_iv (PictOpDisjointOverReverse), + const_iv (PictOpDisjointIn), + const_iv (PictOpDisjointInReverse), + const_iv (PictOpDisjointOut), + const_iv (PictOpDisjointOutReverse), + const_iv (PictOpDisjointAtop), + const_iv (PictOpDisjointAtopReverse), + const_iv (PictOpDisjointXor), + const_iv (PictOpConjointClear), + const_iv (PictOpConjointSrc), + const_iv (PictOpConjointDst), + const_iv (PictOpConjointOver), + const_iv (PictOpConjointOverReverse), + const_iv (PictOpConjointIn), + const_iv (PictOpConjointInReverse), + const_iv (PictOpConjointOut), + const_iv (PictOpConjointOutReverse), + const_iv (PictOpConjointAtop), + const_iv (PictOpConjointAtopReverse), + const_iv (PictOpConjointXor), + // 0.11+ + const_iv (PictOpMultiply), + const_iv (PictOpScreen), + const_iv (PictOpOverlay), + const_iv (PictOpDarken), + const_iv (PictOpLighten), + const_iv (PictOpColorDodge), + const_iv (PictOpColorBurn), + const_iv (PictOpHardLight), + const_iv (PictOpSoftLight), + const_iv (PictOpDifference), + const_iv (PictOpExclusion), + const_iv (PictOpHSLHue), + const_iv (PictOpHSLSaturation), + const_iv (PictOpHSLColor), + const_iv (PictOpHSLLuminosity), #endif # if 0 const_iv (XIMForwardChar),
-----END OF PAGE-----
-- Response ended
-- Page fetched on Sun Jun 2 11:18:20 2024