hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=a4227ef9a42cb30b1cd6dc3f2ef5d9ed59731845

commit a4227ef9a42cb30b1cd6dc3f2ef5d9ed59731845
Author: Jaehyun Cho <[email protected]>
Date:   Tue Nov 25 21:08:29 2014 +0900

    setting: Add size configuration of Live View
    
    Summary:
    Add size configuration of Live View
    @feature
    
    Reviewers: Hermet
    
    Differential Revision: https://phab.enlightenment.org/D1667
---
 data/themes/default/layout_common.edc |  23 ++++++++
 data/themes/default/theme_ext.edc     |   9 +--
 src/bin/config_data.c                 |  16 ++++++
 src/bin/main.c                        |  10 ++++
 src/bin/setting.c                     | 102 ++++++++++++++++++++++++++++++++++
 src/include/config_data.h             |   2 +
 src/lib/edj_viewer.c                  |  81 +++++++++++++++++++++++----
 src/lib/enventor_object.eo            |  23 ++++++++
 src/lib/enventor_private.h            |   2 +
 src/lib/enventor_smart.c              |  16 ++++++
 10 files changed, 266 insertions(+), 18 deletions(-)

diff --git a/data/themes/default/layout_common.edc 
b/data/themes/default/layout_common.edc
index 0a51b8e..b4afd73 100644
--- a/data/themes/default/layout_common.edc
+++ b/data/themes/default/layout_common.edc
@@ -11,6 +11,7 @@ images {
    image: "live_rel2_dragable.png" COMP;
    image: "live_bg_glow_in.png" COMP;
    image: "bevel_out.png" COMP;
+   image: "pm_fill.png" COMP;
 }
 
 styles {
@@ -1447,6 +1448,28 @@ group { name: "live_edit_layout";
    }
 }
 
+group { name: "viewer_layout_bg";
+   parts {
+      part { name: "bg";
+         type: IMAGE;
+         description { state: "default" 0.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            image.normal: "pm_fill.png";
+            fill {
+               size.relative: 0 0;
+               size.offset: 64 64;
+            }
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+         }
+      }
+   }
+}
+
 group { name: "viewer_layout";
    parts {
       part { name: "prev_clipper";
diff --git a/data/themes/default/theme_ext.edc 
b/data/themes/default/theme_ext.edc
index e5e8e85..7e68b7e 100644
--- a/data/themes/default/theme_ext.edc
+++ b/data/themes/default/theme_ext.edc
@@ -886,7 +886,6 @@ group { name: "elm/ctxpopup/bg/enventor";
 group { name: "elm/panes/vertical/enventor";
    images.image: "downlight_glow_left.png" COMP;
    images.image: "downlight_glow_right.png" COMP;
-   images.image: "pm_fill.png" COMP;
    parts {
       part { name: "whole"; type: SPACER;
          description { state: "default" 0.0;
@@ -910,15 +909,11 @@ group { name: "elm/panes/vertical/enventor";
             max: 0 0;
          }
       }
-      part { name: "left_bg"; type: IMAGE;
+      part { name: "left_bg"; type: RECT;
          description { state: "default" 0.0;
             rel1.to: "elm.swallow.left";
             rel2.to: "elm.swallow.left";
-            image.normal: "pm_fill.png";
-            fill {
-               size.relative: 0 0;
-               size.offset: 64 64;
-            }
+            color: 0 0 0 175;
          }
       }
       part { name: "right_bg"; type: RECT;
diff --git a/src/bin/config_data.c b/src/bin/config_data.c
index f080767..d4c2886 100644
--- a/src/bin/config_data.c
+++ b/src/bin/config_data.c
@@ -32,6 +32,7 @@ typedef struct config_s
    Eina_Bool tools;
    Eina_Bool auto_complete;
    Eina_Bool live_edit;
+   Eina_Bool view_size_configurable;
 } config_data;
 
 static config_data *g_cd = NULL;
@@ -149,6 +150,7 @@ config_load(void)
         cd->tools = EINA_TRUE;
         cd->auto_complete = EINA_TRUE;
         cd->live_edit = EINA_FALSE;
+        cd->view_size_configurable = EINA_FALSE;
      }
 
    g_cd = cd;
@@ -692,6 +694,20 @@ config_view_size_get(Evas_Coord *w, Evas_Coord *h)
    if (h) *h = cd->view_size.h;
 }
 
+void
+config_view_size_configurable_set(Eina_Bool configurable)
+{
+   config_data *cd = g_cd;
+   cd->view_size_configurable = configurable;
+}
+
+Eina_Bool
+config_view_size_configurable_get(void)
+{
+   config_data *cd = g_cd;
+   return cd->view_size_configurable;
+}
+
 double
 config_console_size_get(void)
 {
diff --git a/src/bin/main.c b/src/bin/main.c
index b9fdb45..3374249 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -136,6 +136,16 @@ config_update_cb(void *data)
    enventor_object_part_highlight_set(enventor, config_part_highlight_get());
    enventor_object_live_view_scale_set(enventor, config_view_scale_get());
 
+   Evas_Coord w, h;
+   if (config_view_size_configurable_get())
+     config_view_size_get(&w, &h);
+   else
+     {
+        w = 0;
+        h = 0;
+     }
+   enventor_object_live_view_size_set(enventor, w, h);
+
    base_tools_toggle(EINA_FALSE);
    base_statusbar_toggle(EINA_FALSE);
 
diff --git a/src/bin/setting.c b/src/bin/setting.c
index 2d4d767..785525b 100644
--- a/src/bin/setting.c
+++ b/src/bin/setting.c
@@ -18,6 +18,10 @@ struct setting_s
    Evas_Object *toggle_swallow;
    Evas_Object *toggle_indent;
    Evas_Object *toggle_autocomp;
+
+   Evas_Object *view_size_w_entry;
+   Evas_Object *view_size_h_entry;
+   Evas_Object *toggle_view_size;
 };
 
 typedef struct setting_s setting_data;
@@ -113,6 +117,11 @@ setting_apply_btn_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    config_dummy_swallow_set(elm_check_state_get(sd->toggle_swallow));
    config_auto_indent_set(elm_check_state_get(sd->toggle_indent));
    config_auto_complete_set(elm_check_state_get(sd->toggle_autocomp));
+   
config_view_size_configurable_set(elm_check_state_get(sd->toggle_view_size));
+
+   Evas_Coord w = (Evas_Coord)atoi(elm_entry_entry_get(sd->view_size_w_entry));
+   Evas_Coord h = (Evas_Coord)atoi(elm_entry_entry_get(sd->view_size_h_entry));
+   config_view_size_set(w, h);
 
    config_apply();
 
@@ -178,9 +187,22 @@ toggle_create(Evas_Object *parent, const char *text, 
Eina_Bool state)
    return toggle;
 }
 
+static void
+toggle_view_size_changed_cb(void *data, Evas_Object *obj,
+                            void *event_info EINA_UNUSED)
+{
+   setting_data *sd = data;
+   Eina_Bool toggle_on = elm_check_state_get(obj);
+
+   elm_object_disabled_set(sd->view_size_w_entry, !toggle_on);
+   elm_object_disabled_set(sd->view_size_h_entry, !toggle_on);
+}
+
 void
 setting_open(void)
 {
+   static Elm_Entry_Filter_Accept_Set digits_filter_data;
+   static Elm_Entry_Filter_Limit_Size limit_filter_data;
    setting_data *sd = g_sd;
    if (sd) return;
 
@@ -352,6 +374,83 @@ setting_open(void)
                                 config_auto_indent_get());
    elm_box_pack_end(box2, toggle_indent);
 
+
+   //View Size
+   box3 = elm_box_add(box2);
+   elm_box_horizontal_set(box3, EINA_TRUE);
+   evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 0);
+   evas_object_show(box3);
+
+   elm_box_pack_end(box2, box3);
+
+   //Entry (Live View Size)
+   Evas_Object *view_size_guide = entry_create(box3);
+   elm_object_text_set(view_size_guide, "Live View Size");
+   elm_entry_scrollable_set(view_size_guide, EINA_FALSE);
+   elm_entry_editable_set(view_size_guide, EINA_FALSE);
+   elm_box_pack_end(box3, view_size_guide);
+
+   Evas_Coord w, h;
+   char w_str[5], h_str[5];
+   config_view_size_get(&w, &h);
+   snprintf(w_str, sizeof(w_str), "%d", w);
+   snprintf(h_str, sizeof(h_str), "%d", h);
+
+   //Entry (View Width)
+   Evas_Object *view_size_w_entry = entry_create(box3);
+   evas_object_size_hint_weight_set(view_size_w_entry, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(view_size_w_entry, EVAS_HINT_FILL, 0);
+
+   digits_filter_data.accepted = "0123456789";
+   digits_filter_data.rejected = NULL;
+   elm_entry_markup_filter_append(view_size_w_entry,
+                                  elm_entry_filter_accept_set,
+                                  &digits_filter_data);
+   limit_filter_data.max_char_count = 4;
+   limit_filter_data.max_byte_count = 0;
+   elm_entry_markup_filter_append(view_size_w_entry,
+                                  elm_entry_filter_limit_size,
+                                  &limit_filter_data);
+
+   elm_object_text_set(view_size_w_entry, w_str);
+   elm_object_disabled_set(view_size_w_entry,
+                           !config_view_size_configurable_get());
+   elm_box_pack_end(box3, view_size_w_entry);
+
+   //Entry (X)
+   view_size_guide = entry_create(box3);
+   elm_object_text_set(view_size_guide, "X");
+   elm_entry_scrollable_set(view_size_guide, EINA_FALSE);
+   elm_entry_editable_set(view_size_guide, EINA_FALSE);
+   elm_box_pack_end(box3, view_size_guide);
+
+   //Entry (View Height)
+   Evas_Object *view_size_h_entry = entry_create(box3);
+   evas_object_size_hint_weight_set(view_size_h_entry, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(view_size_h_entry, EVAS_HINT_FILL, 0);
+
+   elm_entry_markup_filter_append(view_size_h_entry,
+                                  elm_entry_filter_accept_set,
+                                  &digits_filter_data);
+   elm_entry_markup_filter_append(view_size_h_entry,
+                                  elm_entry_filter_limit_size,
+                                  &limit_filter_data);
+
+   elm_object_text_set(view_size_h_entry, h_str);
+   elm_object_disabled_set(view_size_h_entry,
+                           !config_view_size_configurable_get());
+   elm_box_pack_end(box3, view_size_h_entry);
+
+   //Toggle (View Size)
+   Evas_Object *toggle_view_size;
+   toggle_view_size = toggle_create(box3, NULL,
+                                    config_view_size_configurable_get());
+   evas_object_smart_callback_add(toggle_view_size, "changed",
+                                  toggle_view_size_changed_cb, sd);
+   elm_box_pack_end(box3, toggle_view_size);
+
+
    Evas_Object *btn;
 
    //Apply Button
@@ -387,6 +486,9 @@ setting_open(void)
    sd->toggle_swallow = toggle_swallow;
    sd->toggle_indent = toggle_indent;
    sd->toggle_autocomp = toggle_autocomp;
+   sd->view_size_w_entry = view_size_w_entry;
+   sd->view_size_h_entry = view_size_h_entry;
+   sd->toggle_view_size = toggle_view_size;
 
    menu_activate_request();
 }
diff --git a/src/include/config_data.h b/src/include/config_data.h
index 8cb37a9..3d6e521 100644
--- a/src/include/config_data.h
+++ b/src/include/config_data.h
@@ -28,6 +28,8 @@ void config_apply(void);
 void config_edc_path_set(const char *edc_path);
 void config_view_size_get(Evas_Coord *w, Evas_Coord *h);
 void config_view_size_set(Evas_Coord w, Evas_Coord h);
+Eina_Bool config_view_size_configurable_get(void);
+void config_view_size_configurable_set(Eina_Bool configurable);
 Eina_Bool config_part_highlight_get(void);
 void config_part_highlight_set(Eina_Bool highlight);
 Eina_Bool config_dummy_swallow_get(void);
diff --git a/src/lib/edj_viewer.c b/src/lib/edj_viewer.c
index d1c6932..409dd7a 100644
--- a/src/lib/edj_viewer.c
+++ b/src/lib/edj_viewer.c
@@ -13,6 +13,7 @@
 struct viewer_s
 {
    Evas_Object *layout;
+   Evas_Object *base;
    Evas_Object *scroller;
    Evas_Object *event_rect;
    Evas_Object *enventor;
@@ -31,6 +32,9 @@ struct viewer_s
    void (*del_cb)(void *data);
    void *data;
 
+   /* view size configured by application */
+   Evas_Coord_Size view_config_size;
+
    Eina_Bool edj_reload_need : 1;
 };
 
@@ -39,12 +43,20 @@ struct viewer_s
 /*****************************************************************************/
 
 static void
-view_obj_min_update(Evas_Object *obj)
+view_obj_min_update(view_data *vd)
 {
    Evas_Coord w, h;
    double scale = edj_mgr_view_scale_get();
-   edje_object_size_min_calc(obj, &w, &h);
-   evas_object_size_hint_min_set(obj, ((double)w * scale), ((double)h * 
scale));
+
+   edje_object_size_min_calc(vd->layout, &w, &h);
+
+   if (vd->view_config_size.w > 0)
+     w = vd->view_config_size.w;
+
+   if (vd->view_config_size.h > 0)
+     h = vd->view_config_size.h;
+
+   evas_object_size_hint_min_set(vd->layout, ((double)w * scale), ((double)h * 
scale));
 }
 
 static Eina_Bool
@@ -66,7 +78,7 @@ file_set_timer_cb(void *data)
         return ECORE_CALLBACK_CANCEL;
      }
 
-   view_obj_min_update(vd->layout);
+   view_obj_min_update(vd);
    edj_mgr_reload_need_set(EINA_TRUE);
 
    return ECORE_CALLBACK_RENEW;
@@ -153,7 +165,7 @@ exe_del_event_cb(void *data, int type EINA_UNUSED, void 
*event EINA_UNUSED)
         return ECORE_CALLBACK_DONE;
      }
 
-   view_obj_min_update(vd->layout);
+   view_obj_min_update(vd);
    view_part_highlight_set(vd, vd->part_name);
    dummy_obj_update(vd->layout);
 #if 0
@@ -208,14 +220,26 @@ layout_resize_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
 {
    static Enventor_Live_View_Size size;
    view_data *vd = data;
-   evas_object_geometry_get(obj, NULL, NULL, &size.w, &size.h);
+   view_size_get(vd, &size.w, &size.h);
    evas_object_smart_callback_call(vd->enventor, SIG_LIVE_VIEW_RESIZED, &size);
 }
 
 static Evas_Object *
+base_create(Evas_Object *parent)
+{
+   Evas_Object *base = elm_layout_add(parent);
+   elm_layout_file_set(base, EDJE_PATH, "viewer_layout_bg");
+   evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(base, 0.5, 0.5);
+
+   return base;
+}
+
+static Evas_Object *
 view_obj_create(view_data *vd, const char *file_path, const char *group)
 {
-   Evas *e = evas_object_evas_get(vd->scroller);
+   Evas *e = evas_object_evas_get(vd->base);
    Evas_Object *layout = edje_edit_object_add(e);
    if (!edje_object_file_set(layout, file_path, group))
      {
@@ -233,8 +257,6 @@ view_obj_create(view_data *vd, const char *file_path, const 
char *group)
                                     EVAS_HINT_EXPAND);
    evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE,
                                   layout_resize_cb, vd);
-   view_obj_min_update(layout);
-
    return layout;
 }
 
@@ -263,11 +285,17 @@ view_obj_idler_cb(void *data)
 {
    view_data *vd = data;
 
+   vd->base = base_create(vd->scroller);
+
    vd->layout = view_obj_create(vd, build_edj_path_get(), vd->group_name);
+   view_obj_min_update(vd);
    view_scale_set(vd, edj_mgr_view_scale_get());
 
    event_layer_set(vd);
-   elm_object_content_set(vd->scroller, vd->layout);
+
+   elm_object_part_content_set(vd->base, "elm.swallow.content",
+                               vd->layout);
+   elm_object_content_set(vd->scroller, vd->base);
 
    if (eo_do(vd->enventor, enventor_obj_dummy_swallow_get()))
      dummy_obj_new(vd->layout);
@@ -320,6 +348,9 @@ view_init(Evas_Object *enventor, const char *group,
    vd->exe_del_event =
       ecore_event_handler_add(ECORE_EXE_EVENT_DEL, exe_del_event_cb, vd);
 
+   vd->view_config_size.w = 0;
+   vd->view_config_size.h = 0;
+
    return vd;
 }
 
@@ -437,7 +468,7 @@ view_scale_set(view_data *vd, double scale)
    elm_scroller_region_get(vd->scroller, &sx, &sy, &sw, &sh);
 
    edje_object_scale_set(vd->layout, scale);
-   view_obj_min_update(vd->layout);
+   view_obj_min_update(vd);
 
    //adjust scroller position according to the scale change.
    int minw, minh;
@@ -455,6 +486,34 @@ view_scale_set(view_data *vd, double scale)
                             ((Evas_Coord) cy) - (sh / 2), sw, sh);
 }
 
+void
+view_size_set(view_data *vd, Evas_Coord w, Evas_Coord h)
+{
+   double scale = edj_mgr_view_scale_get();
+
+   vd->view_config_size.w = w;
+   vd->view_config_size.h = h;
+
+   evas_object_size_hint_min_set(vd->layout, ((double)w * scale),
+                                 ((double)h * scale));
+   evas_object_size_hint_max_set(vd->layout, ((double)w * scale),
+                                 ((double)h * scale));
+}
+
+void
+view_size_get(view_data *vd, Evas_Coord *w, Evas_Coord *h)
+{
+   if (!w || !h) return;
+
+   evas_object_geometry_get(vd->layout, NULL , NULL, w, h);
+
+   if (vd->view_config_size.w > 0)
+     *w = vd->view_config_size.w;
+
+   if (vd->view_config_size.h > 0)
+     *h = vd->view_config_size.h;
+}
+
 Eina_List *
 view_parts_list_get(view_data *vd)
 {
diff --git a/src/lib/enventor_object.eo b/src/lib/enventor_object.eo
index 5335aa9..a21b0b0 100644
--- a/src/lib/enventor_object.eo
+++ b/src/lib/enventor_object.eo
@@ -407,6 +407,29 @@ class Enventor.Object (Elm_Widget, Efl.File) {
             @in Eina_Bool disabled; /*@ ... */
          }
       }
+      live_view_size_set {
+         /*@
+         @brief
+         @warning
+         @see
+         @ingroup Enventor */
+         params {
+            @in Evas_Coord w; /*@ ... */
+            @in Evas_Coord h; /*@ ... */
+         }
+      }
+      live_view_size_get {
+         /*@
+         @brief
+         @warning
+         @see
+         @ingroup Enventor */
+         params {
+            @in Evas_Coord *w; /*@ ... */
+            @in Evas_Coord *h; /*@ ... */
+         }
+      }
+
    }
    implements {
       class.constructor;
diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h
index 42b23b3..ee46b78 100644
--- a/src/lib/enventor_private.h
+++ b/src/lib/enventor_private.h
@@ -163,6 +163,8 @@ void view_program_run(view_data *vd, const char *program);
 Eina_Stringshare *view_group_name_get(view_data *vd);
 void *view_data_get(view_data *vd);
 void view_scale_set(view_data *vd, double scale);
+void view_size_get(view_data *vd, Evas_Coord *w, Evas_Coord *h);
+void view_size_set(view_data *vd, Evas_Coord w, Evas_Coord h);
 Eina_List *view_parts_list_get(view_data *vd);
 Eina_List *view_images_list_get(view_data *vd);
 Eina_List *view_programs_list_get(view_data *vd);
diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c
index b26b188..21d3912 100644
--- a/src/lib/enventor_smart.c
+++ b/src/lib/enventor_smart.c
@@ -310,6 +310,22 @@ _enventor_object_live_view_scale_set(Eo *obj EINA_UNUSED,
    edj_mgr_view_scale_set(scale);
 }
 
+EOLIAN static void
+_enventor_object_live_view_size_set(Eo *obj EINA_UNUSED,
+                                    Enventor_Object_Data *pd EINA_UNUSED,
+                                    Evas_Coord w, Evas_Coord h)
+{
+   view_size_set(VIEW_DATA, w, h);
+}
+
+EOLIAN static void
+_enventor_object_live_view_size_get(Eo *obj EINA_UNUSED,
+                                    Enventor_Object_Data *pd EINA_UNUSED,
+                                    Evas_Coord *w, Evas_Coord *h)
+{
+   view_size_get(VIEW_DATA, w, h);
+}
+
 EOLIAN static double
 _enventor_object_live_view_scale_get(Eo *obj EINA_UNUSED,
                                      Enventor_Object_Data *pd EINA_UNUSED)

-- 


Reply via email to