61b21145d86ea4463c88917f9f2e22e16ae75b76
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_SliderPresenter.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17
18 /**
19  * @file                FUiCtrl_SliderPresenter.cpp
20  * @brief       This is the implementation file for the _SliderPresenter class.
21  */
22
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"
37
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;
43
44 namespace Tizen { namespace Ui { namespace Controls
45 {
46
47 _SliderPresenter::_SliderPresenter(void)
48         : __pSlider(null)
49         , __pSliderModel(null)
50         , __pSliderOverlay(null)
51         , __pSlideTimer(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)
81         , __currentBgColor(0)
82         , __pFont(null)
83         , __pTitleTextObject(null)
84         , __sliderX(0)
85         , __handleX(0)
86         , __isSliderPressed(false)
87         , __isNeedToBeUpdated(true)
88         , __isResourceLoaded(false)
89         , __isCustomHandle(false)
90         , __isCustomPressedTextColor(false)
91         , __groupStyle(GROUP_STYLE_NONE)
92         , __fontSize(0.0f)
93         , __barOffset(0.0f)
94         , __isTimerRunning(false)
95         , __currentPosition(0.0f, 0.0f)
96 {
97 }
98
99 _SliderPresenter::~_SliderPresenter(void)
100 {
101         delete __pSliderModel;
102         __pSliderModel = null;
103
104         delete __pSliderOverlay;
105         __pSliderOverlay = null;
106
107         if (__pSlideTimer != null)
108         {
109                 __pSlideTimer->Cancel();
110                 delete __pSlideTimer;
111                 __pSlideTimer = null;
112         }
113
114         delete __pResourceBgTopBitmap;
115         __pResourceBgTopBitmap = null;
116
117         delete __pResourceBgMiddleBitmap;
118         __pResourceBgMiddleBitmap = null;
119
120         delete __pResourceBgBottomBitmap;
121         __pResourceBgBottomBitmap = null;
122
123         delete __pResourceBgSingleBitmap;
124         __pResourceBgSingleBitmap = null;
125
126         delete __pBgTopBitmap;
127         __pBgTopBitmap = null;
128
129         delete __pBgMiddleBitmap;
130         __pBgMiddleBitmap = null;
131
132         delete __pBgBottomBitmap;
133         __pBgBottomBitmap = null;
134
135         delete __pBgSingleBitmap;
136         __pBgSingleBitmap = null;
137
138         delete __pBgGrpStyleNoneBitmap;
139         __pBgGrpStyleNoneBitmap = null;
140
141         delete __pBgTopEffectBitmap;
142         __pBgTopEffectBitmap = null;
143
144         delete __pBgMiddleEffectBitmap;
145         __pBgMiddleEffectBitmap = null;
146
147         delete __pBgBottomEffectBitmap;
148         __pBgBottomEffectBitmap = null;
149
150         delete __pBgSingleEffectBitmap;
151         __pBgSingleEffectBitmap = null;
152
153         delete __pResourceBarBitmap;
154         __pResourceBarBitmap = null;
155
156         delete __pResourceBarBgBitmap;
157         __pResourceBarBgBitmap = null;
158
159         delete __pBarResourceEffectBitmap;
160         __pBarResourceEffectBitmap = null;
161
162         delete __pBarBgResourceEffectBitmap;
163         __pBarBgResourceEffectBitmap = null;
164
165         delete __pBarColorReplacementBitmap;
166         __pBarColorReplacementBitmap = null;
167
168         delete __pBarBgColorReplacementBitmap;
169         __pBarBgColorReplacementBitmap = null;
170
171         delete __pHandleNormalBitmap;
172         __pHandleNormalBitmap = null;
173
174         delete __pHandlePressedBitmap;
175         __pHandlePressedBitmap = null;
176
177         delete __pHandleDisabledBitmap;
178         __pHandleDisabledBitmap = null;
179
180         delete __pHandleHighlightedBitmap;
181         __pHandleHighlightedBitmap = null;
182
183         delete __pHandleNormalEffectBitmap;
184         __pHandleNormalEffectBitmap = null;
185
186         delete __pHandlePressedEffectBitmap;
187         __pHandlePressedEffectBitmap = null;
188
189         delete __pHandleDisabledEffectBitmap;
190         __pHandleDisabledEffectBitmap = null;
191
192         delete __pHandleHighlightedEffectBitmap;
193         __pHandleHighlightedEffectBitmap = null;
194
195         delete __pTitleTextObject;
196         __pTitleTextObject = null;
197
198 }
199
200 _SliderPresenter*
201 _SliderPresenter::CreateInstanceN(const _Slider& slider)
202 {
203         result r = E_SUCCESS;
204
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.");
208
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.");
212
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.");
216
217         if (pSliderPresenter->__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
218         {
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.");
222
223                 r = pSliderPresenter->__pSliderOverlay->Construct();
224                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
225         }
226
227         return pSliderPresenter;
228
229 CATCH:
230         delete pSliderPresenter;
231         pSliderPresenter = null;
232
233         return null;
234 }
235
236 result
237 _SliderPresenter::Resize(void)
238 {
239         result r = E_SUCCESS;
240
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;
247         float offset = 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;
254
255         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
256
257         if (__isResourceLoaded == false)
258         {
259                 r = LoadBitmap();
260                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
261                 __isResourceLoaded = true;
262
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));
265
266                 __pFont = __pSlider->GetFallbackFont();
267                 r = GetLastResult();
268                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
269
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));
272
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));
275
276                 __handleTextPressedColor = __handleTextColor;
277                 __handleTextHighlightedColor = __handleTextColor;
278
279         }
280
281
282         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);
283         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
284
285         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconWidth);
286         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
287
288         r = GET_SHAPE_CONFIG(SLIDER::BAR_OFFSET, orientation, __barOffset);
289         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
290
291         if (!__isCustomHandle)
292         {
293                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
294                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
295
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));
298
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));
301         }
302         __rect = FloatRectangle(0.0f, 0.0f, __pSlider->GetBoundsF().width, __pSlider->GetBoundsF().height);
303
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));
306
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));
309
310         if ((__pSlider->GetIcon(ICON_POSITION_LEFT) != null) || (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null))
311         {
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));
314
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));
317         }
318         else
319         {
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));
322
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));
325         }
326
327         barRightMargin = barLeftMargin;
328
329         if (__rect.width < minimumWidth)
330         {
331                 __rect.width = minimumWidth;
332         }
333
334         r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_HEIGHT, orientation, minimumHeight);
335         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
336
337         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
338         {
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));
341
342                 minimumHeight = minimumHeight + titleHeight;
343         }
344
345         if (__rect.height < minimumHeight )
346         {
347                 __rect.height = minimumHeight;
348         }
349
350         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
351         {
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);
356         }
357         else
358         {
359                 __touchRect = FloatRectangle(barLeftMargin - offset, (__rect.height - __handleRect.height) / 2.0f,
360                                                                 (__rect.width - (barLeftMargin + barRightMargin)) + (2.0f * offset), __handleRect.height);
361         }
362
363         if (__pSlider->GetIcon(ICON_POSITION_LEFT) != null)
364         {
365                 __touchRect.x = __touchRect.x + iconWidth + iconRightMargin;
366                 __touchRect.width = __touchRect.width - (iconWidth + iconRightMargin);
367         }
368
369         if (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null)
370         {
371                 __touchRect.width = __touchRect.width - (iconWidth + iconSideMargin + iconRightMargin);
372         }
373
374         __barBgRect = FloatRectangle(__touchRect.x + offset, __touchRect.y +
375                                                         ((__handleRect.height - barHeight) / 2.0f), __touchRect.width - (2.0f * offset), barHeight);
376
377         Rectangle absBounds = __pSlider->GetAbsoluteBounds();
378         FloatRectangle absBoundsFloat(absBounds.x, absBounds.y, absBounds.width, absBounds.height);
379         __pSliderOverlay->SetSliderRect(absBoundsFloat, __touchRect);
380
381         return r;
382 }
383
384 result
385 _SliderPresenter::LoadBitmap(void)
386 {
387         result r = E_SUCCESS;
388
389         int opacity = 0;
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;
400
401         r = GET_COLOR_CONFIG(SLIDER::BG_OTHERS_NORMAL, __currentBgColor);
402         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
403
404         r = GET_COLOR_CONFIG(SLIDER::BG_DEFAULT_NORMAL, __currentGrpStyleNoneColor);
405         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
406
407         r = GET_COLOR_CONFIG(SLIDER::BAR_NORMAL, __currentBarColor);
408         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
409
410         r = GET_COLOR_CONFIG(SLIDER::BAR_BG_NORMAL, __currentBarBgColor);
411         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
412
413         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_NORMAL, handleNormalColor);
414         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
415
416         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_PRESSED, handlePressedColor);
417         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
418
419         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_DISABLED, handleDisabledColor);
420         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
421
422         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_HIGHLIGHTED, handleHighlightedColor);
423         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
424
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.");
428
429         __pBgTopBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
430         r = GetLastResult();
431         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
432
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));
435
436
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));
440
441         __pBgMiddleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
442         r = GetLastResult();
443         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
444
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));
447
448
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));
452
453         __pBgBottomBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
454         r = GetLastResult();
455         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
456
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));
459
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));
463
464         __pBgSingleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
465         r = GetLastResult();
466         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
467
468         __pBgGrpStyleNoneBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentGrpStyleNoneColor);
469         r = GetLastResult();
470         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
471
472
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));
475
476         opacity = __currentBgColor.GetAlpha();
477
478         __pBgTopBitmap->SetAlphaConstant(opacity);
479         __pBgMiddleBitmap->SetAlphaConstant(opacity);
480         __pBgBottomBitmap->SetAlphaConstant(opacity);
481         __pBgSingleBitmap->SetAlphaConstant(opacity);
482         __pBgGrpStyleNoneBitmap->SetAlphaConstant(__currentGrpStyleNoneColor.GetAlpha());
483
484
485         __pBgTopEffectBitmap->SetAlphaConstant(opacity);
486         __pBgMiddleEffectBitmap->SetAlphaConstant(opacity);
487         __pBgBottomEffectBitmap->SetAlphaConstant(opacity);
488         __pBgSingleEffectBitmap->SetAlphaConstant(opacity);
489
490
491         // Bar Resources
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));
494
495         __pBarBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBarBgColor);
496         r = GetLastResult();
497         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
498
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));
501
502         __pBarColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBarColor);
503         r = GetLastResult();
504         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
505
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));
508
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));
511
512         opacity = __currentBarColor.GetAlpha();
513         __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
514
515         // Handle Resources
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));
518
519         if (__pHandleNormalBitmap == null)
520         {
521                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleNormalColor);
522                 r = GetLastResult();
523                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
524
525                 __pHandleNormalBitmap = pReplacementBitmap;
526         }
527
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));
530
531         if (__pHandlePressedBitmap == null)
532         {
533                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handlePressedColor);
534                 r = GetLastResult();
535                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
536
537                 __pHandlePressedBitmap = pReplacementBitmap;
538         }
539
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));
542
543         if (__pHandleDisabledBitmap == null)
544         {
545                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDisabledBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleDisabledColor);
546                 r = GetLastResult();
547                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
548
549                 __pHandleDisabledBitmap = pReplacementBitmap;
550         }
551
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));
554
555         if (__pHandleHighlightedBitmap == null)
556         {
557                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleHighlightedColor);
558                 r = GetLastResult();
559                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
560
561                 __pHandleHighlightedBitmap = pReplacementBitmap;
562         }
563
564         if (__pHandleNormalEffectBitmap == null)
565         {
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));
568
569                 __pHandleNormalEffectBitmap = pBitmap;
570         }
571
572         if (__pHandlePressedEffectBitmap == null)
573         {
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));
576
577                 __pHandlePressedEffectBitmap = pBitmap;
578         }
579
580         if (__pHandleDisabledEffectBitmap == null)
581         {
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));
584
585                 __pHandleDisabledEffectBitmap = pBitmap;
586         }
587
588         if (__pHandleHighlightedEffectBitmap == null)
589         {
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));
592
593                 __pHandleHighlightedEffectBitmap = pBitmap;
594         }
595
596         delete pNormalBitmap;
597         delete pPressedBitmap;
598         delete pDisabledBitmap;
599         delete pHighlightedBitmap;
600
601         return r;
602
603 CATCH:
604
605         delete pNormalBitmap;
606         delete pPressedBitmap;
607         delete pDisabledBitmap;
608         delete pHighlightedBitmap;
609
610         delete pBitmap;
611
612         delete __pResourceBgTopBitmap;
613         __pResourceBgTopBitmap = null;
614
615         delete __pResourceBgMiddleBitmap;
616         __pResourceBgMiddleBitmap = null;
617
618         delete __pResourceBgBottomBitmap;
619         __pResourceBgBottomBitmap = null;
620
621         delete __pResourceBgSingleBitmap;
622         __pResourceBgSingleBitmap = null;
623
624         delete __pBgTopBitmap;
625         __pBgTopBitmap = null;
626
627         delete __pBgMiddleBitmap;
628         __pBgMiddleBitmap = null;
629
630         delete __pBgBottomBitmap;
631         __pBgBottomBitmap = null;
632
633         delete __pBgSingleBitmap;
634         __pBgSingleBitmap = null;
635
636         delete __pBgGrpStyleNoneBitmap;
637         __pBgGrpStyleNoneBitmap = null;
638
639         delete __pBgTopEffectBitmap;
640         __pBgTopEffectBitmap = null;
641
642         delete __pBgMiddleEffectBitmap;
643         __pBgMiddleEffectBitmap = null;
644
645         delete __pBgBottomEffectBitmap;
646         __pBgBottomEffectBitmap = null;
647
648         delete __pBgSingleEffectBitmap;
649         __pBgSingleEffectBitmap = null;
650
651         delete __pResourceBarBitmap;
652         __pResourceBarBitmap = null;
653
654         delete __pResourceBarBgBitmap;
655         __pResourceBarBgBitmap = null;
656
657         delete __pBarResourceEffectBitmap;
658         __pBarResourceEffectBitmap = null;
659
660         delete __pBarBgResourceEffectBitmap;
661         __pBarBgResourceEffectBitmap = null;
662
663         delete __pBarColorReplacementBitmap;
664         __pBarColorReplacementBitmap = null;
665
666         delete __pBarBgColorReplacementBitmap;
667         __pBarBgColorReplacementBitmap = null;
668
669         delete __pHandleNormalBitmap;
670         __pHandleNormalBitmap = null;
671
672         delete __pHandlePressedBitmap;
673         __pHandlePressedBitmap = null;
674
675         delete __pHandleDisabledBitmap;
676         __pHandleDisabledBitmap = null;
677
678         delete __pHandleHighlightedBitmap;
679         __pHandleHighlightedBitmap = null;
680
681         delete __pHandleNormalEffectBitmap;
682         __pHandleNormalEffectBitmap = null;
683
684         delete __pHandlePressedEffectBitmap;
685         __pHandlePressedEffectBitmap = null;
686
687         delete __pHandleDisabledEffectBitmap;
688         __pHandleDisabledEffectBitmap = null;
689
690         delete __pHandleHighlightedEffectBitmap;
691         __pHandleHighlightedEffectBitmap = null;
692
693         return r;
694 }
695
696 int
697 _SliderPresenter::CalculateSliderValue(float positionX, float offsetX)
698 {
699         int minValue = __pSliderModel->GetMinValue();
700         int maxValue = __pSliderModel->GetMaxValue();
701
702         if (positionX <= __touchRect.x + offsetX)
703         {
704                 __sliderX = 0;
705                 __handleX = 0;
706                 return minValue;
707         }
708
709         if (positionX >= (__touchRect.x + __touchRect.width) - offsetX)
710         {
711                 __sliderX = __barBgRect.width - __handleRect.width - (2.0f * __barOffset);
712                 __handleX = __touchRect.width - __handleRect.width;
713                 return maxValue;
714         }
715
716         if ((maxValue - minValue) == 0)
717         {
718                 return minValue;
719         }
720
721         __sliderX = positionX - (__barBgRect.x + offsetX) - (2.0f * __barOffset);
722         __handleX = positionX - (__touchRect.x + offsetX);
723
724         __handleRect.x = __touchRect.x + __handleX;
725         __handleRect.y = __touchRect.y;
726
727         if (__handleRect.x < __touchRect.x )
728         {
729                 __handleRect.x = __touchRect.x;
730         }
731
732         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
733         {
734                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
735         }
736
737         return minValue + (int) ((float) (__handleX * (maxValue - minValue)) / (float)(__touchRect.width - __handleRect.width) + 0.5); // current value = current width * range / bar bg width
738 }
739
740 result
741 _SliderPresenter::Draw(void)
742 {
743         if (__isNeedToBeUpdated == true)
744         {
745                 Resize();
746         }
747
748         return DrawSlider();
749 }
750
751 result
752 _SliderPresenter::DrawSlider(void)
753 {
754         result r = E_SUCCESS;
755         float sliderY = 0.0f;
756         FloatRectangle titleTextBounds;
757
758         int style = __pSlider->GetStyle();
759
760         Canvas* pCanvas = __pSlider->GetCanvasN();
761         SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
762
763         if (__isNeedToBeUpdated == true)
764         {
765                 r = DrawBackground(*pCanvas);
766                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
767         }
768
769         if (style & _SLIDER_STYLE_TITLE_TEXT)
770         {
771                 titleTextBounds = GetTitleTextBounds();
772                 sliderY = titleTextBounds.y + titleTextBounds.height;
773         }
774
775         if(sliderY < __rect.height)
776         {
777                 r = DrawSliderBar(*pCanvas);
778                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
779
780                 if (__isSliderPressed == true)
781                 {
782                         if (style & _SLIDER_STYLE_OVERLAY)
783                         {
784                                 r = DrawSliderOverlay(__pSliderModel->GetValue());
785                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
786                         }
787                         else
788                         {
789                                 r = DrawSliderBarNumber(__pSliderModel->GetValue());
790                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
791                         }
792                 }
793                 else
794                 {
795                         r = DrawSliderBarNumber(__pSliderModel->GetValue());
796                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
797                 }
798         }
799
800         if (__isNeedToBeUpdated == true)
801         {
802                 if (style & _SLIDER_STYLE_TITLE_TEXT)
803                 {
804                         r = DrawTitleText(*pCanvas);
805                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
806                 }
807
808                 r = DrawIcon(*pCanvas);
809                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
810
811                 __isNeedToBeUpdated = false;
812         }
813
814         delete pCanvas;
815         pCanvas = null;
816
817         return r;
818
819 CATCH:
820         delete pCanvas;
821         pCanvas = null;
822
823         return r;
824 }
825
826 result
827 _SliderPresenter::DrawBackground(Canvas& canvas)
828 {
829         Bitmap* pBgBitmap = null;
830         Bitmap* pBgEffectBitmap = null;
831         Bitmap* pBgGroupBitmap = null;
832
833         int opacity = 0;
834         result r = E_SUCCESS;
835         canvas.SetBackgroundColor(Color(0x00000000));
836         canvas.Clear();
837
838         if (!(__pSlider->GetStyle() & _SLIDER_STYLE_NO_BG))
839         {
840                 switch (__groupStyle)
841                 {
842                 case GROUP_STYLE_TOP:
843                         pBgEffectBitmap = __pBgTopEffectBitmap;
844                         if (__pSlider->GetColor() == __currentBgColor)
845                         {
846                                 pBgBitmap = __pBgTopBitmap;
847                         }
848                         else
849                         {
850                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
851                                 r = GetLastResult();
852                                 if (!pBgGroupBitmap)
853                                 {
854                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
855                                                 return r;
856                                 }
857                                 else
858                                 {
859                                         delete __pBgTopBitmap;
860                                         __pBgTopBitmap = null;
861                                         __pBgTopBitmap = pBgGroupBitmap;
862
863                                         pBgBitmap = pBgGroupBitmap;
864                                         opacity = __pSlider->GetColor().GetAlpha();
865                                         pBgBitmap->SetAlphaConstant(opacity);
866                                         __currentBgColor = __pSlider->GetColor();
867                                 }
868                         }
869                         break;
870
871                 case GROUP_STYLE_MIDDLE:
872                         pBgEffectBitmap = __pBgMiddleEffectBitmap;
873                         if (__pSlider->GetColor() == __currentBgColor)
874                         {
875                                 pBgBitmap = __pBgMiddleBitmap;
876                         }
877                         else
878                         {
879                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
880                                 r = GetLastResult();
881                                 if (!pBgGroupBitmap)
882                                 {
883                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
884                                                 return r;
885                                 }
886                                 else
887                                 {
888                                         delete __pBgMiddleBitmap;
889                                         __pBgMiddleBitmap = null;
890                                         __pBgMiddleBitmap = pBgGroupBitmap;
891
892                                         pBgBitmap = __pBgMiddleBitmap;
893                                         opacity = __pSlider->GetColor().GetAlpha();
894                                         pBgBitmap->SetAlphaConstant(opacity);
895                                         __currentBgColor = __pSlider->GetColor();
896                                 }
897                         }
898                         break;
899
900                 case GROUP_STYLE_BOTTOM:
901                         pBgEffectBitmap = __pBgBottomEffectBitmap;
902                         if (__pSlider->GetColor() == __currentBgColor)
903                         {
904                                 pBgBitmap = __pBgBottomBitmap;
905                         }
906                         else
907                         {
908                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
909                                 r = GetLastResult();
910                                 if (!pBgGroupBitmap)
911                                 {
912                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
913                                                 return r;
914                                 }
915                                 else
916                                 {
917                                         delete __pBgBottomBitmap;
918                                         __pBgBottomBitmap = null;
919                                         __pBgBottomBitmap = pBgGroupBitmap;
920
921                                         pBgBitmap = __pBgBottomBitmap;
922                                         opacity = __pSlider->GetColor().GetAlpha();
923                                         pBgBitmap->SetAlphaConstant(opacity);
924                                         __currentBgColor = __pSlider->GetColor();
925                                 }
926                         }
927                         break;
928
929                 case GROUP_STYLE_SINGLE:
930                         pBgEffectBitmap = __pBgSingleEffectBitmap;
931                         if (__pSlider->GetColor() == __currentBgColor)
932                         {
933                                 pBgBitmap = __pBgSingleBitmap;
934                         }
935                         else
936                         {
937                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
938                                 r = GetLastResult();
939                                 if (!pBgGroupBitmap)
940                                 {
941                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
942                                                 return r;
943                                 }
944                                 else
945                                 {
946
947                                         delete __pBgSingleBitmap;
948                                         __pBgSingleBitmap = null;
949                                         __pBgSingleBitmap = pBgGroupBitmap;
950
951                                         pBgBitmap = __pBgSingleBitmap;
952                                         opacity = __pSlider->GetColor().GetAlpha();
953                                         pBgBitmap->SetAlphaConstant(opacity);
954                                         __currentBgColor = __pSlider->GetColor();
955                                 }
956                         }
957                         break;
958
959                 case GROUP_STYLE_NONE:
960                 //fall through
961                 default:
962                         if (__pSlider->GetColor() == __currentBgColor)
963                         {
964                                 pBgBitmap = __pBgGrpStyleNoneBitmap;
965                         }
966                         else
967                         {
968                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
969                                 r = GetLastResult();
970                                 if (!pBgGroupBitmap)
971                                 {
972                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
973                                                 return r;
974                                 }
975                                 else
976                                 {
977                                         delete __pBgGrpStyleNoneBitmap;
978                                         __pBgGrpStyleNoneBitmap = null;
979                                         __pBgGrpStyleNoneBitmap = pBgGroupBitmap;
980
981                                         pBgBitmap = __pBgGrpStyleNoneBitmap;
982                                         opacity = __pSlider->GetColor().GetAlpha();
983                                         pBgBitmap->SetAlphaConstant(opacity);
984                                         __currentBgColor = __pSlider->GetColor();
985                                 }
986                         }
987                         break;
988                 }
989
990                 DrawBitmap(canvas, __rect, pBgBitmap);
991                 if ( __groupStyle != GROUP_STYLE_NONE)
992                 {
993                         DrawBitmap(canvas, __rect, pBgEffectBitmap);
994                 }
995         }
996         return E_SUCCESS;
997 }
998
999 result
1000 _SliderPresenter::DrawSliderBar(Canvas& canvas)
1001 {
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;
1007         int opacity = 0;
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;
1014
1015         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1016
1017         r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
1018         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1019
1020         if (__pSlider->IsEnabled() == false)  // disabled
1021         {
1022                 pHandleBitmap = __pHandleDisabledBitmap;
1023                 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
1024                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_DISABLED);
1025                 if(__isSliderPressed == true)
1026                 {
1027                         __isSliderPressed = false;
1028                         if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1029                         {
1030                                 __pSliderOverlay->Close();
1031                         }
1032                 }
1033         }
1034         else if (__isSliderPressed == true)   // pressed
1035         {
1036                 pHandleBitmap = __pHandlePressedBitmap;
1037                 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1038                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_PRESSED);
1039         }
1040         else if (__pSlider->IsFocused() == true)
1041         {
1042                 pHandleBitmap = __pHandleHighlightedBitmap;
1043                 pHandleEffectBitmap = __pHandleHighlightedEffectBitmap;
1044                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_HIGHLIGHTED);
1045         }
1046         else //(__isSliderPressed == false)     // normal state
1047         {
1048                 pHandleBitmap = __pHandleNormalBitmap;
1049                 pHandleEffectBitmap = __pHandleNormalEffectBitmap;
1050                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_NORMAL);
1051         }
1052
1053         int minValue = __pSliderModel->GetMinValue();
1054         int maxValue = __pSliderModel->GetMaxValue();
1055
1056         __barRect = FloatRectangle(__barBgRect.x + __barOffset, __barBgRect.y, __sliderX, __barBgRect.height);
1057
1058         if (__isSliderPressed == false && (maxValue - minValue) != 0)
1059         {
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);
1062         }
1063
1064         if (__pSlider->GetBarBackgroundColor() != __currentBarBgColor)
1065         {
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));
1069
1070                 delete __pBarBgColorReplacementBitmap;
1071                 __pBarBgColorReplacementBitmap = null;
1072
1073                 __pBarBgColorReplacementBitmap = pReplacementBitmap;
1074                 __currentBarBgColor = __pSlider->GetBarBackgroundColor();
1075         }
1076
1077         if (__pSlider->GetBarColor() != __currentBarColor)
1078         {
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));
1082
1083                 delete __pBarColorReplacementBitmap;
1084                 __pBarColorReplacementBitmap = null;
1085
1086                 __pBarColorReplacementBitmap = pReplacementBitmap;
1087                 __currentBarColor = __pSlider->GetBarColor();
1088         }
1089
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.
1092
1093         if (__pSlider->IsEnabled() == false)  // disabled
1094         {
1095                 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1096                 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1097
1098                 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1099         }
1100         else
1101         {
1102                 opacity = __pSlider->GetBarColor().GetAlpha();
1103                 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1104         }
1105
1106         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_BG_NORMAL);
1107         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1108         if (isCustomBarBitmap == false)
1109         {
1110             DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1111         }
1112
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)
1116         {
1117             DrawBitmap(canvas, FloatRectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarResourceEffectBitmap);
1118         }
1119
1120         __handleRect.x = __touchRect.x + __handleX;
1121         __handleRect.y = __touchRect.y;
1122
1123         if (__handleRect.x < __touchRect.x )
1124         {
1125                 __handleRect.x = __touchRect.x;
1126         }
1127
1128         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1129         {
1130                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1131         }
1132
1133         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1134         r = GetLastResult();
1135         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1136
1137         pHandleCanvas->SetBackgroundColor(0x00000000);
1138         pHandleCanvas->Clear();
1139
1140         if (pHandleEffectBitmap != null) // drawing the default bitmap
1141         {
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)
1145                 {
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));
1148                 }
1149         }
1150         else
1151         {
1152                 bitmapWidth = pHandleBitmap->GetWidth();
1153                 bitmapHeight = pHandleBitmap->GetHeight();
1154
1155                 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHandleBitmap) == false)
1156                 {
1157                         // to clip the center portion of the larger bitmap.
1158                         if( bitmapWidth > __handleRect.width )
1159                         {
1160                                 bitmapPositionX = (bitmapWidth / 2.0f) - (__handleRect.width / 2.0f);
1161                                 bitmapWidth = __handleRect.width;
1162                         }
1163
1164                         if( bitmapHeight > __handleRect.height )
1165                         {
1166                                 bitmapPositionY = (bitmapHeight / 2.0f) - (__handleRect.height / 2.0f);
1167                                 bitmapHeight = __handleRect.height;
1168                         }
1169
1170                         r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap, FloatRectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1171                 }
1172                 else
1173                 {
1174                         r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap);
1175                 }
1176                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1177         }
1178
1179         r = __pSlider->UpdateHandle(__handleRect);
1180         if (r != E_SUCCESS)
1181         {
1182                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1183         }
1184
1185         delete pHandleCanvas;
1186         pHandleCanvas = null;
1187
1188         return r;
1189
1190 CATCH:
1191         delete pHandleCanvas;
1192         pHandleCanvas = null;
1193
1194         return r;
1195 }
1196
1197 result
1198 _SliderPresenter::DrawSliderBarNumber(int value)
1199 {
1200         result r = E_SUCCESS;
1201         int handleNumberSize = 0;
1202         Color textColor;
1203         String text;
1204         int valueLength = 0;
1205         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1206
1207         if (__pSlider->IsEnabled() == false)  // disabled
1208         {
1209                 textColor = __handleTextDisabledColor;
1210         }
1211         else if (__pSlider->IsFocused() == true)
1212         {
1213                 textColor = __handleTextHighlightedColor;
1214         }
1215         else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1216         {
1217                 if(!__isCustomPressedTextColor)
1218                 {
1219                         r = GET_COLOR_CONFIG(SLIDER::OVERLAY_TEXT_NORMAL, __handleTextPressedColor);
1220                         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1221                 }
1222                 textColor = __handleTextPressedColor;
1223         }
1224         else
1225         {
1226                 textColor = __handleTextColor;
1227         }
1228
1229         FloatDimension textDim(0.0f, 0.0f);
1230         text.Append(value);
1231         valueLength = text.GetLength();
1232
1233         if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1234         {
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));
1237         }
1238         else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1239         {
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));
1242         }
1243         else
1244         {
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));
1247         }
1248
1249         (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1250
1251         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1252         r = GetLastResult();
1253         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1254
1255         pHandleCanvas->SetFont(*__pFont);
1256         __pFont->GetTextExtent(text, valueLength, textDim);
1257
1258         FloatPoint textPoint;
1259         textPoint.x = (__handleRect.width - textDim.width) / 2.0f;
1260         textPoint.y = (__handleRect.height - textDim.height) / 2.0f;
1261
1262         pHandleCanvas->SetForegroundColor(textColor);
1263         pHandleCanvas->DrawText(textPoint, text);
1264
1265         delete pHandleCanvas;
1266         pHandleCanvas = null;
1267
1268         return r;
1269 }
1270
1271 result
1272 _SliderPresenter::DrawTitleText(Canvas& canvas)
1273 {
1274         result r = E_SUCCESS;
1275
1276         TextSimple* pSimpleTitleText = null;
1277         int titleTextSize = 0;
1278         int titleLength = 0;
1279         FloatRectangle titleTextBounds;
1280         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1281
1282         titleLength = __pSlider->GetTitleText().GetLength();
1283         SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1284
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));
1287
1288         (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1289
1290         titleTextBounds = GetTitleTextBounds();
1291
1292         if (__pTitleTextObject == null)
1293         {
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();
1297         }
1298
1299         pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1300
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();
1308
1309         __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1310         __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1311         __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1312
1313         return r;
1314 }
1315
1316 result
1317 _SliderPresenter::DrawIcon(Canvas& canvas)
1318 {
1319         result r = E_SUCCESS;
1320
1321         Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1322         Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1323
1324         if (pLeftBitmap != null)
1325         {
1326                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1327                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1328         }
1329
1330         if (pRightBitmap != null)
1331         {
1332                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1333                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1334         }
1335
1336         return r;
1337 }
1338
1339 result
1340 _SliderPresenter::DrawSliderOverlay(int value)
1341 {
1342         result r = E_SUCCESS;
1343
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));
1348
1349         r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1350         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1351
1352         return r;
1353 }
1354
1355 result
1356 _SliderPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
1357 {
1358         result r = E_SUCCESS;
1359
1360         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
1361         {
1362                 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1363                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1364         }
1365         else
1366         {
1367                 r = canvas.DrawBitmap(bounds, *pBitmap);
1368                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1369         }
1370         return r;
1371 }
1372
1373 FloatRectangle
1374 _SliderPresenter::GetTitleTextBounds(void) const
1375 {
1376         FloatRectangle titleTextBounds;
1377         float topMargin = 0.0f;
1378
1379         result r = E_SUCCESS;
1380         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1381
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));
1384
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));
1387
1388         titleTextBounds.y = topMargin;
1389
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));
1392
1393         titleTextBounds.width = __pSlider->GetBoundsF().width - titleTextBounds.x;
1394
1395         return titleTextBounds;
1396 }
1397
1398 FloatRectangle
1399 _SliderPresenter::GetTouchBounds(void) const
1400 {
1401         return __touchRect;
1402 }
1403
1404 FloatRectangle
1405 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1406 {
1407         result r = E_SUCCESS;
1408
1409         FloatRectangle iconBounds;
1410         float iconSideMargin = 0.0f;
1411         float barHeight = 0.0f;
1412
1413         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1414
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));
1417
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));
1420
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));
1423
1424         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1425         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1426
1427         iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1428
1429         if (iconPosition == ICON_POSITION_LEFT)
1430         {
1431                 iconBounds.x = iconSideMargin;
1432         }
1433         else
1434         {
1435                 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1436         }
1437
1438         return iconBounds;
1439 }
1440
1441 bool
1442 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1443 {
1444         if (__pSlider != &source)
1445         {
1446                 return false;
1447         }
1448
1449         if (__pSlideTimer == null)
1450         {
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.");
1453
1454                 result r = __pSlideTimer->Construct(*this);
1455                 if (r != E_SUCCESS)
1456                 {
1457                         delete __pSlideTimer;
1458                         __pSlideTimer = null;
1459
1460                         return true;
1461                 }
1462         }
1463
1464         FloatPoint point = touchinfo.GetCurrentPosition();
1465
1466         if (__handleRect.Contains(point) == true)
1467         {
1468                 __isSliderPressed = true;
1469
1470                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1471
1472                 __pSliderModel->SetValue(candidateValue);
1473                 __pSlider->SetAccessibilityElementValue();
1474
1475                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1476                 {
1477                         __pSliderOverlay->Open(false);
1478                 }
1479
1480                 __pSlider->Invalidate();
1481         }
1482
1483         return __isSliderPressed;
1484 }
1485
1486 bool
1487 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1488 {
1489         if (__pSlider != &source)
1490         {
1491                 return false;
1492         }
1493
1494         if (__pSlideTimer != null)
1495         {
1496                 __isTimerRunning = false;
1497                 __pSlideTimer->Cancel();
1498         }
1499
1500         FloatPoint point = touchinfo.GetCurrentPosition();
1501
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.");
1504
1505         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1506         {
1507                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1508         }
1509
1510         if (__isSliderPressed == true)
1511         {
1512                 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP);
1513                 __isSliderPressed = false;
1514
1515                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1516
1517                 __pSliderModel->SetValue(candidateValue);
1518                 __pSlider->SetAccessibilityElementValue();
1519                 __pSlider->Invalidate();
1520
1521                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1522                 {
1523                         __pSliderOverlay->Close();
1524                 }
1525
1526                 // Adjustment Event Fire
1527                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1528                 if (pAdjustmentEvent != null)
1529                 {
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));
1533
1534                         pAdjustmentEvent->Fire(*pEventArg);
1535                 }
1536                 return true;
1537         }
1538
1539         return false;
1540 }
1541
1542 bool
1543 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1544 {
1545         if (__pSlider != &source)
1546         {
1547                 return false;
1548         }
1549
1550         if (__isSliderPressed == false)
1551         {
1552                 return false;
1553         }
1554
1555         FloatPoint point = touchinfo.GetCurrentPosition();
1556
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.");
1559
1560         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1561         {
1562                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1563         }
1564
1565         __currentPosition.x = point.x;
1566         __currentPosition.y = point.y;
1567
1568         if ( __isTimerRunning == false )
1569         {
1570                 __isTimerRunning = true;
1571                 __pSlideTimer->Start(__timerValue);
1572         }
1573
1574         return true;
1575 }
1576
1577 void
1578 _SliderPresenter::OnTimerExpired(Timer& timer)
1579 {
1580         __isTimerRunning = false;
1581
1582         float handleHalfWidth = __handleRect.width / 2;
1583         int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1584
1585         __pSliderModel->SetValue(candidateValue);
1586         __pSlider->SetAccessibilityElementValue();
1587
1588         __pSlider->Draw();
1589         __pSlider->Show();
1590
1591         // Slider Event Fire
1592         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1593         if (pSliderEvent != null)
1594         {
1595                 Tizen::Base::Runtime::IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1596
1597                 if( pEventArg == null)
1598                 {
1599                         return;
1600                 }
1601
1602                 pSliderEvent->Fire(*pEventArg);
1603         }
1604
1605         return;
1606 }
1607
1608 bool
1609 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1610 {
1611         return OnTouchReleased(source, touchinfo);
1612 }
1613
1614 void
1615 _SliderPresenter::OnBoundsChanged(void)
1616 {
1617         __isNeedToBeUpdated = true;
1618         Resize();
1619
1620         return;
1621 }
1622
1623 void
1624 _SliderPresenter::OnFontChanged(Font* pFont)
1625 {
1626         __pFont = pFont;
1627         __isNeedToBeUpdated = true;
1628
1629         if(__pSliderOverlay != null)
1630                 __pSliderOverlay->SetFont(pFont);
1631
1632         return;
1633 }
1634
1635 void
1636 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1637 {
1638         style = FONT_STYLE_BOLD;
1639         size = __fontSize;
1640         return;
1641 }
1642
1643 void
1644 _SliderPresenter::SetMinValue(int minValue)
1645 {
1646         __pSliderModel->SetMinValue(minValue);
1647
1648         if (__pSliderModel->GetValue() < minValue)
1649         {
1650                 __pSliderModel->SetValue(minValue);
1651         }
1652
1653         return;
1654 }
1655
1656 void
1657 _SliderPresenter::SetMaxValue(int maxValue)
1658 {
1659         __pSliderModel->SetMaxValue(maxValue);
1660
1661         if (__pSliderModel->GetValue() > maxValue)
1662         {
1663                 __pSliderModel->SetValue(maxValue);
1664         }
1665
1666         return;
1667 }
1668
1669 int
1670 _SliderPresenter::GetMinValue(void) const
1671 {
1672         return __pSliderModel->GetMinValue();
1673 }
1674
1675 int
1676 _SliderPresenter::GetMaxValue(void) const
1677 {
1678         return __pSliderModel->GetMaxValue();
1679 }
1680
1681 void
1682 _SliderPresenter::SetValue(int value)
1683 {
1684         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1685
1686         int minValue = __pSliderModel->GetMinValue();
1687         int maxValue = __pSliderModel->GetMaxValue();
1688
1689         if (value > maxValue)
1690         {
1691                 value = maxValue;
1692         }
1693         else if (value < minValue)
1694         {
1695                 value = minValue;
1696         }
1697
1698         __pSliderModel->SetValue(value);
1699
1700         return;
1701 }
1702
1703 int
1704 _SliderPresenter::GetValue(void) const
1705 {
1706         return __pSliderModel->GetValue();
1707 }
1708
1709 void
1710 _SliderPresenter::SetNeedUpdate(void)
1711 {
1712         __isNeedToBeUpdated = true;
1713         return;
1714 }
1715
1716 void
1717 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1718 {
1719         __groupStyle = groupStyle;
1720         return;
1721 }
1722
1723 result
1724 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1725 {
1726         Bitmap* pThumbBitmap = null;
1727         result r = E_SUCCESS;
1728
1729         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1730
1731         r = GetLastResult();
1732         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1733
1734         switch (status)
1735         {
1736         case SLIDER_THUMB_STATUS_PRESSED:
1737
1738                 delete __pHandlePressedEffectBitmap;
1739                 __pHandlePressedEffectBitmap = null;
1740
1741                 delete __pHandlePressedBitmap;
1742                 __pHandlePressedBitmap = pThumbBitmap;
1743                 break;
1744
1745         case SLIDER_THUMB_STATUS_DISABLED:
1746
1747                 delete __pHandleDisabledEffectBitmap;
1748                 __pHandleDisabledEffectBitmap = null;
1749
1750                 delete __pHandleDisabledBitmap;
1751                 __pHandleDisabledBitmap = pThumbBitmap;
1752                 break;
1753
1754         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1755
1756                 delete __pHandleHighlightedEffectBitmap;
1757                 __pHandleHighlightedEffectBitmap = null;
1758
1759                 delete __pHandleHighlightedEffectBitmap;
1760                 __pHandleHighlightedEffectBitmap = pThumbBitmap;
1761                 break;
1762
1763         case SLIDER_THUMB_STATUS_NORMAL:
1764         // fall through
1765         default:
1766
1767                 delete __pHandleNormalEffectBitmap;
1768                 __pHandleNormalEffectBitmap = null;
1769
1770                 delete __pHandleNormalBitmap;
1771                 __pHandleNormalBitmap = pThumbBitmap;
1772
1773                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1774                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1775
1776                 _VisualElement* pHandle = __pSlider->GetHandle();
1777                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1778
1779                 __isCustomHandle = true;
1780                 break;
1781
1782         }
1783
1784         Resize();
1785         return r;
1786 }
1787
1788 void
1789 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1790 {
1791         switch (status)
1792         {
1793         case SLIDER_THUMB_STATUS_PRESSED:
1794                 __handleTextPressedColor = color;
1795                 __isCustomPressedTextColor = true;
1796                 break;
1797
1798         case SLIDER_THUMB_STATUS_DISABLED:
1799                 __handleTextDisabledColor = color;
1800                 break;
1801
1802         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1803                 __handleTextHighlightedColor = color;
1804                 break;
1805
1806         case SLIDER_THUMB_STATUS_NORMAL:
1807         // fall through
1808         default:
1809                 __handleTextColor = color;
1810                 break;
1811         }
1812
1813         return;
1814 }
1815
1816 }}} // Tizen::Ui::Controls