Changed indicator bg color.
[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::IsTouchPressed() const
1463 {
1464         return __isSliderPressed;
1465 }
1466
1467 bool
1468 _SliderPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1469 {
1470         if (__pSlider != &source)
1471         {
1472                 return false;
1473         }
1474
1475         if (__pSlideTimer == null)
1476         {
1477                 __pSlideTimer = new (std::nothrow) Timer;
1478                 SysTryReturn(NID_UI_CTRL, __pSlideTimer != null, true, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1479
1480                 result r = __pSlideTimer->Construct(*this);
1481                 if (r != E_SUCCESS)
1482                 {
1483                         delete __pSlideTimer;
1484                         __pSlideTimer = null;
1485
1486                         return true;
1487                 }
1488         }
1489
1490         FloatPoint point = touchinfo.GetCurrentPosition();
1491
1492         if (__handleRect.Contains(point) == true)
1493         {
1494                 __isSliderPressed = true;
1495                 __isSetValue = false;
1496
1497                 int candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1498                 __prevSliderValue = candidateValue;
1499
1500                 __pSliderModel->SetValue(candidateValue);
1501                 __pSlider->SetAccessibilityElementValue();
1502
1503                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1504                 {
1505                         __pSliderOverlay->SetVisibleState(true);
1506                         __pSliderOverlay->Open();
1507                 }
1508
1509                 __pSlider->Invalidate();
1510         }
1511
1512         return __isSliderPressed;
1513 }
1514
1515 bool
1516 _SliderPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1517 {
1518         if (__pSlider != &source)
1519         {
1520                 return false;
1521         }
1522
1523         if (__pSlideTimer != null)
1524         {
1525                 __isTimerRunning = false;
1526                 __pSlideTimer->Cancel();
1527         }
1528
1529         FloatPoint point = touchinfo.GetCurrentPosition();
1530
1531         Canvas* pCanvas = __pSlider->GetCanvasN();
1532         SysTryReturn(NID_UI_CTRL, pCanvas != null, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1533
1534         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1535         {
1536                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1537         }
1538
1539         delete pCanvas;
1540         pCanvas = null;
1541
1542         if (__isSliderPressed == true)
1543         {
1544                 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pSlider);
1545                 __isSliderPressed = false;
1546                 __isSetValue = false;
1547
1548                 int candidateValue = 0;
1549
1550                 if (__isTouchCanceled)
1551                 {
1552                         __isTouchCanceled = false;
1553                         candidateValue = __prevSliderValue;
1554                 }
1555                 else
1556                 {
1557                         candidateValue = CalculateSliderValue(point.x, point.x - __handleRect.x);
1558                         __pSliderModel->SetValue(candidateValue);
1559                         __pSlider->SetAccessibilityElementValue();
1560                 }
1561
1562                 __pSlider->Invalidate();
1563
1564                 if (__pSlider->GetStyle() & _SLIDER_STYLE_OVERLAY)
1565                 {
1566                         __pSliderOverlay->SetVisibleState(false);
1567                         __pSliderOverlay->Close();
1568                 }
1569
1570                 //  Slider Event Fire is required if some handle value changes not fired sldier event because of timer call back.
1571                 if (__prevSliderValue != candidateValue)
1572                 {
1573                         _SliderEvent* pSliderEvent = dynamic_cast <_SliderEvent*>(__pSlider->GetSliderEvent());
1574                         if (pSliderEvent != null)
1575                         {
1576                                 IEventArg* pEventArg = _SliderEvent::CreateSliderEventArgN(candidateValue);
1577
1578                                 result r = GetLastResult();
1579                                 SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1580
1581                                 pSliderEvent->Fire(*pEventArg);
1582                         }
1583                 }
1584
1585                 // Adjustment Event Fire
1586                 _AdjustmentEvent* pAdjustmentEvent = dynamic_cast <_AdjustmentEvent*>(__pSlider->GetAdjustmentEvent());
1587                 if (pAdjustmentEvent != null)
1588                 {
1589                         IEventArg* pEventArg = _AdjustmentEvent::CreateAdjustmentEventArgN(candidateValue);
1590                         result r = GetLastResult();
1591                         SysTryReturn(NID_UI_CTRL, pEventArg != null, true, r, "[%s] Propagating.", GetErrorMessage(r));
1592
1593                         pAdjustmentEvent->Fire(*pEventArg);
1594                 }
1595                 return true;
1596         }
1597
1598         return false;
1599 }
1600
1601 bool
1602 _SliderPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1603 {
1604         if (__pSlider != &source)
1605         {
1606                 return false;
1607         }
1608
1609         if (__isSliderPressed == false)
1610         {
1611                 return false;
1612         }
1613
1614         FloatPoint point = touchinfo.GetCurrentPosition();
1615
1616         Canvas* pCanvas = __pSlider->GetCanvasN();
1617         SysTryReturn(NID_UI_CTRL, pCanvas != null, true, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
1618
1619         if (point.x >= (pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width))
1620         {
1621                 point.x = pCanvas->GetBoundsF().x + pCanvas->GetBoundsF().width;
1622         }
1623
1624         __currentPosition.x = point.x;
1625         __currentPosition.y = point.y;
1626
1627         if ( __isTimerRunning == false )
1628         {
1629                 __isTimerRunning = true;
1630                 __pSlideTimer->Start(__timerValue);
1631         }
1632
1633         delete pCanvas;
1634         pCanvas = null;
1635
1636         return true;
1637 }
1638
1639 void
1640 _SliderPresenter::OnTimerExpired(Timer& timer)
1641 {
1642         __isTimerRunning = false;
1643
1644         float handleHalfWidth = __handleRect.width / 2;
1645         int candidateValue = CalculateSliderValue(__currentPosition.x, handleHalfWidth);
1646
1647         __prevSliderValue = candidateValue;
1648
1649         __pSliderModel->SetValue(candidateValue);
1650         __pSlider->SetAccessibilityElementValue();
1651
1652         __pSlider->Draw();
1653         __pSlider->Show();
1654
1655     __pSlider->FireSliderMoveEvent(candidateValue);
1656
1657         return;
1658 }
1659
1660 bool
1661 _SliderPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1662 {
1663         __isTouchCanceled = true;
1664
1665         return OnTouchReleased(source, touchinfo);
1666 }
1667
1668 void
1669 _SliderPresenter::OnBoundsChanged(void)
1670 {
1671         __isNeedToBeUpdated = true;
1672         Resize();
1673
1674         return;
1675 }
1676
1677 void
1678 _SliderPresenter::OnFontChanged(Font* pFont)
1679 {
1680         __pFont = pFont;
1681         __isNeedToBeUpdated = true;
1682
1683         if(__pSliderOverlay != null)
1684                 __pSliderOverlay->SetFont(pFont);
1685
1686         return;
1687 }
1688
1689 void
1690 _SliderPresenter::OnFontInfoRequested(unsigned long& style, float& size)
1691 {
1692         style = FONT_STYLE_BOLD;
1693         size = __fontSize;
1694         return;
1695 }
1696
1697 void
1698 _SliderPresenter::OnAncestorEnableStateChanged(const _Control& control)
1699 {
1700         if (__pSlider->IsEnabled())
1701         {
1702                 return;
1703         }
1704
1705         if (__pSlideTimer != null)
1706         {
1707                 __isTimerRunning = false;
1708                 __pSlideTimer->Cancel();
1709         }
1710
1711         __pSlider->Invalidate();
1712
1713         return;
1714 }
1715
1716 void
1717 _SliderPresenter::SetMinValue(int minValue)
1718 {
1719         __pSliderModel->SetMinValue(minValue);
1720
1721         if (__pSliderModel->GetValue() < minValue)
1722         {
1723                 __pSliderModel->SetValue(minValue);
1724         }
1725
1726         return;
1727 }
1728
1729 void
1730 _SliderPresenter::SetMaxValue(int maxValue)
1731 {
1732         __pSliderModel->SetMaxValue(maxValue);
1733
1734         if (__pSliderModel->GetValue() > maxValue)
1735         {
1736                 __pSliderModel->SetValue(maxValue);
1737         }
1738
1739         return;
1740 }
1741
1742 int
1743 _SliderPresenter::GetMinValue(void) const
1744 {
1745         return __pSliderModel->GetMinValue();
1746 }
1747
1748 int
1749 _SliderPresenter::GetMaxValue(void) const
1750 {
1751         return __pSliderModel->GetMaxValue();
1752 }
1753
1754 void
1755 _SliderPresenter::SetValue(int value)
1756 {
1757         SysTryReturnVoidResult(NID_UI_CTRL, __isSliderPressed == false, E_SYSTEM, "[E_SYSTEM] Failed to set value of slider.");
1758
1759         int minValue = __pSliderModel->GetMinValue();
1760         int maxValue = __pSliderModel->GetMaxValue();
1761
1762         if (value > maxValue)
1763         {
1764                 value = maxValue;
1765         }
1766         else if (value < minValue)
1767         {
1768                 value = minValue;
1769         }
1770
1771         __isSetValue = true;
1772
1773         __pSliderModel->SetValue(value);
1774
1775         return;
1776 }
1777
1778 int
1779 _SliderPresenter::GetValue(void) const
1780 {
1781         return __pSliderModel->GetValue();
1782 }
1783
1784 void
1785 _SliderPresenter::SetNeedUpdate(void)
1786 {
1787         __isNeedToBeUpdated = true;
1788         return;
1789 }
1790
1791 void
1792 _SliderPresenter::SetGroupStyle(GroupStyle groupStyle)
1793 {
1794         __groupStyle = groupStyle;
1795         return;
1796 }
1797
1798 void
1799 _SliderPresenter::SetFocusMode(bool focusmode)
1800 {
1801         __isFocusModeStateChanged = focusmode;
1802 }
1803
1804 bool
1805 _SliderPresenter::GetFocusMode(void)
1806 {
1807         return __isFocusModeStateChanged;
1808 }
1809
1810 result
1811 _SliderPresenter::SetThumbBitmap(SliderThumbStatus status, const Bitmap& bitmap)
1812 {
1813         Bitmap* pThumbBitmap = null;
1814         result r = E_SUCCESS;
1815
1816         pThumbBitmap = _BitmapImpl::CloneN(bitmap);
1817
1818         r = GetLastResult();
1819         SysTryReturn(NID_UI_CTRL, pThumbBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
1820
1821         switch (status)
1822         {
1823         case SLIDER_THUMB_STATUS_PRESSED:
1824
1825                 delete __pHandlePressedEffectBitmap;
1826                 __pHandlePressedEffectBitmap = null;
1827
1828                 delete __pHandlePressedBitmap;
1829                 __pHandlePressedBitmap = pThumbBitmap;
1830                 break;
1831
1832         case SLIDER_THUMB_STATUS_DISABLED:
1833
1834                 delete __pHandleDisabledEffectBitmap;
1835                 __pHandleDisabledEffectBitmap = null;
1836
1837                 delete __pHandleDisabledBitmap;
1838                 __pHandleDisabledBitmap = pThumbBitmap;
1839                 break;
1840
1841         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1842
1843                 delete __pHandleHighlightedEffectBitmap;
1844                 __pHandleHighlightedEffectBitmap = null;
1845
1846                 delete __pHandleHighlightedBitmap;
1847                 __pHandleHighlightedBitmap = pThumbBitmap;
1848                 break;
1849
1850         case SLIDER_THUMB_STATUS_NORMAL:
1851         // fall through
1852         default:
1853
1854                 delete __pHandleNormalEffectBitmap;
1855                 __pHandleNormalEffectBitmap = null;
1856
1857                 delete __pHandleNormalBitmap;
1858                 __pHandleNormalBitmap = pThumbBitmap;
1859
1860                 __handleRect.width = __pHandleNormalBitmap->GetWidth();
1861                 __handleRect.height = __pHandleNormalBitmap->GetHeight();
1862
1863                 _VisualElement* pHandle = __pSlider->GetHandle();
1864                 pHandle->SetBounds(FloatRectangle(__handleRect.x, __handleRect.y, __handleRect.width, __handleRect.height));
1865
1866                 __handleOffset = __handleRect.width / 2;
1867                 __isCustomHandle = true;
1868                 break;
1869
1870         }
1871
1872         Resize();
1873         return r;
1874 }
1875
1876 void
1877 _SliderPresenter::SetThumbTextColor(SliderThumbStatus status, const Color& color)
1878 {
1879         switch (status)
1880         {
1881         case SLIDER_THUMB_STATUS_PRESSED:
1882                 __handleTextPressedColor = color;
1883                 __isCustomPressedTextColor = true;
1884                 break;
1885
1886         case SLIDER_THUMB_STATUS_DISABLED:
1887                 __handleTextDisabledColor = color;
1888                 break;
1889
1890         case SLIDER_THUMB_STATUS_HIGHLIGHTED:
1891                 __handleTextHighlightedColor = color;
1892                 break;
1893
1894         case SLIDER_THUMB_STATUS_NORMAL:
1895         // fall through
1896         default:
1897                 __handleTextColor = color;
1898                 break;
1899         }
1900
1901         return;
1902 }
1903
1904 }}} // Tizen::Ui::Controls