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.