[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 2fe4d93624: Fix wide fringe bitmap processing on Haiku,
Po Lu <=