]> code.delx.au - gnu-emacs/commitdiff
Fix fringe bitmap initialization for cairo.
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sat, 14 Feb 2015 03:44:46 +0000 (12:44 +0900)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sat, 14 Feb 2015 03:45:52 +0000 (12:45 +0900)
* fringe.c (init_fringe_bitmap) [USE_CAIRO]: Adjust bitmap data for
cairo image surface.

* xterm.c (x_cr_define_fringe_bitmap): Call cairo_surface_mark_dirty.

src/ChangeLog
src/fringe.c
src/xterm.c

index e361fe286e4c105e90dceb03569fb198b3d91370..648544928fbf58860406879e314e5f8c2158d780 100644 (file)
@@ -1,3 +1,10 @@
+2015-02-14  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * fringe.c (init_fringe_bitmap) [USE_CAIRO]: Adjust bitmap data for
+       cairo image surface.
+
+       * xterm.c (x_cr_define_fringe_bitmap): Call cairo_surface_mark_dirty.
+
 2015-02-11  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
            Jan Djärv  <jan.h.d@swipnet.se>
 
index 27b10035556d66265f035f7ee967ce2925503100..fcc5207b0629d93b8ba6ede747a8d1f1dfad78f9 100644 (file)
@@ -1405,6 +1405,21 @@ init_fringe_bitmap (int which, struct fringe_bitmap *fb, int once_p)
       unsigned short *bits = fb->bits;
       int j;
 
+#ifdef USE_CAIRO
+      for (j = 0; j < fb->height; j++)
+       {
+         unsigned short b = *bits;
+#ifdef WORDS_BIGENDIAN
+         *bits++ = (b << (16 - fb->width));
+#else
+         b = (unsigned short)((swap_nibble[b & 0xf] << 12)
+                              | (swap_nibble[(b>>4) & 0xf] << 8)
+                              | (swap_nibble[(b>>8) & 0xf] << 4)
+                              | (swap_nibble[(b>>12) & 0xf]));
+         *bits++ = (b >> (16 - fb->width));
+#endif
+       }
+#else  /* not USE_CAIRO */
       if (fb->width <= 8)
        {
          unsigned char *cbits = (unsigned char *)fb->bits;
@@ -1433,6 +1448,7 @@ init_fringe_bitmap (int which, struct fringe_bitmap *fb, int once_p)
              *bits++ = b;
            }
        }
+#endif /* not USE_CAIRO */
 #endif /* HAVE_X_WINDOWS */
 
     }
index 1074862ca3cefe515f23b1b886eaa229a763b7d3..49d9c32211c92c601db5914bd7798626856d4f0a 100644 (file)
@@ -518,6 +518,7 @@ x_cr_define_fringe_bitmap (which, bits, h, wd)
       data += stride;
     }
 
+  cairo_surface_mark_dirty (surface);
   pattern = cairo_pattern_create_for_surface (surface);
   cairo_surface_destroy (surface);