2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiCtrl_SliderPresenter.cpp
20 * @brief This is the implementation file for the _SliderPresenter class.
23 #include <FBaseSysLog.h>
24 #include <FBaseErrorDefine.h>
25 #include <FGrp_BitmapImpl.h>
26 #include <FGrp_FontImpl.h>
27 #include <FGrp_TextTextObject.h>
28 #include <FGrp_TextTextSimple.h>
29 #include "FUi_UiTouchEvent.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUiAnim_VisualElement.h"
32 #include "FUiCtrl_Slider.h"
33 #include "FUiCtrl_SliderModel.h"
34 #include "FUiCtrl_SliderOverlay.h"
35 #include "FUi_CoordinateSystemUtils.h"
36 #include "FUiCtrl_SliderPresenter.h"
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Base;
40 using namespace Tizen::Ui::Animations;
41 using namespace Tizen::Graphics::_Text;
42 using namespace Tizen::Base::Runtime;
44 namespace Tizen { namespace Ui { namespace Controls
47 _SliderPresenter::_SliderPresenter(void)
49 , __pSliderModel(null)
50 , __pSliderOverlay(null)
52 , __pResourceBgTopBitmap(null)
53 , __pResourceBgMiddleBitmap(null)
54 , __pResourceBgBottomBitmap(null)
55 , __pResourceBgSingleBitmap(null)
56 , __pBgTopBitmap(null)
57 , __pBgMiddleBitmap(null)
58 , __pBgBottomBitmap(null)
59 , __pBgSingleBitmap(null)
60 , __pBgGrpStyleNoneBitmap(null)
61 , __pBgTopEffectBitmap(null)
62 , __pBgMiddleEffectBitmap(null)
63 , __pBgBottomEffectBitmap(null)
64 , __pBgSingleEffectBitmap(null)
65 , __pResourceBarBitmap(null)
66 , __pResourceBarBgBitmap(null)
67 , __pBarResourceEffectBitmap(null)
68 , __pBarBgResourceEffectBitmap(null)
69 , __pBarColorReplacementBitmap(null)
70 , __pBarBgColorReplacementBitmap(null)
71 , __pHandleNormalBitmap(null)
72 , __pHandlePressedBitmap(null)
73 , __pHandleDisabledBitmap(null)
74 , __pHandleHighlightedBitmap(null)
75 , __pHandleNormalEffectBitmap(null)
76 , __pHandlePressedEffectBitmap(null)
77 , __pHandleDisabledEffectBitmap(null)
78 , __pHandleHighlightedEffectBitmap(null)
79 , __currentBarColor(0)
80 , __currentBarBgColor(0)
83 , __pTitleTextObject(null)
86 , __isSliderPressed(false)
87 , __isNeedToBeUpdated(true)
88 , __isResourceLoaded(false)
89 , __isCustomHandle(false)
90 , __isCustomPressedTextColor(false)
91 , __groupStyle(GROUP_STYLE_NONE)
94 , __isTimerRunning(false)
95 , __currentPosition(0.0f, 0.0f)
99 _SliderPresenter::~_SliderPresenter(void)
101 delete __pSliderModel;
102 __pSliderModel = null;
104 delete __pSliderOverlay;
105 __pSliderOverlay = null;
107 if (__pSlideTimer != null)
109 __pSlideTimer->Cancel();
110 delete __pSlideTimer;
111 __pSlideTimer = null;
114 delete __pResourceBgTopBitmap;
115 __pResourceBgTopBitmap = null;
117 delete __pResourceBgMiddleBitmap;
118 __pResourceBgMiddleBitmap = null;
120 delete __pResourceBgBottomBitmap;
121 __pResourceBgBottomBitmap = null;
123 delete __pResourceBgSingleBitmap;
124 __pResourceBgSingleBitmap = null;
126 delete __pBgTopBitmap;
127 __pBgTopBitmap = null;
129 delete __pBgMiddleBitmap;
130 __pBgMiddleBitmap = null;
132 delete __pBgBottomBitmap;
133 __pBgBottomBitmap = null;
135 delete __pBgSingleBitmap;
136 __pBgSingleBitmap = null;
138 delete __pBgGrpStyleNoneBitmap;
139 __pBgGrpStyleNoneBitmap = null;
141 delete __pBgTopEffectBitmap;
142 __pBgTopEffectBitmap = null;
144 delete __pBgMiddleEffectBitmap;
145 __pBgMiddleEffectBitmap = null;
147 delete __pBgBottomEffectBitmap;
148 __pBgBottomEffectBitmap = null;
150 delete __pBgSingleEffectBitmap;
151 __pBgSingleEffectBitmap = null;
153 delete __pResourceBarBitmap;
154 __pResourceBarBitmap = null;
156 delete __pResourceBarBgBitmap;
157 __pResourceBarBgBitmap = null;
159 delete __pBarResourceEffectBitmap;
160 __pBarResourceEffectBitmap = null;
162 delete __pBarBgResourceEffectBitmap;
163 __pBarBgResourceEffectBitmap = null;
165 delete __pBarColorReplacementBitmap;
166 __pBarColorReplacementBitmap = null;
168 delete __pBarBgColorReplacementBitmap;
169 __pBarBgColorReplacementBitmap = null;
171 delete __pHandleNormalBitmap;
172 __pHandleNormalBitmap = null;
174 delete __pHandlePressedBitmap;
175 __pHandlePressedBitmap = null;
177 delete __pHandleDisabledBitmap;
178 __pHandleDisabledBitmap = null;
180 delete __pHandleHighlightedBitmap;
181 __pHandleHighlightedBitmap = null;
183 delete __pHandleNormalEffectBitmap;
184 __pHandleNormalEffectBitmap = null;
186 delete __pHandlePressedEffectBitmap;
187 __pHandlePressedEffectBitmap = null;
189 delete __pHandleDisabledEffectBitmap;
190 __pHandleDisabledEffectBitmap = null;
192 delete __pHandleHighlightedEffectBitmap;
193 __pHandleHighlightedEffectBitmap = null;
195 delete __pTitleTextObject;
196 __pTitleTextObject = null;
201 _SliderPresenter::CreateInstanceN(const _Slider& slider)
203 result r = E_SUCCESS;
205 _SliderPresenter* pSliderPresenter = new (std::nothrow) _SliderPresenter;
206 SysTryReturn(NID_UI_CTRL, pSliderPresenter != null, null, E_OUT_OF_MEMORY,
207 "[E_OUT_OF_MEMORY] Memory allocation failed.");
209 pSliderPresenter->__pSlider = const_cast <_Slider*>(&slider);
210 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSlider != null, , E_SYSTEM,
211 "[E_SYSTEM] A system error has occurred. The Slider control core is null.");
213 pSliderPresenter->__pSliderModel = new (std::nothrow) _SliderModel;
214 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderModel != null, , E_OUT_OF_MEMORY,
215 "[E_OUT_OF_MEMORY] Memory allocation failed.");
217 if (pSliderPresenter->__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
219 pSliderPresenter->__pSliderOverlay = new (std::nothrow) _SliderOverlay;
220 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderOverlay != null, , E_OUT_OF_MEMORY,
221 "[E_OUT_OF_MEMORY] Memory allocation failed.");
223 r = pSliderPresenter->__pSliderOverlay->Construct();
224 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
227 return pSliderPresenter;
230 delete pSliderPresenter;
231 pSliderPresenter = null;
237 _SliderPresenter::Resize(void)
239 result r = E_SUCCESS;
241 float barHeight = 0.0f;
242 float barLeftMargin = 0.0f;
243 float barRightMargin = 0.0f;
244 float sliderY = 0.0f;
245 float iconWidth = 0.0f;
246 float iconSideMargin = 0.0f;
248 float minimumHeight = 0.0f;
249 float minimumWidth = 0.0f;
250 float topMargin = 0.0f;
251 float iconRightMargin = 0.0f;
252 float titleHeight = 0.0f;
253 FloatRectangle titleTextBounds;
255 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
257 if (__isResourceLoaded == false)
260 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
261 __isResourceLoaded = true;
263 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, __fontSize);
264 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
266 __pFont = __pSlider->GetFallbackFont();
268 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
270 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_NORMAL, __handleTextColor);
271 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
273 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_DISABLED, __handleTextDisabledColor);
274 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
276 __handleTextPressedColor = __handleTextColor;
277 __handleTextHighlightedColor = __handleTextColor;
282 r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);
283 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
285 r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconWidth);
286 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
288 r = GET_SHAPE_CONFIG(SLIDER::BAR_OFFSET, orientation, __barOffset);
289 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
291 if (!__isCustomHandle)
293 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
294 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
296 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_WIDTH, orientation, __handleRect.width);
297 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
299 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_HEIGHT, orientation, __handleRect.height);
300 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
302 __rect = FloatRectangle(0.0f, 0.0f, __pSlider->GetBoundsF().width, __pSlider->GetBoundsF().height);
304 r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, orientation, topMargin);
305 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
307 r = GET_SHAPE_CONFIG(SLIDER::ICON_RIGHT_MARGIN, orientation, iconRightMargin);
308 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
310 if ((__pSlider->GetIcon(ICON_POSITION_LEFT) != null) || (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null))
312 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_WIDTH_WITH_ICON, orientation, minimumWidth);
313 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
315 r = GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN_WITH_ICON, orientation, barLeftMargin);
316 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
320 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_WIDTH_WITHOUT_ICON, orientation, minimumWidth);
321 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
323 r = GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN, orientation, barLeftMargin);
324 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
327 barRightMargin = barLeftMargin;
329 if (__rect.width < minimumWidth)
331 __rect.width = minimumWidth;
334 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_HEIGHT, orientation, minimumHeight);
335 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
337 if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
339 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleHeight);
340 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
342 minimumHeight = minimumHeight + titleHeight;
345 if (__rect.height < minimumHeight )
347 __rect.height = minimumHeight;
350 if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
352 titleTextBounds = GetTitleTextBounds();
353 sliderY = titleTextBounds.y + titleTextBounds.height;
354 __touchRect = FloatRectangle(barLeftMargin - offset, sliderY + (__rect.height - (sliderY + __handleRect.height)) / 2.0f,
355 __rect.width - (barLeftMargin + barRightMargin) + (2.0f * offset), __handleRect.height);
359 __touchRect = FloatRectangle(barLeftMargin - offset, (__rect.height - __handleRect.height) / 2.0f,
360 (__rect.width - (barLeftMargin + barRightMargin)) + (2.0f * offset), __handleRect.height);
363 if (__pSlider->GetIcon(ICON_POSITION_LEFT) != null)
365 __touchRect.x = __touchRect.x + iconWidth + iconRightMargin;
366 __touchRect.width = __touchRect.width - (iconWidth + iconRightMargin);
369 if (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null)
371 __touchRect.width = __touchRect.width - (iconWidth + iconSideMargin + iconRightMargin);
374 __barBgRect = FloatRectangle(__touchRect.x + offset, __touchRect.y +
375 ((__handleRect.height - barHeight) / 2.0f), __touchRect.width - (2.0f * offset), barHeight);
377 Rectangle absBounds = __pSlider->GetAbsoluteBounds();
378 FloatRectangle absBoundsFloat(absBounds.x, absBounds.y, absBounds.width, absBounds.height);
379 __pSliderOverlay->SetSliderRect(absBoundsFloat, __touchRect);
385 _SliderPresenter::LoadBitmap(void)
387 result r = E_SUCCESS;
390 Bitmap* pBitmap = null;
391 Bitmap* pNormalBitmap = null;
392 Bitmap* pPressedBitmap = null;
393 Bitmap* pDisabledBitmap = null;
394 Bitmap* pHighlightedBitmap = null;
395 Bitmap* pReplacementBitmap = null;
396 Color handleNormalColor;
397 Color handlePressedColor;
398 Color handleDisabledColor;
399 Color handleHighlightedColor;
401 r = GET_COLOR_CONFIG(SLIDER::BG_OTHERS_NORMAL, __currentBgColor);
402 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
404 r = GET_COLOR_CONFIG(SLIDER::BG_DEFAULT_NORMAL, __currentGrpStyleNoneColor);
405 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
407 r = GET_COLOR_CONFIG(SLIDER::BAR_NORMAL, __currentBarColor);
408 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
410 r = GET_COLOR_CONFIG(SLIDER::BAR_BG_NORMAL, __currentBarBgColor);
411 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
413 r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_NORMAL, handleNormalColor);
414 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
416 r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_PRESSED, handlePressedColor);
417 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
419 r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_DISABLED, handleDisabledColor);
420 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
422 r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_HIGHLIGHTED, handleHighlightedColor);
423 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
425 // for GROUP_STYLE_TOP
426 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_TOP_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgTopBitmap);
427 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "Propagating.");
429 __pBgTopBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
431 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
433 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_TOP_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgTopEffectBitmap);
434 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
437 // for GROUP_STYLE_MIDDLE
438 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_MIDDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgMiddleBitmap);
439 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
441 __pBgMiddleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
443 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
445 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_MIDDLE_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgMiddleEffectBitmap);
446 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
449 // for GROUP_STYLE_BOTTOM
450 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_BOTTOM_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgBottomBitmap);
451 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
453 __pBgBottomBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
455 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
457 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_BOTTOM_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgBottomEffectBitmap);
458 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
460 // for GROUP_STYLE_SINGLE and GROUP_STYLE_NONE
461 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_SINGLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgSingleBitmap);
462 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
464 __pBgSingleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
466 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
468 __pBgGrpStyleNoneBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentGrpStyleNoneColor);
470 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
473 r = GET_BITMAP_CONFIG_N(PANEL::GROUPED_SINGLE_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgSingleEffectBitmap);
474 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
476 opacity = __currentBgColor.GetAlpha();
478 __pBgTopBitmap->SetAlphaConstant(opacity);
479 __pBgMiddleBitmap->SetAlphaConstant(opacity);
480 __pBgBottomBitmap->SetAlphaConstant(opacity);
481 __pBgSingleBitmap->SetAlphaConstant(opacity);
482 __pBgGrpStyleNoneBitmap->SetAlphaConstant(__currentGrpStyleNoneColor.GetAlpha());
485 __pBgTopEffectBitmap->SetAlphaConstant(opacity);
486 __pBgMiddleEffectBitmap->SetAlphaConstant(opacity);
487 __pBgBottomEffectBitmap->SetAlphaConstant(opacity);
488 __pBgSingleEffectBitmap->SetAlphaConstant(opacity);
492 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBarBgBitmap);
493 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
495 __pBarBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBarBgColor);
497 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
499 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBarBitmap);
500 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
502 __pBarColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBarColor);
504 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
506 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarBgResourceEffectBitmap);
507 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
509 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarResourceEffectBitmap);
510 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
512 opacity = __currentBarColor.GetAlpha();
513 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
516 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pNormalBitmap);
517 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
519 if (__pHandleNormalBitmap == null)
521 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleNormalColor);
523 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
525 __pHandleNormalBitmap = pReplacementBitmap;
528 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pPressedBitmap);
529 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
531 if (__pHandlePressedBitmap == null)
533 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handlePressedColor);
535 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
537 __pHandlePressedBitmap = pReplacementBitmap;
540 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pDisabledBitmap);
541 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
543 if (__pHandleDisabledBitmap == null)
545 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDisabledBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleDisabledColor);
547 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
549 __pHandleDisabledBitmap = pReplacementBitmap;
552 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pHighlightedBitmap);
553 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
555 if (__pHandleHighlightedBitmap == null)
557 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleHighlightedColor);
559 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
561 __pHandleHighlightedBitmap = pReplacementBitmap;
564 if (__pHandleNormalEffectBitmap == null)
566 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
567 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
569 __pHandleNormalEffectBitmap = pBitmap;
572 if (__pHandlePressedEffectBitmap == null)
574 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
575 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
577 __pHandlePressedEffectBitmap = pBitmap;
580 if (__pHandleDisabledEffectBitmap == null)
582 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
583 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
585 __pHandleDisabledEffectBitmap = pBitmap;
588 if (__pHandleHighlightedEffectBitmap == null)
590 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_HIGHLIGHTED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
591 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
593 __pHandleHighlightedEffectBitmap = pBitmap;
596 delete pNormalBitmap;
597 delete pPressedBitmap;
598 delete pDisabledBitmap;
599 delete pHighlightedBitmap;
605 delete pNormalBitmap;
606 delete pPressedBitmap;
607 delete pDisabledBitmap;
608 delete pHighlightedBitmap;
612 delete __pResourceBgTopBitmap;
613 __pResourceBgTopBitmap = null;
615 delete __pResourceBgMiddleBitmap;
616 __pResourceBgMiddleBitmap = null;
618 delete __pResourceBgBottomBitmap;
619 __pResourceBgBottomBitmap = null;
621 delete __pResourceBgSingleBitmap;
622 __pResourceBgSingleBitmap = null;
624 delete __pBgTopBitmap;
625 __pBgTopBitmap = null;
627 delete __pBgMiddleBitmap;
628 __pBgMiddleBitmap = null;
630 delete __pBgBottomBitmap;
631 __pBgBottomBitmap = null;
633 delete __pBgSingleBitmap;
634 __pBgSingleBitmap = null;
636 delete __pBgGrpStyleNoneBitmap;
637 __pBgGrpStyleNoneBitmap = null;
639 delete __pBgTopEffectBitmap;
640 __pBgTopEffectBitmap = null;
642 delete __pBgMiddleEffectBitmap;
643 __pBgMiddleEffectBitmap = null;
645 delete __pBgBottomEffectBitmap;
646 __pBgBottomEffectBitmap = null;
648 delete __pBgSingleEffectBitmap;
649 __pBgSingleEffectBitmap = null;
651 delete __pResourceBarBitmap;
652 __pResourceBarBitmap = null;
654 delete __pResourceBarBgBitmap;
655 __pResourceBarBgBitmap = null;
657 delete __pBarResourceEffectBitmap;
658 __pBarResourceEffectBitmap = null;
660 delete __pBarBgResourceEffectBitmap;
661 __pBarBgResourceEffectBitmap = null;
663 delete __pBarColorReplacementBitmap;
664 __pBarColorReplacementBitmap = null;
666 delete __pBarBgColorReplacementBitmap;
667 __pBarBgColorReplacementBitmap = null;
669 delete __pHandleNormalBitmap;
670 __pHandleNormalBitmap = null;
672 delete __pHandlePressedBitmap;
673 __pHandlePressedBitmap = null;
675 delete __pHandleDisabledBitmap;
676 __pHandleDisabledBitmap = null;
678 delete __pHandleHighlightedBitmap;
679 __pHandleHighlightedBitmap = null;
681 delete __pHandleNormalEffectBitmap;
682 __pHandleNormalEffectBitmap = null;
684 delete __pHandlePressedEffectBitmap;
685 __pHandlePressedEffectBitmap = null;
687 delete __pHandleDisabledEffectBitmap;
688 __pHandleDisabledEffectBitmap = null;
690 delete __pHandleHighlightedEffectBitmap;
691 __pHandleHighlightedEffectBitmap = null;
697 _SliderPresenter::CalculateSliderValue(float positionX, float offsetX)
699 int minValue = __pSliderModel->GetMinValue();
700 int maxValue = __pSliderModel->GetMaxValue();
702 if (positionX <= __touchRect.x + offsetX)
709 if (positionX >= (__touchRect.x + __touchRect.width) - offsetX)
711 __sliderX = __barBgRect.width - __handleRect.width - (2.0f * __barOffset);
712 __handleX = __touchRect.width - __handleRect.width;
716 if ((maxValue - minValue) == 0)
721 __sliderX = positionX - (__barBgRect.x + offsetX) - (2.0f * __barOffset);
722 __handleX = positionX - (__touchRect.x + offsetX);
724 __handleRect.x = __touchRect.x + __handleX;
725 __handleRect.y = __touchRect.y;
727 if (__handleRect.x < __touchRect.x )
729 __handleRect.x = __touchRect.x;
732 if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
734 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
737 return minValue + (int) ((float) (__handleX * (maxValue - minValue)) / (float)(__touchRect.width - __handleRect.width) + 0.5); // current value = current width * range / bar bg width
741 _SliderPresenter::Draw(void)
743 if (__isNeedToBeUpdated == true)
752 _SliderPresenter::DrawSlider(void)
754 result r = E_SUCCESS;
755 float sliderY = 0.0f;
756 FloatRectangle titleTextBounds;
758 int style = __pSlider->GetStyle();
760 Canvas* pCanvas = __pSlider->GetCanvasN();
761 SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
763 if (__isNeedToBeUpdated == true)
765 r = DrawBackground(*pCanvas);
766 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
769 if (style & _SLIDER_STYLE_TITLE_TEXT)
771 titleTextBounds = GetTitleTextBounds();
772 sliderY = titleTextBounds.y + titleTextBounds.height;
775 if(sliderY < __rect.height)
777 r = DrawSliderBar(*pCanvas);
778 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
780 if (__isSliderPressed == true)
782 if (style & _SLIDER_STYLE_OVERLAY)
784 r = DrawSliderOverlay(__pSliderModel->GetValue());
785 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
789 r = DrawSliderBarNumber(__pSliderModel->GetValue());
790 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
795 r = DrawSliderBarNumber(__pSliderModel->GetValue());
796 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
800 if (__isNeedToBeUpdated == true)
802 if (style & _SLIDER_STYLE_TITLE_TEXT)
804 r = DrawTitleText(*pCanvas);
805 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
808 r = DrawIcon(*pCanvas);
809 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
811 __isNeedToBeUpdated = false;
827 _SliderPresenter::DrawBackground(Canvas& canvas)
829 Bitmap* pBgBitmap = null;
830 Bitmap* pBgEffectBitmap = null;
831 Bitmap* pBgGroupBitmap = null;
834 result r = E_SUCCESS;
835 canvas.SetBackgroundColor(Color(0x00000000));
838 if (!(__pSlider->GetStyle() & _SLIDER_STYLE_NO_BG))
840 switch (__groupStyle)
842 case GROUP_STYLE_TOP:
843 pBgEffectBitmap = __pBgTopEffectBitmap;
844 if (__pSlider->GetColor() == __currentBgColor)
846 pBgBitmap = __pBgTopBitmap;
850 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
854 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
859 delete __pBgTopBitmap;
860 __pBgTopBitmap = null;
861 __pBgTopBitmap = pBgGroupBitmap;
863 pBgBitmap = pBgGroupBitmap;
864 opacity = __pSlider->GetColor().GetAlpha();
865 pBgBitmap->SetAlphaConstant(opacity);
866 __currentBgColor = __pSlider->GetColor();
871 case GROUP_STYLE_MIDDLE:
872 pBgEffectBitmap = __pBgMiddleEffectBitmap;
873 if (__pSlider->GetColor() == __currentBgColor)
875 pBgBitmap = __pBgMiddleBitmap;
879 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
883 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
888 delete __pBgMiddleBitmap;
889 __pBgMiddleBitmap = null;
890 __pBgMiddleBitmap = pBgGroupBitmap;
892 pBgBitmap = __pBgMiddleBitmap;
893 opacity = __pSlider->GetColor().GetAlpha();
894 pBgBitmap->SetAlphaConstant(opacity);
895 __currentBgColor = __pSlider->GetColor();
900 case GROUP_STYLE_BOTTOM:
901 pBgEffectBitmap = __pBgBottomEffectBitmap;
902 if (__pSlider->GetColor() == __currentBgColor)
904 pBgBitmap = __pBgBottomBitmap;
908 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
912 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
917 delete __pBgBottomBitmap;
918 __pBgBottomBitmap = null;
919 __pBgBottomBitmap = pBgGroupBitmap;
921 pBgBitmap = __pBgBottomBitmap;
922 opacity = __pSlider->GetColor().GetAlpha();
923 pBgBitmap->SetAlphaConstant(opacity);
924 __currentBgColor = __pSlider->GetColor();
929 case GROUP_STYLE_SINGLE:
930 pBgEffectBitmap = __pBgSingleEffectBitmap;
931 if (__pSlider->GetColor() == __currentBgColor)
933 pBgBitmap = __pBgSingleBitmap;
937 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
941 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
947 delete __pBgSingleBitmap;
948 __pBgSingleBitmap = null;
949 __pBgSingleBitmap = pBgGroupBitmap;
951 pBgBitmap = __pBgSingleBitmap;
952 opacity = __pSlider->GetColor().GetAlpha();
953 pBgBitmap->SetAlphaConstant(opacity);
954 __currentBgColor = __pSlider->GetColor();
959 case GROUP_STYLE_NONE:
962 if (__pSlider->GetColor() == __currentBgColor)
964 pBgBitmap = __pBgGrpStyleNoneBitmap;
968 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
972 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
977 delete __pBgGrpStyleNoneBitmap;
978 __pBgGrpStyleNoneBitmap = null;
979 __pBgGrpStyleNoneBitmap = pBgGroupBitmap;
981 pBgBitmap = __pBgGrpStyleNoneBitmap;
982 opacity = __pSlider->GetColor().GetAlpha();
983 pBgBitmap->SetAlphaConstant(opacity);
984 __currentBgColor = __pSlider->GetColor();
990 DrawBitmap(canvas, __rect, pBgBitmap);
991 if ( __groupStyle != GROUP_STYLE_NONE)
993 DrawBitmap(canvas, __rect, pBgEffectBitmap);
1000 _SliderPresenter::DrawSliderBar(Canvas& canvas)
1002 result r = E_SUCCESS;
1003 float bitmapHeight = 0.0f;
1004 float bitmapWidth = 0.0f;
1005 float bitmapPositionX = 0.0f;
1006 float bitmapPositionY = 0.0f;
1008 float offset = 0.0f;
1009 Bitmap* pReplacementBitmap = null;
1010 Bitmap* pHandleBitmap = null;
1011 Bitmap* pHandleEffectBitmap = null;
1012 bool isCustomHandleBitmap = false;
1013 bool isCustomBarBitmap = false;
1015 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1017 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
1018 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1020 if (__pSlider->IsEnabled() == false) // disabled
1022 pHandleBitmap = __pHandleDisabledBitmap;
1023 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
1024 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_DISABLED);
1025 if(__isSliderPressed == true)
1027 __isSliderPressed = false;
1028 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1030 __pSliderOverlay->Close();
1034 else if (__isSliderPressed == true) // pressed
1036 pHandleBitmap = __pHandlePressedBitmap;
1037 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1038 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_PRESSED);
1040 else if (__pSlider->IsFocused() == true)
1042 pHandleBitmap = __pHandleHighlightedBitmap;
1043 pHandleEffectBitmap = __pHandleHighlightedEffectBitmap;
1044 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_HIGHLIGHTED);
1046 else //(__isSliderPressed == false) // normal state
1048 pHandleBitmap = __pHandleNormalBitmap;
1049 pHandleEffectBitmap = __pHandleNormalEffectBitmap;
1050 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_NORMAL);
1053 int minValue = __pSliderModel->GetMinValue();
1054 int maxValue = __pSliderModel->GetMaxValue();
1056 __barRect = FloatRectangle(__barBgRect.x + __barOffset, __barBgRect.y, __sliderX, __barBgRect.height);
1058 if (__isSliderPressed == false && (maxValue - minValue) != 0)
1060 __barRect.width = ((__barBgRect.width - ( __handleRect.width + (2.0f * __barOffset))) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1061 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1064 if (__pSlider->GetBarBackgroundColor() != __currentBarBgColor)
1066 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarBackgroundColor());
1067 r = GetLastResult();
1068 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1070 delete __pBarBgColorReplacementBitmap;
1071 __pBarBgColorReplacementBitmap = null;
1073 __pBarBgColorReplacementBitmap = pReplacementBitmap;
1074 __currentBarBgColor = __pSlider->GetBarBackgroundColor();
1077 if (__pSlider->GetBarColor() != __currentBarColor)
1079 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarColor());
1080 r = GetLastResult();
1081 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1083 delete __pBarColorReplacementBitmap;
1084 __pBarColorReplacementBitmap = null;
1086 __pBarColorReplacementBitmap = pReplacementBitmap;
1087 __currentBarColor = __pSlider->GetBarColor();
1090 // Redrawing twice is required because, when slider is disabled we are applying alpha channel to the bar
1091 // which will show the previously drawn portion.
1093 if (__pSlider->IsEnabled() == false) // disabled
1095 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1096 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1098 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1102 opacity = __pSlider->GetBarColor().GetAlpha();
1103 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1106 isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_BG_NORMAL);
1107 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1108 if (isCustomBarBitmap == false)
1110 DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1113 isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_NORMAL);
1114 DrawBitmap(canvas, FloatRectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarColorReplacementBitmap);
1115 if (isCustomBarBitmap == false)
1117 DrawBitmap(canvas, FloatRectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarResourceEffectBitmap);
1120 __handleRect.x = __touchRect.x + __handleX;
1121 __handleRect.y = __touchRect.y;
1123 if (__handleRect.x < __touchRect.x )
1125 __handleRect.x = __touchRect.x;
1128 if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1130 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1133 Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1134 r = GetLastResult();
1135 SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1137 pHandleCanvas->SetBackgroundColor(0x00000000);
1138 pHandleCanvas->Clear();
1140 if (pHandleEffectBitmap != null) // drawing the default bitmap
1142 r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleBitmap);
1143 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1144 if (isCustomHandleBitmap == false)
1146 r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleEffectBitmap);
1147 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1152 bitmapWidth = pHandleBitmap->GetWidth();
1153 bitmapHeight = pHandleBitmap->GetHeight();
1155 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHandleBitmap) == false)
1157 // to clip the center portion of the larger bitmap.
1158 if( bitmapWidth > __handleRect.width )
1160 bitmapPositionX = (bitmapWidth / 2.0f) - (__handleRect.width / 2.0f);
1161 bitmapWidth = __handleRect.width;
1164 if( bitmapHeight > __handleRect.height )
1166 bitmapPositionY = (bitmapHeight / 2.0f) - (__handleRect.height / 2.0f);
1167 bitmapHeight = __handleRect.height;
1170 r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap, FloatRectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1174 r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap);
1176 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1179 r = __pSlider->UpdateHandle(__handleRect);
1182 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1185 delete pHandleCanvas;
1186 pHandleCanvas = null;
1191 delete pHandleCanvas;
1192 pHandleCanvas = null;
1198 _SliderPresenter::DrawSliderBarNumber(int value)
1200 result r = E_SUCCESS;
1201 int handleNumberSize = 0;
1204 int valueLength = 0;
1205 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1207 if (__pSlider->IsEnabled() == false) // disabled
1209 textColor = __handleTextDisabledColor;
1211 else if (__pSlider->IsFocused() == true)
1213 textColor = __handleTextHighlightedColor;
1215 else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1217 if(!__isCustomPressedTextColor)
1219 r = GET_COLOR_CONFIG(SLIDER::OVERLAY_TEXT_NORMAL, __handleTextPressedColor);
1220 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1222 textColor = __handleTextPressedColor;
1226 textColor = __handleTextColor;
1229 FloatDimension textDim(0.0f, 0.0f);
1231 valueLength = text.GetLength();
1233 if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1235 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_THREE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1236 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1238 else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1240 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_TWO_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1241 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1245 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1246 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1249 (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1251 Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1252 r = GetLastResult();
1253 SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1255 pHandleCanvas->SetFont(*__pFont);
1256 __pFont->GetTextExtent(text, valueLength, textDim);
1258 FloatPoint textPoint;
1259 textPoint.x = (__handleRect.width - textDim.width) / 2.0f;
1260 textPoint.y = (__handleRect.height - textDim.height) / 2.0f;
1262 pHandleCanvas->SetForegroundColor(textColor);
1263 pHandleCanvas->DrawText(textPoint, text);
1265 delete pHandleCanvas;
1266 pHandleCanvas = null;
1272 _SliderPresenter::DrawTitleText(Canvas& canvas)
1274 result r = E_SUCCESS;
1276 TextSimple* pSimpleTitleText = null;
1277 int titleTextSize = 0;
1278 int titleLength = 0;
1279 FloatRectangle titleTextBounds;
1280 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1282 titleLength = __pSlider->GetTitleText().GetLength();
1283 SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1285 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, titleTextSize);
1286 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1288 (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1290 titleTextBounds = GetTitleTextBounds();
1292 if (__pTitleTextObject == null)
1294 __pTitleTextObject = new (std::nothrow) TextObject();
1295 SysTryReturn(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1296 __pTitleTextObject->Construct();
1299 pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1301 __pTitleTextObject->RemoveAll();
1302 __pTitleTextObject->AppendElement(*pSimpleTitleText);
1303 __pTitleTextObject->SetForegroundColor(__pSlider->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
1304 __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
1305 __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
1306 __pTitleTextObject->SetBounds(GetTitleTextBounds());
1307 __pTitleTextObject->Compose();
1309 __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1310 __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1311 __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1317 _SliderPresenter::DrawIcon(Canvas& canvas)
1319 result r = E_SUCCESS;
1321 Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1322 Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1324 if (pLeftBitmap != null)
1326 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1327 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1330 if (pRightBitmap != null)
1332 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1333 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1340 _SliderPresenter::DrawSliderOverlay(int value)
1342 result r = E_SUCCESS;
1344 Rectangle absBounds = __pSlider->GetAbsoluteBounds();
1345 FloatRectangle absBoundsFloat(absBounds.x, absBounds.y, absBounds.width, absBounds.height);
1346 r = __pSliderOverlay->SetSliderRect(absBoundsFloat, __touchRect);
1347 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1349 r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1350 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1356 _SliderPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
1358 result r = E_SUCCESS;
1360 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
1362 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1363 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1367 r = canvas.DrawBitmap(bounds, *pBitmap);
1368 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1374 _SliderPresenter::GetTitleTextBounds(void) const
1376 FloatRectangle titleTextBounds;
1377 float topMargin = 0.0f;
1379 result r = E_SUCCESS;
1380 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1382 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_X, orientation, titleTextBounds.x);
1383 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1385 r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, orientation, topMargin);
1386 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1388 titleTextBounds.y = topMargin;
1390 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleTextBounds.height);
1391 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1393 titleTextBounds.width = __pSlider->GetBoundsF().width - titleTextBounds.x;
1395 return titleTextBounds;
1399 _SliderPresenter::GetTouchBounds(void) const
1405 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1407 result r = E_SUCCESS;
1409 FloatRectangle iconBounds;
1410 float iconSideMargin = 0.0f;
1411 float barHeight = 0.0f;
1413 _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1415 r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconBounds.width);
1416 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1418 r = GET_SHAPE_CONFIG(SLIDER::ICON_HEIGHT, orientation, iconBounds.height);
1419 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1421 r = GET_SHAPE_CONFIG(SLIDER::ICON_LEFT_MARGIN, orientation, iconSideMargin);
1422 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1424 r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1425 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1427 iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1429 if (iconPosition == ICON_POSITION_LEFT)
1431 iconBounds.x = iconSideMargin;
1435 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1442 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1444 if (__pSlider != &source)
1449 if (__pSlideTimer == null)
1451 __pSlideTimer = new (std::nothrow) Timer;
1452 SysTryReturn(NID_UI_CTRL, __pSlideTimer != null, true, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1454 result r = __pSlideTimer->Construct(*this);
1457 delete __pSlideTimer;
1458 __pSlideTimer = null;
1464 FloatPoint point = touchinfo.GetCurrentPosition();
1466 if (__handleRect.Contains(point) == true)
1468 __isSliderPressed = true;
1470 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1472 __pSliderModel->SetValue(candidateValue);
1473 __pSlider->SetAccessibilityElementValue();
1475 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1477 __pSliderOverlay->Open(false);
1480 __pSlider->Invalidate();
1483 return __isSliderPressed;
1487 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1489 if (__pSlider != &source)
1494 if (__pSlideTimer != null)
1496 __isTimerRunning = false;
1497 __pSlideTimer->Cancel();
1500 FloatPoint point = touchinfo.GetCurrentPosition();
1502 Canvas* pCanvas = __pSlider->GetCanvasN();
1503 SysTryReturn(NID_UI_CTRL, pCanvas != null, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1505 if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1507 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1510 if (__isSliderPressed == true)
1512 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP);
1513 __isSliderPressed = false;
1515 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1517 __pSliderModel->SetValue(candidateValue);
1518 __pSlider->SetAccessibilityElementValue();
1519 __pSlider->Invalidate();
1521 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1523 __pSliderOverlay->Close();
1526 // Adjustment Event Fire
1527 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1528 if (pAdjustmentEvent != null)
1530 Tizen::Base::Runtime::IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1531 result r = GetLastResult();
1532 SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1534 pAdjustmentEvent->Fire(*pEventArg);
1543 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1545 if (__pSlider != &source)
1550 if (__isSliderPressed == false)
1555 FloatPoint point = touchinfo.GetCurrentPosition();
1557 Canvas* pCanvas = __pSlider->GetCanvasN();
1558 SysTryReturn(NID_UI_CTRL, pCanvas != null, true, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1560 if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1562 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1565 __currentPosition.x = point.x;
1566 __currentPosition.y = point.y;
1568 if ( __isTimerRunning == false )
1570 __isTimerRunning = true;
1571 __pSlideTimer->Start(__timerValue);
1578 _SliderPresenter::OnTimerExpired(Timer& timer)
1580 __isTimerRunning = false;
1582 float handleHalfWidth = __handleRect.width / 2;
1583 int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1585 __pSliderModel->SetValue(candidateValue);
1586 __pSlider->SetAccessibilityElementValue();
1591 // Slider Event Fire
1592 _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1593 if (pSliderEvent != null)
1595 Tizen::Base::Runtime::IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1597 if( pEventArg == null)
1602 pSliderEvent->Fire(*pEventArg);
1609 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1611 return OnTouchReleased(source, touchinfo);
1615 _SliderPresenter::OnBoundsChanged(void)
1617 __isNeedToBeUpdated = true;
1624 _SliderPresenter::OnFontChanged(Font* pFont)
1627 __isNeedToBeUpdated = true;
1629 if(__pSliderOverlay != null)
1630 __pSliderOverlay->SetFont(pFont);
1636 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1638 style = FONT_STYLE_BOLD;
1644 _SliderPresenter::SetMinValue(int minValue)
1646 __pSliderModel->SetMinValue(minValue);
1648 if (__pSliderModel->GetValue() < minValue)
1650 __pSliderModel->SetValue(minValue);
1657 _SliderPresenter::SetMaxValue(int maxValue)
1659 __pSliderModel->SetMaxValue(maxValue);
1661 if (__pSliderModel->GetValue() > maxValue)
1663 __pSliderModel->SetValue(maxValue);
1670 _SliderPresenter::GetMinValue(void) const
1672 return __pSliderModel->GetMinValue();
1676 _SliderPresenter::GetMaxValue(void) const
1678 return __pSliderModel->GetMaxValue();
1682 _SliderPresenter::SetValue(int value)
1684 SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1686 int minValue = __pSliderModel->GetMinValue();
1687 int maxValue = __pSliderModel->GetMaxValue();
1689 if (value > maxValue)
1693 else if (value < minValue)
1698 __pSliderModel->SetValue(value);
1704 _SliderPresenter::GetValue(void) const
1706 return __pSliderModel->GetValue();
1710 _SliderPresenter::SetNeedUpdate(void)
1712 __isNeedToBeUpdated = true;
1717 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1719 __groupStyle = groupStyle;
1724 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1726 Bitmap* pThumbBitmap = null;
1727 result r = E_SUCCESS;
1729 pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1731 r = GetLastResult();
1732 SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1736 case SLIDER_THUMB_STATUS_PRESSED:
1738 delete __pHandlePressedEffectBitmap;
1739 __pHandlePressedEffectBitmap = null;
1741 delete __pHandlePressedBitmap;
1742 __pHandlePressedBitmap = pThumbBitmap;
1745 case SLIDER_THUMB_STATUS_DISABLED:
1747 delete __pHandleDisabledEffectBitmap;
1748 __pHandleDisabledEffectBitmap = null;
1750 delete __pHandleDisabledBitmap;
1751 __pHandleDisabledBitmap = pThumbBitmap;
1754 case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1756 delete __pHandleHighlightedEffectBitmap;
1757 __pHandleHighlightedEffectBitmap = null;
1759 delete __pHandleHighlightedEffectBitmap;
1760 __pHandleHighlightedEffectBitmap = pThumbBitmap;
1763 case SLIDER_THUMB_STATUS_NORMAL:
1767 delete __pHandleNormalEffectBitmap;
1768 __pHandleNormalEffectBitmap = null;
1770 delete __pHandleNormalBitmap;
1771 __pHandleNormalBitmap = pThumbBitmap;
1773 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1774 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1776 _VisualElement* pHandle = __pSlider->GetHandle();
1777 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1779 __isCustomHandle = true;
1789 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1793 case SLIDER_THUMB_STATUS_PRESSED:
1794 __handleTextPressedColor = color;
1795 __isCustomPressedTextColor = true;
1798 case SLIDER_THUMB_STATUS_DISABLED:
1799 __handleTextDisabledColor = color;
1802 case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1803 __handleTextHighlightedColor = color;
1806 case SLIDER_THUMB_STATUS_NORMAL:
1809 __handleTextColor = color;
1816 }}} // Tizen::Ui::Controls