hermet pushed a commit to branch master.

http://git.enlightenment.org/games/etypers.git/commit/?id=e62d37c033899b2da0241c27964a19edf4eb5857

commit e62d37c033899b2da0241c27964a19edf4eb5857
Author: Hermet Park <her...@hermet.pe.kr>
Date:   Fri Feb 12 02:06:21 2016 +0900

    remove popup and use notify.
    
    popup is ugly and has a lot of issues.
    contruct menus by using notify to avoid this.
---
 src/bin/etypers.c | 270 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 138 insertions(+), 132 deletions(-)

diff --git a/src/bin/etypers.c b/src/bin/etypers.c
index 2ac5d91..9df2c1c 100644
--- a/src/bin/etypers.c
+++ b/src/bin/etypers.c
@@ -1,23 +1,3 @@
-/*
- * EFL Typers.
- *
- * Copyright 2012 Hermet Park
- *
- * This application is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
 #include <Elementary.h>
 
 #define DEFAULT_WIN_W 400
@@ -38,14 +18,13 @@ static void _resume(AppData *appdata);
 static void _popup(AppData *appdata);
 static void _reset_defense_wall(AppData *appdata);
 
-static char EDJE_PATH[PATH_MAX];
-
 enum _GameState
 {
-   Ready,
+   Ready = 0,
    Playing,
    Paused,
    SubPopup,
+   SubPopup2,
    GameOver
 };
 
@@ -71,7 +50,6 @@ struct _AppData
    Evas_Object *table;
    Evas_Object *popup;
    GameState state;
-   GameState prev_state;
    Ecore_Animator *animator;
 };
 
@@ -355,8 +333,6 @@ _app_release(AppData *appdata)
 
    eina_list_free(appdata->defense_wall);
 
-   free(appdata);
-
    elm_exit();
 }
 
@@ -366,21 +342,15 @@ _win_del(void *data, Evas_Object *obj, void *event_info)
    _app_release(data);
 }
 
-static void
-_win_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-   AppData *appdata = data;
-   Evas_Coord w, h;
-   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
-   appdata->bound_w = w;
-   appdata->bound_h = h;
-}
-
 static Evas_Object *
-_layout_create(Evas_Object *win, const char *filepath, const char *group)
+_layout_create(Evas_Object *win)
 {
    Evas_Object *ly = elm_layout_add(win);
-   elm_layout_file_set(ly, filepath, group);
+
+   char buf[PATH_MAX];
+   snprintf(buf, sizeof(buf), "%s/theme/etypers.edj", PACKAGE_DATA_DIR);
+
+   elm_layout_file_set(ly, buf, "gui");
    evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    elm_win_resize_object_add(win, ly);
    evas_object_show(ly);
@@ -518,7 +488,8 @@ static void
 _game_level_cb(void *data, Evas_Object *obj, void *event_info)
 {
    AppData *appdata = evas_object_data_get(obj, "appdata");
-   evas_object_del(obj);
+   evas_object_del(appdata->popup);
+   appdata->popup = NULL;
    appdata->level = (int)(uintptr_t) data;
 
    _game_reset(appdata);
@@ -527,47 +498,67 @@ _game_level_cb(void *data, Evas_Object *obj, void 
*event_info)
 }
 
 static void
-_level_back_btn_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Evas_Object *popup = data;
-   AppData *appdata = evas_object_data_get(popup, "appdata");
-   appdata->state = appdata->prev_state;
-   evas_object_del(popup);
-   _pause(appdata);
-   _popup(appdata);
-}
-
-static void
 _game_start_cb(void *data, Evas_Object *obj, void *event_info)
 {
    AppData *appdata = data;
    evas_object_del(appdata->popup);
-   appdata->popup = NULL;
-   appdata->prev_state = appdata->state;
-   appdata->state = SubPopup;
-   Evas_Object *popup = elm_popup_add(appdata->win);
-   evas_object_data_set(popup, "appdata", data);
-   elm_object_part_text_set(popup, "title,text", "Start Level");
-   //FIXME: Content height is not fit to the actual total item height
-   elm_popup_item_append(popup, "Level 1", NULL, _game_level_cb, (void *) 1);
-   elm_popup_item_append(popup, "Level 2", NULL, _game_level_cb, (void *) 2);
-   elm_popup_item_append(popup, "Level 3", NULL, _game_level_cb, (void *) 3);
-   elm_popup_item_append(popup, "Level 4", NULL, _game_level_cb, (void *) 4);
-   elm_popup_item_append(popup, "Level 5", NULL, _game_level_cb, (void *) 5);
-   elm_popup_item_append(popup, "Level 6", NULL, _game_level_cb, (void *) 6);
-   elm_popup_item_append(popup, "Level 7", NULL, _game_level_cb, (void *) 7);
-   elm_popup_item_append(popup, "Level 8", NULL, _game_level_cb, (void *) 8);
-   elm_popup_item_append(popup, "Level 9", NULL, _game_level_cb, (void *) 9);
-
-   //FIXME: It doesn't work
-   elm_object_scroll_hold_push(popup);
-   evas_object_show(popup);
 
-   Evas_Object *btn = elm_button_add(popup);
-   if (!btn) return;
-   elm_object_text_set(btn, "Back");
-   elm_object_part_content_set(popup, "button1", btn);
-   evas_object_smart_callback_add(btn, "clicked", _level_back_btn_cb, popup);
+   appdata->popup = NULL;
+   if (appdata->state == Paused) appdata->state = SubPopup2;
+   else appdata->state = SubPopup;
+
+   Evas_Object *notify = elm_notify_add(appdata->win);
+   elm_notify_align_set(notify, 0.5, 0.5);
+   evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(notify, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_data_set(notify, "appdata", appdata);
+
+   Evas_Object *box = elm_box_add(notify);
+   elm_box_padding_set(box, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   Evas_Object *label = elm_label_add(box);
+   elm_object_text_set(label, "Start Level");
+   evas_object_show(label);
+   elm_box_pack_end(box, label);
+
+   Evas_Object *list = elm_list_add(box);
+   elm_list_mode_set(list, ELM_LIST_EXPAND);
+   elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF,
+                           ELM_SCROLLER_POLICY_OFF);
+   evas_object_data_set(list, "appdata", appdata);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_list_item_append(list, "Level 1", NULL, NULL, _game_level_cb,
+                        (void *) 1);
+   elm_list_item_append(list, "Level 2", NULL, NULL, _game_level_cb,
+                        (void *) 2);
+   elm_list_item_append(list, "Level 3", NULL, NULL, _game_level_cb,
+                        (void *) 3);
+   elm_list_item_append(list, "Level 4", NULL, NULL, _game_level_cb,
+                        (void *) 4);
+   elm_list_item_append(list, "Level 5", NULL, NULL, _game_level_cb,
+                        (void *) 5);
+   elm_list_item_append(list, "Level 6", NULL, NULL, _game_level_cb,
+                        (void *) 6);
+   elm_list_item_append(list, "Level 7", NULL, NULL, _game_level_cb,
+                        (void *) 7);
+   elm_list_item_append(list, "Level 8", NULL, NULL, _game_level_cb,
+                        (void *) 8);
+   elm_list_item_append(list, "Level 9", NULL, NULL, _game_level_cb,
+                        (void *) 9);
+
+   elm_list_go(list);
+   evas_object_show(list);
+
+   elm_box_pack_end(box, list);
+
+   elm_object_content_set(notify, box);
+   evas_object_show(notify);
+
+   appdata->popup = notify;
 }
 
 #if 0
@@ -585,41 +576,24 @@ _game_exit_cb(void *data, Evas_Object *obj, void 
*event_info)
 }
 
 static void
-_credit_back_btn_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Evas_Object *popup = data;
-   AppData *appdata = evas_object_data_get(popup, "appdata");
-   appdata->state = appdata->prev_state;
-   evas_object_show(appdata->popup);
-   evas_object_del(popup);
-}
-
-static void
-_credit_cb(void *data, Evas_Object *obj, void *event_info)
+_about_cb(void *data, Evas_Object *obj, void *event_info)
 {
    AppData *appdata = data;
 
    Evas_Object *popup = elm_popup_add(appdata->win);
    if (!popup) return;
-   appdata->state = SubPopup;
-   elm_object_part_text_set(popup, "title,text", "Game Credits");
-   elm_object_text_set(popup,
-                       "EFL Typers v1.0<br>Designed by Hermet");
-   evas_object_data_set(popup, "appdata", appdata);
 
-   Evas_Object *btn = elm_button_add(popup);
-   if (!btn)
-     {
-        evas_object_del(popup);
-        return;
-     }
+   if (appdata->state == Ready) appdata->state = SubPopup;
+   else appdata->state = SubPopup2;
+
+   elm_object_part_text_set(popup, "title,text", "EFL Typers v1.0");
+   elm_object_text_set(popup, "Copyright © 2016 Hermet Park<br> and various 
contributors (see AUTHORS)");
+   evas_object_data_set(popup, "appdata", appdata);
 
-   elm_object_text_set(btn, "Back");
-   elm_object_part_content_set(popup, "button1", btn);
-   evas_object_smart_callback_add(btn, "clicked", _credit_back_btn_cb, popup);
    evas_object_show(popup);
 
    evas_object_hide(appdata->popup);
+   appdata->popup = popup;
 }
 
 #if 0
@@ -633,22 +607,44 @@ _option_cb(void *data, Evas_Object *obj, void *event_info)
 static Evas_Object *
 _popup_create(Evas_Object *parent, AppData *appdata)
 {
-   Evas_Object *popup = elm_popup_add(parent);
-   elm_object_part_text_set(popup, "title,text", "EFL Typers Menu");
-   elm_popup_item_append(popup, "Start", NULL, _game_start_cb,
+   Evas_Object *notify = elm_notify_add(parent);
+   elm_notify_align_set(notify, 0.5, 0.5);
+   evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(notify, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+   Evas_Object *box = elm_box_add(notify);
+   elm_box_padding_set(box, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   Evas_Object *label = elm_label_add(box);
+   elm_object_text_set(label, "EFL Typers Menu");
+   evas_object_show(label);
+   elm_box_pack_end(box, label);
+
+   Evas_Object *list = elm_list_add(box);
+   elm_list_mode_set(list, ELM_LIST_EXPAND);
+   elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF,
+                           ELM_SCROLLER_POLICY_OFF);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_list_item_append(list, "Start", NULL, NULL, _game_start_cb,
                               appdata);
-//   Elm_Object_Item *it;
-//   it = elm_popup_item_append(popup, "Option", NULL, _option_cb, NULL);
-//   elm_object_item_disabled_set(it, EINA_TRUE);
-//   it = elm_popup_item_append(popup, "Ranking", NULL, _top_ranking_cb, NULL);
-//   elm_object_item_disabled_set(it, EINA_TRUE);
-   elm_popup_item_append(popup, "Credits", NULL, _credit_cb, appdata);
-
-   elm_popup_item_append(popup, "Exit", NULL, _game_exit_cb, appdata);
-   //FIXME: It doesn't work
-   elm_object_scroll_hold_push(popup);
-   evas_object_show(popup);
-   return popup;
+   elm_list_item_append(list, "About", NULL, NULL, _about_cb, appdata);
+
+   elm_list_item_append(list, "Exit", NULL, NULL, _game_exit_cb, appdata);
+
+   elm_list_go(list);
+   evas_object_show(list);
+
+   elm_box_pack_end(box, list);
+
+   elm_object_content_set(notify, box);
+
+   evas_object_show(notify);
+
+   return notify;
 }
 
 static void
@@ -695,6 +691,18 @@ _pause_or_resume(AppData *appdata)
         appdata->state = Paused;
         _pause(appdata);
      }
+   else if (appdata->state == SubPopup)
+     {
+        evas_object_del(appdata->popup);
+        appdata->popup = NULL;
+     }
+   else if (appdata->state == SubPopup2)
+     {
+        evas_object_del(appdata->popup);
+        appdata->popup = NULL;
+        appdata->state = Paused;
+     }
+
    _popup(appdata);
 }
 
@@ -704,8 +712,7 @@ _key_down_cb(void *data, int type, void *event_info)
    Ecore_Event_Key *event = event_info;
    AppData *appdata = data;
 
-   if ((appdata->state == Ready) || (appdata->state == SubPopup))
-     return ECORE_CALLBACK_PASS_ON;
+   if (appdata->state == Ready) return ECORE_CALLBACK_PASS_ON;
 
    //When input is "return" as well as "space" then it tries to kill the 
enemies
    //also.
@@ -724,7 +731,9 @@ _key_down_cb(void *data, int type, void *event_info)
    else if (!strcmp(event->keyname, "Escape"))
      {
         if (appdata->state == GameOver)
-          _game_reset(appdata);
+          {
+             _game_reset(appdata);
+          }
         _pause_or_resume(appdata);
         return ECORE_CALLBACK_DONE;
      }
@@ -750,18 +759,15 @@ _win_create(AppData *appdata)
 {
    //Create a window
    Evas_Object *win = elm_win_add(NULL, "EFL Typers", ELM_WIN_BASIC);
-   elm_win_title_set(win, "EFL Typers");
+   elm_win_title_set(win, "EFL Typers v1.0");
    elm_win_autodel_set(win, EINA_TRUE);
    elm_win_focus_highlight_enabled_set(win, EINA_FALSE);
    evas_object_smart_callback_add(win, "delete,request", _win_del, appdata);
-   evas_object_resize(win, DEFAULT_WIN_W, DEFAULT_WIN_H);
-   evas_object_show(win);
-   evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE,
-                                  _win_resize, appdata);
 
    //Fix the window size
    Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(win));
    evas_object_size_hint_min_set(rect, DEFAULT_WIN_W, DEFAULT_WIN_H);
+   evas_object_size_hint_max_set(rect, DEFAULT_WIN_W, DEFAULT_WIN_H);
    elm_win_resize_object_add(win, rect);
 
    return win;
@@ -856,14 +862,11 @@ _reset_defense_wall(AppData *appdata)
 static void
 _app_init(AppData *appdata)
 {
-   snprintf(EDJE_PATH, sizeof(EDJE_PATH), "%s/theme/etypers.edj",
-            PACKAGE_DATA_DIR);
-
    ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, appdata);
 
    appdata->words_array = _words_create();
    appdata->win = _win_create(appdata);
-   appdata->ly = _layout_create(appdata->win, EDJE_PATH, "gui");
+   appdata->ly = _layout_create(appdata->win);
    appdata->bx = _box_create(appdata->ly, "enemies");
    appdata->entry = _entry_create(appdata->ly, "entry", appdata);
    appdata->table = _table_create(appdata->ly, "table", appdata);
@@ -873,6 +876,12 @@ _app_init(AppData *appdata)
    appdata->bound_w = DEFAULT_WIN_W;
    appdata->bound_h = DEFAULT_WIN_H;
    appdata->animator = ecore_animator_add(_animator_cb, appdata);
+
+   _pause(appdata);
+   _popup(appdata);
+
+   evas_object_resize(appdata->win, DEFAULT_WIN_W, DEFAULT_WIN_H);
+   evas_object_show(appdata->win);
 }
 
 static void
@@ -894,14 +903,11 @@ int elm_main(int argc, char **argv)
    _elm_setup();
 
    _app_init(appdata);
-   _pause(appdata);
-   _popup(appdata);
-
-   //FIXME: Sometimes window is 0x0 because of popup. Resize window forcely.
-   evas_object_resize(appdata->win, DEFAULT_WIN_W, DEFAULT_WIN_H);
 
    elm_run();
 
+   free(appdata);
+
    return 0;
 }
 ELM_MAIN()

-- 


Reply via email to