8b89d1643618af42ef03207cce5f5fd01ef3f8b5
[platform/framework/native/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 Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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 "FUi_TouchManager.h"
32 #include "FUiAnim_VisualElement.h"
33 #include "FUiCtrl_Slider.h"
34 #include "FUiCtrl_SliderModel.h"
35 #include "FUiCtrl_SliderOverlay.h"
36 #include "FUi_CoordinateSystemUtils.h"
37 #include "FUiCtrl_SliderPresenter.h"
38
39 using namespace Tizen::Graphics;
40 using namespace Tizen::Base;
41 using namespace Tizen::Ui::Animations;
42 using namespace Tizen::Graphics::_Text;
43 using namespace Tizen::Base::Runtime;
44
45 namespace Tizen { namespace Ui { namespace Controls
46 {
47
48 _SliderPresenter::_SliderPresenter(void)
49         : __pSlider(null)
50         , __pSliderModel(null)
51         , __pSliderOverlay(null)
52         , __pSlideTimer(null)
53         , __pResourceBgTopBitmap(null)
54         , __pResourceBgMiddleBitmap(null)
55         , __pResourceBgBottomBitmap(null)
56         , __pResourceBgSingleBitmap(null)
57         , __pBgTopBitmap(null)
58         , __pBgMiddleBitmap(null)
59         , __pBgBottomBitmap(null)
60         , __pBgSingleBitmap(null)
61         , __pBgGrpStyleNoneBitmap(null)
62         , __pBgTopEffectBitmap(null)
63         , __pBgMiddleEffectBitmap(null)
64         , __pBgBottomEffectBitmap(null)
65         , __pBgSingleEffectBitmap(null)
66         , __pResourceBarBitmap(null)
67         , __pResourceBarBgBitmap(null)
68         , __pBarResourceEffectBitmap(null)
69         , __pBarBgResourceEffectBitmap(null)
70         , __pBarColorReplacementBitmap(null)
71         , __pBarBgColorReplacementBitmap(null)
72         , __pHandleNormalBitmap(null)
73         , __pHandlePressedBitmap(null)
74         , __pHandleDisabledBitmap(null)
75         , __pHandleHighlightedBitmap(null)
76         , __pHandleNormalEffectBitmap(null)
77         , __pHandlePressedEffectBitmap(null)
78         , __pHandleDisabledEffectBitmap(null)
79         , __pHandleHighlightedEffectBitmap(null)
80         , __currentBarColor(0)
81         , __currentBarBgColor(0)
82         , __currentBgColor(0)
83         , __pFont(null)
84         , __pTitleTextObject(null)
85         , __handleX(0)
86         , __prevSliderValue(0)
87         , __handleOffset(0)
88         , __isSliderPressed(false)
89         , __isSetValue(true)
90         , __isFocusModeStateChanged(false)
91         , __isNeedToBeUpdated(true)
92         , __isResourceLoaded(false)
93         , __isCustomHandle(false)
94         , __isCustomPressedTextColor(false)
95         , __isTouchCanceled(false)
96         , __groupStyle(GROUP_STYLE_NONE)
97         , __fontSize(0.0f)
98         , __barOffset(0.0f)
99         , __isTimerRunning(false)
100         , __currentPosition(0.0f, 0.0f)
101 {
102 }
103
104 _SliderPresenter::~_SliderPresenter(void)
105 {
106         delete __pSliderModel;
107         __pSliderModel = null;
108
109         delete __pSliderOverlay;
110         __pSliderOverlay = null;
111
112         if (__pSlideTimer != null)
113         {
114                 __pSlideTimer->Cancel();
115                 delete __pSlideTimer;
116                 __pSlideTimer = null;
117         }
118
119         delete __pResourceBgTopBitmap;
120         __pResourceBgTopBitmap = null;
121
122         delete __pResourceBgMiddleBitmap;
123         __pResourceBgMiddleBitmap = null;
124
125         delete __pResourceBgBottomBitmap;
126         __pResourceBgBottomBitmap = null;
127
128         delete __pResourceBgSingleBitmap;
129         __pResourceBgSingleBitmap = null;
130
131         delete __pBgTopBitmap;
132         __pBgTopBitmap = null;
133
134         delete __pBgMiddleBitmap;
135         __pBgMiddleBitmap = null;
136
137         delete __pBgBottomBitmap;
138         __pBgBottomBitmap = null;
139
140         delete __pBgSingleBitmap;
141         __pBgSingleBitmap = null;
142
143         delete __pBgGrpStyleNoneBitmap;
144         __pBgGrpStyleNoneBitmap = null;
145
146         delete __pBgTopEffectBitmap;
147         __pBgTopEffectBitmap = null;
148
149         delete __pBgMiddleEffectBitmap;
150         __pBgMiddleEffectBitmap = null;
151
152         delete __pBgBottomEffectBitmap;
153         __pBgBottomEffectBitmap = null;
154
155         delete __pBgSingleEffectBitmap;
156         __pBgSingleEffectBitmap = null;
157
158         delete __pResourceBarBitmap;
159         __pResourceBarBitmap = null;
160
161         delete __pResourceBarBgBitmap;
162         __pResourceBarBgBitmap = null;
163
164         delete __pBarResourceEffectBitmap;
165         __pBarResourceEffectBitmap = null;
166
167         delete __pBarBgResourceEffectBitmap;
168         __pBarBgResourceEffectBitmap = null;
169
170         delete __pBarColorReplacementBitmap;
171         __pBarColorReplacementBitmap = null;
172
173         delete __pBarBgColorReplacementBitmap;
174         __pBarBgColorReplacementBitmap = null;
175
176         delete __pHandleNormalBitmap;
177         __pHandleNormalBitmap = null;
178
179         delete __pHandlePressedBitmap;
180         __pHandlePressedBitmap = null;
181
182         delete __pHandleDisabledBitmap;
183         __pHandleDisabledBitmap = null;
184
185         delete __pHandleHighlightedBitmap;
186         __pHandleHighlightedBitmap = null;
187
188         delete __pHandleNormalEffectBitmap;
189         __pHandleNormalEffectBitmap = null;
190
191         delete __pHandlePressedEffectBitmap;
192         __pHandlePressedEffectBitmap = null;
193
194         delete __pHandleDisabledEffectBitmap;
195         __pHandleDisabledEffectBitmap = null;
196
197         delete __pHandleHighlightedEffectBitmap;
198         __pHandleHighlightedEffectBitmap = null;
199
200         delete __pTitleTextObject;
201         __pTitleTextObject = null;
202
203 }
204
205 _SliderPresenter*
206 _SliderPresenter::CreateInstanceN(const _Slider& slider)
207 {
208         result r = E_SUCCESS;
209
210         _SliderPresenter* pSliderPresenter = new (std::nothrow) _SliderPresenter;
211         SysTryReturn(NID_UI_CTRL, pSliderPresenter != null, null, E_OUT_OF_MEMORY,
212                                  "[E_OUT_OF_MEMORY] Memory allocation failed.");
213
214         pSliderPresenter->__pSlider = const_cast <_Slider*>(&slider);
215         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSlider != null, , E_SYSTEM,
216                                 "[E_SYSTEM] A system error has occurred. The Slider control core is null.");
217
218         pSliderPresenter->__pSliderModel = new (std::nothrow) _SliderModel;
219         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderModel != null, , E_OUT_OF_MEMORY,
220                                 "[E_OUT_OF_MEMORY] Memory allocation failed.");
221
222         if (pSliderPresenter->__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
223         {
224                 pSliderPresenter->__pSliderOverlay = new (std::nothrow) _SliderOverlay;
225                 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderOverlay != null, , E_OUT_OF_MEMORY,
226                                         "[E_OUT_OF_MEMORY] Memory allocation failed.");
227
228                 r = pSliderPresenter->__pSliderOverlay->Construct(*pSliderPresenter->__pSlider);
229                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
230         }
231
232         return pSliderPresenter;
233
234 CATCH:
235         delete pSliderPresenter;
236         pSliderPresenter = null;
237
238         return null;
239 }
240
241 result
242 _SliderPresenter::Resize(void)
243 {
244         result r = E_SUCCESS;
245
246         float barHeight = 0.0f;
247         float barLeftMargin = 0.0f;
248         float barRightMargin = 0.0f;
249         float sliderY = 0.0f;
250         float iconWidth = 0.0f;
251         float iconSideMargin = 0.0f;
252         float minimumHeight = 0.0f;
253         float minimumWidth = 0.0f;
254         float iconRightMargin = 0.0f;
255         float titleHeight = 0.0f;
256         FloatRectangle titleTextBounds;
257
258         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
259
260         if (__isResourceLoaded == false)
261         {
262                 r = LoadBitmap();
263                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
264                 __isResourceLoaded = true;
265
266                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, __fontSize);
267                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
268
269                 __pFont = __pSlider->GetFallbackFont();
270                 r = GetLastResult();
271                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
272
273                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_NORMAL, __handleTextColor);
274                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
275
276                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_DISABLED, __handleTextDisabledColor);
277                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
278
279                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_PRESSED, __handleTextPressedColor);
280                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
281
282                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_HIGHLIGHTED, __handleTextHighlightedColor);
283                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
284
285         }
286
287         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);
288         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
289
290         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconWidth);
291         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
292
293         r = GET_SHAPE_CONFIG(SLIDER::BAR_OFFSET, orientation, __barOffset);
294         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
295
296         if (!__isCustomHandle)
297         {
298                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, __handleOffset);
299                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
300
301                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_WIDTH, orientation, __handleRect.width);
302                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
303
304                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_HEIGHT, orientation, __handleRect.height);
305                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
306         }
307         __rect = FloatRectangle(0.0f, 0.0f, __pSlider->GetBoundsF().width, __pSlider->GetBoundsF().height);
308
309         r = GET_SHAPE_CONFIG(SLIDER::ICON_RIGHT_MARGIN, orientation, iconRightMargin);
310         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
311
312         if ((__pSlider->GetIcon(ICON_POSITION_LEFT) != null) || (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null))
313         {
314                 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_WIDTH_WITH_ICON, orientation, minimumWidth);
315                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
316
317                 r = GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN_WITH_ICON, orientation, barLeftMargin);
318                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
319         }
320         else
321         {
322                 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_WIDTH_WITHOUT_ICON, orientation, minimumWidth);
323                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
324
325                 r = GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN, orientation, barLeftMargin);
326                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
327         }
328
329         barRightMargin = barLeftMargin;
330
331         if (__rect.width < minimumWidth)
332         {
333                 __rect.width = minimumWidth;
334         }
335
336         r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_HEIGHT, orientation, minimumHeight);
337         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
338
339         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
340         {
341                 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleHeight);
342                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
343
344                 minimumHeight = minimumHeight + titleHeight;
345         }
346
347         if (__rect.height < minimumHeight)
348         {
349                 __rect.height = minimumHeight;
350         }
351
352         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
353         {
354                 titleTextBounds = GetTitleTextBounds();
355                 sliderY = titleTextBounds.y + titleTextBounds.height;
356                 __touchRect = FloatRectangle(barLeftMargin - __handleOffset , sliderY + (__rect.height - (sliderY + __handleRect.height)) / 2.0f,
357                                                                 __rect.width - (barLeftMargin + barRightMargin) + (2.0f * __handleOffset) , __handleRect.height);
358         }
359         else
360         {
361                 __touchRect = FloatRectangle(barLeftMargin - __handleOffset, (__rect.height - __handleRect.height) / 2.0f,
362                                                                 (__rect.width - (barLeftMargin + barRightMargin)) + (2.0f * __handleOffset) , __handleRect.height);
363         }
364
365         if (__pSlider->GetIcon(ICON_POSITION_LEFT) != null)
366         {
367                 __touchRect.x = __touchRect.x + iconWidth + iconRightMargin;
368                 __touchRect.width = __touchRect.width - (iconWidth + iconRightMargin);
369         }
370
371         if (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null)
372         {
373                 __touchRect.width = __touchRect.width - (iconWidth + iconSideMargin + iconRightMargin);
374         }
375
376         __barBgRect = FloatRectangle(__touchRect.x + __handleOffset, __touchRect.y +
377                                                         ((__handleRect.height - barHeight) / 2.0f), __touchRect.width - (2.0f * __handleOffset), barHeight);
378
379         FloatRectangle absBounds = __pSlider->GetAbsoluteBoundsF();
380         __pSliderOverlay->SetSliderRect(absBounds, __touchRect);
381
382         return r;
383 }
384
385 result
386 _SliderPresenter::LoadBitmap(void)
387 {
388         result r = E_SUCCESS;
389
390         int opacity = 0;
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(SLIDER::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(SLIDER::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(SLIDER::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(SLIDER::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(SLIDER::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(SLIDER::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(SLIDER::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(SLIDER::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, __pHandleNormalEffectBitmap);
567                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
568         }
569
570         if (__pHandlePressedEffectBitmap == null)
571         {
572                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlePressedEffectBitmap);
573                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
574         }
575
576         if (__pHandleDisabledEffectBitmap == null)
577         {
578                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandleDisabledEffectBitmap);
579                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
580         }
581
582         if (__pHandleHighlightedEffectBitmap == null)
583         {
584                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_HIGHLIGHTED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandleHighlightedEffectBitmap);
585                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
586         }
587
588         delete pNormalBitmap;
589         delete pPressedBitmap;
590         delete pDisabledBitmap;
591         delete pHighlightedBitmap;
592
593         return r;
594
595 CATCH:
596
597         delete pNormalBitmap;
598         delete pPressedBitmap;
599         delete pDisabledBitmap;
600         delete pHighlightedBitmap;
601
602         delete __pResourceBgTopBitmap;
603         __pResourceBgTopBitmap = null;
604
605         delete __pResourceBgMiddleBitmap;
606         __pResourceBgMiddleBitmap = null;
607
608         delete __pResourceBgBottomBitmap;
609         __pResourceBgBottomBitmap = null;
610
611         delete __pResourceBgSingleBitmap;
612         __pResourceBgSingleBitmap = null;
613
614         delete __pBgTopBitmap;
615         __pBgTopBitmap = null;
616
617         delete __pBgMiddleBitmap;
618         __pBgMiddleBitmap = null;
619
620         delete __pBgBottomBitmap;
621         __pBgBottomBitmap = null;
622
623         delete __pBgSingleBitmap;
624         __pBgSingleBitmap = null;
625
626         delete __pBgGrpStyleNoneBitmap;
627         __pBgGrpStyleNoneBitmap = null;
628
629         delete __pBgTopEffectBitmap;
630         __pBgTopEffectBitmap = null;
631
632         delete __pBgMiddleEffectBitmap;
633         __pBgMiddleEffectBitmap = null;
634
635         delete __pBgBottomEffectBitmap;
636         __pBgBottomEffectBitmap = null;
637
638         delete __pBgSingleEffectBitmap;
639         __pBgSingleEffectBitmap = null;
640
641         delete __pResourceBarBitmap;
642         __pResourceBarBitmap = null;
643
644         delete __pResourceBarBgBitmap;
645         __pResourceBarBgBitmap = null;
646
647         delete __pBarResourceEffectBitmap;
648         __pBarResourceEffectBitmap = null;
649
650         delete __pBarBgResourceEffectBitmap;
651         __pBarBgResourceEffectBitmap = null;
652
653         delete __pBarColorReplacementBitmap;
654         __pBarColorReplacementBitmap = null;
655
656         delete __pBarBgColorReplacementBitmap;
657         __pBarBgColorReplacementBitmap = null;
658
659         delete __pHandleNormalBitmap;
660         __pHandleNormalBitmap = null;
661
662         delete __pHandlePressedBitmap;
663         __pHandlePressedBitmap = null;
664
665         delete __pHandleDisabledBitmap;
666         __pHandleDisabledBitmap = null;
667
668         delete __pHandleHighlightedBitmap;
669         __pHandleHighlightedBitmap = null;
670
671         delete __pHandleNormalEffectBitmap;
672         __pHandleNormalEffectBitmap = null;
673
674         delete __pHandlePressedEffectBitmap;
675         __pHandlePressedEffectBitmap = null;
676
677         delete __pHandleDisabledEffectBitmap;
678         __pHandleDisabledEffectBitmap = null;
679
680         delete __pHandleHighlightedEffectBitmap;
681         __pHandleHighlightedEffectBitmap = null;
682
683         return r;
684 }
685
686 int
687 _SliderPresenter::CalculateSliderValue(float positionX, float offsetX)
688 {
689         int minValue = __pSliderModel->GetMinValue();
690         int maxValue = __pSliderModel->GetMaxValue();
691
692         if (positionX <= __touchRect.x + offsetX)
693         {
694                 __handleX = 0;
695                 return minValue;
696         }
697
698         if (positionX >= (__touchRect.x + __touchRect.width) - offsetX)
699         {
700                 __handleX = __touchRect.width - __handleRect.width;
701                 return maxValue;
702         }
703
704         if ((maxValue - minValue) == 0)
705         {
706                 return minValue;
707         }
708
709         __handleX = positionX - (__touchRect.x + offsetX);
710
711         __handleRect.x = __touchRect.x + __handleX;
712         __handleRect.y = __touchRect.y;
713
714         if (__handleRect.x < __touchRect.x )
715         {
716                 __handleRect.x = __touchRect.x;
717         }
718
719         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
720         {
721                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
722         }
723
724         return minValue + (int) ((float) (__handleX * (maxValue - minValue)) / (float)(__touchRect.width - __handleRect.width) + 0.5); // current value = current width * range / bar bg width
725 }
726
727 result
728 _SliderPresenter::Draw(void)
729 {
730         if (__isNeedToBeUpdated == true)
731         {
732                 Resize();
733                 __isNeedToBeUpdated = false;
734         }
735
736         return DrawSlider();
737 }
738
739 result
740 _SliderPresenter::DrawSlider(void)
741 {
742         result r = E_SUCCESS;
743         float sliderY = 0.0f;
744         FloatRectangle titleTextBounds;
745
746         int style = __pSlider->GetStyle();
747
748         Canvas* pCanvas = __pSlider->GetCanvasN();
749         SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
750
751         r = DrawBackground(*pCanvas);
752         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
753
754         if (style & _SLIDER_STYLE_TITLE_TEXT)
755         {
756                 titleTextBounds = GetTitleTextBounds();
757                 sliderY = titleTextBounds.y + titleTextBounds.height;
758         }
759
760         if(sliderY < __rect.height)
761         {
762                 r = DrawSliderBar(*pCanvas);
763                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
764
765                 if (__isSliderPressed == true || __pSlider->IsKeyPressed())
766                 {
767                         if (style & _SLIDER_STYLE_OVERLAY)
768                         {
769                                 r = DrawSliderOverlay(__pSliderModel->GetValue());
770                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
771                         }
772                         else
773                         {
774                                 r = DrawSliderBarNumber(__pSliderModel->GetValue());
775                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
776                         }
777                 }
778                 else
779                 {
780                         r = DrawSliderBarNumber(__pSliderModel->GetValue());
781                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
782                 }
783         }
784
785         if (style & _SLIDER_STYLE_TITLE_TEXT)
786         {
787                 r = DrawTitleText(*pCanvas);
788                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
789         }
790
791         r = DrawIcon(*pCanvas);
792         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
793
794         delete pCanvas;
795         pCanvas = null;
796
797         return r;
798
799 CATCH:
800         delete pCanvas;
801         pCanvas = null;
802
803         return r;
804 }
805
806 result
807 _SliderPresenter::DrawBackground(Canvas& canvas)
808 {
809         Bitmap* pBgBitmap = null;
810         Bitmap* pBgEffectBitmap = null;
811         Bitmap* pBgGroupBitmap = null;
812         bool isCustomBitmap = false;
813
814         int opacity = 0;
815         result r = E_SUCCESS;
816         canvas.SetBackgroundColor(Color(0x00000000));
817         canvas.Clear();
818
819         if (!(__pSlider->GetStyle() & _SLIDER_STYLE_NO_BG))
820         {
821                 switch (__groupStyle)
822                 {
823                 case GROUP_STYLE_TOP:
824                         isCustomBitmap = IS_CUSTOM_BITMAP(SLIDER::GROUPED_TOP_BG_NORMAL);
825                         pBgEffectBitmap = __pBgTopEffectBitmap;
826                         if (__pSlider->GetColor() == __currentBgColor)
827                         {
828                                 pBgBitmap = __pBgTopBitmap;
829                         }
830                         else
831                         {
832                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
833                                 r = GetLastResult();
834                                 if (!pBgGroupBitmap)
835                                 {
836                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
837                                                 return r;
838                                 }
839                                 else
840                                 {
841                                         delete __pBgTopBitmap;
842                                         __pBgTopBitmap = null;
843                                         __pBgTopBitmap = pBgGroupBitmap;
844
845                                         pBgBitmap = pBgGroupBitmap;
846                                         opacity = __pSlider->GetColor().GetAlpha();
847                                         pBgBitmap->SetAlphaConstant(opacity);
848                                         __currentBgColor = __pSlider->GetColor();
849                                 }
850                         }
851                         break;
852
853                 case GROUP_STYLE_MIDDLE:
854                         isCustomBitmap = IS_CUSTOM_BITMAP(SLIDER::GROUPED_MIDDLE_BG_NORMAL);
855                         pBgEffectBitmap = __pBgMiddleEffectBitmap;
856                         if (__pSlider->GetColor() == __currentBgColor)
857                         {
858                                 pBgBitmap = __pBgMiddleBitmap;
859                         }
860                         else
861                         {
862                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
863                                 r = GetLastResult();
864                                 if (!pBgGroupBitmap)
865                                 {
866                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
867                                                 return r;
868                                 }
869                                 else
870                                 {
871                                         delete __pBgMiddleBitmap;
872                                         __pBgMiddleBitmap = null;
873                                         __pBgMiddleBitmap = pBgGroupBitmap;
874
875                                         pBgBitmap = __pBgMiddleBitmap;
876                                         opacity = __pSlider->GetColor().GetAlpha();
877                                         pBgBitmap->SetAlphaConstant(opacity);
878                                         __currentBgColor = __pSlider->GetColor();
879                                 }
880                         }
881                         break;
882
883                 case GROUP_STYLE_BOTTOM:
884                         isCustomBitmap = IS_CUSTOM_BITMAP(SLIDER::GROUPED_BOTTOM_BG_NORMAL);
885                         pBgEffectBitmap = __pBgBottomEffectBitmap;
886                         if (__pSlider->GetColor() == __currentBgColor)
887                         {
888                                 pBgBitmap = __pBgBottomBitmap;
889                         }
890                         else
891                         {
892                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
893                                 r = GetLastResult();
894                                 if (!pBgGroupBitmap)
895                                 {
896                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
897                                                 return r;
898                                 }
899                                 else
900                                 {
901                                         delete __pBgBottomBitmap;
902                                         __pBgBottomBitmap = null;
903                                         __pBgBottomBitmap = pBgGroupBitmap;
904
905                                         pBgBitmap = __pBgBottomBitmap;
906                                         opacity = __pSlider->GetColor().GetAlpha();
907                                         pBgBitmap->SetAlphaConstant(opacity);
908                                         __currentBgColor = __pSlider->GetColor();
909                                 }
910                         }
911                         break;
912
913                 case GROUP_STYLE_SINGLE:
914                         isCustomBitmap = IS_CUSTOM_BITMAP(SLIDER::GROUPED_SINGLE_BG_NORMAL);
915                         pBgEffectBitmap = __pBgSingleEffectBitmap;
916                         if (__pSlider->GetColor() == __currentBgColor)
917                         {
918                                 pBgBitmap = __pBgSingleBitmap;
919                         }
920                         else
921                         {
922                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
923                                 r = GetLastResult();
924                                 if (!pBgGroupBitmap)
925                                 {
926                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
927                                                 return r;
928                                 }
929                                 else
930                                 {
931
932                                         delete __pBgSingleBitmap;
933                                         __pBgSingleBitmap = null;
934                                         __pBgSingleBitmap = pBgGroupBitmap;
935
936                                         pBgBitmap = __pBgSingleBitmap;
937                                         opacity = __pSlider->GetColor().GetAlpha();
938                                         pBgBitmap->SetAlphaConstant(opacity);
939                                         __currentBgColor = __pSlider->GetColor();
940                                 }
941                         }
942                         break;
943
944                 case GROUP_STYLE_NONE:
945                 //fall through
946                 default:
947                         if (__pSlider->GetColor() == __currentBgColor)
948                         {
949                                 pBgBitmap = __pBgGrpStyleNoneBitmap;
950                         }
951                         else
952                         {
953                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
954                                 r = GetLastResult();
955                                 if (!pBgGroupBitmap)
956                                 {
957                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
958                                                 return r;
959                                 }
960                                 else
961                                 {
962                                         delete __pBgGrpStyleNoneBitmap;
963                                         __pBgGrpStyleNoneBitmap = null;
964                                         __pBgGrpStyleNoneBitmap = pBgGroupBitmap;
965
966                                         pBgBitmap = __pBgGrpStyleNoneBitmap;
967                                         opacity = __pSlider->GetColor().GetAlpha();
968                                         pBgBitmap->SetAlphaConstant(opacity);
969                                         __currentBgColor = __pSlider->GetColor();
970                                 }
971                         }
972                         break;
973                 }
974
975                 DrawBitmap(canvas, __rect, pBgBitmap);
976                 if ( __groupStyle != GROUP_STYLE_NONE)
977                 {
978                         if (isCustomBitmap == false)
979                         {
980                                 DrawBitmap(canvas, __rect, pBgEffectBitmap);
981                         }
982                 }
983         }
984         return E_SUCCESS;
985 }
986
987 void
988 _SliderPresenter::OnChangeLayout(_ControlOrientation orientation)
989 {
990         int minValue = __pSliderModel->GetMinValue();
991         int maxValue = __pSliderModel->GetMaxValue();
992
993         if ( __isSliderPressed == true)
994         {
995                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
996                 __pSlider->Invalidate();
997         }
998
999         _TouchManager* pTouchMgr = _TouchManager::GetInstance();
1000         if (pTouchMgr)
1001         {
1002                 __isTouchCanceled = true;
1003                 pTouchMgr->SetTouchCanceled(null);
1004         }
1005
1006         return;
1007 }
1008
1009
1010 result
1011 _SliderPresenter::DrawSliderBar(Canvas& canvas)
1012 {
1013         result r = E_SUCCESS;
1014         float bitmapHeight = 0.0f;
1015         float bitmapWidth = 0.0f;
1016         float bitmapPositionX = 0.0f;
1017         float bitmapPositionY = 0.0f;
1018         int opacity = 0;
1019         Bitmap* pReplacementBitmap = null;
1020         Bitmap* pHandleBitmap = null;
1021         Bitmap* pHandleEffectBitmap = null;
1022         bool isCustomHandleBitmap = false;
1023         bool isCustomBarBitmap = false;
1024
1025         if (__pSlider->IsEnabled() == false)  // disabled
1026         {
1027                 pHandleBitmap = __pHandleDisabledBitmap;
1028                 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
1029                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_DISABLED);
1030                 if(__isSliderPressed == true)
1031                 {
1032                         __isSliderPressed = false;
1033                         if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1034                         {
1035                                 __pSliderOverlay->SetVisibleState(false);
1036                                 __pSliderOverlay->Close();
1037                         }
1038                 }
1039         }
1040         else if (__isSliderPressed == true)     // pressed
1041         {
1042                 pHandleBitmap = __pHandlePressedBitmap;
1043                 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1044                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_PRESSED);
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, __handleRect.x , __barBgRect.height);
1057
1058         if (__isSetValue == true && __isSliderPressed == false && (maxValue - minValue) != 0)
1059         {
1060                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1061         }
1062
1063         __handleRect.x = __touchRect.x + __handleX;
1064         __handleRect.y = __touchRect.y;
1065
1066         if (__handleRect.x < __touchRect.x )
1067         {
1068                 __handleRect.x = __touchRect.x;
1069         }
1070
1071         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1072         {
1073                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1074         }
1075
1076         __barRect.width = __handleRect.x - __barRect.x + (__handleRect.width / 2);
1077
1078         if (__pSlider->GetBarBackgroundColor() != __currentBarBgColor)
1079         {
1080                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarBackgroundColor());
1081                 r = GetLastResult();
1082                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1083
1084                 delete __pBarBgColorReplacementBitmap;
1085                 __pBarBgColorReplacementBitmap = null;
1086
1087                 __pBarBgColorReplacementBitmap = pReplacementBitmap;
1088                 __currentBarBgColor = __pSlider->GetBarBackgroundColor();
1089         }
1090
1091         if (__pSlider->GetBarColor() != __currentBarColor)
1092         {
1093                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarColor());
1094                 r = GetLastResult();
1095                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1096
1097                 delete __pBarColorReplacementBitmap;
1098                 __pBarColorReplacementBitmap = null;
1099
1100                 __pBarColorReplacementBitmap = pReplacementBitmap;
1101                 __currentBarColor = __pSlider->GetBarColor();
1102         }
1103
1104         // Redrawing twice is required because, when slider is disabled we are applying alpha channel to the bar
1105         // which will show the previously drawn portion.
1106
1107         if (__pSlider->IsEnabled() == false)  // disabled
1108         {
1109                 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1110                 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1111
1112                 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1113         }
1114         else
1115         {
1116                 opacity = __pSlider->GetBarColor().GetAlpha();
1117                 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1118         }
1119
1120         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_BG_NORMAL);
1121         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1122         if (isCustomBarBitmap == false)
1123         {
1124                 DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1125         }
1126
1127         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_NORMAL);
1128         DrawBitmap(canvas, __barRect, __pBarColorReplacementBitmap);
1129         if (isCustomBarBitmap == false)
1130         {
1131                 DrawBitmap(canvas, __barRect, __pBarResourceEffectBitmap);
1132         }
1133
1134         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1135         r = GetLastResult();
1136         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1137
1138         pHandleCanvas->SetBackgroundColor(0x00000000);
1139         pHandleCanvas->Clear();
1140
1141         if (pHandleEffectBitmap != null) // drawing the default bitmap
1142         {
1143                 r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleBitmap);
1144                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1145                 if (isCustomHandleBitmap == false)
1146                 {
1147                         r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleEffectBitmap);
1148                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1149                 }
1150         }
1151         else
1152         {
1153                 bitmapWidth = pHandleBitmap->GetWidth();
1154                 bitmapHeight = pHandleBitmap->GetHeight();
1155
1156                 if (!_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHandleBitmap))
1157                 {
1158                         // to clip the center portion of the larger bitmap.
1159                         if( bitmapWidth > __handleRect.width )
1160                         {
1161                                 bitmapPositionX = (bitmapWidth / 2.0f) - (__handleRect.width / 2.0f);
1162                                 bitmapWidth = __handleRect.width;
1163                         }
1164
1165                         if( bitmapHeight > __handleRect.height )
1166                         {
1167                                 bitmapPositionY = (bitmapHeight / 2.0f) - (__handleRect.height / 2.0f);
1168                                 bitmapHeight = __handleRect.height;
1169                         }
1170
1171                         r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap, FloatRectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1172                 }
1173                 else
1174                 {
1175                         r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap);
1176                 }
1177                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1178         }
1179
1180         if ((__pSlider->IsFocused()) &&  (__isFocusModeStateChanged == true))
1181         {
1182                 if (__pHandleHighlightedBitmap)
1183                 {
1184                         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pHandleHighlightedBitmap))
1185                         {
1186                                 r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *__pHandleHighlightedBitmap);
1187                         }
1188                         else
1189                         {
1190                                 r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *__pHandleHighlightedBitmap);
1191                         }
1192
1193                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1194                 }
1195         }
1196
1197         r = __pSlider->UpdateHandle(__handleRect);
1198         if (r != E_SUCCESS)
1199         {
1200                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1201         }
1202
1203         delete pHandleCanvas;
1204         pHandleCanvas = null;
1205
1206         return r;
1207
1208 CATCH:
1209         delete pHandleCanvas;
1210         pHandleCanvas = null;
1211
1212         return r;
1213 }
1214
1215 result
1216 _SliderPresenter::DrawSliderBarNumber(int value)
1217 {
1218         result r = E_SUCCESS;
1219         int handleNumberSize = 0;
1220         Color textColor;
1221         String text;
1222         int valueLength = 0;
1223         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1224
1225         if (__pSlider->IsEnabled() == false)  // disabled
1226         {
1227                 textColor = __handleTextDisabledColor;
1228         }
1229         else if ((__pSlider->IsFocused() == true) && (__isFocusModeStateChanged == true))
1230         {
1231                 textColor = __handleTextHighlightedColor;
1232         }
1233         else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1234         {
1235                 textColor = __handleTextPressedColor;
1236         }
1237         else
1238         {
1239                 textColor = __handleTextColor;
1240         }
1241
1242         FloatDimension textDim(0.0f, 0.0f);
1243         text.Append(value);
1244         valueLength = text.GetLength();
1245
1246         if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1247         {
1248                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_THREE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1249                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1250         }
1251         else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1252         {
1253                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_TWO_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1254                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1255         }
1256         else
1257         {
1258                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1259                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1260         }
1261
1262         (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1263
1264         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1265         r = GetLastResult();
1266         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1267
1268         pHandleCanvas->SetFont(*__pFont);
1269         __pFont->GetTextExtent(text, valueLength, textDim);
1270
1271         FloatPoint textPoint;
1272         textPoint.x = (__handleRect.width - textDim.width) / 2.0f;
1273         textPoint.y = (__handleRect.height - textDim.height) / 2.0f;
1274
1275         pHandleCanvas->SetForegroundColor(textColor);
1276         pHandleCanvas->DrawText(textPoint, text);
1277
1278         delete pHandleCanvas;
1279         pHandleCanvas = null;
1280
1281         return r;
1282 }
1283
1284 result
1285 _SliderPresenter::DrawTitleText(Canvas& canvas)
1286 {
1287         result r = E_SUCCESS;
1288
1289         TextSimple* pSimpleTitleText = null;
1290         int titleTextSize = 0;
1291         int titleLength = 0;
1292         FloatRectangle titleTextBounds;
1293         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1294
1295         titleLength = __pSlider->GetTitleText().GetLength();
1296         SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1297
1298         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, titleTextSize);
1299         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1300
1301         (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1302
1303         titleTextBounds = GetTitleTextBounds();
1304
1305         if (__pTitleTextObject == null)
1306         {
1307                 __pTitleTextObject = new (std::nothrow) TextObject();
1308                 SysTryReturn(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1309                 __pTitleTextObject->Construct();
1310         }
1311
1312         pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1313
1314         __pTitleTextObject->RemoveAll();
1315         __pTitleTextObject->AppendElement(*pSimpleTitleText);
1316         __pTitleTextObject->SetForegroundColor(__pSlider->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
1317         __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
1318         __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
1319         __pTitleTextObject->SetBounds(GetTitleTextBounds());
1320         __pTitleTextObject->Compose();
1321
1322         __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1323         __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1324         __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1325
1326         return r;
1327 }
1328
1329 result
1330 _SliderPresenter::DrawIcon(Canvas& canvas)
1331 {
1332         result r = E_SUCCESS;
1333
1334         Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1335         Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1336
1337         if (pLeftBitmap != null)
1338         {
1339                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1340                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1341         }
1342
1343         if (pRightBitmap != null)
1344         {
1345                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1346                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1347         }
1348
1349         return r;
1350 }
1351
1352 result
1353 _SliderPresenter::DrawSliderOverlay(int value)
1354 {
1355         result r = E_SUCCESS;
1356
1357         FloatRectangle absBounds = __pSlider->GetAbsoluteBoundsF();
1358         r = __pSliderOverlay->SetSliderRect(absBounds, __touchRect);
1359         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1360
1361         r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1362         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1363
1364         return r;
1365 }
1366
1367 result
1368 _SliderPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
1369 {
1370         result r = E_SUCCESS;
1371
1372         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
1373         {
1374                 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1375                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1376         }
1377         else
1378         {
1379                 r = canvas.DrawBitmap(bounds, *pBitmap);
1380                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1381         }
1382         return r;
1383 }
1384
1385 FloatRectangle
1386 _SliderPresenter::GetTitleTextBounds(void) const
1387 {
1388         FloatRectangle titleTextBounds;
1389         float topMargin = 0.0f;
1390
1391         result r = E_SUCCESS;
1392         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1393
1394         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_X, orientation, titleTextBounds.x);
1395         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1396
1397         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_Y, orientation, topMargin);
1398         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1399
1400         titleTextBounds.y = topMargin;
1401
1402         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleTextBounds.height);
1403         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1404
1405         titleTextBounds.width = __pSlider->GetBoundsF().width - titleTextBounds.x;
1406
1407         return titleTextBounds;
1408 }
1409
1410 FloatRectangle
1411 _SliderPresenter::GetTouchBounds(void) const
1412 {
1413         return __touchRect;
1414 }
1415
1416 FloatRectangle
1417 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1418 {
1419         result r = E_SUCCESS;
1420
1421         FloatRectangle iconBounds;
1422         float iconSideMargin = 0.0f;
1423         float barHeight = 0.0f;
1424
1425         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1426
1427         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconBounds.width);
1428         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1429
1430         r = GET_SHAPE_CONFIG(SLIDER::ICON_HEIGHT, orientation, iconBounds.height);
1431         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1432
1433         r = GET_SHAPE_CONFIG(SLIDER::ICON_LEFT_MARGIN, orientation, iconSideMargin);
1434         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1435
1436         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1437         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1438
1439         iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1440
1441         if (iconPosition == ICON_POSITION_LEFT)
1442         {
1443                 iconBounds.x = iconSideMargin;
1444         }
1445         else
1446         {
1447                 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1448         }
1449
1450         return iconBounds;
1451 }
1452
1453 _SliderOverlay*
1454 _SliderPresenter::GetSliderOverlay(void) const
1455 {
1456         return __pSliderOverlay;
1457 }
1458
1459 bool
1460 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1461 {
1462         if (__pSlider != &source)
1463         {
1464                 return false;
1465         }
1466
1467         if (__pSlideTimer == null)
1468         {
1469                 __pSlideTimer = new (std::nothrow) Timer;
1470                 SysTryReturn(NID_UI_CTRL, __pSlideTimer != null, true, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1471
1472                 result r = __pSlideTimer->Construct(*this);
1473                 if (r != E_SUCCESS)
1474                 {
1475                         delete __pSlideTimer;
1476                         __pSlideTimer = null;
1477
1478                         return true;
1479                 }
1480         }
1481
1482         FloatPoint point = touchinfo.GetCurrentPosition();
1483
1484         if (__handleRect.Contains(point) == true)
1485         {
1486                 __isSliderPressed = true;
1487                 __isSetValue = false;
1488
1489                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1490                 __prevSliderValue = candidateValue;
1491
1492                 __pSliderModel->SetValue(candidateValue);
1493                 __pSlider->SetAccessibilityElementValue();
1494
1495                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1496                 {
1497                         __pSliderOverlay->SetVisibleState(true);
1498                         __pSliderOverlay->Open();
1499                 }
1500
1501                 __pSlider->Invalidate();
1502         }
1503
1504         return __isSliderPressed;
1505 }
1506
1507 bool
1508 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1509 {
1510         if (__pSlider != &source)
1511         {
1512                 return false;
1513         }
1514
1515         if (__pSlideTimer != null)
1516         {
1517                 __isTimerRunning = false;
1518                 __pSlideTimer->Cancel();
1519         }
1520
1521         FloatPoint point = touchinfo.GetCurrentPosition();
1522
1523         Canvas* pCanvas = __pSlider->GetCanvasN();
1524         SysTryReturn(NID_UI_CTRL, pCanvas != null, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1525
1526         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1527         {
1528                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1529         }
1530
1531         delete pCanvas;
1532         pCanvas = null;
1533
1534         if (__isSliderPressed == true)
1535         {
1536                 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pSlider);
1537                 __isSliderPressed = false;
1538                 __isSetValue = false;
1539
1540                 int candidateValue = 0;
1541
1542                 if (__isTouchCanceled)
1543                 {
1544                         __isTouchCanceled = false;
1545                         candidateValue = __prevSliderValue;
1546                 }
1547                 else
1548                 {
1549                         candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1550                         __pSliderModel->SetValue(candidateValue);
1551                         __pSlider->SetAccessibilityElementValue();
1552                 }
1553
1554                 __pSlider->Invalidate();
1555
1556                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1557                 {
1558                         __pSliderOverlay->SetVisibleState(false);
1559                         __pSliderOverlay->Close();
1560                 }
1561
1562                 //  Slider Event Fire is required if some handle value changes not fired sldier event because of timer call back.
1563                 if (__prevSliderValue != candidateValue)
1564                 {
1565                         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1566                         if (pSliderEvent != null)
1567                         {
1568                                 IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1569
1570                                 result r = GetLastResult();
1571                                 SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1572
1573                                 pSliderEvent->Fire(*pEventArg);
1574                         }
1575                 }
1576
1577                 // Adjustment Event Fire
1578                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1579                 if (pAdjustmentEvent != null)
1580                 {
1581                         IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1582                         result r = GetLastResult();
1583                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1584
1585                         pAdjustmentEvent->Fire(*pEventArg);
1586                 }
1587                 return true;
1588         }
1589
1590         return false;
1591 }
1592
1593 bool
1594 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1595 {
1596         if (__pSlider != &source)
1597         {
1598                 return false;
1599         }
1600
1601         if (__isSliderPressed == false)
1602         {
1603                 return false;
1604         }
1605
1606         FloatPoint point = touchinfo.GetCurrentPosition();
1607
1608         Canvas* pCanvas = __pSlider->GetCanvasN();
1609         SysTryReturn(NID_UI_CTRL, pCanvas != null, true, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1610
1611         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1612         {
1613                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1614         }
1615
1616         __currentPosition.x = point.x;
1617         __currentPosition.y = point.y;
1618
1619         if ( __isTimerRunning == false )
1620         {
1621                 __isTimerRunning = true;
1622                 __pSlideTimer->Start(__timerValue);
1623         }
1624
1625         delete pCanvas;
1626         pCanvas = null;
1627
1628         return true;
1629 }
1630
1631 void
1632 _SliderPresenter::OnTimerExpired(Timer& timer)
1633 {
1634         __isTimerRunning = false;
1635
1636         float handleHalfWidth = __handleRect.width / 2;
1637         int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1638
1639         __prevSliderValue = candidateValue;
1640
1641         __pSliderModel->SetValue(candidateValue);
1642         __pSlider->SetAccessibilityElementValue();
1643
1644         __pSlider->Draw();
1645         __pSlider->Show();
1646
1647     __pSlider->FireSliderMoveEvent(candidateValue);
1648
1649         return;
1650 }
1651
1652 bool
1653 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1654 {
1655         __isTouchCanceled = true;
1656
1657         return OnTouchReleased(source, touchinfo);
1658 }
1659
1660 void
1661 _SliderPresenter::OnBoundsChanged(void)
1662 {
1663         __isNeedToBeUpdated = true;
1664         Resize();
1665
1666         return;
1667 }
1668
1669 void
1670 _SliderPresenter::OnFontChanged(Font* pFont)
1671 {
1672         __pFont = pFont;
1673         __isNeedToBeUpdated = true;
1674
1675         if(__pSliderOverlay != null)
1676                 __pSliderOverlay->SetFont(pFont);
1677
1678         return;
1679 }
1680
1681 void
1682 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1683 {
1684         style = FONT_STYLE_BOLD;
1685         size = __fontSize;
1686         return;
1687 }
1688
1689 void
1690 _SliderPresenter::OnAncestorEnableStateChanged(const _Control& control)
1691 {
1692         if (__pSlider->IsEnabled())
1693         {
1694                 return;
1695         }
1696
1697         if (__pSlideTimer != null)
1698         {
1699                 __isTimerRunning = false;
1700                 __pSlideTimer->Cancel();
1701         }
1702
1703         __pSlider->Invalidate();
1704
1705         return;
1706 }
1707
1708 void
1709 _SliderPresenter::SetMinValue(int minValue)
1710 {
1711         __pSliderModel->SetMinValue(minValue);
1712
1713         if (__pSliderModel->GetValue() < minValue)
1714         {
1715                 __pSliderModel->SetValue(minValue);
1716         }
1717
1718         return;
1719 }
1720
1721 void
1722 _SliderPresenter::SetMaxValue(int maxValue)
1723 {
1724         __pSliderModel->SetMaxValue(maxValue);
1725
1726         if (__pSliderModel->GetValue() > maxValue)
1727         {
1728                 __pSliderModel->SetValue(maxValue);
1729         }
1730
1731         return;
1732 }
1733
1734 int
1735 _SliderPresenter::GetMinValue(void) const
1736 {
1737         return __pSliderModel->GetMinValue();
1738 }
1739
1740 int
1741 _SliderPresenter::GetMaxValue(void) const
1742 {
1743         return __pSliderModel->GetMaxValue();
1744 }
1745
1746 void
1747 _SliderPresenter::SetValue(int value)
1748 {
1749         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1750
1751         int minValue = __pSliderModel->GetMinValue();
1752         int maxValue = __pSliderModel->GetMaxValue();
1753
1754         if (value > maxValue)
1755         {
1756                 value = maxValue;
1757         }
1758         else if (value < minValue)
1759         {
1760                 value = minValue;
1761         }
1762
1763         __isSetValue = true;
1764
1765         __pSliderModel->SetValue(value);
1766
1767         return;
1768 }
1769
1770 int
1771 _SliderPresenter::GetValue(void) const
1772 {
1773         return __pSliderModel->GetValue();
1774 }
1775
1776 void
1777 _SliderPresenter::SetNeedUpdate(void)
1778 {
1779         __isNeedToBeUpdated = true;
1780         return;
1781 }
1782
1783 void
1784 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1785 {
1786         __groupStyle = groupStyle;
1787         return;
1788 }
1789
1790 void
1791 _SliderPresenter::SetFocusMode(bool focusmode)
1792 {
1793         __isFocusModeStateChanged = focusmode;
1794 }
1795
1796 bool
1797 _SliderPresenter::GetFocusMode(void)
1798 {
1799         return __isFocusModeStateChanged;
1800 }
1801
1802 result
1803 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1804 {
1805         Bitmap* pThumbBitmap = null;
1806         result r = E_SUCCESS;
1807
1808         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1809
1810         r = GetLastResult();
1811         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1812
1813         switch (status)
1814         {
1815         case SLIDER_THUMB_STATUS_PRESSED:
1816
1817                 delete __pHandlePressedEffectBitmap;
1818                 __pHandlePressedEffectBitmap = null;
1819
1820                 delete __pHandlePressedBitmap;
1821                 __pHandlePressedBitmap = pThumbBitmap;
1822                 break;
1823
1824         case SLIDER_THUMB_STATUS_DISABLED:
1825
1826                 delete __pHandleDisabledEffectBitmap;
1827                 __pHandleDisabledEffectBitmap = null;
1828
1829                 delete __pHandleDisabledBitmap;
1830                 __pHandleDisabledBitmap = pThumbBitmap;
1831                 break;
1832
1833         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1834
1835                 delete __pHandleHighlightedEffectBitmap;
1836                 __pHandleHighlightedEffectBitmap = null;
1837
1838                 delete __pHandleHighlightedBitmap;
1839                 __pHandleHighlightedBitmap = pThumbBitmap;
1840                 break;
1841
1842         case SLIDER_THUMB_STATUS_NORMAL:
1843         // fall through
1844         default:
1845
1846                 delete __pHandleNormalEffectBitmap;
1847                 __pHandleNormalEffectBitmap = null;
1848
1849                 delete __pHandleNormalBitmap;
1850                 __pHandleNormalBitmap = pThumbBitmap;
1851
1852                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1853                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1854
1855                 _VisualElement* pHandle = __pSlider->GetHandle();
1856                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1857
1858                 __handleOffset = __handleRect.width / 2;
1859                 __isCustomHandle = true;
1860                 break;
1861
1862         }
1863
1864         Resize();
1865         return r;
1866 }
1867
1868 void
1869 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1870 {
1871         switch (status)
1872         {
1873         case SLIDER_THUMB_STATUS_PRESSED:
1874                 __handleTextPressedColor = color;
1875                 __isCustomPressedTextColor = true;
1876                 break;
1877
1878         case SLIDER_THUMB_STATUS_DISABLED:
1879                 __handleTextDisabledColor = color;
1880                 break;
1881
1882         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1883                 __handleTextHighlightedColor = color;
1884                 break;
1885
1886         case SLIDER_THUMB_STATUS_NORMAL:
1887         // fall through
1888         default:
1889                 __handleTextColor = color;
1890                 break;
1891         }
1892
1893         return;
1894 }
1895
1896 }}} // Tizen::Ui::Controls