-- 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:

git.thebackupbox.net

rxvt-unicode-sixel

git://git.thebackupbox.net/rxvt-unicode-sixel

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

index 08dc71d0ffb3d749f2a34afe09b88553145ba430..

index ..d85953dd23124435197535c2a49fc8a377f1c6de 100644

--- 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

index 05652bcb4bf30addf8f995d35e8a6dba017d2acd..

index ..60dceb8091005bbc892a3267c18dd447f81b92c2 100644

--- 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

index add9ce57d92bffb79942389397d2b10096b7f4a5..

index ..c86270e63fc3c95045f7ed292a835eba90b29355 100644

--- 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