repo: rxvt-unicode-sixel
action: commit
revision: 
path_from: 
revision_from: 8feb99f0ffc2ad97793cb199ea8386d8cee461f6:
path_to: 
revision_to: 
git.thebackupbox.net
rxvt-unicode-sixel
git clone git://git.thebackupbox.net/rxvt-unicode-sixel
commit 8feb99f0ffc2ad97793cb199ea8386d8cee461f6
Author: Marc Lehmann 
Date:   Thu Jun 30 17:22:54 2016 +0000

    *** empty log message ***

diff --git a/src/command.C b/src/command.C
index 68831f168d592901f01abd442a9e0e2da0bc1b63..
index ..338690d1dbb613ce180d99a5ede36ec25ca661df 100644
--- a/src/command.C
+++ b/src/command.C
@@ -3352,16 +3352,18 @@ colorcube_index (unsigned int idx_r,

 /*
  * Find the nearest color slot in the hidden color cube,
- * adapt its value to the 24bit RGB color.
+ * adapt its value to the 32bit RGBA color.
  */
 unsigned int
-rxvt_term::map_rgb24_color (unsigned int r, unsigned int g, unsigned int b)
+rxvt_term::map_rgb24_color (unsigned int r, unsigned int g, unsigned int b, unsigned int a)
 {
   r &= 0xff;
   g &= 0xff;
   b &= 0xff;
+  a &= 0xff;
+
+  uint32_t color = (a << 24) | (r << 16) | (g << 8) | b;

-  unsigned int color = (r << 16) | (g << 8) | b;
   unsigned int idx_r = r * (Red_levels   - 1) / 0xff;
   unsigned int idx_g = g * (Green_levels - 1) / 0xff;
   unsigned int idx_b = b * (Blue_levels  - 1) / 0xff;
@@ -3382,8 +3384,8 @@ rxvt_term::map_rgb24_color (unsigned int r, unsigned int g, unsigned int b)
   for (int n = 0; n < ecb_array_length (dxyz); ++n)
     {
       int r = idx_r + dxyz[n][0];
-      int g = idx_r + dxyz[n][1];
-      int b = idx_r + dxyz[n][2];
+      int g = idx_g + dxyz[n][1];
+      int b = idx_b + dxyz[n][2];

       if (!IN_RANGE_EXC (r, 0, Red_levels  )) continue;
       if (!IN_RANGE_EXC (g, 0, Green_levels)) continue;
@@ -3416,7 +3418,7 @@ update:

   idx += minTermCOLOR24;
   pix_colors_focused [idx].free (this);
-  pix_colors_focused [idx].set (this, rgba (r * 0x0101, g * 0x0101, b * 0x0101));
+  pix_colors_focused [idx].set (this, rgba (r * 0x0101, g * 0x0101, b * 0x0101, a * 0x0101));
   update_fade_color (idx, false);

   return idx;
@@ -4058,22 +4060,6 @@ rxvt_term::process_sgr_mode (unsigned int nargs, const int *arg)
           case 37:
             scr_color ((unsigned int) (minCOLOR + (arg[i] - 30)), Color_fg);
             break;
-          case 38: // set fg color, ISO 8613-6
-            if (nargs > i + 2 && arg[i + 1] == 5)
-              {
-                scr_color ((unsigned int) (minCOLOR + arg[i + 2]), Color_fg);
-                i += 2;
-              }
-            else if (nargs > i + 4 && arg[i + 1] == 2)
-              {
-                unsigned int r = arg[i + 2];
-                unsigned int g = arg[i + 3];
-                unsigned int b = arg[i + 4];
-                unsigned int idx = map_rgb24_color (r, g, b);
-                scr_color (idx, Color_fg);
-                i += 4;
-              }
-            break;
           case 39:		/* default fg */
             scr_color (Color_fg, Color_fg);
             break;
@@ -4088,26 +4074,37 @@ rxvt_term::process_sgr_mode (unsigned int nargs, const int *arg)
           case 47:
             scr_color ((unsigned int) (minCOLOR + (arg[i] - 40)), Color_bg);
             break;
-          case 48: // set bg color, ISO 8613-6
-            if (nargs > i + 2 && arg[i + 1] == 5)
-              {
-                scr_color ((unsigned int) (minCOLOR + arg[i + 2]), Color_bg);
-                i += 2;
-              }
-            else if (nargs > i + 4 && arg[i + 1] == 2)
-              {
-                unsigned int r = arg[i + 2];
-                unsigned int g = arg[i + 3];
-                unsigned int b = arg[i + 4];
-                unsigned int idx = map_rgb24_color (r, g, b);
-                scr_color (idx, Color_bg);
-                i += 4;
-              }
-            break;
           case 49:		/* default bg */
             scr_color (Color_bg, Color_bg);
             break;

+          case 38: // set fg color, ISO 8613-6
+          case 48: // set bg color, ISO 8613-6
+            {
+              unsigned int fgbg = arg[i] == 38 ? Color_fg : Color_bg;
+              unsigned int idx;
+            
+              if (nargs > i + 2 && arg[i + 1] == 5)
+                {
+                  idx = minCOLOR + arg[i + 2];
+                  i += 2;
+                }
+              else if (nargs > i + 4 && arg[i + 1] == 2)
+                {
+                  unsigned int r = arg[i + 2];
+                  unsigned int g = arg[i + 3];
+                  unsigned int b = arg[i + 4];
+                  unsigned int a = 0xff;
+
+                  idx = map_rgb24_color (r, g, b, a);
+
+                  i += 4;
+                }
+
+              scr_color (idx, fgbg);
+            }
+            break;
+
           //case 50: // not variable spacing

 #if !ENABLE_MINIMAL
diff --git a/src/rxvt.h b/src/rxvt.h
index d10e6a4fd8f4ebdbbc4cea5be80fdda15df3a3c7..
index ..707eb47c535416678b913a1ba816209e68f73910 100644
--- a/src/rxvt.h
+++ b/src/rxvt.h
@@ -1417,7 +1417,7 @@ struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen
   void process_osc_seq ();
   void process_color_seq (int report, int color, const char *str, char resp);
   void process_xterm_seq (int op, char *str, char resp);
-  unsigned int map_rgb24_color (unsigned int r, unsigned int g, unsigned int b);
+  unsigned int map_rgb24_color (unsigned int r, unsigned int g, unsigned int b, unsigned int a);
   int privcases (int mode, unsigned long bit);
   void process_terminal_mode (int mode, int priv, unsigned int nargs, const int *arg);
   void process_sgr_mode (unsigned int nargs, const int *arg);

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