Fixed Jira issue N_SE-44828, N_SE-45077, N_SE-45140
[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         __isSetValue = true;
1000
1001         _TouchManager* pTouchMgr = _TouchManager::GetInstance();
1002         if (pTouchMgr)
1003         {
1004                 __isTouchCanceled = true;
1005                 pTouchMgr->SetTouchCanceled(null);
1006         }
1007
1008         return;
1009 }
1010
1011
1012 result
1013 _SliderPresenter::DrawSliderBar(Canvas& canvas)
1014 {
1015         result r = E_SUCCESS;
1016         float bitmapHeight = 0.0f;
1017         float bitmapWidth = 0.0f;
1018         float bitmapPositionX = 0.0f;
1019         float bitmapPositionY = 0.0f;
1020         int opacity = 0;
1021         Bitmap* pReplacementBitmap = null;
1022         Bitmap* pHandleBitmap = null;
1023         Bitmap* pHandleEffectBitmap = null;
1024         bool isCustomHandleBitmap = false;
1025         bool isCustomBarBitmap = false;
1026
1027         if (__pSlider->IsEnabled() == false)  // disabled
1028         {
1029                 pHandleBitmap = __pHandleDisabledBitmap;
1030                 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
1031                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_DISABLED);
1032                 if(__isSliderPressed == true)
1033                 {
1034                         __isSliderPressed = false;
1035                         if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1036                         {
1037                                 __pSliderOverlay->SetVisibleState(false);
1038                                 __pSliderOverlay->Close();
1039                         }
1040                 }
1041         }
1042         else if (__isSliderPressed == true)     // pressed
1043         {
1044                 pHandleBitmap = __pHandlePressedBitmap;
1045                 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1046                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_PRESSED);
1047         }
1048         else //(__isSliderPressed == false)     // normal state
1049         {
1050                 pHandleBitmap = __pHandleNormalBitmap;
1051                 pHandleEffectBitmap = __pHandleNormalEffectBitmap;
1052                 isCustomHandleBitmap = IS_CUSTOM_BITMAP(SLIDER::HANDLE_BG_NORMAL);
1053         }
1054
1055         int minValue = __pSliderModel->GetMinValue();
1056         int maxValue = __pSliderModel->GetMaxValue();
1057
1058         __barRect = FloatRectangle(__barBgRect.x + __barOffset, __barBgRect.y, __handleRect.x , __barBgRect.height);
1059
1060         if (__isSetValue == true && __isSliderPressed == false && (maxValue - minValue) != 0)
1061         {
1062                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1063         }
1064
1065         __handleRect.x = __touchRect.x + __handleX;
1066         __handleRect.y = __touchRect.y;
1067
1068         if (__handleRect.x < __touchRect.x )
1069         {
1070                 __handleRect.x = __touchRect.x;
1071         }
1072
1073         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1074         {
1075                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1076         }
1077
1078         __barRect.width = __handleRect.x - __barRect.x + (__handleRect.width / 2);
1079
1080         if (__pSlider->GetBarBackgroundColor() != __currentBarBgColor)
1081         {
1082                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarBackgroundColor());
1083                 r = GetLastResult();
1084                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1085
1086                 delete __pBarBgColorReplacementBitmap;
1087                 __pBarBgColorReplacementBitmap = null;
1088
1089                 __pBarBgColorReplacementBitmap = pReplacementBitmap;
1090                 __currentBarBgColor = __pSlider->GetBarBackgroundColor();
1091         }
1092
1093         if (__pSlider->GetBarColor() != __currentBarColor)
1094         {
1095                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarColor());
1096                 r = GetLastResult();
1097                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1098
1099                 delete __pBarColorReplacementBitmap;
1100                 __pBarColorReplacementBitmap = null;
1101
1102                 __pBarColorReplacementBitmap = pReplacementBitmap;
1103                 __currentBarColor = __pSlider->GetBarColor();
1104         }
1105
1106         // Redrawing twice is required because, when slider is disabled we are applying alpha channel to the bar
1107         // which will show the previously drawn portion.
1108
1109         if (__pSlider->IsEnabled() == false)  // disabled
1110         {
1111                 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1112                 DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1113
1114                 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1115         }
1116         else
1117         {
1118                 opacity = __pSlider->GetBarColor().GetAlpha();
1119                 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1120         }
1121
1122         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_BG_NORMAL);
1123         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1124         if (isCustomBarBitmap == false)
1125         {
1126                 DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1127         }
1128
1129         isCustomBarBitmap = IS_CUSTOM_BITMAP(SLIDER::BAR_NORMAL);
1130         DrawBitmap(canvas, __barRect, __pBarColorReplacementBitmap);
1131         if (isCustomBarBitmap == false)
1132         {
1133                 DrawBitmap(canvas, __barRect, __pBarResourceEffectBitmap);
1134         }
1135
1136         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1137         r = GetLastResult();
1138         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1139
1140         pHandleCanvas->SetBackgroundColor(0x00000000);
1141         pHandleCanvas->Clear();
1142
1143         if (pHandleEffectBitmap != null) // drawing the default bitmap
1144         {
1145                 r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleBitmap);
1146                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1147                 if (isCustomHandleBitmap == false)
1148                 {
1149                         r = DrawBitmap(*pHandleCanvas, FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), pHandleEffectBitmap);
1150                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1151                 }
1152         }
1153         else
1154         {
1155                 bitmapWidth = pHandleBitmap->GetWidth();
1156                 bitmapHeight = pHandleBitmap->GetHeight();
1157
1158                 if (!_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHandleBitmap))
1159                 {
1160                         // to clip the center portion of the larger bitmap.
1161                         if( bitmapWidth > __handleRect.width )
1162                         {
1163                                 bitmapPositionX = (bitmapWidth / 2.0f) - (__handleRect.width / 2.0f);
1164                                 bitmapWidth = __handleRect.width;
1165                         }
1166
1167                         if( bitmapHeight > __handleRect.height )
1168                         {
1169                                 bitmapPositionY = (bitmapHeight / 2.0f) - (__handleRect.height / 2.0f);
1170                                 bitmapHeight = __handleRect.height;
1171                         }
1172
1173                         r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap, FloatRectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1174                 }
1175                 else
1176                 {
1177                         r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *pHandleBitmap);
1178                 }
1179                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1180         }
1181
1182         if ((__pSlider->IsFocused()) &&  (__isFocusModeStateChanged == true))
1183         {
1184                 if (__pHandleHighlightedBitmap)
1185                 {
1186                         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pHandleHighlightedBitmap))
1187                         {
1188                                 r = pHandleCanvas->DrawNinePatchedBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *__pHandleHighlightedBitmap);
1189                         }
1190                         else
1191                         {
1192                                 r = pHandleCanvas->DrawBitmap(FloatRectangle(0.0f, 0.0f, __handleRect.width, __handleRect.height), *__pHandleHighlightedBitmap);
1193                         }
1194
1195                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1196                 }
1197         }
1198
1199         r = __pSlider->UpdateHandle(__handleRect);
1200         if (r != E_SUCCESS)
1201         {
1202                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1203         }
1204
1205         delete pHandleCanvas;
1206         pHandleCanvas = null;
1207
1208         return r;
1209
1210 CATCH:
1211         delete pHandleCanvas;
1212         pHandleCanvas = null;
1213
1214         return r;
1215 }
1216
1217 result
1218 _SliderPresenter::DrawSliderBarNumber(int value)
1219 {
1220         result r = E_SUCCESS;
1221         int handleNumberSize = 0;
1222         Color textColor;
1223         String text;
1224         int valueLength = 0;
1225         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1226
1227         if (__pSlider->IsEnabled() == false)  // disabled
1228         {
1229                 textColor = __handleTextDisabledColor;
1230         }
1231         else if ((__pSlider->IsFocused() == true) && (__isFocusModeStateChanged == true))
1232         {
1233                 textColor = __handleTextHighlightedColor;
1234         }
1235         else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1236         {
1237                 textColor = __handleTextPressedColor;
1238         }
1239         else
1240         {
1241                 textColor = __handleTextColor;
1242         }
1243
1244         FloatDimension textDim(0.0f, 0.0f);
1245         text.Append(value);
1246         valueLength = text.GetLength();
1247
1248         if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1249         {
1250                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_THREE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1251                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1252         }
1253         else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1254         {
1255                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_TWO_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1256                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1257         }
1258         else
1259         {
1260                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1261                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1262         }
1263
1264         (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1265
1266         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1267         r = GetLastResult();
1268         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1269
1270         pHandleCanvas->SetFont(*__pFont);
1271         __pFont->GetTextExtent(text, valueLength, textDim);
1272
1273         FloatPoint textPoint;
1274         textPoint.x = (__handleRect.width - textDim.width) / 2.0f;
1275         textPoint.y = (__handleRect.height - textDim.height) / 2.0f;
1276
1277         pHandleCanvas->SetForegroundColor(textColor);
1278         pHandleCanvas->DrawText(textPoint, text);
1279
1280         delete pHandleCanvas;
1281         pHandleCanvas = null;
1282
1283         return r;
1284 }
1285
1286 result
1287 _SliderPresenter::DrawTitleText(Canvas& canvas)
1288 {
1289         result r = E_SUCCESS;
1290
1291         TextSimple* pSimpleTitleText = null;
1292         int titleTextSize = 0;
1293         int titleLength = 0;
1294         FloatRectangle titleTextBounds;
1295         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1296
1297         titleLength = __pSlider->GetTitleText().GetLength();
1298         SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1299
1300         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, titleTextSize);
1301         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1302
1303         (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1304
1305         titleTextBounds = GetTitleTextBounds();
1306
1307         if (__pTitleTextObject == null)
1308         {
1309                 __pTitleTextObject = new (std::nothrow) TextObject();
1310                 SysTryReturn(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1311                 __pTitleTextObject->Construct();
1312         }
1313
1314         pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1315
1316         __pTitleTextObject->RemoveAll();
1317         __pTitleTextObject->AppendElement(*pSimpleTitleText);
1318         __pTitleTextObject->SetForegroundColor(__pSlider->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
1319         __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
1320         __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
1321         __pTitleTextObject->SetBounds(GetTitleTextBounds());
1322         __pTitleTextObject->Compose();
1323
1324         __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1325         __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1326         __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1327
1328         return r;
1329 }
1330
1331 result
1332 _SliderPresenter::DrawIcon(Canvas& canvas)
1333 {
1334         result r = E_SUCCESS;
1335
1336         Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1337         Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1338
1339         if (pLeftBitmap != null)
1340         {
1341                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1342                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1343         }
1344
1345         if (pRightBitmap != null)
1346         {
1347                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1348                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1349         }
1350
1351         return r;
1352 }
1353
1354 result
1355 _SliderPresenter::DrawSliderOverlay(int value)
1356 {
1357         result r = E_SUCCESS;
1358
1359         FloatRectangle absBounds = __pSlider->GetAbsoluteBoundsF();
1360         r = __pSliderOverlay->SetSliderRect(absBounds, __touchRect);
1361         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1362
1363         r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1364         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1365
1366         return r;
1367 }
1368
1369 result
1370 _SliderPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
1371 {
1372         result r = E_SUCCESS;
1373
1374         if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
1375         {
1376                 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1377                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1378         }
1379         else
1380         {
1381                 r = canvas.DrawBitmap(bounds, *pBitmap);
1382                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1383         }
1384         return r;
1385 }
1386
1387 FloatRectangle
1388 _SliderPresenter::GetTitleTextBounds(void) const
1389 {
1390         FloatRectangle titleTextBounds;
1391         float topMargin = 0.0f;
1392
1393         result r = E_SUCCESS;
1394         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1395
1396         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_X, orientation, titleTextBounds.x);
1397         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1398
1399         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_Y, orientation, topMargin);
1400         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1401
1402         titleTextBounds.y = topMargin;
1403
1404         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleTextBounds.height);
1405         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1406
1407         titleTextBounds.width = __pSlider->GetBoundsF().width - titleTextBounds.x;
1408
1409         return titleTextBounds;
1410 }
1411
1412 FloatRectangle
1413 _SliderPresenter::GetTouchBounds(void) const
1414 {
1415         return __touchRect;
1416 }
1417
1418 FloatRectangle
1419 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1420 {
1421         result r = E_SUCCESS;
1422
1423         FloatRectangle iconBounds;
1424         float iconSideMargin = 0.0f;
1425         float barHeight = 0.0f;
1426
1427         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1428
1429         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconBounds.width);
1430         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1431
1432         r = GET_SHAPE_CONFIG(SLIDER::ICON_HEIGHT, orientation, iconBounds.height);
1433         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1434
1435         r = GET_SHAPE_CONFIG(SLIDER::ICON_LEFT_MARGIN, orientation, iconSideMargin);
1436         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1437
1438         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1439         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, FloatRectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1440
1441         iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1442
1443         if (iconPosition == ICON_POSITION_LEFT)
1444         {
1445                 iconBounds.x = iconSideMargin;
1446         }
1447         else
1448         {
1449                 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1450         }
1451
1452         return iconBounds;
1453 }
1454
1455 _SliderOverlay*
1456 _SliderPresenter::GetSliderOverlay(void) const
1457 {
1458         return __pSliderOverlay;
1459 }
1460
1461 bool
1462 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1463 {
1464         if (__pSlider != &source)
1465         {
1466                 return false;
1467         }
1468
1469         if (__pSlideTimer == null)
1470         {
1471                 __pSlideTimer = new (std::nothrow) Timer;
1472                 SysTryReturn(NID_UI_CTRL, __pSlideTimer != null, true, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1473
1474                 result r = __pSlideTimer->Construct(*this);
1475                 if (r != E_SUCCESS)
1476                 {
1477                         delete __pSlideTimer;
1478                         __pSlideTimer = null;
1479
1480                         return true;
1481                 }
1482         }
1483
1484         FloatPoint point = touchinfo.GetCurrentPosition();
1485
1486         if (__handleRect.Contains(point) == true)
1487         {
1488                 __isSliderPressed = true;
1489                 __isSetValue = false;
1490
1491                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1492                 __prevSliderValue = candidateValue;
1493
1494                 __pSliderModel->SetValue(candidateValue);
1495                 __pSlider->SetAccessibilityElementValue();
1496
1497                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1498                 {
1499                         __pSliderOverlay->SetVisibleState(true);
1500                         __pSliderOverlay->Open();
1501                 }
1502
1503                 __pSlider->Invalidate();
1504         }
1505
1506         return __isSliderPressed;
1507 }
1508
1509 bool
1510 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1511 {
1512         if (__pSlider != &source)
1513         {
1514                 return false;
1515         }
1516
1517         if (__pSlideTimer != null)
1518         {
1519                 __isTimerRunning = false;
1520                 __pSlideTimer->Cancel();
1521         }
1522
1523         FloatPoint point = touchinfo.GetCurrentPosition();
1524
1525         Canvas* pCanvas = __pSlider->GetCanvasN();
1526         SysTryReturn(NID_UI_CTRL, pCanvas != null, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1527
1528         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1529         {
1530                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1531         }
1532
1533         delete pCanvas;
1534         pCanvas = null;
1535
1536         if (__isSliderPressed == true)
1537         {
1538                 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pSlider);
1539                 __isSliderPressed = false;
1540                 __isSetValue = false;
1541
1542                 int candidateValue = 0;
1543
1544                 if (__isTouchCanceled)
1545                 {
1546                         __isTouchCanceled = false;
1547                         candidateValue = __prevSliderValue;
1548                 }
1549                 else
1550                 {
1551                         candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1552                         __pSliderModel->SetValue(candidateValue);
1553                         __pSlider->SetAccessibilityElementValue();
1554                 }
1555
1556                 __pSlider->Invalidate();
1557
1558                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1559                 {
1560                         __pSliderOverlay->SetVisibleState(false);
1561                         __pSliderOverlay->Close();
1562                 }
1563
1564                 //  Slider Event Fire is required if some handle value changes not fired sldier event because of timer call back.
1565                 if (__prevSliderValue != candidateValue)
1566                 {
1567                         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1568                         if (pSliderEvent != null)
1569                         {
1570                                 IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1571
1572                                 result r = GetLastResult();
1573                                 SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1574
1575                                 pSliderEvent->Fire(*pEventArg);
1576                         }
1577                 }
1578
1579                 // Adjustment Event Fire
1580                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1581                 if (pAdjustmentEvent != null)
1582                 {
1583                         IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1584                         result r = GetLastResult();
1585                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1586
1587                         pAdjustmentEvent->Fire(*pEventArg);
1588                 }
1589                 return true;
1590         }
1591
1592         return false;
1593 }
1594
1595 bool
1596 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1597 {
1598         if (__pSlider != &source)
1599         {
1600                 return false;
1601         }
1602
1603         if (__isSliderPressed == false)
1604         {
1605                 return false;
1606         }
1607
1608         FloatPoint point = touchinfo.GetCurrentPosition();
1609
1610         Canvas* pCanvas = __pSlider->GetCanvasN();
1611         SysTryReturn(NID_UI_CTRL, pCanvas != null, true, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1612
1613         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1614         {
1615                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1616         }
1617
1618         __currentPosition.x = point.x;
1619         __currentPosition.y = point.y;
1620
1621         if ( __isTimerRunning == false )
1622         {
1623                 __isTimerRunning = true;
1624                 __pSlideTimer->Start(__timerValue);
1625         }
1626
1627         delete pCanvas;
1628         pCanvas = null;
1629
1630         return true;
1631 }
1632
1633 void
1634 _SliderPresenter::OnTimerExpired(Timer& timer)
1635 {
1636         __isTimerRunning = false;
1637
1638         float handleHalfWidth = __handleRect.width / 2;
1639         int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1640
1641         __prevSliderValue = candidateValue;
1642
1643         __pSliderModel->SetValue(candidateValue);
1644         __pSlider->SetAccessibilityElementValue();
1645
1646         __pSlider->Draw();
1647         __pSlider->Show();
1648
1649     __pSlider->FireSliderMoveEvent(candidateValue);
1650
1651         return;
1652 }
1653
1654 bool
1655 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1656 {
1657         __isTouchCanceled = true;
1658
1659         return OnTouchReleased(source, touchinfo);
1660 }
1661
1662 void
1663 _SliderPresenter::OnBoundsChanged(void)
1664 {
1665         __isNeedToBeUpdated = true;
1666         Resize();
1667
1668         return;
1669 }
1670
1671 void
1672 _SliderPresenter::OnFontChanged(Font* pFont)
1673 {
1674         __pFont = pFont;
1675         __isNeedToBeUpdated = true;
1676
1677         if(__pSliderOverlay != null)
1678                 __pSliderOverlay->SetFont(pFont);
1679
1680         return;
1681 }
1682
1683 void
1684 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1685 {
1686         style = FONT_STYLE_BOLD;
1687         size = __fontSize;
1688         return;
1689 }
1690
1691 void
1692 _SliderPresenter::OnAncestorEnableStateChanged(const _Control& control)
1693 {
1694         if (__pSlider->IsEnabled())
1695         {
1696                 return;
1697         }
1698
1699         if (__pSlideTimer != null)
1700         {
1701                 __isTimerRunning = false;
1702                 __pSlideTimer->Cancel();
1703         }
1704
1705         __pSlider->Invalidate();
1706
1707         return;
1708 }
1709
1710 void
1711 _SliderPresenter::SetMinValue(int minValue)
1712 {
1713         __pSliderModel->SetMinValue(minValue);
1714
1715         if (__pSliderModel->GetValue() < minValue)
1716         {
1717                 __pSliderModel->SetValue(minValue);
1718         }
1719
1720         return;
1721 }
1722
1723 void
1724 _SliderPresenter::SetMaxValue(int maxValue)
1725 {
1726         __pSliderModel->SetMaxValue(maxValue);
1727
1728         if (__pSliderModel->GetValue() > maxValue)
1729         {
1730                 __pSliderModel->SetValue(maxValue);
1731         }
1732
1733         return;
1734 }
1735
1736 int
1737 _SliderPresenter::GetMinValue(void) const
1738 {
1739         return __pSliderModel->GetMinValue();
1740 }
1741
1742 int
1743 _SliderPresenter::GetMaxValue(void) const
1744 {
1745         return __pSliderModel->GetMaxValue();
1746 }
1747
1748 void
1749 _SliderPresenter::SetValue(int value)
1750 {
1751         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1752
1753         int minValue = __pSliderModel->GetMinValue();
1754         int maxValue = __pSliderModel->GetMaxValue();
1755
1756         if (value > maxValue)
1757         {
1758                 value = maxValue;
1759         }
1760         else if (value < minValue)
1761         {
1762                 value = minValue;
1763         }
1764
1765         __isSetValue = true;
1766
1767         __pSliderModel->SetValue(value);
1768
1769         return;
1770 }
1771
1772 int
1773 _SliderPresenter::GetValue(void) const
1774 {
1775         return __pSliderModel->GetValue();
1776 }
1777
1778 void
1779 _SliderPresenter::SetNeedUpdate(void)
1780 {
1781         __isNeedToBeUpdated = true;
1782         return;
1783 }
1784
1785 void
1786 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1787 {
1788         __groupStyle = groupStyle;
1789         return;
1790 }
1791
1792 void
1793 _SliderPresenter::SetFocusMode(bool focusmode)
1794 {
1795         __isFocusModeStateChanged = focusmode;
1796 }
1797
1798 bool
1799 _SliderPresenter::GetFocusMode(void)
1800 {
1801         return __isFocusModeStateChanged;
1802 }
1803
1804 result
1805 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1806 {
1807         Bitmap* pThumbBitmap = null;
1808         result r = E_SUCCESS;
1809
1810         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1811
1812         r = GetLastResult();
1813         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1814
1815         switch (status)
1816         {
1817         case SLIDER_THUMB_STATUS_PRESSED:
1818
1819                 delete __pHandlePressedEffectBitmap;
1820                 __pHandlePressedEffectBitmap = null;
1821
1822                 delete __pHandlePressedBitmap;
1823                 __pHandlePressedBitmap = pThumbBitmap;
1824                 break;
1825
1826         case SLIDER_THUMB_STATUS_DISABLED:
1827
1828                 delete __pHandleDisabledEffectBitmap;
1829                 __pHandleDisabledEffectBitmap = null;
1830
1831                 delete __pHandleDisabledBitmap;
1832                 __pHandleDisabledBitmap = pThumbBitmap;
1833                 break;
1834
1835         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1836
1837                 delete __pHandleHighlightedEffectBitmap;
1838                 __pHandleHighlightedEffectBitmap = null;
1839
1840                 delete __pHandleHighlightedBitmap;
1841                 __pHandleHighlightedBitmap = pThumbBitmap;
1842                 break;
1843
1844         case SLIDER_THUMB_STATUS_NORMAL:
1845         // fall through
1846         default:
1847
1848                 delete __pHandleNormalEffectBitmap;
1849                 __pHandleNormalEffectBitmap = null;
1850
1851                 delete __pHandleNormalBitmap;
1852                 __pHandleNormalBitmap = pThumbBitmap;
1853
1854                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1855                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1856
1857                 _VisualElement* pHandle = __pSlider->GetHandle();
1858                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1859
1860                 __handleOffset = __handleRect.width / 2;
1861                 __isCustomHandle = true;
1862                 break;
1863
1864         }
1865
1866         Resize();
1867         return r;
1868 }
1869
1870 void
1871 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1872 {
1873         switch (status)
1874         {
1875         case SLIDER_THUMB_STATUS_PRESSED:
1876                 __handleTextPressedColor = color;
1877                 __isCustomPressedTextColor = true;
1878                 break;
1879
1880         case SLIDER_THUMB_STATUS_DISABLED:
1881                 __handleTextDisabledColor = color;
1882                 break;
1883
1884         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1885                 __handleTextHighlightedColor = color;
1886                 break;
1887
1888         case SLIDER_THUMB_STATUS_NORMAL:
1889         // fall through
1890         default:
1891                 __handleTextColor = color;
1892                 break;
1893         }
1894
1895         return;
1896 }
1897
1898 }}} // Tizen::Ui::Controls