[layout] support mirrored set for layout which is using elm_layout_file_set()

Summary: mirroed mode does not work, if layout uses elm_layout_file_set().

Test Plan:
the following is test code.
[test.edc]
collections {

   group {
      name: "layout/test";

      parts {

         part {
            name: "bg";
            type: RECT;
               description {
               state: "default" 0.0;
               color: 255 255 0 100;
            }
         }

         part {
            name: "test.rect";
            type: RECT;
               description {
               state: "default" 0.0;
               color: 255 0 0 255;
               rel1.to: bg;
               rel1.relative: 0.2 0.1;
               rel2.to: bg;
               rel2.relative: 0.5 0.2;
            }
         }

      } /* parts */
   } /* group */
} /* collections */

[test.c]
//Compile with:
//gcc -g test.c -o test `pkg-config --cflags --libs elementary`

#include <Elementary.h>
#include <Ecore_X.h>

static void
_bt_click(void *data, Evas_Object *obj, void *event_info)
{
   Eina_Bool mirrored;
   Evas_Object *layout;

   layout = data;

   mirrored = elm_config_mirrored_get();
   mirrored = !mirrored;
   printf("mirred: %d\n", mirrored);
   elm_config_mirrored_set(mirrored);
}

EAPI_MAIN int
elm_main(int argc, char **argv)
{
   Evas_Object *win, *box, *layout, *bt, *check;
   char buf[PATH_MAX];

   elm_app_info_set(elm_main, "elementary", "./test.edj");
   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

   win = elm_win_add(NULL, "Layout", ELM_WIN_BASIC);
   elm_win_autodel_set(win, EINA_TRUE);

   box = elm_box_add(win);
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   elm_win_resize_object_add(win, box);
   evas_object_show(box);

   // Adding layout and filling it with widgets
   layout = elm_layout_add(win);
   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
   snprintf(buf, sizeof(buf), "./test.edj");
   elm_layout_file_set(layout, buf, "layout/test");
   elm_box_pack_end(box, layout);
   evas_object_show(layout);

   bt = elm_button_add(win);
   elm_object_text_set(bt, "mirrored");
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
   evas_object_smart_callback_add(bt, "clicked", _bt_click, layout);
   elm_box_pack_end(box, bt);
   evas_object_show(bt);

   check = elm_check_add(win);
   elm_object_text_set(check, "test");
   evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
   elm_box_pack_end(box, check);
   evas_object_show(check);

   evas_object_resize(win, 500, 500);
   evas_object_show(win);

   elm_run();
   elm_shutdown();

   return 0;
}
ELM_MAIN()

Reviewers: seoz, raster, tasn, Hermet

Subscribers: seoz, cedric

Differential Revision: https://phab.enlightenment.org/D2142
This commit is contained in:
Shinwoo Kim 2015-06-09 14:05:58 +01:00 committed by Tom Hacohen
parent e99831eb2f
commit 3a80bbcb41
3 changed files with 16 additions and 7 deletions

View File

@ -359,13 +359,17 @@ _elm_layout_theme_internal(Eo *obj, Elm_Layout_Smart_Data *sd)
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
/* function already prints error messages, if any */
if (!elm_widget_theme_object_set(obj, wd->resize_obj, sd->klass, sd->group,
elm_widget_style_get(obj)))
return EINA_FALSE;
if (!sd->file_set)
{
ret = elm_widget_theme_object_set
(obj, wd->resize_obj, sd->klass, sd->group,
elm_widget_style_get(obj));
}
ret = _visuals_refresh(obj, sd);
if (ret)
evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
ret = _visuals_refresh(obj, sd) && ret;
return ret;
}
@ -852,7 +856,11 @@ _elm_layout_efl_file_file_set(Eo *obj, Elm_Layout_Smart_Data *sd, const char *fi
int_ret =
edje_object_file_set(wd->resize_obj, file, group);
if (int_ret) _visuals_refresh(obj, sd);
if (int_ret)
{
sd->file_set = EINA_TRUE;
_visuals_refresh(obj, sd);
}
else
ERR("failed to set edje file '%s', group '%s': %s",
file, group,
@ -874,6 +882,7 @@ _elm_layout_theme_set(Eo *obj, Elm_Layout_Smart_Data *sd, const char *klass, con
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
if (sd->file_set) sd->file_set = EINA_FALSE;
eina_stringshare_replace(&(sd->klass), klass);
eina_stringshare_replace(&(sd->group), group);
eina_stringshare_replace(&(wd->style), style);

View File

@ -293,7 +293,6 @@ _elm_theme_set(Elm_Theme *th, Evas_Object *o, const char *clas, const char *grou
if ((!clas) || (!group) || (!style)) return EINA_FALSE;
if (!th) th = &(theme_default);
snprintf(buf2, sizeof(buf2), "elm/%s/%s/%s", clas, group, style);
if (!eina_hash_find(th->cache_style_load_failed, buf2))
{

View File

@ -84,6 +84,7 @@ typedef struct _Elm_Layout_Smart_Data
Eina_Bool restricted_calc_h : 1;
Eina_Bool can_access : 1; /**< This is true when all text(including textblock) parts can be accessible by accessibility. */
Eina_Bool destructed_is : 1; /**< This flag indicates if Elm_Layout destructor was called */
Eina_Bool file_set : 1; /**< This flag indicates if Elm_Layout source file is set */
} Elm_Layout_Smart_Data;
/**