Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_SliderPresenter.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 /**
18  * @file                FUiCtrl_SliderPresenter.cpp
19  * @brief       This is the implementation file for the _SliderPresenter class.
20  */
21
22 #include <FBaseSysLog.h>
23 #include <FBaseErrorDefine.h>
24 #include <FGrp_BitmapImpl.h>
25 #include <FGrp_FontImpl.h>
26 #include <FGrp_TextTextObject.h>
27 #include <FGrp_TextTextSimple.h>
28 #include "FUi_UiTouchEvent.h"
29 #include "FUi_ResourceManager.h"
30 #include "FUiAnim_VisualElement.h"
31 #include "FUiCtrl_Slider.h"
32 #include "FUiCtrl_SliderModel.h"
33 #include "FUiCtrl_SliderOverlay.h"
34
35 #include "FUiCtrl_SliderPresenter.h"
36
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Base;
39 using namespace Tizen::Ui::Animations;
40 using namespace Tizen::Graphics::_Text;
41
42 namespace Tizen { namespace Ui { namespace Controls
43 {
44
45 _SliderPresenter::_SliderPresenter(void)
46         : __pSlider(null)
47         , __pSliderModel(null)
48         , __pSliderOverlay(null)
49         , __pResourceBgTopBitmap(null)
50         , __pResourceBgMiddleBitmap(null)
51         , __pResourceBgBottomBitmap(null)
52         , __pResourceBgSingleBitmap(null)
53         , __pBgTopBitmap(null)
54         , __pBgMiddleBitmap(null)
55         , __pBgBottomBitmap(null)
56         , __pBgSingleBitmap(null)
57         , __pBgGrpStyleNoneBitmap(null)
58         , __pBgTopEffectBitmap(null)
59         , __pBgMiddleEffectBitmap(null)
60         , __pBgBottomEffectBitmap(null)
61         , __pBgSingleEffectBitmap(null)
62         , __pResourceBarBitmap(null)
63         , __pBarResourceEffectBitmap(null)
64         , __pBarBgResourceEffectBitmap(null)
65         , __pBarColorReplacementBitmap(null)
66         , __pBarBgColorReplacementBitmap(null)
67         , __pHandleNormalBitmap(null)
68         , __pHandlePressedBitmap(null)
69         , __pHandleDisabledBitmap(null)
70         , __pHandleHighlightedBitmap(null)
71         , __pHandleNormalEffectBitmap(null)
72         , __pHandlePressedEffectBitmap(null)
73         , __pHandleDisabledEffectBitmap(null)
74         , __pHandleHighlightedEffectBitmap(null)
75         , __currentBarColor(0)
76         , __currentBgColor(0)
77         , __pFont(null)
78         , __pTitleTextObject(null)
79         , __sliderX(0)
80         , __handleX(0)
81         , __isSliderPressed(false)
82         , __isNeedToBeUpdated(true)
83         , __isBubblingBlocked(false)
84         , __isResourceLoaded(false)
85         , __isCustomHandle(false)
86         , __isCustomPressedTextColor(false)
87         , __groupStyle(GROUP_STYLE_NONE)
88         , __fontSize(0)
89 {
90 }
91
92 _SliderPresenter::~_SliderPresenter(void)
93 {
94         delete __pSliderModel;
95         __pSliderModel = null;
96
97         delete __pSliderOverlay;
98         __pSliderOverlay = null;
99
100         delete __pResourceBgTopBitmap;
101         __pResourceBgTopBitmap = null;
102
103         delete __pResourceBgMiddleBitmap;
104         __pResourceBgMiddleBitmap = null;
105
106         delete __pResourceBgBottomBitmap;
107         __pResourceBgBottomBitmap = null;
108
109         delete __pResourceBgSingleBitmap;
110         __pResourceBgSingleBitmap = null;
111
112         delete __pBgTopBitmap;
113         __pBgTopBitmap = null;
114
115         delete __pBgMiddleBitmap;
116         __pBgMiddleBitmap = null;
117
118         delete __pBgBottomBitmap;
119         __pBgBottomBitmap = null;
120
121         delete __pBgSingleBitmap;
122         __pBgSingleBitmap = null;
123
124         delete __pBgGrpStyleNoneBitmap;
125         __pBgGrpStyleNoneBitmap = null;
126
127         delete __pBgTopEffectBitmap;
128         __pBgTopEffectBitmap = null;
129
130         delete __pBgMiddleEffectBitmap;
131         __pBgMiddleEffectBitmap = null;
132
133         delete __pBgBottomEffectBitmap;
134         __pBgBottomEffectBitmap = null;
135
136         delete __pBgSingleEffectBitmap;
137         __pBgSingleEffectBitmap = null;
138
139         delete __pResourceBarBitmap;
140         __pResourceBarBitmap = null;
141
142         delete __pBarResourceEffectBitmap;
143         __pBarResourceEffectBitmap = null;
144
145         delete __pBarBgResourceEffectBitmap;
146         __pBarBgResourceEffectBitmap = null;
147
148         delete __pBarColorReplacementBitmap;
149         __pBarColorReplacementBitmap = null;
150
151         delete __pBarBgColorReplacementBitmap;
152         __pBarBgColorReplacementBitmap = null;
153
154         delete __pHandleNormalBitmap;
155         __pHandleNormalBitmap = null;
156
157         delete __pHandlePressedBitmap;
158         __pHandlePressedBitmap = null;
159
160         delete __pHandleDisabledBitmap;
161         __pHandleDisabledBitmap = null;
162
163         delete __pHandleHighlightedBitmap;
164         __pHandleHighlightedBitmap = null;
165
166         delete __pHandleNormalEffectBitmap;
167         __pHandleNormalEffectBitmap = null;
168
169         delete __pHandlePressedEffectBitmap;
170         __pHandlePressedEffectBitmap = null;
171
172         delete __pHandleDisabledEffectBitmap;
173         __pHandleDisabledEffectBitmap = null;
174
175         delete __pHandleHighlightedEffectBitmap;
176         __pHandleHighlightedEffectBitmap = null;
177
178         delete __pTitleTextObject;
179         __pTitleTextObject = null;
180
181 }
182
183 _SliderPresenter*
184 _SliderPresenter::CreateInstanceN(const _Slider& slider)
185 {
186         result r = E_SUCCESS;
187
188         _SliderPresenter* pSliderPresenter = new (std::nothrow) _SliderPresenter;
189         SysTryReturn(NID_UI_CTRL, pSliderPresenter != null, null, E_OUT_OF_MEMORY,
190                                  "[E_OUT_OF_MEMORY] Memory allocation failed.");
191
192         pSliderPresenter->__pSlider = const_cast <_Slider*>(&slider);
193         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSlider != null, , E_SYSTEM,
194                                 "[E_SYSTEM] A system error has occurred. The Slider control core is null.");
195
196         pSliderPresenter->__pSliderModel = new (std::nothrow) _SliderModel;
197         SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderModel != null, , E_OUT_OF_MEMORY,
198                                 "[E_OUT_OF_MEMORY] Memory allocation failed.");
199
200         if (pSliderPresenter->__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
201         {
202                 pSliderPresenter->__pSliderOverlay = new (std::nothrow) _SliderOverlay;
203                 SysTryCatch(NID_UI_CTRL, pSliderPresenter->__pSliderOverlay != null, , E_OUT_OF_MEMORY,
204                                         "[E_OUT_OF_MEMORY] Memory allocation failed.");
205
206                 r = pSliderPresenter->__pSliderOverlay->Construct();
207                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
208         }
209
210         return pSliderPresenter;
211
212 CATCH:
213         delete pSliderPresenter;
214         pSliderPresenter = null;
215
216         return null;
217 }
218
219 result
220 _SliderPresenter::Resize(void)
221 {
222         result r = E_SUCCESS;
223
224         int barHeight = 0;
225         int barLeftMargin = 0;
226         int barRightMargin = 0;
227         int sliderY = 0;
228         int iconWidth = 0;
229         int iconSideMargin = 0;
230         int offset = 0;
231         int minimumHeight = 0;
232         int minimumWidth = 0;
233         int topMargin = 0;
234         int iconRightMargin = 0;
235         Rectangle titleTextBounds;
236
237         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
238
239         if (__isResourceLoaded == false)
240         {
241                 r = LoadBitmap();
242                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
243                 __isResourceLoaded = true;
244
245                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, __fontSize);
246                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
247
248                 __pFont = __pSlider->GetFallbackFont();
249                 r = GetLastResult();
250                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
251
252                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_NORMAL, __handleTextColor);
253                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
254
255                 r = GET_COLOR_CONFIG(SLIDER::HANDLE_NUMBER_TEXT_DISABLED, __handleTextDisabledColor);
256                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
257
258                 __handleTextPressedColor = __handleTextColor;
259                 __handleTextHighlightedColor = __handleTextColor;
260
261         }
262
263
264         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);
265         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
266
267         r = GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN, orientation, barLeftMargin);
268         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
269
270         barRightMargin = barLeftMargin;
271
272         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconWidth);
273         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
274
275
276         if (!__isCustomHandle)
277         {
278                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
279                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
280
281                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_WIDTH, orientation, __handleRect.width);
282                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
283
284                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_HEIGHT, orientation, __handleRect.height);
285                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
286         }
287         __rect = Rectangle(0, 0, __pSlider->GetBounds().width, __pSlider->GetBounds().height);
288
289         r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, orientation, topMargin);
290         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
291
292         r = GET_SHAPE_CONFIG(SLIDER::ICON_RIGHT_MARGIN, orientation, iconRightMargin);
293         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
294
295         if ((__pSlider->GetIcon(ICON_POSITION_LEFT) != null) || (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null))
296         {
297                 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_SIZE_WITH_ICON, orientation, minimumWidth);
298                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
299
300                 if (__rect.width < minimumWidth)
301         {
302                         __rect.width = minimumWidth;
303         }
304         }
305         else
306         {
307                 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_SIZE_WITHOUT_ICON, orientation, minimumWidth);
308                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
309
310                 if (__rect.width < minimumWidth)
311                         __rect.width = minimumWidth;
312         }
313
314         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
315         {
316                 r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, minimumHeight);
317                 minimumHeight = minimumHeight + (2 * topMargin) + barHeight;
318                 if (__rect.height < minimumHeight )
319                         __rect.height = minimumHeight;
320         }
321         else
322         {
323                 minimumHeight = (2 * topMargin) + barHeight;
324                 if (__rect.height < minimumHeight)
325                         __rect.height = minimumHeight;
326         }
327
328         if (__pSlider->GetStyle() & _SLIDER_STYLE_TITLE_TEXT)
329         {
330                 titleTextBounds = GetTitleTextBounds();
331                 sliderY = titleTextBounds.y + titleTextBounds.height;
332                 __touchRect = Rectangle(barLeftMargin - offset, sliderY + (__rect.height - (sliderY + __handleRect.height)) / 2,
333                                                                 __rect.width - (barLeftMargin + barRightMargin) + (2 * offset), __handleRect.height);
334         }
335         else
336         {
337                 __touchRect = Rectangle(barLeftMargin - offset, (__rect.height - __handleRect.height) / 2,
338                                                                 (__rect.width - (barLeftMargin + barRightMargin)) + (2 * offset), __handleRect.height);
339         }
340
341         if (__pSlider->GetIcon(ICON_POSITION_LEFT) != null)
342         {
343                 __touchRect.x = __touchRect.x + iconWidth + iconRightMargin;
344                 __touchRect.width = __touchRect.width - (iconWidth + iconRightMargin);
345         }
346
347         if (__pSlider->GetIcon(ICON_POSITION_RIGHT) != null)
348         {
349                 __touchRect.width = __touchRect.width - (iconWidth + iconSideMargin + iconRightMargin);
350         }
351
352         __barBgRect = Rectangle(__touchRect.x + offset, __touchRect.y +
353                                                         ((__handleRect.height - barHeight) / 2), __touchRect.width - (2 * offset), barHeight);
354
355         Rectangle absBounds = __pSlider->GetAbsoluteBounds();
356         __pSliderOverlay->SetSliderRect(absBounds, __touchRect);
357
358         return r;
359 }
360
361 result
362 _SliderPresenter::LoadBitmap(void)
363 {
364         result r = E_SUCCESS;
365
366         int opacity = 0;
367         Bitmap* pBitmap = null;
368         Bitmap* pNormalBitmap = null;
369         Bitmap* pPressedBitmap = null;
370         Bitmap* pDisabledBitmap = null;
371         Bitmap* pHighlightedBitmap = null;
372         Bitmap* pReplacementBitmap = null;
373         Color barBgColor;
374         Color handleNormalColor;
375         Color handlePressedColor;
376         Color handleDisabledColor;
377         Color handleHighlightedColor;
378
379         r = GET_COLOR_CONFIG(SLIDER::BG_OTHERS_NORMAL, __currentBgColor);
380         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
381
382         r = GET_COLOR_CONFIG(SLIDER::BG_DEFAULT_NORMAL, __currentGrpStyleNoneColor);
383         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
384
385         r = GET_COLOR_CONFIG(SLIDER::BAR_NORMAL, __currentBarColor);
386         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
387
388         r = GET_COLOR_CONFIG(SLIDER::BAR_BG_NORMAL, barBgColor);
389         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
390
391         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_NORMAL, handleNormalColor);
392         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
393
394         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_PRESSED, handlePressedColor);
395         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
396
397         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_DISABLED, handleDisabledColor);
398         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
399
400         r = GET_COLOR_CONFIG(SLIDER::HANDLE_BG_HIGHLIGHTED, handleHighlightedColor);
401         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
402
403         // for GROUP_STYLE_TOP
404         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_TOP_BG, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgTopBitmap);
405         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "Propagating.");
406
407         __pBgTopBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
408         r = GetLastResult();
409         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
410
411         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_TOP_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgTopEffectBitmap);
412         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
413
414
415         // for GROUP_STYLE_MIDDLE
416         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_MIDDLE_BG, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgMiddleBitmap);
417         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
418
419         __pBgMiddleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
420         r = GetLastResult();
421         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
422
423         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_MIDDLE_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgMiddleEffectBitmap);
424         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
425
426
427         // for GROUP_STYLE_BOTTOM
428         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_BOTTOM_BG, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgBottomBitmap);
429         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
430
431         __pBgBottomBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
432         r = GetLastResult();
433         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
434
435         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_BOTTOM_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgBottomEffectBitmap);
436         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
437
438         // for GROUP_STYLE_SINGLE and GROUP_STYLE_NONE
439         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_SINGLE_BG, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBgSingleBitmap);
440         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
441
442         __pBgSingleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentBgColor);
443         r = GetLastResult();
444         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
445
446         __pBgGrpStyleNoneBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __currentGrpStyleNoneColor);
447         r = GetLastResult();
448         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
449
450
451         r = GET_BITMAP_CONFIG_N(SLIDER::GROUP_SINGLE_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBgSingleEffectBitmap);
452         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
453
454         opacity = __currentBgColor.GetAlpha();
455
456         __pBgTopBitmap->SetAlphaConstant(opacity);
457         __pBgMiddleBitmap->SetAlphaConstant(opacity);
458         __pBgBottomBitmap->SetAlphaConstant(opacity);
459         __pBgSingleBitmap->SetAlphaConstant(opacity);
460         __pBgGrpStyleNoneBitmap->SetAlphaConstant(__currentGrpStyleNoneColor.GetAlpha());
461
462
463         __pBgTopEffectBitmap->SetAlphaConstant(opacity);
464         __pBgMiddleEffectBitmap->SetAlphaConstant(opacity);
465         __pBgBottomEffectBitmap->SetAlphaConstant(opacity);
466         __pBgSingleEffectBitmap->SetAlphaConstant(opacity);
467
468
469         // Bar Resources
470         r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBarBitmap);
471         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
472
473         __pBarBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap,Color::GetColor(COLOR_ID_MAGENTA), barBgColor);
474         r = GetLastResult();
475         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
476
477         delete __pResourceBarBitmap;
478         __pResourceBarBitmap = null;
479
480         r = GET_BITMAP_CONFIG_N(SLIDER::BAR_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBarBitmap);
481         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
482
483         __pBarColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap,Color::GetColor(COLOR_ID_MAGENTA), __currentBarColor);
484         r = GetLastResult();
485         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
486
487         r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarBgResourceEffectBitmap);
488         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
489
490         r = GET_BITMAP_CONFIG_N(SLIDER::BAR_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarResourceEffectBitmap);
491         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
492
493         opacity = __currentBarColor.GetAlpha();
494         __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
495
496         // Handle Resources
497         r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pNormalBitmap);
498         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
499
500         if (__pHandleNormalBitmap == null)
501         {
502                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleNormalColor);
503                 r = GetLastResult();
504                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
505
506                 __pHandleNormalBitmap = pReplacementBitmap;
507         }
508
509         r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pPressedBitmap);
510         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
511
512         if (__pHandlePressedBitmap == null)
513         {
514                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handlePressedColor);
515                 r = GetLastResult();
516                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
517
518                 __pHandlePressedBitmap = pReplacementBitmap;
519         }
520
521         r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pDisabledBitmap);
522         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
523
524         if (__pHandleDisabledBitmap == null)
525         {
526                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDisabledBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleDisabledColor);
527                 r = GetLastResult();
528                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
529
530                 __pHandleDisabledBitmap = pReplacementBitmap;
531         }
532
533         r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pHighlightedBitmap);
534         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
535
536         if (__pHandleHighlightedBitmap == null)
537         {
538                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), handleHighlightedColor);
539                 r = GetLastResult();
540                 SysTryCatch(NID_UI_CTRL, (pReplacementBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
541
542                 __pHandleHighlightedBitmap = pReplacementBitmap;
543         }
544
545         if (__pHandleNormalEffectBitmap == null)
546         {
547                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
548                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
549
550                 __pHandleNormalEffectBitmap = pBitmap;
551         }
552
553         if (__pHandlePressedEffectBitmap == null)
554         {
555                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
556                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
557
558                 __pHandlePressedEffectBitmap = pBitmap;
559         }
560
561         if (__pHandleDisabledEffectBitmap == null)
562         {
563                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
564                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
565
566                 __pHandleDisabledEffectBitmap = pBitmap;
567         }
568
569         if (__pHandleHighlightedEffectBitmap == null)
570         {
571                 r = GET_BITMAP_CONFIG_N(SLIDER::HANDLE_BG_EFFECT_HIGHLIGHTED, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
572                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
573
574                 __pHandleHighlightedEffectBitmap = pBitmap;
575         }
576
577         delete pNormalBitmap;
578         delete pPressedBitmap;
579         delete pDisabledBitmap;
580         delete pHighlightedBitmap;
581
582         return r;
583
584 CATCH:
585
586         delete pNormalBitmap;
587         delete pPressedBitmap;
588         delete pDisabledBitmap;
589         delete pHighlightedBitmap;
590
591         delete pBitmap;
592
593         delete __pResourceBgTopBitmap;
594         __pResourceBgTopBitmap = null;
595
596         delete __pResourceBgMiddleBitmap;
597         __pResourceBgMiddleBitmap = null;
598
599         delete __pResourceBgBottomBitmap;
600         __pResourceBgBottomBitmap = null;
601
602         delete __pResourceBgSingleBitmap;
603         __pResourceBgSingleBitmap = null;
604
605         delete __pBgTopBitmap;
606         __pBgTopBitmap = null;
607
608         delete __pBgMiddleBitmap;
609         __pBgMiddleBitmap = null;
610
611         delete __pBgBottomBitmap;
612         __pBgBottomBitmap = null;
613
614         delete __pBgSingleBitmap;
615         __pBgSingleBitmap = null;
616
617         delete __pBgGrpStyleNoneBitmap;
618         __pBgGrpStyleNoneBitmap = null;
619
620         delete __pBgTopEffectBitmap;
621         __pBgTopEffectBitmap = null;
622
623         delete __pBgMiddleEffectBitmap;
624         __pBgMiddleEffectBitmap = null;
625
626         delete __pBgBottomEffectBitmap;
627         __pBgBottomEffectBitmap = null;
628
629         delete __pBgSingleEffectBitmap;
630         __pBgSingleEffectBitmap = null;
631
632         delete __pResourceBarBitmap;
633         __pResourceBarBitmap = null;
634
635         delete __pBarResourceEffectBitmap;
636         __pBarResourceEffectBitmap = null;
637
638         delete __pBarBgResourceEffectBitmap;
639         __pBarBgResourceEffectBitmap = null;
640
641         delete __pBarColorReplacementBitmap;
642         __pBarColorReplacementBitmap = null;
643
644         delete __pBarBgColorReplacementBitmap;
645         __pBarBgColorReplacementBitmap = null;
646
647         delete __pHandleNormalBitmap;
648         __pHandleNormalBitmap = null;
649
650         delete __pHandlePressedBitmap;
651         __pHandlePressedBitmap = null;
652
653         delete __pHandleDisabledBitmap;
654         __pHandleDisabledBitmap = null;
655
656         delete __pHandleHighlightedBitmap;
657         __pHandleHighlightedBitmap = null;
658
659         delete __pHandleNormalEffectBitmap;
660         __pHandleNormalEffectBitmap = null;
661
662         delete __pHandlePressedEffectBitmap;
663         __pHandlePressedEffectBitmap = null;
664
665         delete __pHandleDisabledEffectBitmap;
666         __pHandleDisabledEffectBitmap = null;
667
668         delete __pHandleHighlightedEffectBitmap;
669         __pHandleHighlightedEffectBitmap = null;
670
671         return r;
672 }
673
674 int
675 _SliderPresenter::CalculateSliderValue(int positionX, int offsetX)
676 {
677         int minValue = __pSliderModel->GetMinValue();
678         int maxValue = __pSliderModel->GetMaxValue();
679
680         if (positionX <= __touchRect.x + offsetX)
681         {
682                 __sliderX = 0;
683                 __handleX = 0;
684                 return minValue;
685         }
686
687         if (positionX >= (__touchRect.x + __touchRect.width) - offsetX)
688         {
689                 __sliderX = __barBgRect.width - __handleRect.width;
690                 __handleX = __touchRect.width - __handleRect.width;
691                 return maxValue;
692         }
693
694         if ((maxValue - minValue) == 0)
695         {
696                 return minValue;
697         }
698
699         __sliderX = positionX - (__barBgRect.x + offsetX);
700         __handleX = positionX - (__touchRect.x + offsetX);
701
702         __handleRect.x = __touchRect.x + __handleX;
703         __handleRect.y = __touchRect.y;
704
705         if (__handleRect.x < __touchRect.x )
706         {
707                 __handleRect.x = __touchRect.x;
708         }
709
710         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
711         {
712                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
713         }
714
715         return minValue + (int) ((float) (__handleX * (maxValue - minValue)) / (float)(__touchRect.width - __handleRect.width) + 0.5); // current value = current width * range / bar bg width
716 }
717
718 result
719 _SliderPresenter::Draw(void)
720 {
721         if (__isNeedToBeUpdated == true)
722         {
723                 Resize();
724         }
725
726         return DrawSlider();
727 }
728
729 result
730 _SliderPresenter::DrawSlider(void)
731 {
732         result r = E_SUCCESS;
733         int sliderY = 0;
734         Rectangle titleTextBounds;
735
736         int style = __pSlider->GetStyle();
737
738         Canvas* pCanvas = __pSlider->GetCanvasN();
739         SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
740
741         if (__isNeedToBeUpdated == true)
742         {
743                 r = DrawBackground(*pCanvas);
744                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
745
746                 r = DrawIcon(*pCanvas);
747                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
748
749                 if (style & _SLIDER_STYLE_TITLE_TEXT)
750                 {
751                         r = DrawTitleText(*pCanvas);
752                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
753                 }
754
755                 __isNeedToBeUpdated = false;
756         }
757
758         if (style & _SLIDER_STYLE_TITLE_TEXT)
759         {
760                 titleTextBounds = GetTitleTextBounds();
761                 sliderY = titleTextBounds.y + titleTextBounds.height;
762         }
763
764         if(sliderY < __rect.height)
765         {
766                 r = DrawSliderBar(*pCanvas);
767                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
768
769                 if (__isSliderPressed == true)
770                 {
771                         if (style & _SLIDER_STYLE_OVERLAY)
772                         {
773                                 r = DrawSliderOverlay(__pSliderModel->GetValue());
774                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
775                         }
776                         else
777                         {
778                                 r = DrawSliderBarNumber(__pSliderModel->GetValue());
779                                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
780                         }
781                 }
782                 else
783                 {
784                         r = DrawSliderBarNumber(__pSliderModel->GetValue());
785                         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
786                 }
787         }
788
789         delete pCanvas;
790         pCanvas = null;
791
792         return r;
793
794 CATCH:
795         delete pCanvas;
796         pCanvas = null;
797
798         return r;
799 }
800
801 result
802 _SliderPresenter::DrawBackground(Canvas& canvas)
803 {
804         Bitmap* pBgBitmap = null;
805         Bitmap* pBgEffectBitmap = null;
806         Bitmap* pBgGroupBitmap = null;
807
808         int opacity = 0;
809         result r = E_SUCCESS;
810         canvas.SetBackgroundColor(Color(0x00000000));
811         canvas.Clear();
812
813         if (!(__pSlider->GetStyle() & _SLIDER_STYLE_NO_BG))
814         {
815                 switch (__groupStyle)
816                 {
817                 case GROUP_STYLE_TOP:
818                         pBgEffectBitmap = __pBgTopEffectBitmap;
819                         if (__pSlider->GetColor() == __currentBgColor)
820                         {
821                                 pBgBitmap = __pBgTopBitmap;
822                         }
823                         else
824                         {
825                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgTopBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
826                                 r = GetLastResult();
827                                 if (!pBgGroupBitmap)
828                                 {
829                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
830                                                 return r;
831                                 }
832                                 else
833                                 {
834                                         delete __pBgTopBitmap;
835                                         __pBgTopBitmap = null;
836                                         __pBgTopBitmap = pBgGroupBitmap;
837
838                                         pBgBitmap = pBgGroupBitmap;
839                                         opacity = __pSlider->GetColor().GetAlpha();
840                                         pBgBitmap->SetAlphaConstant(opacity);
841                                         __currentBgColor = __pSlider->GetColor();
842                                 }
843                         }
844                         break;
845
846                 case GROUP_STYLE_MIDDLE:
847                         pBgEffectBitmap = __pBgMiddleEffectBitmap;
848                         if (__pSlider->GetColor() == __currentBgColor)
849                         {
850                                 pBgBitmap = __pBgMiddleBitmap;
851                         }
852                         else
853                         {
854                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgMiddleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
855                                 r = GetLastResult();
856                                 if (!pBgGroupBitmap)
857                                 {
858                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
859                                                 return r;
860                                 }
861                                 else
862                                 {
863                                         delete __pBgMiddleBitmap;
864                                         __pBgMiddleBitmap = null;
865                                         __pBgMiddleBitmap = pBgGroupBitmap;
866
867                                         pBgBitmap = __pBgMiddleBitmap;
868                                         opacity = __pSlider->GetColor().GetAlpha();
869                                         pBgBitmap->SetAlphaConstant(opacity);
870                                         __currentBgColor = __pSlider->GetColor();
871                                 }
872                         }
873                         break;
874
875                 case GROUP_STYLE_BOTTOM:
876                         pBgEffectBitmap = __pBgBottomEffectBitmap;
877                         if (__pSlider->GetColor() == __currentBgColor)
878                         {
879                                 pBgBitmap = __pBgBottomBitmap;
880                         }
881                         else
882                         {
883                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgBottomBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
884                                 r = GetLastResult();
885                                 if (!pBgGroupBitmap)
886                                 {
887                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
888                                                 return r;
889                                 }
890                                 else
891                                 {
892                                         delete __pBgBottomBitmap;
893                                         __pBgBottomBitmap = null;
894                                         __pBgBottomBitmap = pBgGroupBitmap;
895
896                                         pBgBitmap = __pBgBottomBitmap;
897                                         opacity = __pSlider->GetColor().GetAlpha();
898                                         pBgBitmap->SetAlphaConstant(opacity);
899                                         __currentBgColor = __pSlider->GetColor();
900                                 }
901                         }
902                         break;
903
904                 case GROUP_STYLE_SINGLE:
905                         pBgEffectBitmap = __pBgSingleEffectBitmap;
906                         if (__pSlider->GetColor() == __currentBgColor)
907                         {
908                                 pBgBitmap = __pBgSingleBitmap;
909                         }
910                         else
911                         {
912                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
913                                 r = GetLastResult();
914                                 if (!pBgGroupBitmap)
915                                 {
916                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
917                                                 return r;
918                                 }
919                                 else
920                                 {
921
922                                         delete __pBgSingleBitmap;
923                                         __pBgSingleBitmap = null;
924                                         __pBgSingleBitmap = pBgGroupBitmap;
925
926                                         pBgBitmap = __pBgSingleBitmap;
927                                         opacity = __pSlider->GetColor().GetAlpha();
928                                         pBgBitmap->SetAlphaConstant(opacity);
929                                         __currentBgColor = __pSlider->GetColor();
930                                 }
931                         }
932                         break;
933
934                 case GROUP_STYLE_NONE:
935                 //fall through
936                 default:
937                         if (__pSlider->GetColor() == __currentBgColor)
938                         {
939                                 pBgBitmap = __pBgGrpStyleNoneBitmap;
940                         }
941                         else
942                         {
943                                 pBgGroupBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBgSingleBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetColor());
944                                 r = GetLastResult();
945                                 if (!pBgGroupBitmap)
946                                 {
947                                                 SysLog(NID_UI_CTRL, "[%s] Propagating.", GetErrorMessage(r));
948                                                 return r;
949                                 }
950                                 else
951                                 {
952                                         delete __pBgGrpStyleNoneBitmap;
953                                         __pBgGrpStyleNoneBitmap = null;
954                                         __pBgGrpStyleNoneBitmap = pBgGroupBitmap;
955
956                                         pBgBitmap = __pBgGrpStyleNoneBitmap;
957                                         opacity = __pSlider->GetColor().GetAlpha();
958                                         pBgBitmap->SetAlphaConstant(opacity);
959                                         __currentBgColor = __pSlider->GetColor();
960                                 }
961                         }
962                         break;
963                 }
964
965                 DrawBitmap(canvas, __rect, pBgBitmap);
966                 if ( __groupStyle != GROUP_STYLE_NONE)
967                 {
968                         DrawBitmap(canvas, __rect, pBgEffectBitmap);
969                 }
970         }
971         return E_SUCCESS;
972 }
973
974 result
975 _SliderPresenter::DrawSliderBar(Canvas& canvas)
976 {
977         result r = E_SUCCESS;
978         int bitmapHeight = 0;
979         int bitmapWidth = 0;
980         int bitmapPositionX = 0;
981         int bitmapPositionY = 0;
982         int opacity = 0;
983         int offset = 0;
984         Bitmap* pReplacementBitmap = null;
985         Bitmap* pHandleBitmap = null;
986         Bitmap* pHandleEffectBitmap = null;
987
988         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
989
990         r = GET_SHAPE_CONFIG(SLIDER::HANDLE_OFFSET, orientation, offset);
991         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
992
993         if (__pSlider->IsEnabled() == false)  // disabled
994         {
995                 pHandleBitmap = __pHandleDisabledBitmap;
996                 pHandleEffectBitmap = __pHandleDisabledEffectBitmap;
997                 if(__isSliderPressed == true)
998                 {
999                         __isSliderPressed = false;
1000                         if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1001                         {
1002                                 __pSliderOverlay->Close();
1003                         }
1004                 }
1005         }
1006         else if (__isSliderPressed == true)   // pressed
1007         {
1008                 pHandleBitmap = __pHandlePressedBitmap;
1009                 pHandleEffectBitmap = __pHandlePressedEffectBitmap;
1010         }
1011         else if (__pSlider->IsFocused() == true)
1012         {
1013                 pHandleBitmap = __pHandleHighlightedBitmap;
1014                 pHandleEffectBitmap = __pHandleHighlightedEffectBitmap;
1015         }
1016         else //(__isSliderPressed == false)     // normal state
1017         {
1018                 pHandleBitmap = __pHandleNormalBitmap;
1019                 pHandleEffectBitmap = __pHandleNormalEffectBitmap;
1020         }
1021
1022         int minValue = __pSliderModel->GetMinValue();
1023         int maxValue = __pSliderModel->GetMaxValue();
1024
1025         __barRect = Rectangle(__barBgRect.x, __barBgRect.y, __sliderX, __barBgRect.height);
1026
1027         if (__isSliderPressed == false && (maxValue - minValue) != 0)
1028         {
1029                 __barRect.width = ((__barBgRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1030                 __handleX = ((__touchRect.width - __handleRect.width) * (__pSliderModel->GetValue() - minValue)) / (maxValue - minValue);
1031         }
1032
1033         if (__pSlider->GetBarColor() != __currentBarColor)
1034         {
1035                 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pSlider->GetBarColor());
1036                 r = GetLastResult();
1037                 SysTryReturn(NID_UI_CTRL, (pReplacementBitmap != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
1038
1039                 delete __pBarColorReplacementBitmap;
1040                 __pBarColorReplacementBitmap = null;
1041
1042                 __pBarColorReplacementBitmap = pReplacementBitmap;
1043                 __currentBarColor = __pSlider->GetBarColor();
1044         }
1045
1046         // Redrawing twice is required because, when slider is disabled we are applying alpha channel to the bar
1047         // which will show the previously drawn portion.
1048
1049         __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
1050         __pBarColorReplacementBitmap->SetAlphaConstant(0xFF);
1051
1052         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1053         DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1054
1055
1056         if (__pSlider->IsEnabled() == false)  // disabled
1057         {
1058                 __pBarBgColorReplacementBitmap->SetAlphaConstant(0x4C);
1059                 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
1060         }
1061         else
1062         {
1063                 opacity = __pSlider->GetBarColor().GetAlpha();
1064                 __pBarBgColorReplacementBitmap->SetAlphaConstant(opacity);
1065                 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
1066         }
1067
1068         DrawBitmap(canvas, __barBgRect, __pBarBgColorReplacementBitmap);
1069         DrawBitmap(canvas, __barBgRect, __pBarBgResourceEffectBitmap);
1070
1071         DrawBitmap(canvas, Rectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarColorReplacementBitmap);
1072         DrawBitmap(canvas, Rectangle(__barRect.x, __barRect.y, (__barRect.width + __handleRect.width / 2), __barRect.height), __pBarResourceEffectBitmap);
1073
1074         __handleRect.x = __touchRect.x + __handleX;
1075         __handleRect.y = __touchRect.y;
1076
1077         if (__handleRect.x < __touchRect.x )
1078         {
1079                 __handleRect.x = __touchRect.x;
1080         }
1081
1082         if (__handleRect.x + __handleRect.width > __touchRect.x + __touchRect.width )
1083         {
1084                 __handleRect.x = __touchRect.x + __touchRect.width - __handleRect.width;
1085         }
1086
1087         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1088         r = GetLastResult();
1089         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1090
1091         pHandleCanvas->SetBackgroundColor(0x00000000);
1092         pHandleCanvas->Clear();
1093
1094         if (pHandleEffectBitmap != null) // drawing the default bitmap
1095         {
1096                 r = DrawBitmap(*pHandleCanvas, Rectangle(0, 0, __handleRect.width, __handleRect.height), pHandleBitmap);
1097                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1098
1099                 r = DrawBitmap(*pHandleCanvas, Rectangle(0, 0, __handleRect.width, __handleRect.height), pHandleEffectBitmap);
1100                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1101         }
1102         else
1103         {
1104                 bitmapWidth = pHandleBitmap->GetWidth();
1105                 bitmapHeight = pHandleBitmap->GetHeight();
1106
1107                 if (pHandleBitmap->IsNinePatchedBitmap() == false)
1108                 {
1109                         // to clip the center portion of the larger bitmap.
1110                         if( bitmapWidth > __handleRect.width )
1111                         {
1112                                 bitmapPositionX = (bitmapWidth / 2) - (__handleRect.width / 2);
1113                                 bitmapWidth = __handleRect.width;
1114                         }
1115
1116                         if( bitmapHeight > __handleRect.height )
1117                         {
1118                                 bitmapPositionY = (bitmapHeight / 2) - (__handleRect.height / 2);
1119                                 bitmapHeight = __handleRect.height;
1120                         }
1121
1122                         r = pHandleCanvas->DrawBitmap(Rectangle(0, 0, __handleRect.width, __handleRect.height), *pHandleBitmap, Rectangle(bitmapPositionX, bitmapPositionY, bitmapWidth, bitmapHeight));
1123                 }
1124                 else
1125                 {
1126                         r = pHandleCanvas->DrawNinePatchedBitmap(Rectangle(0, 0, __handleRect.width, __handleRect.height), *pHandleBitmap);
1127                 }
1128                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1129         }
1130
1131         r = __pSlider->UpdateHandle(__handleRect);
1132         if (r != E_SUCCESS)
1133         {
1134                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
1135         }
1136
1137         delete pHandleCanvas;
1138         pHandleCanvas = null;
1139
1140         return r;
1141
1142 CATCH:
1143         delete pHandleCanvas;
1144         pHandleCanvas = null;
1145
1146         return r;
1147 }
1148
1149 result
1150 _SliderPresenter::DrawSliderBarNumber(int value)
1151 {
1152         result r = E_SUCCESS;
1153         int handleNumberSize = 0;
1154         Color textColor;
1155         String text;
1156         int valueLength = 0;
1157         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1158
1159         if (__pSlider->IsEnabled() == false)  // disabled
1160         {
1161                 textColor = __handleTextDisabledColor;
1162         }
1163         else if (__pSlider->IsFocused() == true)
1164         {
1165                 textColor = __handleTextHighlightedColor;
1166         }
1167         else if ((__isSliderPressed == true) && !(__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY))
1168         {
1169                 if(!__isCustomPressedTextColor)
1170                 {
1171                         r = GET_COLOR_CONFIG(SLIDER::OVERLAY_TEXT_NORMAL, __handleTextPressedColor);
1172                         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1173                 }
1174                 textColor = __handleTextPressedColor;
1175         }
1176         else
1177         {
1178                 textColor = __handleTextColor;
1179         }
1180
1181         Dimension textDim(0, 0);
1182         text.Append(value);
1183         valueLength = text.GetLength();
1184
1185         if (valueLength == SLIDER_HANDLE_THREE_DIGIT)
1186         {
1187                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_THREE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1188                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1189         }
1190         else if (valueLength == SLIDER_HANDLE_TWO_DIGIT)
1191         {
1192                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_TWO_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1193                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1194         }
1195         else
1196         {
1197                 r = GET_SHAPE_CONFIG(SLIDER::HANDLE_ONE_DIGIT_TEXT_SIZE, orientation, handleNumberSize);
1198                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1199         }
1200
1201         (_FontImpl::GetInstance(*__pFont))->SetSize(handleNumberSize);
1202
1203         Canvas* pHandleCanvas = __pSlider->GetHandleCanvasN();
1204         r = GetLastResult();
1205         SysTryReturn(NID_UI_CTRL, pHandleCanvas != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1206
1207         pHandleCanvas->SetFont(*__pFont);
1208         __pFont->GetTextExtent(text, valueLength, textDim);
1209
1210         Point textPoint;
1211         textPoint.x = (__handleRect.width - textDim.width) / 2;
1212         textPoint.y = (__handleRect.height - textDim.height) / 2;
1213
1214         pHandleCanvas->SetForegroundColor(textColor);
1215         pHandleCanvas->DrawText(textPoint, text);
1216
1217         delete pHandleCanvas;
1218         pHandleCanvas = null;
1219
1220         return r;
1221 }
1222
1223 result
1224 _SliderPresenter::DrawTitleText(Canvas& canvas)
1225 {
1226         result r = E_SUCCESS;
1227
1228         TextSimple* pSimpleTitleText = null;
1229         int titleTextSize = 0;
1230         int titleLength = 0;
1231         Rectangle titleTextBounds;
1232         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1233
1234         titleLength = __pSlider->GetTitleText().GetLength();
1235         SysTryReturn(NID_UI_CTRL, titleLength != 0, E_SUCCESS, E_SUCCESS, "Title text is empty");
1236
1237         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_SIZE, orientation, titleTextSize);
1238         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1239
1240         (_FontImpl::GetInstance(*__pFont))->SetSize(titleTextSize);
1241
1242         titleTextBounds = GetTitleTextBounds();
1243
1244         if (__pTitleTextObject == null)
1245         {
1246                 __pTitleTextObject = new (std::nothrow) TextObject();
1247                 SysTryReturn(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1248                 __pTitleTextObject->Construct();
1249         }
1250
1251         pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pSlider->GetTitleText().GetPointer()), __pSlider->GetTitleText().GetLength());
1252
1253         __pTitleTextObject->RemoveAll();
1254         __pTitleTextObject->AppendElement(*pSimpleTitleText);
1255         __pTitleTextObject->SetForegroundColor(__pSlider->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
1256         __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
1257         __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
1258         __pTitleTextObject->SetBounds(GetTitleTextBounds());
1259         __pTitleTextObject->Compose();
1260
1261         __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
1262         __pTitleTextObject->SetFont(__pFont, 0, __pTitleTextObject->GetTextLength());
1263         __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(canvas));
1264
1265         return r;
1266 }
1267
1268 result
1269 _SliderPresenter::DrawIcon(Canvas& canvas)
1270 {
1271         result r = E_SUCCESS;
1272
1273         Bitmap* pLeftBitmap = __pSlider->GetIcon(ICON_POSITION_LEFT);
1274         Bitmap* pRightBitmap = __pSlider->GetIcon(ICON_POSITION_RIGHT);
1275
1276         if (pLeftBitmap != null)
1277         {
1278                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_LEFT), pLeftBitmap);
1279                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1280         }
1281
1282         if (pRightBitmap != null)
1283         {
1284                 r = DrawBitmap(canvas, GetIconBounds(ICON_POSITION_RIGHT), pRightBitmap);
1285                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1286         }
1287
1288         return r;
1289 }
1290
1291 result
1292 _SliderPresenter::DrawSliderOverlay(int value)
1293 {
1294         result r = E_SUCCESS;
1295
1296         Rectangle absBounds = __pSlider->GetAbsoluteBounds();
1297         r = __pSliderOverlay->SetSliderRect(absBounds, __touchRect);
1298         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1299
1300         r = __pSliderOverlay->DrawSliderOverlay(__touchRect.x + __handleX, __handleRect.width, value);
1301         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1302
1303         return r;
1304 }
1305
1306 result
1307 _SliderPresenter::DrawBitmap(Canvas& canvas, const Rectangle& bounds, Bitmap* pBitmap)
1308 {
1309         result r = E_SUCCESS;
1310
1311         if (pBitmap->IsNinePatchedBitmap())
1312         {
1313                 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
1314                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1315         }
1316         else
1317         {
1318                 r = canvas.DrawBitmap(bounds, *pBitmap);
1319                 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1320         }
1321         return r;
1322 }
1323
1324
1325 Rectangle
1326 _SliderPresenter::GetTitleTextBounds(void) const
1327 {
1328         Rectangle titleTextBounds;
1329         int topMargin = 0;
1330
1331         result r = E_SUCCESS;
1332         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1333
1334         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_X, orientation, titleTextBounds.x);
1335         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1336
1337         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_POSITION_Y, orientation, titleTextBounds.y);
1338         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1339
1340         r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, orientation, topMargin);
1341         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1342
1343         titleTextBounds.y = titleTextBounds.y + topMargin;
1344
1345         r = GET_SHAPE_CONFIG(SLIDER::TITLE_TEXT_HEIGHT, orientation, titleTextBounds.height);
1346         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1347
1348         titleTextBounds.width = __pSlider->GetBounds().width - titleTextBounds.x;
1349
1350         return titleTextBounds;
1351 }
1352
1353 Rectangle
1354 _SliderPresenter::GetTouchBounds(void) const
1355 {
1356         return __touchRect;
1357 }
1358
1359 Rectangle
1360 _SliderPresenter::GetIconBounds(IconPosition iconPosition) const
1361 {
1362         result r = E_SUCCESS;
1363
1364         Rectangle iconBounds;
1365         int iconSideMargin = 0;
1366         int barHeight = 0;
1367
1368         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
1369
1370         r = GET_SHAPE_CONFIG(SLIDER::ICON_WIDTH, orientation, iconBounds.width);
1371         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1372
1373         r = GET_SHAPE_CONFIG(SLIDER::ICON_HEIGHT, orientation, iconBounds.height);
1374         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1375
1376         r = GET_SHAPE_CONFIG(SLIDER::ICON_LEFT_MARGIN, orientation, iconSideMargin);
1377         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1378
1379         r = GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, orientation, barHeight);;
1380         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, Rectangle(), r, "[%s] Propagating.", GetErrorMessage(r));
1381
1382         iconBounds.y = __barBgRect.y + ((barHeight - iconBounds.height) / 2);
1383
1384         if (iconPosition == ICON_POSITION_LEFT)
1385         {
1386                 iconBounds.x = iconSideMargin;
1387         }
1388         else
1389         {
1390                 iconBounds.x = __rect.width - (iconSideMargin + iconBounds.width);
1391         }
1392
1393         return iconBounds;
1394 }
1395
1396 bool
1397 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1398 {
1399         if (__pSlider != &source)
1400         {
1401                 return false;
1402         }
1403
1404         Point point = touchinfo.GetCurrentPosition();
1405
1406         __isBubblingBlocked = false;
1407
1408         if (__pSlider->IsEnabled() == true && __handleRect.Contains(point) == true)
1409         {
1410                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1411
1412                 __pSliderModel->SetValue(candidateValue);
1413                 __pSlider->SetAccessibilityElementValue();
1414
1415                 __isSliderPressed = true;
1416                 __isBubblingBlocked = true;
1417
1418                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1419                 {
1420                         __pSliderOverlay->Open(false);
1421                 }
1422
1423                 __pSlider->Invalidate();
1424         }
1425
1426         return __isBubblingBlocked;
1427 }
1428
1429 bool
1430 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1431 {
1432         if (__pSlider != &source)
1433         {
1434                 return false;
1435         }
1436
1437         Point point = touchinfo.GetCurrentPosition();
1438         bool isBubblingBlocked = __isBubblingBlocked;
1439
1440         if (__isSliderPressed == true)
1441         {
1442                 __isSliderPressed = false;
1443
1444                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1445
1446                 __pSliderModel->SetValue(candidateValue);
1447                 __pSlider->SetAccessibilityElementValue();
1448                 __pSlider->Invalidate();
1449
1450                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1451                 {
1452                         __pSliderOverlay->Close();
1453                 }
1454
1455                 // Adjustment Event Fire
1456                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1457                 if (pAdjustmentEvent != null)
1458                 {
1459                         Tizen::Base::Runtime::IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1460                         result r = GetLastResult();
1461                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1462
1463                         pAdjustmentEvent->Fire(*pEventArg);
1464                 }
1465         }
1466
1467         return isBubblingBlocked;
1468 }
1469
1470 bool
1471 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1472 {
1473         if (__pSlider != &source)
1474         {
1475                 return false;
1476         }
1477
1478         Point point = touchinfo.GetCurrentPosition();
1479         bool isBubblingBlocked = __isBubblingBlocked;
1480
1481         if (__isSliderPressed == false)
1482         {
1483                 return false;
1484         }
1485
1486         if (__pSlider->IsEnabled() == false)
1487         {
1488                 __isSliderPressed = false;
1489                 return false;
1490         }
1491
1492         int handleHalfWidth = __handleRect.width / 2;
1493         int oldValue = __pSliderModel->GetValue();
1494         int candidateValue = CalculateSliderValue(point.x, handleHalfWidth);
1495
1496         __pSliderModel->SetValue(candidateValue);
1497         __pSlider->SetAccessibilityElementValue();
1498
1499         __pSlider->Invalidate();
1500
1501         if (oldValue != candidateValue)
1502         {
1503                 // Slider Event Fire
1504                 _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1505                 if (pSliderEvent != null)
1506                 {
1507                         Tizen::Base::Runtime::IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1508                         result r = GetLastResult();
1509                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1510
1511                         pSliderEvent->Fire(*pEventArg);
1512                 }
1513         }
1514
1515         return isBubblingBlocked;
1516 }
1517
1518 bool
1519 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1520 {
1521         return OnTouchReleased(source, touchinfo);
1522 }
1523
1524 void
1525 _SliderPresenter::OnBoundsChanged(void)
1526 {
1527         __isNeedToBeUpdated = true;
1528         Resize();
1529
1530         return;
1531 }
1532
1533 void
1534 _SliderPresenter::OnFontChanged(Font* pFont)
1535 {
1536         __pFont = pFont;
1537         __isNeedToBeUpdated = true;
1538
1539         if(__pSliderOverlay != null)
1540                 __pSliderOverlay->SetFont(pFont);
1541
1542         return;
1543 }
1544
1545 void
1546 _SliderPresenter::OnFontInfoRequested(unsigned long& style, int& size)
1547 {
1548         style = FONT_STYLE_BOLD;
1549         size = __fontSize;
1550         return;
1551 }
1552
1553 void
1554 _SliderPresenter::SetMinValue(int minValue)
1555 {
1556         __pSliderModel->SetMinValue(minValue);
1557
1558         if (__pSliderModel->GetValue() < minValue)
1559         {
1560                 __pSliderModel->SetValue(minValue);
1561         }
1562
1563         return;
1564 }
1565
1566 void
1567 _SliderPresenter::SetMaxValue(int maxValue)
1568 {
1569         __pSliderModel->SetMaxValue(maxValue);
1570
1571         if (__pSliderModel->GetValue() > maxValue)
1572         {
1573                 __pSliderModel->SetValue(maxValue);
1574         }
1575
1576         return;
1577 }
1578
1579 int
1580 _SliderPresenter::GetMinValue(void) const
1581 {
1582         return __pSliderModel->GetMinValue();
1583 }
1584
1585 int
1586 _SliderPresenter::GetMaxValue(void) const
1587 {
1588         return __pSliderModel->GetMaxValue();
1589 }
1590
1591 void
1592 _SliderPresenter::SetValue(int value)
1593 {
1594         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1595
1596         int minValue = __pSliderModel->GetMinValue();
1597         int maxValue = __pSliderModel->GetMaxValue();
1598
1599         if (value > maxValue)
1600         {
1601                 value = maxValue;
1602         }
1603         else if (value < minValue)
1604         {
1605                 value = minValue;
1606         }
1607
1608         __pSliderModel->SetValue(value);
1609
1610         return;
1611 }
1612
1613 int
1614 _SliderPresenter::GetValue(void) const
1615 {
1616         return __pSliderModel->GetValue();
1617 }
1618
1619 void
1620 _SliderPresenter::SetNeedUpdate(void)
1621 {
1622         __isNeedToBeUpdated = true;
1623         return;
1624 }
1625
1626 void
1627 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1628 {
1629         __groupStyle = groupStyle;
1630         return;
1631 }
1632
1633 result
1634 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1635 {
1636         Bitmap* pThumbBitmap = null;
1637         result r = E_SUCCESS;
1638
1639         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1640
1641         r = GetLastResult();
1642         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1643
1644         switch (status)
1645         {
1646         case SLIDER_THUMB_STATUS_PRESSED:
1647
1648                 delete __pHandlePressedEffectBitmap;
1649                 __pHandlePressedEffectBitmap = null;
1650
1651                 delete __pHandlePressedBitmap;
1652                 __pHandlePressedBitmap = pThumbBitmap;
1653                 break;
1654
1655         case SLIDER_THUMB_STATUS_DISABLED:
1656
1657                 delete __pHandleDisabledEffectBitmap;
1658                 __pHandleDisabledEffectBitmap = null;
1659
1660                 delete __pHandleDisabledBitmap;
1661                 __pHandleDisabledBitmap = pThumbBitmap;
1662                 break;
1663
1664         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1665
1666                 delete __pHandleHighlightedEffectBitmap;
1667                 __pHandleHighlightedEffectBitmap = null;
1668
1669                 delete __pHandleHighlightedEffectBitmap;
1670                 __pHandleHighlightedEffectBitmap = pThumbBitmap;
1671                 break;
1672
1673         case SLIDER_THUMB_STATUS_NORMAL:
1674         // fall through
1675         default:
1676
1677                 delete __pHandleNormalEffectBitmap;
1678                 __pHandleNormalEffectBitmap = null;
1679
1680                 delete __pHandleNormalBitmap;
1681                 __pHandleNormalBitmap = pThumbBitmap;
1682
1683                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1684                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1685
1686                 _VisualElement* pHandle = __pSlider->GetHandle();
1687                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1688
1689                 __isCustomHandle = true;
1690                 break;
1691
1692         }
1693
1694         Resize();
1695         return r;
1696 }
1697
1698 void
1699 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1700 {
1701         switch (status)
1702         {
1703         case SLIDER_THUMB_STATUS_PRESSED:
1704                 __handleTextPressedColor = color;
1705                 __isCustomPressedTextColor = true;
1706                 break;
1707
1708         case SLIDER_THUMB_STATUS_DISABLED:
1709                 __handleTextDisabledColor = color;
1710                 break;
1711
1712         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1713                 __handleTextHighlightedColor = color;
1714                 break;
1715
1716         case SLIDER_THUMB_STATUS_NORMAL:
1717         // fall through
1718         default:
1719                 __handleTextColor = color;
1720                 break;
1721         }
1722
1723         return;
1724 }
1725
1726 }}} // Tizen::Ui::Controls