Revert " modify license, permission and remove ^M char"
[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         , __prevSliderValue(0)
87         , __isSliderPressed(false)
88         , __isNeedToBeUpdated(true)
89         , __isResourceLoaded(false)
90         , __isCustomHandle(false)
91         , __isCustomPressedTextColor(false)
92         , __groupStyle(GROUP_STYLE_NONE)
93         , __fontSize(0.0f)
94         , __barOffset(0.0f)
95         , __isTimerRunning(false)
96         , __currentPosition(0.0f, 0.0f)
97 {
98 }
99
100 _SliderPresenter::~_SliderPresenter(void)
101 {
102         delete __pSliderModel;
103         __pSliderModel = null;
104
105         delete __pSliderOverlay;
106         __pSliderOverlay = null;
107
108         if (__pSlideTimer != null)
109         {
110                 __pSlideTimer->Cancel();
111                 delete __pSlideTimer;
112                 __pSlideTimer = null;
113         }
114
115         delete __pResourceBgTopBitmap;
116         __pResourceBgTopBitmap = null;
117
118         delete __pResourceBgMiddleBitmap;
119         __pResourceBgMiddleBitmap = null;
120
121         delete __pResourceBgBottomBitmap;
122         __pResourceBgBottomBitmap = null;
123
124         delete __pResourceBgSingleBitmap;
125         __pResourceBgSingleBitmap = null;
126
127         delete __pBgTopBitmap;
128         __pBgTopBitmap = null;
129
130         delete __pBgMiddleBitmap;
131         __pBgMiddleBitmap = null;
132
133         delete __pBgBottomBitmap;
134         __pBgBottomBitmap = null;
135
136         delete __pBgSingleBitmap;
137         __pBgSingleBitmap = null;
138
139         delete __pBgGrpStyleNoneBitmap;
140         __pBgGrpStyleNoneBitmap = null;
141
142         delete __pBgTopEffectBitmap;
143         __pBgTopEffectBitmap = null;
144
145         delete __pBgMiddleEffectBitmap;
146         __pBgMiddleEffectBitmap = null;
147
148         delete __pBgBottomEffectBitmap;
149         __pBgBottomEffectBitmap = null;
150
151         delete __pBgSingleEffectBitmap;
152         __pBgSingleEffectBitmap = null;
153
154         delete __pResourceBarBitmap;
155         __pResourceBarBitmap = null;
156
157         delete __pResourceBarBgBitmap;
158         __pResourceBarBgBitmap = null;
159
160         delete __pBarResourceEffectBitmap;
161         __pBarResourceEffectBitmap = null;
162
163         delete __pBarBgResourceEffectBitmap;
164         __pBarBgResourceEffectBitmap = null;
165
166         delete __pBarColorReplacementBitmap;
167         __pBarColorReplacementBitmap = null;
168
169         delete __pBarBgColorReplacementBitmap;
170         __pBarBgColorReplacementBitmap = null;
171
172         delete __pHandleNormalBitmap;
173         __pHandleNormalBitmap = null;
174
175         delete __pHandlePressedBitmap;
176         __pHandlePressedBitmap = null;
177
178         delete __pHandleDisabledBitmap;
179         __pHandleDisabledBitmap = null;
180
181         delete __pHandleHighlightedBitmap;
182         __pHandleHighlightedBitmap = null;
183
184         delete __pHandleNormalEffectBitmap;
185         __pHandleNormalEffectBitmap = null;
186
187         delete __pHandlePressedEffectBitmap;
188         __pHandlePressedEffectBitmap = null;
189
190         delete __pHandleDisabledEffectBitmap;
191         __pHandleDisabledEffectBitmap = null;
192
193         delete __pHandleHighlightedEffectBitmap;
194         __pHandleHighlightedEffectBitmap = null;
195
196         delete __pTitleTextObject;
197         __pTitleTextObject = null;
198
199 }
200
201 _SliderPresenter*
202 _SliderPresenter::CreateInstanceN(const _Slider& slider)
203 {
204         result r = E_SUCCESS;
205
206         _SliderPresenter* pSliderPresenter = new (std::nothrow) _SliderPresenter;
207         SysTryReturn(NID_UI_CTRL, pSliderPresenter != null, null, E_OUT_OF_MEMORY,
208                                  "[E_OUT_OF_MEMORY] Memory allocation failed.");
209
210         pSliderPresenter->__pSlider = const_cast <_Slider*>(&slider);
211         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSlider != null, , E_SYSTEM,
212                                 "[E_SYSTEM] A system error has occurred. The Slider control core is null.");
213
214         pSliderPresenter->__pSliderModel = new (std::nothrow) _SliderModel;
215         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderModel != null, , E_OUT_OF_MEMORY,
216                                 "[E_OUT_OF_MEMORY] Memory allocation failed.");
217
218         if (pSliderPresenter->__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
219         {
220                 pSliderPresenter->__pSliderOverlay = new (std::nothrow) _SliderOverlay;
221                 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderOverlay != null, , E_OUT_OF_MEMORY,
222                                         "[E_OUT_OF_MEMORY] Memory allocation failed.");
223
224                 r = pSliderPresenter->__pSliderOverlay->Construct();
225                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
226         }
227
228         return pSliderPresenter;
229
230 CATCH:
231         delete pSliderPresenter;
232         pSliderPresenter = null;
233
234         return null;
235 }
236
237 result
238 _SliderPresenter::Resize(void)
239 {
240         result r = E_SUCCESS;
241
242         float barHeight = 0.0f;
243         float barLeftMargin = 0.0f;
244         float barRightMargin = 0.0f;
245         float sliderY = 0.0f;
246         float iconWidth = 0.0f;
247         float iconSideMargin = 0.0f;
248         float offset = 0.0f;
249         float minimumHeight = 0.0f;
250         float minimumWidth = 0.0f;
251         float topMargin = 0.0f;
252         float iconRightMargin = 0.0f;
253         float titleHeight = 0.0f;
254         FloatRectangle titleTextBounds;
255
256         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
257
258         if (__isResourceLoaded == false)
259         {
260                 r = LoadBitmap();
261                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
262                 __isResourceLoaded = true;
263
264                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, __fontSize);
265                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
266
267                 __pFont = __pSlider->GetFallbackFont();
268                 r = GetLastResult();
269                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
270
271                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_NORMAL, __handleTextColor);
272                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
273
274                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_DISABLED, __handleTextDisabledColor);
275                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
276
277                 __handleTextPressedColor = __handleTextColor;
278                 __handleTextHighlightedColor = __handleTextColor;
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_PRESSED, 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_DISABLED, 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_HIGHLIGHTED, 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                 __isNeedToBeUpdated = false;
747         }
748
749         return DrawSlider();
750 }
751
752 result
753 _SliderPresenter::DrawSlider(void)
754 {
755         result r = E_SUCCESS;
756         float sliderY = 0.0f;
757         FloatRectangle titleTextBounds;
758
759         int style = __pSlider->GetStyle();
760
761         Canvas* pCanvas = __pSlider->GetCanvasN();
762         SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
763
764         r = DrawBackground(*pCanvas);
765         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
766
767         if (style & _SLIDER_STYLE_TITLE_TEXT)
768         {
769                 titleTextBounds = GetTitleTextBounds();
770                 sliderY = titleTextBounds.y + titleTextBounds.height;
771         }
772
773         if(sliderY < __rect.height)
774         {
775                 r = DrawSliderBar(*pCanvas);
776                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
777
778                 if (__isSliderPressed == true)
779                 {
780                         if (style & _SLIDER_STYLE_OVERLAY)
781                         {
782                                 r = DrawSliderOverlay(__pSliderModel->GetValue());
783                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
784                         }
785                         else
786                         {
787                                 r = DrawSliderBarNumber(__pSliderModel->GetValue());
788                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
789                         }
790                 }
791                 else
792                 {
793                         r = DrawSliderBarNumber(__pSliderModel->GetValue());
794                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
795                 }
796         }
797
798         if (style & _SLIDER_STYLE_TITLE_TEXT)
799         {
800                 r = DrawTitleText(*pCanvas);
801                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
802         }
803
804         r = DrawIcon(*pCanvas);
805         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
806
807         delete pCanvas;
808         pCanvas = null;
809
810         return r;
811
812 CATCH:
813         delete pCanvas;
814         pCanvas = null;
815
816         return r;
817 }
818
819 result
820 _SliderPresenter::DrawBackground(Canvas& canvas)
821 {
822         Bitmap* pBgBitmap = null;
823         Bitmap* pBgEffectBitmap = null;
824         Bitmap* pBgGroupBitmap = null;
825
826         int opacity = 0;
827         result r = E_SUCCESS;
828         canvas.SetBackgroundColor(Color(0x00000000));
829         canvas.Clear();
830
831         if (!(__pSlider->GetStyle() & _SLIDER_STYLE_NO_BG))
832         {
833                 switch (__groupStyle)
834                 {
835                 case GROUP_STYLE_TOP:
836                         pBgEffectBitmap = __pBgTopEffectBitmap;
837                         if (__pSlider->GetColor() == __currentBgColor)
838                         {
839                                 pBgBitmap = __pBgTopBitmap;
840                         }
841                         else
842                         {
843                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
844                                 r = GetLastResult();
845                                 if (!pBgGroupBitmap)
846                                 {
847                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
848                                                 return r;
849                                 }
850                                 else
851                                 {
852                                         delete __pBgTopBitmap;
853                                         __pBgTopBitmap = null;
854                                         __pBgTopBitmap = pBgGroupBitmap;
855
856                                         pBgBitmap = pBgGroupBitmap;
857                                         opacity = __pSlider->GetColor().GetAlpha();
858                                         pBgBitmap->SetAlphaConstant(opacity);
859                                         __currentBgColor = __pSlider->GetColor();
860                                 }
861                         }
862                         break;
863
864                 case GROUP_STYLE_MIDDLE:
865                         pBgEffectBitmap = __pBgMiddleEffectBitmap;
866                         if (__pSlider->GetColor() == __currentBgColor)
867                         {
868                                 pBgBitmap = __pBgMiddleBitmap;
869                         }
870                         else
871                         {
872                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
873                                 r = GetLastResult();
874                                 if (!pBgGroupBitmap)
875                                 {
876                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
877                                                 return r;
878                                 }
879                                 else
880                                 {
881                                         delete __pBgMiddleBitmap;
882                                         __pBgMiddleBitmap = null;
883                                         __pBgMiddleBitmap = pBgGroupBitmap;
884
885                                         pBgBitmap = __pBgMiddleBitmap;
886                                         opacity = __pSlider->GetColor().GetAlpha();
887                                         pBgBitmap->SetAlphaConstant(opacity);
888                                         __currentBgColor = __pSlider->GetColor();
889                                 }
890                         }
891                         break;
892
893                 case GROUP_STYLE_BOTTOM:
894                         pBgEffectBitmap = __pBgBottomEffectBitmap;
895                         if (__pSlider->GetColor() == __currentBgColor)
896                         {
897                                 pBgBitmap = __pBgBottomBitmap;
898                         }
899                         else
900                         {
901                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
902                                 r = GetLastResult();
903                                 if (!pBgGroupBitmap)
904                                 {
905                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
906                                                 return r;
907                                 }
908                                 else
909                                 {
910                                         delete __pBgBottomBitmap;
911                                         __pBgBottomBitmap = null;
912                                         __pBgBottomBitmap = pBgGroupBitmap;
913
914                                         pBgBitmap = __pBgBottomBitmap;
915                                         opacity = __pSlider->GetColor().GetAlpha();
916                                         pBgBitmap->SetAlphaConstant(opacity);
917                                         __currentBgColor = __pSlider->GetColor();
918                                 }
919                         }
920                         break;
921
922                 case GROUP_STYLE_SINGLE:
923                         pBgEffectBitmap = __pBgSingleEffectBitmap;
924                         if (__pSlider->GetColor() == __currentBgColor)
925                         {
926                                 pBgBitmap = __pBgSingleBitmap;
927                         }
928                         else
929                         {
930                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
931                                 r = GetLastResult();
932                                 if (!pBgGroupBitmap)
933                                 {
934                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
935                                                 return r;
936                                 }
937                                 else
938                                 {
939
940                                         delete __pBgSingleBitmap;
941                                         __pBgSingleBitmap = null;
942                                         __pBgSingleBitmap = pBgGroupBitmap;
943
944                                         pBgBitmap = __pBgSingleBitmap;
945                                         opacity = __pSlider->GetColor().GetAlpha();
946                                         pBgBitmap->SetAlphaConstant(opacity);
947                                         __currentBgColor = __pSlider->GetColor();
948                                 }
949                         }
950                         break;
951
952                 case GROUP_STYLE_NONE:
953                 //fall through
954                 default:
955                         if (__pSlider->GetColor() == __currentBgColor)
956                         {
957                                 pBgBitmap = __pBgGrpStyleNoneBitmap;
958                         }
959                         else
960                         {
961                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
962                                 r = GetLastResult();
963                                 if (!pBgGroupBitmap)
964                                 {
965                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
966                                                 return r;
967                                 }
968                                 else
969                                 {
970                                         delete __pBgGrpStyleNoneBitmap;
971                                         __pBgGrpStyleNoneBitmap = null;
972                                         __pBgGrpStyleNoneBitmap = pBgGroupBitmap;
973
974                                         pBgBitmap = __pBgGrpStyleNoneBitmap;
975                                         opacity = __pSlider->GetColor().GetAlpha();
976                                         pBgBitmap->SetAlphaConstant(opacity);
977                                         __currentBgColor = __pSlider->GetColor();
978                                 }
979                         }
980                         break;
981                 }
982
983                 DrawBitmap(canvas, __rect, pBgBitmap);
984                 if ( __groupStyle != GROUP_STYLE_NONE)
985                 {
986                         DrawBitmap(canvas, __rect, pBgEffectBitmap);
987                 }
988         }
989         return E_SUCCESS;
990 }
991
992 void
993 _SliderPresenter::OnChangeLayout(_ControlOrientation orientation)
994 {
995         int minValue = __pSliderModel->GetMinValue();
996         int maxValue = __pSliderModel->GetMaxValue();
997
998         if ( __isSliderPressed == true)
999         {
1000                 __sliderX = ((__barBgRect.width - ( __handleRect.width  + (2.0f * __barOffset))) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1001                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1002                 __pSlider->Invalidate();
1003         }
1004
1005         return;
1006 }
1007
1008
1009 result
1010 _SliderPresenter::DrawSliderBar(Canvas& canvas)
1011 {
1012         result r = E_SUCCESS;
1013         float bitmapHeight = 0.0f;
1014         float bitmapWidth = 0.0f;
1015         float bitmapPositionX = 0.0f;
1016         float bitmapPositionY = 0.0f;
1017         int opacity = 0;
1018         float offset = 0.0f;
1019         Bitmap* pReplacementBitmap = null;
1020         Bitmap* pHandleBitmap = null;
1021         Bitmap* pHandleEffectBitmap = null;
1022         bool isCustomHandleBitmap = false;
1023         bool isCustomBarBitmap = false;
1024
1025         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1026
1027         r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
1028         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1029
1030         if (__pSlider->IsEnabled() == false)  // disabled
1031         {
1032                 pHandleBitmap = __pHandleDisabledBitmap;
1033                 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
1034                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_DISABLED);
1035                 if(__isSliderPressed == true)
1036                 {
1037                         __isSliderPressed = false;
1038                         if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1039                         {
1040                                 __pSliderOverlay->Close();
1041                         }
1042                 }
1043         }
1044         else if (__isSliderPressed == true)   // pressed
1045         {
1046                 pHandleBitmap = __pHandlePressedBitmap;
1047                 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1048                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_PRESSED);
1049         }
1050         else if (__pSlider->IsFocused() == true)
1051         {
1052                 pHandleBitmap = __pHandleHighlightedBitmap;
1053                 pHandleEffectBitmap = __pHandleHighlightedEffectBitmap;
1054                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_HIGHLIGHTED);
1055         }
1056         else //(__isSliderPressed == false)     // normal state
1057         {
1058                 pHandleBitmap = __pHandleNormalBitmap;
1059                 pHandleEffectBitmap = __pHandleNormalEffectBitmap;
1060                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_NORMAL);
1061         }
1062
1063         int minValue = __pSliderModel->GetMinValue();
1064         int maxValue = __pSliderModel->GetMaxValue();
1065
1066         __barRect = FloatRectangle(__barBgRect.x + __barOffset, __barBgRect.y, __sliderX, __barBgRect.height);
1067
1068         if (__isSliderPressed == false && (maxValue - minValue) != 0)
1069         {
1070                 __barRect.width = ((__barBgRect.width - ( __handleRect.width  + (2.0f * __barOffset))) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1071                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1072         }
1073
1074         if (__pSlider->GetBarBackgroundColor() != __currentBarBgColor)
1075         {
1076                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarBackgroundColor());
1077                 r = GetLastResult();
1078                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1079
1080                 delete __pBarBgColorReplacementBitmap;
1081                 __pBarBgColorReplacementBitmap = null;
1082
1083                 __pBarBgColorReplacementBitmap = pReplacementBitmap;
1084                 __currentBarBgColor = __pSlider->GetBarBackgroundColor();
1085         }
1086
1087         if (__pSlider->GetBarColor() != __currentBarColor)
1088         {
1089                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarColor());
1090                 r = GetLastResult();
1091                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1092
1093                 delete __pBarColorReplacementBitmap;
1094                 __pBarColorReplacementBitmap = null;
1095
1096                 __pBarColorReplacementBitmap = pReplacementBitmap;
1097                 __currentBarColor = __pSlider->GetBarColor();
1098         }
1099
1100         // Redrawing twice is required because, when slider is disabled we are applying alpha channel to the bar
1101         // which will show the previously drawn portion.
1102
1103         if (__pSlider->IsEnabled() == false)  // disabled
1104         {
1105                 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1106                 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1107
1108                 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1109         }
1110         else
1111         {
1112                 opacity = __pSlider->GetBarColor().GetAlpha();
1113                 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1114         }
1115
1116         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_BG_NORMAL);
1117         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1118         if (isCustomBarBitmap == false)
1119         {
1120             DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1121         }
1122
1123         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_NORMAL);
1124         DrawBitmap(canvas, FloatRectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarColorReplacementBitmap);
1125         if (isCustomBarBitmap == false)
1126         {
1127             DrawBitmap(canvas, FloatRectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarResourceEffectBitmap);
1128         }
1129
1130         __handleRect.x = __touchRect.x + __handleX;
1131         __handleRect.y = __touchRect.y;
1132
1133         if (__handleRect.x < __touchRect.x )
1134         {
1135                 __handleRect.x = __touchRect.x;
1136         }
1137
1138         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1139         {
1140                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1141         }
1142
1143         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1144         r = GetLastResult();
1145         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1146
1147         pHandleCanvas->SetBackgroundColor(0x00000000);
1148         pHandleCanvas->Clear();
1149
1150         if (pHandleEffectBitmap != null) // drawing the default bitmap
1151         {
1152                 r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleBitmap);
1153                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1154                 if (isCustomHandleBitmap == false)
1155                 {
1156                     r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleEffectBitmap);
1157                     SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1158                 }
1159         }
1160         else
1161         {
1162                 bitmapWidth = pHandleBitmap->GetWidth();
1163                 bitmapHeight = pHandleBitmap->GetHeight();
1164
1165                 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHandleBitmap) == false)
1166                 {
1167                         // to clip the center portion of the larger bitmap.
1168                         if( bitmapWidth > __handleRect.width )
1169                         {
1170                                 bitmapPositionX = (bitmapWidth / 2.0f) - (__handleRect.width / 2.0f);
1171                                 bitmapWidth = __handleRect.width;
1172                         }
1173
1174                         if( bitmapHeight > __handleRect.height )
1175                         {
1176                                 bitmapPositionY = (bitmapHeight / 2.0f) - (__handleRect.height / 2.0f);
1177                                 bitmapHeight = __handleRect.height;
1178                         }
1179
1180                         r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap, FloatRectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1181                 }
1182                 else
1183                 {
1184                         r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap);
1185                 }
1186                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1187         }
1188
1189         r = __pSlider->UpdateHandle(__handleRect);
1190         if (r != E_SUCCESS)
1191         {
1192                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1193         }
1194
1195         delete pHandleCanvas;
1196         pHandleCanvas = null;
1197
1198         return r;
1199
1200 CATCH:
1201         delete pHandleCanvas;
1202         pHandleCanvas = null;
1203
1204         return r;
1205 }
1206
1207 result
1208 _SliderPresenter::DrawSliderBarNumber(int value)
1209 {
1210         result r = E_SUCCESS;
1211         int handleNumberSize = 0;
1212         Color textColor;
1213         String text;
1214         int valueLength = 0;
1215         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1216
1217         if (__pSlider->IsEnabled() == false)  // disabled
1218         {
1219                 textColor = __handleTextDisabledColor;
1220         }
1221         else if (__pSlider->IsFocused() == true)
1222         {
1223                 textColor = __handleTextHighlightedColor;
1224         }
1225         else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1226         {
1227                 if(!__isCustomPressedTextColor)
1228                 {
1229                         r = GET_COLOR_CONFIG(SLIDER::OVERLAY_TEXT_NORMAL, __handleTextPressedColor);
1230                         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1231                 }
1232                 textColor = __handleTextPressedColor;
1233         }
1234         else
1235         {
1236                 textColor = __handleTextColor;
1237         }
1238
1239         FloatDimension textDim(0.0f, 0.0f);
1240         text.Append(value);
1241         valueLength = text.GetLength();
1242
1243         if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1244         {
1245                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_THREE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1246                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1247         }
1248         else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1249         {
1250                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_TWO_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1251                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1252         }
1253         else
1254         {
1255                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1256                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1257         }
1258
1259         (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1260
1261         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1262         r = GetLastResult();
1263         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1264
1265         pHandleCanvas->SetFont(*__pFont);
1266         __pFont->GetTextExtent(text, valueLength, textDim);
1267
1268         FloatPoint textPoint;
1269         textPoint.x = (__handleRect.width - textDim.width) / 2.0f;
1270         textPoint.y = (__handleRect.height - textDim.height) / 2.0f;
1271
1272         pHandleCanvas->SetForegroundColor(textColor);
1273         pHandleCanvas->DrawText(textPoint, text);
1274
1275         delete pHandleCanvas;
1276         pHandleCanvas = null;
1277
1278         return r;
1279 }
1280
1281 result
1282 _SliderPresenter::DrawTitleText(Canvas& canvas)
1283 {
1284         result r = E_SUCCESS;
1285
1286         TextSimple* pSimpleTitleText = null;
1287         int titleTextSize = 0;
1288         int titleLength = 0;
1289         FloatRectangle titleTextBounds;
1290         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1291
1292         titleLength = __pSlider->GetTitleText().GetLength();
1293         SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1294
1295         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, titleTextSize);
1296         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1297
1298         (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1299
1300         titleTextBounds = GetTitleTextBounds();
1301
1302         if (__pTitleTextObject == null)
1303         {
1304                 __pTitleTextObject = new (std::nothrow) TextObject();
1305                 SysTryReturn(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1306                 __pTitleTextObject->Construct();
1307         }
1308
1309         pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1310
1311         __pTitleTextObject->RemoveAll();
1312         __pTitleTextObject->AppendElement(*pSimpleTitleText);
1313         __pTitleTextObject->SetForegroundColor(__pSlider->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
1314         __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
1315         __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
1316         __pTitleTextObject->SetBounds(GetTitleTextBounds());
1317         __pTitleTextObject->Compose();
1318
1319         __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1320         __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1321         __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1322
1323         return r;
1324 }
1325
1326 result
1327 _SliderPresenter::DrawIcon(Canvas& canvas)
1328 {
1329         result r = E_SUCCESS;
1330
1331         Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1332         Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1333
1334         if (pLeftBitmap != null)
1335         {
1336                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1337                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1338         }
1339
1340         if (pRightBitmap != null)
1341         {
1342                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1343                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1344         }
1345
1346         return r;
1347 }
1348
1349 result
1350 _SliderPresenter::DrawSliderOverlay(int value)
1351 {
1352         result r = E_SUCCESS;
1353
1354         Rectangle absBounds = __pSlider->GetAbsoluteBounds();
1355         FloatRectangle absBoundsFloat(absBounds.x, absBounds.y, absBounds.width, absBounds.height);
1356         r = __pSliderOverlay->SetSliderRect(absBoundsFloat, __touchRect);
1357         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1358
1359         r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1360         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1361
1362         return r;
1363 }
1364
1365 result
1366 _SliderPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
1367 {
1368         result r = E_SUCCESS;
1369
1370         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
1371         {
1372                 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1373                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1374         }
1375         else
1376         {
1377                 r = canvas.DrawBitmap(bounds, *pBitmap);
1378                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1379         }
1380         return r;
1381 }
1382
1383 FloatRectangle
1384 _SliderPresenter::GetTitleTextBounds(void) const
1385 {
1386         FloatRectangle titleTextBounds;
1387         float topMargin = 0.0f;
1388
1389         result r = E_SUCCESS;
1390         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1391
1392         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_X, orientation, titleTextBounds.x);
1393         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1394
1395         r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, orientation, topMargin);
1396         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1397
1398         titleTextBounds.y = topMargin;
1399
1400         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleTextBounds.height);
1401         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1402
1403         titleTextBounds.width = __pSlider->GetBoundsF().width - titleTextBounds.x;
1404
1405         return titleTextBounds;
1406 }
1407
1408 FloatRectangle
1409 _SliderPresenter::GetTouchBounds(void) const
1410 {
1411         return __touchRect;
1412 }
1413
1414 FloatRectangle
1415 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1416 {
1417         result r = E_SUCCESS;
1418
1419         FloatRectangle iconBounds;
1420         float iconSideMargin = 0.0f;
1421         float barHeight = 0.0f;
1422
1423         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1424
1425         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconBounds.width);
1426         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1427
1428         r = GET_SHAPE_CONFIG(SLIDER::ICON_HEIGHT, orientation, iconBounds.height);
1429         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1430
1431         r = GET_SHAPE_CONFIG(SLIDER::ICON_LEFT_MARGIN, orientation, iconSideMargin);
1432         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1433
1434         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1435         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1436
1437         iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1438
1439         if (iconPosition == ICON_POSITION_LEFT)
1440         {
1441                 iconBounds.x = iconSideMargin;
1442         }
1443         else
1444         {
1445                 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1446         }
1447
1448         return iconBounds;
1449 }
1450
1451 bool
1452 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1453 {
1454         if (__pSlider != &source)
1455         {
1456                 return false;
1457         }
1458
1459         if (__pSlideTimer == null)
1460         {
1461                 __pSlideTimer = new (std::nothrow) Timer;
1462                 SysTryReturn(NID_UI_CTRL, __pSlideTimer != null, true, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1463
1464                 result r = __pSlideTimer->Construct(*this);
1465                 if (r != E_SUCCESS)
1466                 {
1467                         delete __pSlideTimer;
1468                         __pSlideTimer = null;
1469
1470                         return true;
1471                 }
1472         }
1473
1474         FloatPoint point = touchinfo.GetCurrentPosition();
1475
1476         if (__handleRect.Contains(point) == true)
1477         {
1478                 __isSliderPressed = true;
1479
1480                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1481                 __prevSliderValue = candidateValue;
1482
1483                 __pSliderModel->SetValue(candidateValue);
1484                 __pSlider->SetAccessibilityElementValue();
1485
1486                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1487                 {
1488                         __pSliderOverlay->Open(false);
1489                 }
1490
1491                 __pSlider->Invalidate();
1492         }
1493
1494         return __isSliderPressed;
1495 }
1496
1497 bool
1498 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1499 {
1500         if (__pSlider != &source)
1501         {
1502                 return false;
1503         }
1504
1505         if (__pSlideTimer != null)
1506         {
1507                 __isTimerRunning = false;
1508                 __pSlideTimer->Cancel();
1509         }
1510
1511         FloatPoint point = touchinfo.GetCurrentPosition();
1512
1513         Canvas* pCanvas = __pSlider->GetCanvasN();
1514         SysTryReturn(NID_UI_CTRL, pCanvas != null, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1515
1516         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1517         {
1518                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1519         }
1520
1521         if (__isSliderPressed == true)
1522         {
1523                 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP);
1524                 __isSliderPressed = false;
1525
1526                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1527
1528                 __pSliderModel->SetValue(candidateValue);
1529                 __pSlider->SetAccessibilityElementValue();
1530                 __pSlider->Invalidate();
1531
1532                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1533                 {
1534                         __pSliderOverlay->Close();
1535                 }
1536
1537                 //  Slider Event Fire is required if some handle value changes not fired sldier event because of timer call back.
1538                 if (__prevSliderValue != candidateValue)
1539                 {
1540                         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1541                         if (pSliderEvent != null)
1542                         {
1543                                 IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1544
1545                                 result r = GetLastResult();
1546                                 SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1547
1548                                 pSliderEvent->Fire(*pEventArg);
1549                         }
1550                 }
1551
1552                 // Adjustment Event Fire
1553                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1554                 if (pAdjustmentEvent != null)
1555                 {
1556                         IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1557                         result r = GetLastResult();
1558                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1559
1560                         pAdjustmentEvent->Fire(*pEventArg);
1561                 }
1562                 return true;
1563         }
1564
1565         return false;
1566 }
1567
1568 bool
1569 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1570 {
1571         if (__pSlider != &source)
1572         {
1573                 return false;
1574         }
1575
1576         if (__isSliderPressed == false)
1577         {
1578                 return false;
1579         }
1580
1581         FloatPoint point = touchinfo.GetCurrentPosition();
1582
1583         Canvas* pCanvas = __pSlider->GetCanvasN();
1584         SysTryReturn(NID_UI_CTRL, pCanvas != null, true, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1585
1586         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1587         {
1588                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1589         }
1590
1591         __currentPosition.x = point.x;
1592         __currentPosition.y = point.y;
1593
1594         if ( __isTimerRunning == false )
1595         {
1596                 __isTimerRunning = true;
1597                 __pSlideTimer->Start(__timerValue);
1598         }
1599
1600         return true;
1601 }
1602
1603 void
1604 _SliderPresenter::OnTimerExpired(Timer& timer)
1605 {
1606         __isTimerRunning = false;
1607
1608         float handleHalfWidth = __handleRect.width / 2;
1609         int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1610
1611         __prevSliderValue = candidateValue;
1612
1613         __pSliderModel->SetValue(candidateValue);
1614         __pSlider->SetAccessibilityElementValue();
1615
1616         __pSlider->Draw();
1617         __pSlider->Show();
1618
1619         // Slider Event Fire
1620         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1621         if (pSliderEvent != null)
1622         {
1623                 IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1624
1625                 if( pEventArg == null)
1626                 {
1627                         return;
1628                 }
1629
1630                 pSliderEvent->Fire(*pEventArg);
1631         }
1632
1633         return;
1634 }
1635
1636 bool
1637 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1638 {
1639         return OnTouchReleased(source, touchinfo);
1640 }
1641
1642 void
1643 _SliderPresenter::OnBoundsChanged(void)
1644 {
1645         __isNeedToBeUpdated = true;
1646         Resize();
1647
1648         return;
1649 }
1650
1651 void
1652 _SliderPresenter::OnFontChanged(Font* pFont)
1653 {
1654         __pFont = pFont;
1655         __isNeedToBeUpdated = true;
1656
1657         if(__pSliderOverlay != null)
1658                 __pSliderOverlay->SetFont(pFont);
1659
1660         return;
1661 }
1662
1663 void
1664 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1665 {
1666         style = FONT_STYLE_BOLD;
1667         size = __fontSize;
1668         return;
1669 }
1670
1671 void
1672 _SliderPresenter::SetMinValue(int minValue)
1673 {
1674         __pSliderModel->SetMinValue(minValue);
1675
1676         if (__pSliderModel->GetValue() < minValue)
1677         {
1678                 __pSliderModel->SetValue(minValue);
1679         }
1680
1681         return;
1682 }
1683
1684 void
1685 _SliderPresenter::SetMaxValue(int maxValue)
1686 {
1687         __pSliderModel->SetMaxValue(maxValue);
1688
1689         if (__pSliderModel->GetValue() > maxValue)
1690         {
1691                 __pSliderModel->SetValue(maxValue);
1692         }
1693
1694         return;
1695 }
1696
1697 int
1698 _SliderPresenter::GetMinValue(void) const
1699 {
1700         return __pSliderModel->GetMinValue();
1701 }
1702
1703 int
1704 _SliderPresenter::GetMaxValue(void) const
1705 {
1706         return __pSliderModel->GetMaxValue();
1707 }
1708
1709 void
1710 _SliderPresenter::SetValue(int value)
1711 {
1712         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1713
1714         int minValue = __pSliderModel->GetMinValue();
1715         int maxValue = __pSliderModel->GetMaxValue();
1716
1717         if (value > maxValue)
1718         {
1719                 value = maxValue;
1720         }
1721         else if (value < minValue)
1722         {
1723                 value = minValue;
1724         }
1725
1726         __pSliderModel->SetValue(value);
1727
1728         return;
1729 }
1730
1731 int
1732 _SliderPresenter::GetValue(void) const
1733 {
1734         return __pSliderModel->GetValue();
1735 }
1736
1737 void
1738 _SliderPresenter::SetNeedUpdate(void)
1739 {
1740         __isNeedToBeUpdated = true;
1741         return;
1742 }
1743
1744 void
1745 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1746 {
1747         __groupStyle = groupStyle;
1748         return;
1749 }
1750
1751 result
1752 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1753 {
1754         Bitmap* pThumbBitmap = null;
1755         result r = E_SUCCESS;
1756
1757         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1758
1759         r = GetLastResult();
1760         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1761
1762         switch (status)
1763         {
1764         case SLIDER_THUMB_STATUS_PRESSED:
1765
1766                 delete __pHandlePressedEffectBitmap;
1767                 __pHandlePressedEffectBitmap = null;
1768
1769                 delete __pHandlePressedBitmap;
1770                 __pHandlePressedBitmap = pThumbBitmap;
1771                 break;
1772
1773         case SLIDER_THUMB_STATUS_DISABLED:
1774
1775                 delete __pHandleDisabledEffectBitmap;
1776                 __pHandleDisabledEffectBitmap = null;
1777
1778                 delete __pHandleDisabledBitmap;
1779                 __pHandleDisabledBitmap = pThumbBitmap;
1780                 break;
1781
1782         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1783
1784                 delete __pHandleHighlightedEffectBitmap;
1785                 __pHandleHighlightedEffectBitmap = null;
1786
1787                 delete __pHandleHighlightedEffectBitmap;
1788                 __pHandleHighlightedEffectBitmap = pThumbBitmap;
1789                 break;
1790
1791         case SLIDER_THUMB_STATUS_NORMAL:
1792         // fall through
1793         default:
1794
1795                 delete __pHandleNormalEffectBitmap;
1796                 __pHandleNormalEffectBitmap = null;
1797
1798                 delete __pHandleNormalBitmap;
1799                 __pHandleNormalBitmap = pThumbBitmap;
1800
1801                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1802                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1803
1804                 _VisualElement* pHandle = __pSlider->GetHandle();
1805                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1806
1807                 __isCustomHandle = true;
1808                 break;
1809
1810         }
1811
1812         Resize();
1813         return r;
1814 }
1815
1816 void
1817 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1818 {
1819         switch (status)
1820         {
1821         case SLIDER_THUMB_STATUS_PRESSED:
1822                 __handleTextPressedColor = color;
1823                 __isCustomPressedTextColor = true;
1824                 break;
1825
1826         case SLIDER_THUMB_STATUS_DISABLED:
1827                 __handleTextDisabledColor = color;
1828                 break;
1829
1830         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1831                 __handleTextHighlightedColor = color;
1832                 break;
1833
1834         case SLIDER_THUMB_STATUS_NORMAL:
1835         // fall through
1836         default:
1837                 __handleTextColor = color;
1838                 break;
1839         }
1840
1841         return;
1842 }
1843
1844 }}} // Tizen::Ui::Controls