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)