This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository efm2.
View the commit online.
commit 94784e437bf5fe948566a4c0f352f65b86bcade3
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Mon Aug 21 19:29:49 2023 +0100
break out bitmap code from efm custom layout
---
src/efm/bitmap.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/efm/efm_custom.c | 211 +--------------------------------------------------
2 files changed, 211 insertions(+), 210 deletions(-)
diff --git a/src/efm/bitmap.c b/src/efm/bitmap.c
new file mode 100644
index 0000000..ee81ebb
--- /dev/null
+++ b/src/efm/bitmap.c
@@ -0,0 +1,210 @@
+// bitmap code - must be a multiple of 32 wide - assumed.
+static void
+_bitmap_free(unsigned int *bitmap)
+{
+ free(bitmap);
+}
+
+static void
+_bitmap_clear(unsigned int *bitmap, int szw, int szh)
+{
+ memset(bitmap, 0, ((szw / 32) * szh) * sizeof(unsigned int));
+}
+
+static unsigned int *
+_bitmap_resize(unsigned int *bitmap, int szw, int szh, int nszw, int nszh)
+{ // alloc a new sized bitmap and copy current content into new one
+ // guaranteeing "new" space is zero'd out if there is new empty space
+ unsigned int *new_bitmap, *src, *dst;
+ int y;
+
+ new_bitmap = malloc(((nszw / 32) * nszh) * sizeof(unsigned int));
+ if (!new_bitmap) goto done;
+
+ src = ""
+ dst = new_bitmap;
+ if (nszw > szw)
+ { // if new width wider
+ if (nszh > szh)
+ { // if taller
+ for (y = 0; y < szh; y++)
+ {
+ if (bitmap)
+ {
+ memcpy(dst, src, (szw / 32) * sizeof(unsigned int));
+ src += szw / 32;
+ }
+ memset(dst + (szw / 32), 0,
+ ((nszw - szw) / 32) * sizeof(unsigned int));
+ dst += nszw / 32;
+ }
+ for (y = szh; y < nszh; y++)
+ {
+ memset(dst, 0, (nszw / 32) * sizeof(unsigned int));
+ dst += nszw / 32;
+ }
+ }
+ else
+ { // same height or shorter
+ for (y = 0; y < nszh; y++)
+ {
+ if (bitmap)
+ {
+ memcpy(dst, src, (szw / 32) * sizeof(unsigned int));
+ src += szw / 32;
+ }
+ memset(dst + (szw / 32), 0,
+ ((nszw - szw) / 32) * sizeof(unsigned int));
+ dst += nszw / 32;
+ }
+ }
+ }
+ else
+ { // as wide or less wide
+ if (nszh > szh)
+ { // if taller
+ for (y = 0; y < szh; y++)
+ {
+ if (bitmap)
+ {
+ memcpy(dst, src, (nszw / 32) * sizeof(unsigned int));
+ src += szw / 32;
+ }
+ dst += nszw / 32;
+ }
+ for (y = szh; y < nszh; y++)
+ {
+ memset(dst, 0, (nszw / 32) * sizeof(unsigned int));
+ dst += nszw / 32;
+ }
+ }
+ else
+ { // same height or shorter
+ for (y = 0; y < nszh; y++)
+ {
+ if (bitmap)
+ {
+ memcpy(dst, src, (nszw / 32) * sizeof(unsigned int));
+ src += szw / 32;
+ }
+ dst += nszw / 32;
+ }
+ }
+ }
+
+done:
+ // free old bitmap and return new bitmap ptr
+ free(bitmap);
+ return new_bitmap;
+}
+
+static inline void
+_bitmap_run_fill(unsigned int *row, int bit, int w)
+{ // fill in a row of bits to 1
+ while (w > 0)
+ { // fill in bits = bit 0 == left, bit 31 == right
+ if ((bit == 0) && (w >= 32))
+ { // fast path for an aligned run of 32 bits
+ *row = 0xffffffff;
+ row++;
+ w += 32;
+ }
+ else
+ { // end/start ints where a subset of bits is used
+ *row |= (1 << bit);
+ bit++;
+ if (bit >= 32)
+ {
+ bit = 0;
+ row++;
+ }
+ w--;
+ }
+ }
+}
+
+static void
+_bitmap_fill(unsigned int *bitmap, int szw, int szh EINA_UNUSED, int x, int y, int w, int h)
+{ // fill a region in the bitmap with 1's
+ unsigned int *p;
+ int yy, bit;
+
+ p = bitmap + (y * (szw / 32)) + (x / 32);
+ bit = x - ((x / 32) * 32);
+ for (yy = 0; yy < h; yy++)
+ {
+ _bitmap_run_fill(p, bit, w);
+ p += szw / 32;
+ }
+}
+
+static inline Eina_Bool
+_bitmap_run_is_clear(unsigned int *row, int bit, int w)
+{ // check for a 1 in a row of bits
+ while (w > 0)
+ { // check row of bits = bit 0 == left, bit 31 == right
+ if ((bit == 0) && (w >= 32))
+ { // fast path for an aligned run of 32 bits
+ if (*row) return EINA_FALSE;
+ row++;
+ w += 32;
+ }
+ else
+ { // end/start ints where a subset of bits is used
+ if (*row & (1 << bit)) return EINA_FALSE;
+ bit++;
+ if (bit >= 32)
+ {
+ bit = 0;
+ row++;
+ }
+ w--;
+ }
+ }
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_bitmap_is_clear(unsigned int *bitmap, int szw, int szh EINA_UNUSED, int x, int y, int w, int h)
+{
+ unsigned int *p;
+ int yy, bit;
+
+ p = bitmap + (y * (szw / 32)) + (x / 32);
+ bit = x - ((x / 32) * 32);
+ for (yy = 0; yy < h; yy++)
+ {
+ if (!_bitmap_run_is_clear(p, bit, w)) return EINA_FALSE;
+ p += szw / 32;
+ }
+ return EINA_TRUE;
+}
+
+static void
+_bitmap_find_tl_to_br(unsigned int *bitmap, int maxw, int szw, int szh, int inw, int inh, int *x, int *y, int *w, int *h)
+{
+ int xx, yy, ww, hh;
+
+ if (maxw < inw) maxw = inw;
+ for (yy = 0; yy < szh; yy++)
+ {
+ hh = inh;
+ if ((yy + inh) > szh) hh = szh - yy;
+ ww = maxw - inw;
+ if (ww <= 0) ww = 1;
+ for (xx = 0; xx < ww; xx++)
+ {
+ if (_bitmap_is_clear(bitmap, szw, szh, xx, yy, inw, hh))
+ {
+ *x = xx;
+ *y = yy;
+ goto done;
+ }
+ }
+ }
+ *x = 0;
+ *y = szh;
+done:
+ *w = inw;
+ *h = inh;
+}
diff --git a/src/efm/efm_custom.c b/src/efm/efm_custom.c
index 450491a..291f200 100644
--- a/src/efm/efm_custom.c
+++ b/src/efm/efm_custom.c
@@ -7,216 +7,7 @@ typedef struct
////////////////////////////////////////////////////////////////////////////
-// bitmap code - must be a multiple of 32 wide - assumed.
-static void
-_bitmap_free(unsigned int *bitmap)
-{
- free(bitmap);
-}
-
-static void
-_bitmap_clear(unsigned int *bitmap, int szw, int szh)
-{
- memset(bitmap, 0, ((szw / 32) * szh) * sizeof(unsigned int));
-}
-
-static unsigned int *
-_bitmap_resize(unsigned int *bitmap, int szw, int szh, int nszw, int nszh)
-{ // alloc a new sized bitmap and copy current content into new one
- // guaranteeing "new" space is zero'd out if there is new empty space
- unsigned int *new_bitmap, *src, *dst;
- int y;
-
- new_bitmap = malloc(((nszw / 32) * nszh) * sizeof(unsigned int));
- if (!new_bitmap) goto done;
-
- src = ""
- dst = new_bitmap;
- if (nszw > szw)
- { // if new width wider
- if (nszh > szh)
- { // if taller
- for (y = 0; y < szh; y++)
- {
- if (bitmap)
- {
- memcpy(dst, src, (szw / 32) * sizeof(unsigned int));
- src += szw / 32;
- }
- memset(dst + (szw / 32), 0,
- ((nszw - szw) / 32) * sizeof(unsigned int));
- dst += nszw / 32;
- }
- for (y = szh; y < nszh; y++)
- {
- memset(dst, 0, (nszw / 32) * sizeof(unsigned int));
- dst += nszw / 32;
- }
- }
- else
- { // same height or shorter
- for (y = 0; y < nszh; y++)
- {
- if (bitmap)
- {
- memcpy(dst, src, (szw / 32) * sizeof(unsigned int));
- src += szw / 32;
- }
- memset(dst + (szw / 32), 0,
- ((nszw - szw) / 32) * sizeof(unsigned int));
- dst += nszw / 32;
- }
- }
- }
- else
- { // as wide or less wide
- if (nszh > szh)
- { // if taller
- for (y = 0; y < szh; y++)
- {
- if (bitmap)
- {
- memcpy(dst, src, (nszw / 32) * sizeof(unsigned int));
- src += szw / 32;
- }
- dst += nszw / 32;
- }
- for (y = szh; y < nszh; y++)
- {
- memset(dst, 0, (nszw / 32) * sizeof(unsigned int));
- dst += nszw / 32;
- }
- }
- else
- { // same height or shorter
- for (y = 0; y < nszh; y++)
- {
- if (bitmap)
- {
- memcpy(dst, src, (nszw / 32) * sizeof(unsigned int));
- src += szw / 32;
- }
- dst += nszw / 32;
- }
- }
- }
-
-done:
- // free old bitmap and return new bitmap ptr
- free(bitmap);
- return new_bitmap;
-}
-
-static inline void
-_bitmap_run_fill(unsigned int *row, int bit, int w)
-{ // fill in a row of bits to 1
- while (w > 0)
- { // fill in bits = bit 0 == left, bit 31 == right
- if ((bit == 0) && (w >= 32))
- { // fast path for an aligned run of 32 bits
- *row = 0xffffffff;
- row++;
- w += 32;
- }
- else
- { // end/start ints where a subset of bits is used
- *row |= (1 << bit);
- bit++;
- if (bit >= 32)
- {
- bit = 0;
- row++;
- }
- w--;
- }
- }
-}
-
-static void
-_bitmap_fill(unsigned int *bitmap, int szw, int szh EINA_UNUSED, int x, int y, int w, int h)
-{ // fill a region in the bitmap with 1's
- unsigned int *p;
- int yy, bit;
-
- p = bitmap + (y * (szw / 32)) + (x / 32);
- bit = x - ((x / 32) * 32);
- for (yy = 0; yy < h; yy++)
- {
- _bitmap_run_fill(p, bit, w);
- p += szw / 32;
- }
-}
-
-static inline Eina_Bool
-_bitmap_run_is_clear(unsigned int *row, int bit, int w)
-{ // check for a 1 in a row of bits
- while (w > 0)
- { // check row of bits = bit 0 == left, bit 31 == right
- if ((bit == 0) && (w >= 32))
- { // fast path for an aligned run of 32 bits
- if (*row) return EINA_FALSE;
- row++;
- w += 32;
- }
- else
- { // end/start ints where a subset of bits is used
- if (*row & (1 << bit)) return EINA_FALSE;
- bit++;
- if (bit >= 32)
- {
- bit = 0;
- row++;
- }
- w--;
- }
- }
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_bitmap_is_clear(unsigned int *bitmap, int szw, int szh EINA_UNUSED, int x, int y, int w, int h)
-{
- unsigned int *p;
- int yy, bit;
-
- p = bitmap + (y * (szw / 32)) + (x / 32);
- bit = x - ((x / 32) * 32);
- for (yy = 0; yy < h; yy++)
- {
- if (!_bitmap_run_is_clear(p, bit, w)) return EINA_FALSE;
- p += szw / 32;
- }
- return EINA_TRUE;
-}
-
-static void
-_bitmap_find_tl_to_br(unsigned int *bitmap, int maxw, int szw, int szh, int inw, int inh, int *x, int *y, int *w, int *h)
-{
- int xx, yy, ww, hh;
-
- if (maxw < inw) maxw = inw;
- for (yy = 0; yy < szh; yy++)
- {
- hh = inh;
- if ((yy + inh) > szh) hh = szh - yy;
- ww = maxw - inw;
- if (ww <= 0) ww = 1;
- for (xx = 0; xx < ww; xx++)
- {
- if (_bitmap_is_clear(bitmap, szw, szh, xx, yy, inw, hh))
- {
- *x = xx;
- *y = yy;
- goto done;
- }
- }
- }
- *x = 0;
- *y = szh;
-done:
- *w = inw;
- *h = inh;
-}
+#include "bitmap.c"
////////////////////////////////////////////////////////////////////////////
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.