-- 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: 4b8ef3821227afcc71af5dd226b8a1876d69344d:
path_to:
revision_to:

git.thebackupbox.net

rxvt-unicode-sixel

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

commit 4b8ef3821227afcc71af5dd226b8a1876d69344d
Author: Marc Lehmann <schmorp@schmorp.de>
Date:   Fri Jun 15 18:36:26 2012 +0000

    *** empty log message ***

diff --git a/src/rxvtimg.C b/src/rxvtimg.C

index eb7b822acbd6abcfcf36a5219460bd42729ea1f0..

index ..5491fd3748a445f4abd7289d97f13f5db241dea1 100644

--- a/src/rxvtimg.C
+++ b/src/rxvtimg.C
@@ -18,7 +18,7 @@ namespace
     {
     }

-    mat3x3 (nv matrix[3][3])
+    mat3x3 (const nv *matrix)
     {
       memcpy (v, matrix, sizeof (v));
     }
@@ -35,6 +35,9 @@ namespace
           nv *operator [](int i)       { return &v[i][0]; }
     const nv *operator [](int i) const { return &v[i][0]; }

+    operator const nv * () const { return &v[0][0]; }
+    operator       nv * ()       { return &v[0][0]; }
+
     // quite inefficient, hopefully gcc pulls the w calc out of any loops
     nv apply1 (int i, nv x, nv y)
     {
@@ -47,6 +50,8 @@ namespace
     }

     static mat3x3 translate (nv x, nv y);
+    static mat3x3 scale     (nv s, nv t);
+    static mat3x3 rotate    (nv phi);
   };

   mat3x3
@@ -100,6 +105,30 @@ namespace
     );
   }

+  mat3x3
+  mat3x3::scale (nv s, nv t)
+  {
+    return mat3x3 (
+      s, 0, 0,
+      0, t, 0,
+      0, 0, 1
+    );
+  }
+
+  // clockwise
+  mat3x3
+  mat3x3::rotate (nv phi)
+  {
+    nv s = sin (phi);
+    nv c = cos (phi);
+
+    return mat3x3 (
+      c, -s, 0,
+      s,  c, 0,
+      0,  0, 1
+    );
+  }
+
 }

 #if 0
@@ -696,13 +725,19 @@ rxvt_img::sub_rect (int x, int y, int width, int height)
 }

 rxvt_img *
-rxvt_img::transform (nv matrix[3][3])
+rxvt_img::transform (const nv matrix[3][3])
 {
-  // calculate new pixel bounding box coordinates
-  nv r[2], rmin[2], rmax[2];
+  return transform (mat3x3 (&matrix[0][0]));
+}

+rxvt_img *
+rxvt_img::transform (const nv *matrix)
+{
   mat3x3 m (matrix);

+  // calculate new pixel bounding box coordinates
+  nv r[2], rmin[2], rmax[2];
+
   for (int i = 0; i < 2; ++i)
     {
       nv v;
@@ -756,16 +791,10 @@ rxvt_img::scale (int new_width, int new_height)
   if (w == new_width && h == new_height)
     return clone ();

-  nv matrix[3][3] = {
-    { new_width / (nv)w,  0, 0 },
-    { 0, new_height / (nv)h, 0 },
-    { 0,                  0, 1 }
-  };
-
   int old_repeat_mode = repeat;
   repeat = RepeatPad; // not right, but xrender can't properly scale it seems

-  rxvt_img *img = transform (matrix);
+  rxvt_img *img = transform (mat3x3::scale (new_width / (nv)w, new_height / (nv)h));

   repeat = old_repeat_mode;
   img->repeat = repeat;
@@ -776,23 +805,14 @@ rxvt_img::scale (int new_width, int new_height)
 rxvt_img *
 rxvt_img::rotate (int cx, int cy, nv phi)
 {
-  nv s = sin (phi);
-  nv c = cos (phi);
-
-  nv matrix[3][3] = {
 #if 0
     { c, -s, cx - c * cx + s * cy },
     { s,  c, cy - s * cx - c * cy },
     { 0,  0,                    1 }
-#else
-    { c, -s, 0 },
-    { s,  c, 0 },
-    { 0,  0, 1 }
 #endif
-  };

   move (-cx, -cy);
-  rxvt_img *img = transform (matrix);
+  rxvt_img *img = transform (mat3x3::rotate (phi));
   move ( cx,  cy);
   img->move (cx, cy);

diff --git a/src/rxvtimg.h b/src/rxvtimg.h

index 5546d161621ff8f773114ac7ac6e5d09a73b77bd..

index ..64b4f52cf4d7c97cfd9d8d462ca66ccb1796ca13 100644

--- a/src/rxvtimg.h
+++ b/src/rxvtimg.h
@@ -11,12 +11,8 @@

 #include <X11/extensions/Xrender.h>

-class rxvt_img
+struct rxvt_img
 {
-  void destroy ();
-  Picture picture ();
-
-public:
   typedef double nv;

   // *could* also hold the Pixmap itself
@@ -100,7 +96,7 @@ public:
   rxvt_img *blur (int rh, int rv);
   rxvt_img *clone ();
   rxvt_img *sub_rect (int x, int y, int width, int height);
-  rxvt_img *transform (nv matrix[3][3]);
+  rxvt_img *transform (const nv matrix[3][3]);
   rxvt_img *scale (int new_width, int new_height);
   rxvt_img *rotate (int cx, int cy, nv phi);
   rxvt_img *convert_format (XRenderPictFormat *format, const rgba &bg);
@@ -113,6 +109,12 @@ public:
     p = this;
     return this;
   }
+
+private:
+
+  void destroy ();
+  Picture picture ();
+  rxvt_img *transform (const nv *matrix);
 };

 #endif

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 13:54:43 2024