This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository elimine.

View the commit online.

commit c0955b21433ad39dca576f9faedbad49def1997f
Author: Vincent Torri <vto...@outlook.fr>
AuthorDate: Sun Jun 29 07:38:03 2025 +0200

    speed up display
---
 src/bin/elimine.c | 90 +++++++++++++++++++++++++++++++------------------------
 1 file changed, 51 insertions(+), 39 deletions(-)

diff --git a/src/bin/elimine.c b/src/bin/elimine.c
index 0dae8cf..cb8f799 100644
--- a/src/bin/elimine.c
+++ b/src/bin/elimine.c
@@ -335,9 +335,10 @@ static int tiles[TYPE_GUARD][16][16] =
         { 8, 3, 3, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3 },
         { 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }
     },
-
 };
 
+unsigned int *icons[TYPE_GUARD];
+
 #define lookup(l, c) (l) * ctx->nc + (c)
 
 static inline int in_board(Ctx *ctx, int l, int c)
@@ -364,37 +365,15 @@ void display_board(Ctx *ctx)
 
 Evas_Object *icon_new(Evas_Object *win, Tile_Type type, int sz)
 {
-    int *data;
     Evas_Object *o;
-    unsigned int *m;
     int size;
 
     size = 16 * sz;
-    data = "" *)tiles[type];
 
     o = evas_object_image_add(evas_object_evas_get(win));
     evas_object_image_size_set(o, size, size);
     evas_object_image_fill_set(o, 0, 0, size, size);
-    m = evas_object_image_data_get(o, EINA_TRUE);
-
-    size_t it = 0;
-    for (int l = 0; l < 16; l++)
-    {
-        for (int c = 0; c < 16; c++)
-        {
-            unsigned int color = colors[data[l * 16 + c]];
-
-            for (int j = 0; j < sz; j++)
-            {
-                for (int i = 0; i < sz; i++, it++)
-                {
-                    m[(sz * l + j) * size + sz * c + i] = color;
-                    //m[it] = color;
-                }
-            }
-        }
-    }
-    evas_object_image_data_set(o, m);
+    evas_object_image_data_set(o, icons[type]);
     evas_object_resize(o, size, size);
     evas_object_size_hint_min_set(o, size, size);
     evas_object_size_hint_max_set(o, size, size);
@@ -402,7 +381,7 @@ Evas_Object *icon_new(Evas_Object *win, Tile_Type type, int sz)
     return o;
 }
 
-Ctx *ctx_new(Difficulty d, int tile_sz)
+Ctx *ctx_new(Evas_Object *win, Difficulty d, int tile_sz)
 {
     Ctx *ctx;
     int count;
@@ -412,6 +391,7 @@ Ctx *ctx_new(Difficulty d, int tile_sz)
     if (!ctx)
         return NULL;
 
+    ctx->win = win;
     ctx->tile_sz = tile_sz;
 
     switch (d)
@@ -495,7 +475,7 @@ Ctx *ctx_new(Difficulty d, int tile_sz)
         }
     }
 
-    /* konwn */
+    /* known */
 
     for (l = 0; l < ctx->nl; l++)
     {
@@ -507,6 +487,33 @@ Ctx *ctx_new(Difficulty d, int tile_sz)
         }
     }
 
+    /* icons */
+    for (int t = 0; t < TYPE_GUARD; t++)
+    {
+        int size;
+        int *data;
+
+        size = 16 * ctx->tile_sz;
+        icons[t] = calloc(size * size, sizeof(unsigned int));
+        data = "" *)tiles[t];
+
+        for (int l = 0; l < 16; l++)
+        {
+            for (int c = 0; c < 16; c++)
+            {
+                unsigned int color = colors[data[l * 16 + c]];
+
+                for (int j = 0; j < ctx->tile_sz; j++)
+                {
+                    for (int i = 0; i < ctx->tile_sz; i++)
+                    {
+                        icons[t][(ctx->tile_sz * l + j) * size + ctx->tile_sz * c + i] = color;
+                    }
+                }
+            }
+        }
+    }
+
     return ctx;
 }
 
@@ -523,8 +530,8 @@ void ctx_del(Ctx *ctx)
 
 #define TILE(t, l, c) \
 do { \
-    o = icon_new(win, t, 5); \
-    elm_table_pack(tbl, o, c, l, 1, 1); \
+    Evas_Object *o = icon_new(ctx->win, t, ctx->tile_sz); \
+    elm_table_pack(ctx->tbl, o, c, l, 1, 1); \
     evas_object_show(o); \
 } while (0)
 
@@ -540,14 +547,14 @@ void ctx_draw(Ctx *ctx)
         {
             Evas_Object *o;
 
-            o = icon_new(ctx->win, ctx->known[lookup(l, c)], ctx->tile_sz);    \
-            elm_table_pack(ctx->tbl, o, c, l, 1, 1); \
+            o = icon_new(ctx->win, ctx->known[lookup(l, c)], ctx->tile_sz);
+            elm_table_pack(ctx->tbl, o, c, l, 1, 1);
             evas_object_show(o);
         }
     }
 }
 
-static int in_bounds(Ctx *ctx, int l, int c)
+static inline int in_bounds(Ctx *ctx, int l, int c)
 {
     return (l >= 0) && (c >= 0) && (l < ctx->nl) && (c < ctx->nc);
 }
@@ -564,10 +571,12 @@ static void uncover(Ctx *ctx, int l, int c)
         (ctx->state[lookup(l, c)] <= HEIGHT))
     {
         ctx->known[lookup(l, c)] = ctx->state[lookup(l, c)];
+        TILE(ctx->state[lookup(l, c)], l, c);
         return;
     }
 
     ctx->known[lookup(l, c)] = NOTHING;
+    TILE(NOTHING, l, c);
 
     for (y = -1; y <= 1; y++)
     {
@@ -606,12 +615,12 @@ _cb_mouse_up(void *ctx_, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
         if (ctx->known[lookup(l, c)] == UNKNOWN)
         {
             ctx->known[lookup(l, c)] = FLAG;
-            ctx_draw(ctx);
+            TILE(FLAG, l, c);
         }
         else if (ctx->known[lookup(l, c)] == FLAG)
         {
             ctx->known[lookup(l, c)] = UNKNOWN;
-            ctx_draw(ctx);
+            TILE(UNKNOWN, l, c);
         }
 
         return;
@@ -634,6 +643,7 @@ _cb_mouse_up(void *ctx_, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
                         (ctx->state[lookup(y, x)] != BOMB))
                     {
                         ctx->known[lookup(y, x)] = BOMB_WRONG;
+                        TILE(BOMB_WRONG, y, x);
                     }
 
                     if (ctx->state[lookup(y, x)] == BOMB)
@@ -641,10 +651,12 @@ _cb_mouse_up(void *ctx_, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
                         if ((x == c) && (y == l))
                         {
                             ctx->known[lookup(y, x)] = BOMB_EXPLODED;
+                            TILE(BOMB_EXPLODED, y, x);
                         }
                         else
                         {
                             ctx->known[lookup(y, x)] = BOMB;
+                            TILE(BOMB, y, x);
                         }
                     }
                 }
@@ -659,8 +671,8 @@ _cb_mouse_up(void *ctx_, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
         else
         {
             ctx->known[lookup(l, c)] = ctx->state[lookup(l, c)];
+            TILE(ctx->state[lookup(l, c)], l, c);
         }
-        ctx_draw(ctx);
     }
 }
 
@@ -669,10 +681,6 @@ elm_main(int argc, char **argv)
 {
     Ctx *ctx;
 
-    ctx = ctx_new(BEGINNER, 3);
-
-    display_board(ctx);
-
     Evas_Object *win;
     Evas_Object *tbl;
     Evas_Object *o;
@@ -686,6 +694,8 @@ elm_main(int argc, char **argv)
     elm_win_title_set(win, "Elimine");
     elm_win_autodel_set(win, EINA_TRUE);
 
+    ctx = ctx_new(win, INTERMEDIATE, 3);
+
     /* background */
     o = elm_bg_add(win);
     evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -695,6 +705,7 @@ elm_main(int argc, char **argv)
 
     /* table */
     tbl = elm_table_add(win);
+    elm_table_homogeneous_set(tbl, EINA_TRUE);
     evas_object_size_hint_weight_set(tbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_fill_set(tbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
     elm_win_resize_object_add(win, tbl);
@@ -710,10 +721,11 @@ elm_main(int argc, char **argv)
     evas_object_event_callback_add(tbl, EVAS_CALLBACK_MOUSE_UP,
                                    _cb_mouse_up, ctx);
 
-    ctx->win = win;
     ctx->tbl = tbl;
     ctx->finished = EINA_FALSE;
 
+    display_board(ctx);
+
     ctx_draw(ctx);
 
     win_w = ctx->nc * ctx->tile_sz;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to