stats: add a function to resize a live view.
previously, editor ctxpopup had inc/dec buttons to control values elaboratly. I removed them because user could control them using mouse wheel. I believe it's cleaner and nicer ui for enventor. @feature
This commit is contained in:
parent
c5c352c917
commit
ab0dab409c
|
@ -1595,7 +1595,7 @@ group { name: "slider_layout";
|
|||
type: RECT;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 215 1;
|
||||
min: 235 1;
|
||||
color: 56 56 56 255;
|
||||
}
|
||||
description { state: "odd" 0.0;
|
||||
|
@ -1696,7 +1696,7 @@ group { name: "slider_layout";
|
|||
rel2.to: "padding1";
|
||||
rel2.relative: 1.0 1.0;
|
||||
align: 0 0;
|
||||
min: 125 0;
|
||||
min: 185 0;
|
||||
fixed: 1 0;
|
||||
}
|
||||
}
|
||||
|
@ -1713,30 +1713,6 @@ group { name: "slider_layout";
|
|||
fixed: 1 0;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.down";
|
||||
type: SWALLOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 20 20;
|
||||
fixed: 1 1;
|
||||
align: 1.0 0.5;
|
||||
rel1.to: "elm.swallow.up";
|
||||
rel1.relative: 0.0 0.5;
|
||||
rel2.to: "elm.swallow.up";
|
||||
rel2.relative: 0.0 0.5;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.up";
|
||||
type: SWALLOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 20 20;
|
||||
fixed: 1 1;
|
||||
align: 1.0 0.5;
|
||||
rel1.relative: 1.0 0.5;
|
||||
rel2.relative: 1.0 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { name: "odd_item_set";
|
||||
|
@ -1817,7 +1793,7 @@ group { name: "statusbar_layout";
|
|||
align: 0 0.5;
|
||||
}
|
||||
}
|
||||
swallow { "invert_btn";
|
||||
swallow { "resize_btn";
|
||||
clip_to: "base_clip";
|
||||
scale: 1;
|
||||
desc {
|
||||
|
@ -1830,6 +1806,19 @@ group { name: "statusbar_layout";
|
|||
min: 15 15;
|
||||
}
|
||||
}
|
||||
swallow { "invert_btn";
|
||||
clip_to: "base_clip";
|
||||
scale: 1;
|
||||
desc {
|
||||
rel1.to_x: "resize_btn";
|
||||
rel1.relative: 1.0 0;
|
||||
rel2.relative: 0.0 1;
|
||||
rel1.offset: 3 -3;
|
||||
align: 0 0;
|
||||
fixed: 1 0;
|
||||
min: 15 15;
|
||||
}
|
||||
}
|
||||
part { name: "elm.text.size_w";
|
||||
type: TEXT;
|
||||
clip_to: "base_clip";
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#include "common.h"
|
||||
|
||||
#define VIEW_RESIZE_TYPE_W "W"
|
||||
#define VIEW_RESIZE_TYPE_H "H"
|
||||
|
||||
typedef struct statusbar_s
|
||||
{
|
||||
Evas_Object *layout;
|
||||
|
@ -19,9 +22,13 @@ typedef struct invert_transit_data_s
|
|||
|
||||
stats_data *g_sd = NULL;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Internal method implementation */
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
slider_changed_cb(void *data, Evas_Object *obj,
|
||||
void *event_info EINA_UNUSED)
|
||||
view_scale_slider_changed_cb(void *data, Evas_Object *obj,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
|
||||
stats_data *sd = data;
|
||||
|
@ -58,7 +65,8 @@ ctxpopup_dismissed_cb(void *data, Evas_Object *obj,
|
|||
}
|
||||
|
||||
static void
|
||||
transit_op_invert(void *data, Elm_Transit *transit EINA_UNUSED, double progress)
|
||||
view_invert_transit_op(void *data, Elm_Transit *transit EINA_UNUSED,
|
||||
double progress)
|
||||
{
|
||||
invert_data *id = data;
|
||||
Evas_Coord w, h;
|
||||
|
@ -72,7 +80,7 @@ transit_op_invert(void *data, Elm_Transit *transit EINA_UNUSED, double progress)
|
|||
}
|
||||
|
||||
static void
|
||||
transit_op_end(void *data, Elm_Transit *transit EINA_UNUSED)
|
||||
view_invert_transit_end(void *data, Elm_Transit *transit EINA_UNUSED)
|
||||
{
|
||||
invert_data *id = data;
|
||||
config_view_size_set((id->orig_w + id->diff_w), (id->orig_h + id->diff_h));
|
||||
|
@ -94,16 +102,119 @@ view_invert_btn_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|||
id->diff_h = w - h;
|
||||
|
||||
Elm_Transit *transit = elm_transit_add();
|
||||
elm_transit_effect_add(transit, transit_op_invert, id, transit_op_end);
|
||||
elm_transit_effect_add(transit, view_invert_transit_op, id,
|
||||
view_invert_transit_end);
|
||||
elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
|
||||
elm_transit_duration_set(transit, TRANSIT_TIME);
|
||||
elm_transit_go(transit);
|
||||
}
|
||||
|
||||
static void
|
||||
view_resize_slider_changed_cb(void *data, Evas_Object *obj,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *layout = data;
|
||||
Eina_Bool horizontal;
|
||||
const char *type = elm_object_part_text_get(layout, "elm.text.type");
|
||||
if (type && !strcmp(type, VIEW_RESIZE_TYPE_W))
|
||||
horizontal = EINA_TRUE;
|
||||
else
|
||||
horizontal = EINA_FALSE;
|
||||
|
||||
Evas_Object *slider = elm_object_part_content_get(layout,
|
||||
"elm.swallow.slider");
|
||||
int val = elm_slider_value_get(slider);
|
||||
int w, h;
|
||||
config_view_size_get(&w, &h);
|
||||
if (horizontal)
|
||||
{
|
||||
config_view_size_set(val, h);
|
||||
enventor_object_live_view_size_set(base_enventor_get(), val, h);
|
||||
}
|
||||
else
|
||||
{
|
||||
config_view_size_set(w, val);
|
||||
enventor_object_live_view_size_set(base_enventor_get(), w, val);
|
||||
}
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
view_resize_slider_layout_create(Evas_Object *parent, const char *type,
|
||||
int slider_val)
|
||||
{
|
||||
//Layout
|
||||
Evas_Object *layout = elm_layout_add(parent);
|
||||
elm_layout_file_set(layout, EDJE_PATH, "slider_layout");
|
||||
evas_object_show(layout);
|
||||
|
||||
//Type
|
||||
elm_object_part_text_set(layout, "elm.text.type", type);
|
||||
|
||||
//Slider
|
||||
Evas_Object *slider = elm_slider_add(layout);
|
||||
elm_slider_span_size_set(slider, 120);
|
||||
elm_slider_indicator_show_set(slider, EINA_FALSE);
|
||||
double step = 1 / (double) (3840 - 1);
|
||||
elm_slider_step_set(slider, step);
|
||||
elm_slider_min_max_set(slider, 1, 3840);
|
||||
elm_slider_value_set(slider, slider_val);
|
||||
evas_object_smart_callback_add(slider, "changed",
|
||||
view_resize_slider_changed_cb, layout);
|
||||
elm_object_part_text_set(layout, "elm.text.slider_min", "1");
|
||||
elm_object_part_text_set(layout, "elm.text.slider_max", "3840");
|
||||
elm_object_part_content_set(layout, "elm.swallow.slider", slider);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
static void
|
||||
view_resize_btn_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
stats_data *sd = data;
|
||||
evas_object_del(sd->ctxpopup);
|
||||
|
||||
//Ctxpopup
|
||||
Evas_Object *ctxpopup = elm_ctxpopup_add(base_layout_get());
|
||||
if (!ctxpopup) return;
|
||||
|
||||
elm_object_style_set(ctxpopup, elm_app_name_get());
|
||||
elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
|
||||
ELM_CTXPOPUP_DIRECTION_RIGHT,
|
||||
ELM_CTXPOPUP_DIRECTION_LEFT,
|
||||
ELM_CTXPOPUP_DIRECTION_DOWN);
|
||||
//Slider Layout
|
||||
Evas_Object *box = elm_box_add(ctxpopup);
|
||||
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);
|
||||
elm_object_content_set(ctxpopup, box);
|
||||
|
||||
Evas_Object *slider;
|
||||
Evas_Coord w, h;
|
||||
config_view_size_get(&w, &h);
|
||||
|
||||
//Slider 1
|
||||
slider = view_resize_slider_layout_create(box, VIEW_RESIZE_TYPE_W, w);
|
||||
elm_box_pack_end(box, slider);
|
||||
|
||||
//Slider 2
|
||||
slider = view_resize_slider_layout_create(box, VIEW_RESIZE_TYPE_H, h);
|
||||
elm_object_signal_emit(slider, "odd,item,set", "");
|
||||
elm_box_pack_end(box, slider);
|
||||
|
||||
//Ctxpopup Position
|
||||
Evas_Coord x, y;
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
evas_object_move(ctxpopup, x + (w/2), y);
|
||||
evas_object_show(ctxpopup);
|
||||
|
||||
sd->ctxpopup = ctxpopup;
|
||||
}
|
||||
|
||||
static void
|
||||
view_scale_btn_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
stats_data *sd = data;
|
||||
evas_object_del(sd->ctxpopup);
|
||||
|
||||
//Ctxpopup
|
||||
Evas_Object *ctxpopup = elm_ctxpopup_add(base_layout_get());
|
||||
|
@ -119,13 +230,14 @@ view_scale_btn_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|||
elm_slider_inverted_set(slider, EINA_TRUE);
|
||||
elm_slider_min_max_set(slider, MIN_VIEW_SCALE, MAX_VIEW_SCALE);
|
||||
elm_slider_value_set(slider, (double) config_view_scale_get());
|
||||
evas_object_smart_callback_add(slider, "changed", slider_changed_cb,
|
||||
sd);
|
||||
evas_object_smart_callback_add(slider, "changed",
|
||||
view_scale_slider_changed_cb, sd);
|
||||
|
||||
evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismissed_cb,
|
||||
sd);
|
||||
elm_object_content_set(ctxpopup, slider);
|
||||
|
||||
//Ctxpopup Position
|
||||
Evas_Coord x, y, w, h;
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
evas_object_move(ctxpopup, x, y);
|
||||
|
@ -163,6 +275,10 @@ create_statusbar_btn(Evas_Object *layout, const char *image,
|
|||
return btn;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Externally accessible calls */
|
||||
/*****************************************************************************/
|
||||
|
||||
void
|
||||
stats_line_num_update(int cur_line, int max_line)
|
||||
{
|
||||
|
@ -204,7 +320,11 @@ stats_init(Evas_Object *parent)
|
|||
create_statusbar_btn(layout, "expand", "scale_btn",
|
||||
"View Scale (Ctrl + Mouse Wheel)",
|
||||
view_scale_btn_cb, sd);
|
||||
|
||||
//View Resize Button
|
||||
create_statusbar_btn(layout, "expand", "resize_btn",
|
||||
"Resize View Size",
|
||||
view_resize_btn_cb, sd);
|
||||
//View Invert Button
|
||||
create_statusbar_btn(layout, "invert", "invert_btn",
|
||||
"Invert View Size",
|
||||
view_invert_btn_cb, sd);
|
||||
|
|
|
@ -15,8 +15,6 @@ typedef struct ctxpopup_data_s {
|
|||
attr_value *attr;
|
||||
char candidate[256];
|
||||
|
||||
/* These 2 variables are used for lazy update for slider button. */
|
||||
Evas_Object *slider;
|
||||
Ecore_Animator *animator;
|
||||
|
||||
Eina_Bool integer : 1;
|
||||
|
@ -104,36 +102,6 @@ slider_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|||
ctxdata->animator = ecore_animator_add(changed_animator_cb, ctxdata);
|
||||
}
|
||||
|
||||
static void
|
||||
btn_up_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
ctxpopup_data *ctxdata = data;
|
||||
Evas_Object *layout = (Evas_Object *)evas_object_data_get(obj, "layout");
|
||||
Evas_Object *slider = elm_object_part_content_get(layout,
|
||||
"elm.swallow.slider");
|
||||
double value = elm_slider_value_get(slider);
|
||||
|
||||
if (ctxdata->attr->type & ATTR_VALUE_INTEGER) value += 1;
|
||||
else value += 0.01;
|
||||
elm_slider_value_set(slider, value);
|
||||
slider_changed_cb(ctxdata, ctxdata->slider, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
btn_down_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
ctxpopup_data *ctxdata = data;
|
||||
Evas_Object *layout = (Evas_Object *)evas_object_data_get(obj, "layout");
|
||||
Evas_Object *slider = elm_object_part_content_get(layout,
|
||||
"elm.swallow.slider");
|
||||
double value = elm_slider_value_get(slider);
|
||||
|
||||
if (ctxdata->attr->type & ATTR_VALUE_INTEGER) value -= 1;
|
||||
else value -= 0.01;
|
||||
elm_slider_value_set(slider, value);
|
||||
slider_changed_cb(ctxdata, ctxdata->slider, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
entry_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
|
@ -279,53 +247,27 @@ slider_layout_create(Evas_Object *parent, ctxpopup_data *ctxdata,
|
|||
ctxdata);
|
||||
char slider_min[16];
|
||||
char slider_max[16];
|
||||
double step_size;
|
||||
|
||||
if (ctxdata->integer)
|
||||
{
|
||||
snprintf(slider_min, sizeof(slider_min), "%1.0f", attr->min);
|
||||
snprintf(slider_max, sizeof(slider_max), "%1.0f", attr->max);
|
||||
step_size = 1 / (double) (attr->max - attr->min);
|
||||
elm_slider_step_set(slider, step_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(slider_min, sizeof(slider_min), "%1.2f", attr->min);
|
||||
snprintf(slider_max, sizeof(slider_max), "%1.2f", attr->max);
|
||||
step_size = 1 / (double) (attr->max * 100 - attr->min);
|
||||
elm_slider_step_set(slider, step_size);
|
||||
}
|
||||
|
||||
elm_object_part_text_set(layout, "elm.text.slider_min", slider_min);
|
||||
elm_object_part_text_set(layout, "elm.text.slider_max", slider_max);
|
||||
elm_object_part_content_set(layout, "elm.swallow.slider", slider);
|
||||
|
||||
Evas_Object *btn;
|
||||
Evas_Object *img;
|
||||
|
||||
//Down Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_button_autorepeat_set(btn, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(btn, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(btn, 0.1);
|
||||
evas_object_data_set(btn, "layout", layout);
|
||||
evas_object_smart_callback_add(btn, "clicked", btn_down_cb, ctxdata);
|
||||
evas_object_smart_callback_add(btn, "repeated", btn_down_cb, ctxdata);
|
||||
elm_object_part_content_set(layout, "elm.swallow.down", btn);
|
||||
|
||||
//Down Image
|
||||
img = elm_image_add(btn);
|
||||
elm_image_file_set(img, EDJE_PATH, "down");
|
||||
elm_object_content_set(btn, img);
|
||||
|
||||
//Up Button
|
||||
btn = elm_button_add(layout);
|
||||
elm_button_autorepeat_set(btn, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(btn, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(btn, 0.1);
|
||||
evas_object_data_set(btn, "layout", layout);
|
||||
evas_object_smart_callback_add(btn, "clicked", btn_up_cb, ctxdata);
|
||||
evas_object_smart_callback_add(btn, "repeated", btn_up_cb, ctxdata);
|
||||
elm_object_part_content_set(layout, "elm.swallow.up", btn);
|
||||
|
||||
//Up Image
|
||||
img = elm_image_add(btn);
|
||||
elm_image_file_set(img, EDJE_PATH, "up");
|
||||
elm_object_content_set(btn, img);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
|
@ -342,10 +284,8 @@ slider_layout_set(Evas_Object *ctxpopup, ctxpopup_data *ctxdata)
|
|||
|
||||
//Box
|
||||
Evas_Object *box = elm_box_add(ctxpopup);
|
||||
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
|
||||
EVAS_HINT_EXPAND);
|
||||
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);
|
||||
|
||||
//Layout
|
||||
Evas_Object *layout = NULL;
|
||||
|
@ -361,6 +301,7 @@ slider_layout_set(Evas_Object *ctxpopup, ctxpopup_data *ctxdata)
|
|||
Evas_Object *edje = elm_layout_edje_get(layout);
|
||||
edje_object_size_min_calc(edje, &layout_w, NULL);
|
||||
|
||||
//Check if the ctxpopup is useless due to it's space.
|
||||
if (edit_w <= layout_w + CTXPOPUP_BORDER_SIZE)
|
||||
evas_object_del(ctxpopup);
|
||||
}
|
||||
|
|
|
@ -97,12 +97,14 @@ static void
|
|||
view_obj_min_update(view_data *vd)
|
||||
{
|
||||
double scale = edj_mgr_view_scale_get();
|
||||
evas_object_size_hint_min_set(vd->layout,
|
||||
((double)vd->view_config_size.w * scale),
|
||||
((double)vd->view_config_size.h * scale));
|
||||
evas_object_size_hint_max_set(vd->layout,
|
||||
((double)vd->view_config_size.w * scale),
|
||||
((double)vd->view_config_size.h * scale));
|
||||
|
||||
double min_w = (double) vd->view_config_size.w * scale;
|
||||
if (1 > min_w) min_w = 1;
|
||||
double min_h = (double) vd->view_config_size.h * scale;
|
||||
if (1 > min_h) min_h = 1;
|
||||
|
||||
evas_object_size_hint_min_set(vd->layout, min_w, min_h);
|
||||
evas_object_size_hint_max_set(vd->layout, min_w, min_h);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -406,16 +408,6 @@ layout_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
evas_object_del(rect);
|
||||
}
|
||||
|
||||
static void
|
||||
layout_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
static Enventor_Live_View_Size size;
|
||||
view_data *vd = data;
|
||||
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)
|
||||
{
|
||||
|
@ -448,8 +440,6 @@ view_obj_create(view_data *vd)
|
|||
|
||||
evas_object_size_hint_weight_set(vd->layout, EVAS_HINT_EXPAND,
|
||||
EVAS_HINT_EXPAND);
|
||||
evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_RESIZE,
|
||||
layout_resize_cb, vd);
|
||||
evas_object_smart_callback_add(vd->layout, "dummy,clicked",
|
||||
dummy_clicked_cb, vd);
|
||||
|
||||
|
@ -709,11 +699,22 @@ view_scale_set(view_data *vd, double scale)
|
|||
void
|
||||
view_size_set(view_data *vd, Evas_Coord w, Evas_Coord h)
|
||||
{
|
||||
static Enventor_Live_View_Size size;
|
||||
|
||||
if (!vd) return;
|
||||
|
||||
double scale = edj_mgr_view_scale_get();
|
||||
int prev_w = vd->view_config_size.w;
|
||||
int prev_h = vd->view_config_size.h;
|
||||
|
||||
vd->view_config_size.w = w;
|
||||
vd->view_config_size.h = h;
|
||||
view_obj_min_update(vd);
|
||||
|
||||
if ((prev_w == w) && (prev_h == h)) return;
|
||||
|
||||
view_size_get(vd, &size.w, &size.h);
|
||||
evas_object_smart_callback_call(vd->enventor, SIG_LIVE_VIEW_RESIZED, &size);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue