hermet pushed a commit to branch master.

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

commit 350ee8c413d8e1204b44276bc717b2e8caa40f14
Author: Hermet Park <her...@hermet.pe.kr>
Date:   Fri Jan 22 17:34:32 2016 +0900

    add live view scale slider onto status bar.
    
    @feature
---
 data/themes/default/images.edc         |   2 +
 data/themes/default/images/Makefile.am |   3 +-
 data/themes/default/images/expand.png  | Bin 0 -> 202 bytes
 data/themes/default/layout_common.edc  |  90 +++++++++++++++++++++++---
 po/en.po                               |   5 --
 po/ru.po                               |   5 --
 src/bin/base_gui.c                     |  12 ++++
 src/bin/live_edit.c                    |   1 -
 src/bin/main.c                         |   9 ++-
 src/bin/menu.c                         |   2 +
 src/bin/statusbar.c                    | 115 +++++++++++++++++++++++++++++++++
 src/include/base_gui.h                 |   2 +-
 src/include/common.h                   |   2 +
 src/include/config_data.h              |   2 +-
 src/include/statusbar.h                |   2 +
 15 files changed, 226 insertions(+), 26 deletions(-)

diff --git a/data/themes/default/images.edc b/data/themes/default/images.edc
index ab0b573..f48381f 100644
--- a/data/themes/default/images.edc
+++ b/data/themes/default/images.edc
@@ -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")
diff --git a/data/themes/default/images/Makefile.am 
b/data/themes/default/images/Makefile.am
index 177e9ef..c5f9571 100644
--- a/data/themes/default/images/Makefile.am
+++ b/data/themes/default/images/Makefile.am
@@ -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
diff --git a/data/themes/default/images/expand.png 
b/data/themes/default/images/expand.png
new file mode 100644
index 0000000..6d9996c
Binary files /dev/null and b/data/themes/default/images/expand.png differ
diff --git a/data/themes/default/layout_common.edc 
b/data/themes/default/layout_common.edc
index 562340a..4c1142a 100644
--- a/data/themes/default/layout_common.edc
+++ b/data/themes/default/layout_common.edc
@@ -1793,14 +1793,60 @@ 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[";
@@ -1809,16 +1855,16 @@ group { name: "statusbar_layout";
          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;
diff --git a/po/en.po b/po/en.po
index 264347e..5cb2ce3 100644
--- a/po/en.po
+++ b/po/en.po
@@ -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"
diff --git a/po/ru.po b/po/ru.po
index 5e7237e..ce72a58 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -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"
diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c
index 461c4a6..6a1722b 100644
--- a/src/bin/base_gui.c
+++ b/src/bin/base_gui.c
@@ -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);
 }
diff --git a/src/bin/live_edit.c b/src/bin/live_edit.c
index 9e2b0d3..c44c939 100644
--- a/src/bin/live_edit.c
+++ b/src/bin/live_edit.c
@@ -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
 {
diff --git a/src/bin/main.c b/src/bin/main.c
index 43a6f2b..eed2b71 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -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
diff --git a/src/bin/menu.c b/src/bin/menu.c
index a4c8b1c..d621446 100644
--- a/src/bin/menu.c
+++ b/src/bin/menu.c
@@ -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");
diff --git a/src/bin/statusbar.c b/src/bin/statusbar.c
index b7fc2b0..422534c 100644
--- a/src/bin/statusbar.c
+++ b/src/bin/statusbar.c
@@ -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);
@@ -80,6 +173,16 @@ stats_info_msg_update(const char *msg)
 }
 
 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)
 {
    stats_data *sd = g_sd;
@@ -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;
+}
diff --git a/src/include/base_gui.h b/src/include/base_gui.h
index a32acbd..1a96cac 100644
--- a/src/include/base_gui.h
+++ b/src/include/base_gui.h
@@ -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);
-
diff --git a/src/include/common.h b/src/include/common.h
index be6a06c..d0ba5ab 100644
--- a/src/include/common.h
+++ b/src/include/common.h
@@ -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) \
diff --git a/src/include/config_data.h b/src/include/config_data.h
index 5192150..b246740 100644
--- a/src/include/config_data.h
+++ b/src/include/config_data.h
@@ -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);
diff --git a/src/include/statusbar.h b/src/include/statusbar.h
index 2b7105c..8732ccb 100644
--- a/src/include/statusbar.h
+++ b/src/include/statusbar.h
@@ -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);

-- 


Reply via email to