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.

Reply via email to