emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2fe4d93624: Fix wide fringe bitmap processing on Haiku


From: Po Lu
Subject: master 2fe4d93624: Fix wide fringe bitmap processing on Haiku
Date: Sun, 13 Feb 2022 20:39:31 -0500 (EST)

branch: master
commit 2fe4d93624e3b1084a12bba27e6ff9a212fc8117
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix wide fringe bitmap processing on Haiku
    
    * src/haiku_support.cc (BBitmap_import_mono_bits): Rewrite to
    use ImportBits.
    (BBitmap_import_fringe_bitmap): New function.
    
    * src/haiku_support.h: Update prototypes.
    
    * src/haikuterm.c (haiku_define_fringe_bitmap): Pass entire
    short array to BBitmap_import_fringe_bitmap instead.
---
 src/haiku_support.cc | 29 ++++++++++++++++++++++++-----
 src/haiku_support.h  |  4 ++++
 src/haikuterm.c      |  2 +-
 3 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 5feb56b9f9..ced680d2e5 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -2187,21 +2187,40 @@ BView_mouse_moved (void *view, int x, int y, uint32_t 
transit)
     }
 }
 
-/* Import BITS into BITMAP using the B_GRAY1 colorspace.  */
+/* Import fringe bitmap (short array, low bit rightmost) BITS into
+   BITMAP using the B_GRAY1 colorspace.  */
 void
-BBitmap_import_mono_bits (void *bitmap, void *bits, int wd, int h)
+BBitmap_import_fringe_bitmap (void *bitmap, unsigned short *bits, int wd, int 
h)
 {
   BBitmap *bmp = (BBitmap *) bitmap;
   unsigned char *data = (unsigned char *) bmp->Bits ();
-  unsigned short *bts = (unsigned short *) bits;
+  int i;
 
-  for (int i = 0; i < (h * (wd / 8)); i++)
+  for (i = 0; i < h; i++)
     {
-      *((unsigned short *) data) = bts[i];
+      if (wd <= 8)
+       data[0] = bits[i] & 0xff;
+      else
+       {
+         data[1] = bits[i] & 0xff;
+         data[0] = bits[i] >> 8;
+       }
+
       data += bmp->BytesPerRow ();
     }
 }
 
+void
+BBitmap_import_mono_bits (void *bitmap, void *bits, int wd, int h)
+{
+  BBitmap *bmp = (BBitmap *) bitmap;
+
+  if (wd % 8)
+    wd += 8 - (wd % 8);
+
+  bmp->ImportBits (bits, wd / 8 * h, wd / 8, 0, B_GRAY1);
+}
+
 /* Make a scrollbar at X, Y known to the view VIEW.  */
 void
 BView_publish_scroll_bar (void *view, int x, int y, int width, int height)
diff --git a/src/haiku_support.h b/src/haiku_support.h
index e6560f401a..c9035d3dc0 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -631,6 +631,10 @@ extern "C"
   extern void
   BView_mouse_up (void *view, int x, int y);
 
+  extern void
+  BBitmap_import_fringe_bitmap (void *bitmap, unsigned short *bits,
+                               int wd, int h);
+
   extern void
   BBitmap_import_mono_bits (void *bitmap, void *bits, int wd, int h);
 
diff --git a/src/haikuterm.c b/src/haikuterm.c
index f129eba0cc..9d128f6a6a 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -2293,7 +2293,7 @@ haiku_define_fringe_bitmap (int which, unsigned short 
*bits,
     }
 
   fringe_bmps[which] = BBitmap_new (wd, h, 1);
-  BBitmap_import_mono_bits (fringe_bmps[which], bits, wd, h);
+  BBitmap_import_fringe_bitmap (fringe_bmps[which], bits, wd, h);
 }
 
 static void



reply via email to

[Prev in Thread] Current Thread [Next in Thread]