add live view scale slider onto status bar.

@feature
This commit is contained in:
Hermet Park 2016-01-22 17:34:32 +09:00
parent 521d12f4cb
commit 350ee8c413
15 changed files with 226 additions and 26 deletions

View File

@ -19,6 +19,7 @@ images {
image: "live_text.png" COMP;
image: "live_textblock.png" COMP;
image: "live_edit.png" COMP;
image: "expand.png" COMP;
}
#define ICON_GROUP(_group_name, _image_path) \
@ -45,6 +46,7 @@ ICON_GROUP("live_edit", "live_edit.png")
ICON_GROUP("save", "save.png")
ICON_GROUP("undo", "undo.png")
ICON_GROUP("redo", "redo.png")
ICON_GROUP("expand", "expand.png")
ICON_GROUP("IMAGE", "live_image.png")
ICON_GROUP("RECT", "live_rectangle.png")
ICON_GROUP("SPACER", "live_spacer.png")

View File

@ -67,4 +67,5 @@ EXTRA_DIST = \
redo.png \
undo.png \
white_bar_vert_glow.png \
horizontal_separated_bar_small_glow.png
horizontal_separated_bar_small_glow.png \
expand.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

View File

@ -1793,32 +1793,78 @@ group { name: "statusbar_layout";
color: 0 0 0 0;
}
}
part { name: "size_spacer";
part { name: "scale_spacer";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 0 0;
rel2.relative: 0 1;
min: 250 0;
min: 120 0;
fixed: 1 0;
}
}
swallow { "scale_btn";
clip_to: "base_clip";
scale: 1;
description { state: "default" 0.0;
rel1.relative: 0.0 0.0;
rel2.relative: 0.0 1.0;
align: 0.0 0.5;
min: 18 18;
fixed: 1 0;
}
}
part { name: "elm.text.scale";
type: TEXT;
clip_to: "base_clip";
scale: 1;
effect: GLOW;
description { state: "default" 0.0;
rel1.to_x: "scale_btn";
rel2.to_x: "scale_btn";
rel1.relative: 1.0 0.0;
rel2.relative: 1.0 1.0;
align: 0 0.5;
fixed: 1 0;
color: COL_HI;
text {
size: 11;
align: 0 0.5;
min: 1 0;
ellipsis: -1;
text:"1.00x";
}
}
}
part { name: "size_spacer";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 1 0;
rel2.relative: 1 1;
rel1.to: "scale_spacer";
rel2.to: "scale_spacer";
min: 120 0;
fixed: 1 0;
align: 0 0.5;
}
}
part { name: "elm.text.size[";
type: TEXT;
clip_to: "base_clip";
scale: 1;
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
rel1.to_x: "size_spacer";
rel1.relative: 0.0 0.0;
rel2.relative: 0.0 1.0;
align: 0 0.5;
rel1.offset: 0 -2;
rel2.offset: -1 -3;
fixed: 1 0;
color: COL_NM;
text {
text: "Size [";
size: 11;
align: 0 0;
align: 0 0.5;
min: 1 0;
ellipsis: -1;
}
@ -2130,6 +2176,19 @@ group { name: "statusbar_layout";
align: 1 0.5;
}
}
swallow { "group_btn";
clip_to: "base_clip";
scale: 1;
description { state: "default" 0.0;
rel1.to_x: "elm.text.group[";
rel2.to_x: "elm.text.group[";
rel1.relative: 0.0 0.0;
rel2.relative: 0.0 1.0;
align: 1 0.5;
min: 18 18;
fixed: 1 0;
}
}
part { name: "elm.text.group[";
type: TEXT;
clip_to: "base_clip";
@ -2147,6 +2206,7 @@ group { name: "statusbar_layout";
size: 11;
align: 1 0.5;
min: 1 0;
max: 1 0;
ellipsis: -1;
}
}
@ -2204,6 +2264,19 @@ group { name: "statusbar_layout";
fixed: 1 0;
}
}
swallow { "line_btn";
clip_to: "base_clip";
scale: 1;
description { state: "default" 0.0;
rel1.to: "elm.text.line_[";
rel2.to: "elm.text.line_[";
rel1.relative: 0.0 0.0;
rel2.relative: 0.0 1.0;
align: 1 0.5;
min: 18 18;
fixed: 1 0;
}
}
part { name: "elm.text.line_[";
type: TEXT;
clip_to: "base_clip";
@ -2221,6 +2294,7 @@ group { name: "statusbar_layout";
size: 11;
align: 1 0.5;
min: 1 0;
max: 1 0;
ellipsis: -1;
}
}
@ -2295,15 +2369,13 @@ group { name: "statusbar_layout";
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
rel1.relative: 1 0;
rel1.offset: 0 -2;
rel2.offset: -1 -3;
align: 1 0.5;
fixed: 1 0;
color: COL_NM;
text {
text: "]";
size: 11;
align: 1 0;
align: 1 0.5;
min: 1 0;
ellipsis: -1;
}
@ -2441,7 +2513,7 @@ group { name: "main_layout";
rel1.relative: 0 1;
rel2.relative: 1 1;
align: 0.5 0;
min: 0 15;
min: 0 18;
fixed: 0 1;
}
description { state: "visible" 0.0;

View File

@ -131,11 +131,6 @@ msgstr ""
msgid "Auto Indentation Disabled."
msgstr ""
#: src/bin/main.c:180
#, c-format
msgid "Live View Scale: %2.2fx"
msgstr ""
#: src/bin/main.c:206
#, c-format
msgid "Font Size: %1.1fx"

View File

@ -131,11 +131,6 @@ msgstr "Автовыравнивание Включено"
msgid "Auto Indentation Disabled."
msgstr "Автовыравнивание Выключено"
#: src/bin/main.c:180
#, c-format
msgid "Live View Scale: %2.2fx"
msgstr "Масштаб предпросмотра: %2.2fx"
#: src/bin/main.c:206
#, c-format
msgid "Font Size: %1.1fx"

View File

@ -5,6 +5,7 @@ typedef struct base_s
Evas_Object *win;
Evas_Object *layout;
Evas_Object *console;
Evas_Object *enventor;
Eina_Bool console_msg : 1;
} base_data;
@ -271,8 +272,19 @@ base_gui_show(void)
evas_object_show(g_bd->win);
}
Evas_Object *
base_enventor_get(void)
{
base_data *bd = g_bd;
assert(bd);
return bd->enventor;
}
void
base_enventor_set(Evas_Object *enventor)
{
base_data *bd = g_bd;
assert(bd);
bd->enventor = enventor;
panes_text_editor_set(enventor);
}

View File

@ -7,7 +7,6 @@
#define CTRL_PT_LAYER 3
#define INFO_TEXT_LAYER (CTRL_PT_LAYER+1)
#define ROUNDING(x, dig) (floor((x) * pow(10, dig) + 0.5) / pow(10, dig))
typedef enum
{

View File

@ -176,9 +176,7 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev)
//Just in live edit mode case.
live_edit_update();
char buf[256];
snprintf(buf, sizeof(buf), _("Live View Scale: %2.2fx"), scale);
stats_info_msg_update(buf);
stats_view_scale_update(scale);
return ECORE_CALLBACK_PASS_ON;
}
@ -699,6 +697,8 @@ keygrabber_key_down_cb(void *data, Evas *e EINA_UNUSED,
//Main Menu
if (!strcmp(ev->key, "Escape"))
{
if (stats_ctxpopup_dismiss()) return;
if (live_edit_get())
{
live_edit_cancel();
@ -724,6 +724,7 @@ keygrabber_key_down_cb(void *data, Evas *e EINA_UNUSED,
if (file_mgr_warning_is_opened()) return;
enventor_object_ctxpopup_dismiss(ad->enventor);
stats_ctxpopup_dismiss();
if (ctrl_func(ad, ev)) return;
if (alt_func(ad, ev)) return;
@ -804,6 +805,8 @@ statusbar_set()
Evas_Object *obj = stats_init(base_layout_get());
elm_object_part_content_set(base_layout_get(), "elm.swallow.statusbar", obj);
tools_status_update(NULL, EINA_FALSE);
stats_view_scale_update(config_view_scale_get());
}
static void

View File

@ -178,6 +178,8 @@ warning_open(menu_data *md, Evas_Smart_Cb yes_cb, Evas_Smart_Cb save_cb)
{
if (md->warning_layout) return;
stats_ctxpopup_dismiss();
//Layout
Evas_Object *layout = elm_layout_add(base_win_get());
elm_layout_file_set(layout, EDJE_PATH, "warning_layout");

View File

@ -3,6 +3,7 @@
typedef struct statusbar_s
{
Evas_Object *layout;
Evas_Object *ctxpopup;
Eina_Stringshare *group_name;
int cur_line;
int max_line;
@ -10,6 +11,94 @@ typedef struct statusbar_s
stats_data *g_sd = NULL;
static void
slider_changed_cb(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
stats_data *sd = data;
double scale = elm_slider_value_get(obj);
double rounded = ROUNDING(scale, 1);
if ((rounded - scale) > 0) rounded -= 0.05;
config_view_scale_set(rounded);
scale = config_view_scale_get();
enventor_object_live_view_scale_set(base_enventor_get(), scale);
stats_view_scale_update(scale);
}
static void
ctxpopup_dismissed_cb(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
stats_data *sd = data;
evas_object_del(obj);
sd->ctxpopup = NULL;
}
static void
view_scale_btn_cb(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
stats_data *sd = data;
//Ctxpopup
Evas_Object *ctxpopup = elm_ctxpopup_add(base_layout_get());
elm_object_style_set(ctxpopup, elm_app_name_get());
//Slider
Evas_Object *slider = elm_slider_add(ctxpopup);
elm_slider_span_size_set(slider, 150);
elm_slider_indicator_show_set(slider, EINA_FALSE);
double step = 0.05 / (double) (MAX_VIEW_SCALE - MIN_VIEW_SCALE);
elm_slider_step_set(slider, step);
elm_slider_horizontal_set(slider, EINA_FALSE);
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(ctxpopup, "dismissed", ctxpopup_dismissed_cb,
sd);
elm_object_content_set(ctxpopup, slider);
Evas_Coord x, y, w, h;
evas_object_geometry_get(obj, &x, &y, &w, &h);
evas_object_move(ctxpopup, x, y);
evas_object_show(ctxpopup);
sd->ctxpopup = ctxpopup;
}
static Evas_Object *
create_statusbar_btn(Evas_Object *layout, const char *tooltip_msg,
Evas_Smart_Cb func, void *data)
{
Evas_Object *box = elm_box_add(layout);
Evas_Object *btn = elm_button_add(box);
evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_scale_set(btn, 0.5);
evas_object_smart_callback_add(btn, "clicked", func, data);
evas_object_show(btn);
Evas_Object *img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "expand");
elm_object_content_set(btn, img);
elm_object_tooltip_text_set(box, tooltip_msg);
elm_object_tooltip_orient_set(box, ELM_TOOLTIP_ORIENT_TOP_RIGHT);
elm_box_pack_end(box, btn);
elm_object_part_content_set(layout, "scale_btn", box);
return btn;
}
void
stats_line_num_update(int cur_line, int max_line)
{
@ -47,6 +136,10 @@ stats_init(Evas_Object *parent)
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout, EDJE_PATH, "statusbar_layout");
Evas_Object *btn;
btn = create_statusbar_btn(layout,
"View Scale (Ctrl + Mouse Wheel)",
view_scale_btn_cb, sd);
sd->layout = layout;
stats_cursor_pos_update(0, 0, 0, 0);
@ -79,6 +172,16 @@ stats_info_msg_update(const char *msg)
elm_object_signal_emit(sd->layout, "elm,action,info_msg,show", "");
}
void
stats_view_scale_update(double scale)
{
stats_data *sd = g_sd;
char buf[10];
snprintf(buf, sizeof(buf), "%0.2fx", scale);
elm_object_part_text_set(sd->layout, "elm.text.scale", buf);
}
void
stats_view_size_update(Evas_Coord w, Evas_Coord h)
{
@ -107,3 +210,15 @@ stats_cursor_pos_update(Evas_Coord x, Evas_Coord y, float rel_x, float rel_y)
snprintf(buf, sizeof(buf), "%0.2f", rel_y);
elm_object_part_text_set(sd->layout, "elm.text.cursor_rely", buf);
}
Eina_Bool
stats_ctxpopup_dismiss(void)
{
stats_data *sd = g_sd;
if (sd->ctxpopup)
{
elm_ctxpopup_dismiss(sd->ctxpopup);
return EINA_TRUE;
}
return EINA_FALSE;
}

View File

@ -4,6 +4,7 @@ Eina_Bool base_gui_init(void);
void base_gui_show(void);
Evas_Object *base_win_get(void);
Evas_Object *base_layout_get(void);
Evas_Object *base_enventor_get(void);
void base_win_resize_object_add(Evas_Object *resize_obj);
void base_title_set(const char *path);
void base_statusbar_toggle(Eina_Bool config);
@ -20,4 +21,3 @@ void base_gui_term(void);
void base_console_reset(void);
void base_error_msg_set(const char *msg);
void base_console_full_view(void);

View File

@ -55,6 +55,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
#define REL2_X 0.75f
#define REL2_Y 0.75f
#define ROUNDING(x, dig) (floor((x) * pow(10, dig) + 0.5) / pow(10, dig))
#define ENVENTOR_CONFIG_VERSION 3
#define EVENT_KEY_MODIFIER_CHECK(NAME, MASK) \

View File

@ -1,6 +1,6 @@
#define MAX_FONT_SCALE 5.0
#define MIN_FONT_SCALE 0.5
#define MAX_VIEW_SCALE 10.0
#define MAX_VIEW_SCALE 5.0
#define MIN_VIEW_SCALE 0.1
void config_init(const char *input_path, const char *output_path, Eina_List *img_path, Eina_List *snd_path, Eina_List *fnt_path, Eina_List *dat_path);

View File

@ -4,6 +4,8 @@ void stats_view_size_update(Evas_Coord w, Evas_Coord h);
void stats_cursor_pos_update(Evas_Coord x, Evas_Coord y, float rel_x, float rel_y);
void stats_info_msg_update(const char *msg);
void stats_line_num_update(int cur_line, int max_line);
void stats_view_scale_update(double scale);
Evas_Object *stats_obj_get(void);
void stats_edc_group_update(const char *group_name);
Eina_Stringshare *stats_group_name_get(void);
Eina_Bool stats_ctxpopup_dismiss(void);