2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <Elementary.h>
19 #include <boost/concept_check.hpp>
21 #include <AbstractMainWindow.h>
24 #include "BrowserLogger.h"
25 #include "ServiceManager.h"
30 namespace tizen_browser{
33 EXPORT_SERVICE(ZoomUI, "org.tizen.browser.zoomui")
37 , m_nav_layout(nullptr)
38 , m_zoom_slider(nullptr)
39 , m_current_translation_x(0)
40 , m_current_translation_y(0)
42 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
43 m_edjFilePath = EDJE_DIR;
44 m_edjFilePath.append("ZoomUI/ZoomUI.edj");
45 elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
50 void ZoomUI::init(Evas_Object* parent)
52 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
57 Evas_Object* ZoomUI::getContent()
59 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
62 createLayout(m_parent);
68 evas_object_show(m_layout);
69 evas_object_show(m_nav_layout);
70 evas_object_show(m_zoom_slider);
75 evas_object_hide(m_zoom_slider);
76 evas_object_hide(m_nav_layout);
77 evas_object_hide(m_layout);
80 void ZoomUI::show(Evas_Object* parent)
82 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
88 void ZoomUI::createLayout(Evas_Object *parent)
90 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
92 m_layout = elm_layout_add(parent);
93 elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "zoom-layout");
94 evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
95 evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
98 createNavigationButtons();
101 void ZoomUI::createZoomSlider()
103 m_zoom_slider = elm_slider_add(m_layout);
104 evas_object_size_hint_weight_set(m_zoom_slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
105 evas_object_size_hint_align_set(m_zoom_slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
106 evas_object_smart_callback_add(m_zoom_slider, "changed", _zoom_slider_changed, this);
107 elm_object_style_set(m_zoom_slider, "default");
108 elm_slider_horizontal_set(m_zoom_slider, EINA_TRUE);
109 elm_slider_min_max_set(m_zoom_slider, 1, 6);
110 elm_slider_step_set(m_zoom_slider, 1);
111 elm_slider_value_set(m_zoom_slider, 3);
112 elm_slider_indicator_format_set(m_zoom_slider, "%1.0f");
114 elm_object_part_content_set(m_layout, "slider_swallow", m_zoom_slider);
117 void ZoomUI::createNavigationButtons()
119 m_nav_layout = elm_layout_add(m_layout);
120 elm_layout_file_set(m_nav_layout, m_edjFilePath.c_str(), "nav-layout");
121 evas_object_size_hint_weight_set(m_nav_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
122 evas_object_size_hint_align_set(m_nav_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
123 elm_object_part_content_set(m_layout, "nav_buttons", m_nav_layout);
125 Evas_Object* icon = elm_icon_add(m_nav_layout);
126 setImageFile(icon, LEFT, false);
127 evas_object_smart_callback_add(icon, "clicked", _left_button_clicked, this);
128 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_left_button, this);
129 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_left_button, this);
130 elm_object_part_content_set(m_nav_layout, "left_button", icon);
132 icon = elm_icon_add(m_nav_layout);
133 setImageFile(icon, RIGHT, false);
134 evas_object_smart_callback_add(icon, "clicked", _right_button_clicked, this);
135 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_right_button, this);
136 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_right_button, this);
137 elm_object_part_content_set(m_nav_layout, "right_button", icon);
139 icon = elm_icon_add(m_nav_layout);
140 setImageFile(icon, DOWN, false);
141 evas_object_smart_callback_add(icon, "clicked", _down_button_clicked, this);
142 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_down_button, this);
143 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_down_button, this);
144 elm_object_part_content_set(m_nav_layout, "down_button", icon);
146 icon = elm_icon_add(m_nav_layout);
147 setImageFile(icon, UP, false);
148 evas_object_smart_callback_add(icon, "clicked", _up_button_clicked, this);
149 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_up_button, this);
150 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_up_button, this);
151 elm_object_part_content_set(m_nav_layout, "up_button", icon);
154 void ZoomUI::clearItems()
156 evas_object_del(m_layout);
157 setZoom(ZOOM_DEFAULT);
160 void ZoomUI::setImageFile(Evas_Object* obj, int direction, bool focused)
163 case LEFT: elm_image_file_set(obj, m_edjFilePath.c_str(), focused ? "ic_zoom_indicator_left_foc.png" : "ic_zoom_indicator_left_nor.png");
165 case RIGHT: elm_image_file_set(obj, m_edjFilePath.c_str(), focused ? "ic_zoom_indicator_right_foc.png" : "ic_zoom_indicator_right_nor.png");
167 case DOWN: elm_image_file_set(obj, m_edjFilePath.c_str(), focused ? "ic_zoom_indicator_down_foc.png" : "ic_zoom_indicator_down_nor.png");
169 case UP: elm_image_file_set(obj, m_edjFilePath.c_str(), focused ? "ic_zoom_indicator_up_foc.png" : "ic_zoom_indicator_up_nor.png");
171 default: BROWSER_LOGD("[%s:%d] Warning: Unhandled button", __PRETTY_FUNCTION__, __LINE__);
176 void ZoomUI::_zoom_slider_changed(void *data, Evas_Object *obj, void *event_info)
178 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
180 int val = elm_slider_value_get(obj);
181 int zoomLevel = ZOOM_DEFAULT;
182 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
185 case 1: zoomLevel = ZOOM_50;
187 case 2: zoomLevel = ZOOM_75;
189 case 3: zoomLevel = ZOOM_DEFAULT;
191 case 4: zoomLevel = ZOOM_150;
193 case 5: zoomLevel = ZOOM_200;
195 case 6: zoomLevel = ZOOM_300;
197 default:BROWSER_LOGD("[%s:%d] Warning: Unhandled zoom level", __PRETTY_FUNCTION__, __LINE__);
200 zoomUI->setZoom(zoomLevel);
204 void ZoomUI::_left_button_clicked(void * data, Evas_Object * obj, void * event_info)
206 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
208 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
209 zoomUI->scrollView(iDX, 0);
213 void ZoomUI::_right_button_clicked(void * data, Evas_Object * obj, void * event_info)
215 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
217 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
218 zoomUI->scrollView(DX, 0);
222 void ZoomUI::_up_button_clicked(void * data, Evas_Object * obj, void * event_info)
224 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
226 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
227 zoomUI->scrollView(0, iDX);
231 void ZoomUI::_down_button_clicked(void * data, Evas_Object * obj, void * event_info)
233 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
235 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
236 zoomUI->scrollView(0, DX);
240 void ZoomUI::_cb_focus_in_left_button(void * data, Evas *, Evas_Object *obj, void *)
242 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
244 elm_object_focus_set(obj, EINA_TRUE);
245 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
246 zoomUI->setImageFile(obj, LEFT, true);
250 void ZoomUI::_cb_focus_out_left_button(void * data, Evas *, Evas_Object *obj, void *)
252 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
254 elm_object_focus_set(obj, EINA_FALSE);
255 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
256 zoomUI->setImageFile(obj, LEFT, false);
260 void ZoomUI::_cb_focus_in_right_button(void * data, Evas *, Evas_Object *obj, void *)
262 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
264 elm_object_focus_set(obj, EINA_TRUE);
265 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
266 zoomUI->setImageFile(obj, RIGHT, true);
270 void ZoomUI::_cb_focus_out_right_button(void * data, Evas *, Evas_Object *obj, void *)
272 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
274 elm_object_focus_set(obj, EINA_FALSE);
275 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
276 zoomUI->setImageFile(obj, RIGHT, false);
280 void ZoomUI::_cb_focus_in_up_button(void * data, Evas *, Evas_Object *obj, void *)
282 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
284 elm_object_focus_set(obj, EINA_TRUE);
285 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
286 zoomUI->setImageFile(obj, UP, true);
290 void ZoomUI::_cb_focus_out_up_button(void * data, Evas *, Evas_Object *obj, void *)
292 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
294 elm_object_focus_set(obj, EINA_FALSE);
295 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
296 zoomUI->setImageFile(obj, UP, false);
300 void ZoomUI::_cb_focus_in_down_button(void * data, Evas *, Evas_Object *obj, void *)
302 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
304 elm_object_focus_set(obj, EINA_TRUE);
305 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
306 zoomUI->setImageFile(obj, DOWN, true);
310 void ZoomUI::_cb_focus_out_down_button(void * data, Evas *, Evas_Object *obj, void *)
312 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
314 elm_object_focus_set(obj, EINA_FALSE);
315 ZoomUI *zoomUI = static_cast<ZoomUI*>(data);
316 zoomUI->setImageFile(obj, DOWN, false);