uBrowser: Use slider elementary widget to change zoom level
authorPiotr Tworek <p.tworek@samsung.com>
Thu, 30 Apr 2015 12:22:38 +0000 (14:22 +0200)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
This solution is much more user friendly compared to previous solution.
The user can now change page zoom level by simply dragging the slider
left, or right.

Change-Id: Iac769a47f001ae42d099bc1e670e3d3b7480583b
Signed-off-by: Piotr Tworek <p.tworek@samsung.com>
tizen_src/ewk/ubrowser/window_ui.cc
tizen_src/ewk/ubrowser/window_ui.h

index 9d7424b..e96bf57 100644 (file)
@@ -15,9 +15,8 @@
 
 namespace {
 static std::string kDefaultNewWindowURL = "http://www.google.com";
-static double kMinViewScale = 1;
-static double kMaxViewScale = 4;
-static double kViewScaleDelta = 0.1;
+static double kMinViewScale = 1.0;
+static double kMaxViewScale = 4.0;
 static int kNotificationTimeoutSec = 3;
 }
 
@@ -189,8 +188,8 @@ Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) {
         &WindowUI::OnAutoFittingDisabled, this);
   }
 
-  elm_ctxpopup_item_append(menu, "Zoom in", NULL, &WindowUI::OnZoomIn, this);
-  elm_ctxpopup_item_append(menu, "Zoom out", NULL, &WindowUI::OnZoomOut, this);
+  elm_ctxpopup_item_append(menu, "Change page zoom level", NULL,
+      &WindowUI::OnShowZoomPopup, this);
 
   return menu;
 }
@@ -328,30 +327,6 @@ void WindowUI::OnSelectTouchInput(void* data, Evas_Object* obj, void*) {
   elm_ctxpopup_dismiss(obj);
 }
 
-namespace {
-inline void _change_zoom(Window& win, double delta) {
-  double scale = win.GetScale();
-  if (scale >= kMinViewScale && scale < kMaxViewScale) {
-    scale += delta;
-    win.SetScale(scale);
-  }
-}
-}
-
-void WindowUI::OnZoomIn(void* data, Evas_Object* obj, void*) {
-  log_trace("%s", __PRETTY_FUNCTION__);
-  WindowUI *thiz = static_cast<WindowUI*>(data);
-  _change_zoom(thiz->window_, kViewScaleDelta);
-  elm_ctxpopup_dismiss(obj);
-}
-
-void WindowUI::OnZoomOut(void* data, Evas_Object* obj, void*) {
-  log_trace("%s", __PRETTY_FUNCTION__);
-  WindowUI *thiz = static_cast<WindowUI*>(data);
-  _change_zoom(thiz->window_, -kViewScaleDelta);
-  elm_ctxpopup_dismiss(obj);
-}
-
 void WindowUI::OnStartTracing(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
@@ -391,3 +366,35 @@ void WindowUI::ClosePopup(void *data, Evas_Object*, void*) {
   evas_object_del(thiz->active_popup_);
   thiz->active_popup_ = NULL;
 }
+
+void WindowUI::OnShowZoomPopup(void* data, Evas_Object* obj, void*) {
+  log_trace("%s", __PRETTY_FUNCTION__);
+  WindowUI *thiz = static_cast<WindowUI*>(data);
+
+  Evas_Object* popup = elm_popup_add(thiz->window_.GetEvasObject());
+  elm_object_part_text_set(popup, "title,text", "Change page zoom level");
+  elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+  thiz->active_popup_ = popup;
+  Evas_Object* btn = elm_button_add(popup);
+
+  Evas_Object* slider = elm_slider_add(popup);
+  elm_slider_min_max_set(slider, kMinViewScale, kMaxViewScale);
+  elm_slider_value_set(slider, thiz->window_.GetScale());
+  elm_slider_indicator_format_set(slider, "%1.2f");
+  elm_slider_indicator_show_set(slider, EINA_TRUE);
+  evas_object_smart_callback_add(slider, "changed", &OnZoomChanged, thiz);
+  elm_object_part_content_set(popup, "default", slider);
+
+  elm_object_text_set(btn, "Close");
+  evas_object_smart_callback_add(btn, "clicked", ClosePopup, thiz);
+  elm_object_part_content_set(popup, "button1", btn);
+
+  evas_object_show(popup);
+  elm_ctxpopup_dismiss(obj);
+}
+
+void WindowUI::OnZoomChanged(void* data, Evas_Object* obj, void*) {
+  log_trace("%s", __PRETTY_FUNCTION__);
+  WindowUI *thiz = static_cast<WindowUI*>(data);
+  thiz->window_.SetScale(elm_slider_value_get(obj));
+}
index 925ef85..0c41da7 100644 (file)
@@ -51,13 +51,13 @@ class WindowUI {
   static void OnRotate(void* data, Evas_Object*, void*);
   static void OnSelectMouseInput(void* data, Evas_Object*, void*);
   static void OnSelectTouchInput(void* data, Evas_Object*, void*);
-  static void OnZoomIn(void* data, Evas_Object*, void*);
-  static void OnZoomOut(void* data, Evas_Object*, void*);
   static void OnStartTracing(void* data, Evas_Object*, void*);
   static void OnStopTracing(void* data, Evas_Object*, void*);
   static void OnAutoFittingEnabled(void* data, Evas_Object*, void*);
   static void OnAutoFittingDisabled(void* data, Evas_Object*, void*);
   static void ClosePopup(void* data, Evas_Object*, void*);
+  static void OnShowZoomPopup(void* data, Evas_Object*, void*);
+  static void OnZoomChanged(void* data, Evas_Object*, void*);
 
   Window& window_;
   Browser& browser_;