setting: Add size configuration of Live View

Summary:
Add size configuration of Live View
@feature

Reviewers: Hermet

Differential Revision: https://phab.enlightenment.org/D1667
This commit is contained in:
Jaehyun Cho 2014-11-25 21:08:29 +09:00 committed by ChunEon Park
parent 8ebec28586
commit a4227ef9a4
10 changed files with 266 additions and 18 deletions

View File

@ -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";

View File

@ -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;

View File

@ -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)
{

View File

@ -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);

View File

@ -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();
}

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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);

View File

@ -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)