2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
19 * @file FUiCtrl_ProgressPresenter.cpp
20 * @brief This is the implementation file for the _ProgressPresenter class.
23 #include <FBaseErrorDefine.h>
24 #include <FBaseSysLog.h>
25 #include <FGrp_BitmapImpl.h>
26 #include "FUi_ResourceManager.h"
27 #include "FUiCtrl_ProgressPresenter.h"
28 #include "FUiCtrl_ProgressModel.h"
29 #include "FUiCtrl_Progress.h"
31 using namespace Tizen::Graphics;
33 namespace Tizen { namespace Ui { namespace Controls
36 _ProgressPresenter::_ProgressPresenter(void)
38 , __pProgressModel(null)
39 , __pResourceBitmap(null)
40 , __pResourceBarBgBitmap(null)
41 , __pBarResourceEffectBitmap(null)
42 , __pBarBgResourceEffectBitmap(null)
43 , __pBarColorReplacementBitmap(null)
44 , __pBarBgColorReplacementBitmap(null)
48 _ProgressPresenter::~_ProgressPresenter(void)
50 delete __pProgressModel;
51 __pProgressModel = null;
53 delete __pResourceBitmap;
54 __pResourceBitmap = null;
56 delete __pResourceBarBgBitmap;
57 __pResourceBarBgBitmap = null;
59 delete __pBarResourceEffectBitmap;
60 __pBarResourceEffectBitmap = null;
62 delete __pBarBgResourceEffectBitmap;
63 __pBarBgResourceEffectBitmap = null;
65 delete __pBarColorReplacementBitmap;
66 __pBarColorReplacementBitmap = null;
68 delete __pBarBgColorReplacementBitmap;
69 __pBarBgColorReplacementBitmap = null;
73 _ProgressPresenter::CreateInstanceN(const _Progress& progress)
76 _ProgressPresenter* pProgressPresenter = new (std::nothrow) _ProgressPresenter;
77 SysTryReturn(NID_UI_CTRL, pProgressPresenter != null, null, E_OUT_OF_MEMORY,
78 "[E_OUT_OF_MEMORY] Memory allocation failed.");
80 pProgressPresenter->__pProgress = const_cast <_Progress*>(&progress);
81 SysTryCatch(NID_UI_CTRL, pProgressPresenter->__pProgress != null, , E_SYSTEM,
82 "[E_SYSTEM] A system error has occurred. The Progress control core is null");
84 pProgressPresenter->__pProgressModel = new (std::nothrow) _ProgressModel;
85 SysTryCatch(NID_UI_CTRL, pProgressPresenter->__pProgressModel != null, , E_OUT_OF_MEMORY,
86 "[E_OUT_OF_MEMORY] Memory allocation failed.");
88 r = pProgressPresenter->LoadResource();
89 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error has occurred. The loading of resource failed");
91 return pProgressPresenter;
94 delete pProgressPresenter;
95 pProgressPresenter = null;
101 _ProgressPresenter::SetValue(int value)
103 int maxValue = __pProgressModel->GetMaxValue();
104 int minValue = __pProgressModel->GetMinValue();
106 if (value > maxValue)
110 else if (value < minValue)
115 __pProgressModel->SetValue(value);
121 _ProgressPresenter::SetMinValue(int minValue)
123 __pProgressModel->SetMinValue(minValue);
125 if (__pProgressModel->GetValue() < minValue)
127 __pProgressModel->SetValue(minValue);
134 _ProgressPresenter::SetMaxValue(int maxValue)
136 __pProgressModel->SetMaxValue(maxValue);
138 if (__pProgressModel->GetValue() > maxValue)
140 __pProgressModel->SetValue(maxValue);
146 _ProgressPresenter::GetValue(void) const
148 return __pProgressModel->GetValue();
152 _ProgressPresenter::GetMinValue(void) const
154 return __pProgressModel->GetMinValue();
158 _ProgressPresenter::GetMaxValue(void) const
160 return __pProgressModel->GetMaxValue();
164 _ProgressPresenter::GetPercentComplete(void) const
166 int percentValue = 0;
167 int span = __pProgressModel->GetMaxValue() - __pProgressModel->GetMinValue();
171 percentValue = (int) ((((double) __pProgressModel->GetValue() - __pProgressModel->GetMinValue()) / span) * 100);
178 _ProgressPresenter::LoadResource(void)
180 result r = E_SUCCESS;
187 r = GET_COLOR_CONFIG(PROGRESS::BAR_BG_NORMAL, bgColor);
188 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
190 r = GET_COLOR_CONFIG(PROGRESS::BAR_NORMAL, barColor);
191 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
193 r = GET_BITMAP_CONFIG_N(PROGRESS::BAR_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBarBgBitmap);
194 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
196 __pBarBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap,Color::GetColor(COLOR_ID_MAGENTA), bgColor);
198 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
200 r = GET_BITMAP_CONFIG_N(PROGRESS::BAR_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBitmap);
201 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
203 __pBarColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBitmap,Color::GetColor(COLOR_ID_MAGENTA), barColor);
205 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
207 r = GET_BITMAP_CONFIG_N(PROGRESS::BAR_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarBgResourceEffectBitmap);
208 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
210 r = GET_BITMAP_CONFIG_N(PROGRESS::BAR_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarResourceEffectBitmap);
211 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
213 opacity = barColor.GetAlpha();
214 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
216 __currentBarColor = barColor;
217 __currentBarBgColor = bgColor;
223 delete __pResourceBitmap;
224 __pResourceBitmap = null;
226 delete __pResourceBarBgBitmap;
227 __pResourceBarBgBitmap = null;
229 delete __pBarResourceEffectBitmap;
230 __pBarResourceEffectBitmap = null;
232 delete __pBarBgResourceEffectBitmap;
233 __pBarBgResourceEffectBitmap = null;
235 delete __pBarColorReplacementBitmap;
236 __pBarColorReplacementBitmap = null;
238 delete __pBarBgColorReplacementBitmap;
239 __pBarBgColorReplacementBitmap = null;
245 _ProgressPresenter::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, Bitmap* pBitmap)
247 result r = E_SUCCESS;
249 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
251 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
252 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
256 r = canvas.DrawBitmap(bounds, *pBitmap);
257 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
263 _ProgressPresenter::Draw(void)
265 result r = E_SUCCESS;
267 FloatRectangle bounds = __pProgress->GetBoundsF();
268 Canvas* pCanvas = __pProgress->GetCanvasN();
269 SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get a canvas.");
271 int minValue = __pProgressModel->GetMinValue();
272 int maxValue = __pProgressModel->GetMaxValue();
276 float leftMargin = 0.0f;
277 float minimumWidth = 0.0f;
278 float minimumHeight = 0.0f;
280 Bitmap* pReplacementBitmap = null;
281 bool isCustomBarBitmap = false;
284 r = GET_COLOR_CONFIG(PROGRESS::BAR_BG_NORMAL, bgColor);
285 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
287 r = GET_SHAPE_CONFIG(PROGRESS::BAR_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
288 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
290 r = GET_SHAPE_CONFIG(PROGRESS::BAR_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
291 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
293 r = GET_SHAPE_CONFIG(PROGRESS::MINIMUM_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, minimumWidth);
294 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
296 r = GET_SHAPE_CONFIG(PROGRESS::BAR_OFFSET, _CONTROL_ORIENTATION_PORTRAIT, offset);
297 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
299 r = GET_SHAPE_CONFIG(PROGRESS::MINIMUM_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, minimumHeight);
300 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
302 if (bounds.width < minimumWidth)
304 bounds.width = minimumWidth;
307 if (bounds.height < minimumHeight)
309 bounds.height = minimumHeight;
312 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
315 width = bounds.width - (2.0f * leftMargin) - (2.0f * offset);
316 if (maxValue == __pProgressModel->GetValue())
318 width = bounds.width - (2.0f * leftMargin) - (2.0f * offset);
322 width = (width) * ((__pProgressModel->GetValue() - minValue) * 100.0f / (maxValue - minValue)) / 100.0f;
325 if (__pProgress->IsEnabled() == false) // disabled
327 __pBarBgColorReplacementBitmap->SetAlphaConstant(0xFF);
329 r = DrawBitmap(*pCanvas, FloatRectangle(leftMargin, (bounds.height - height) / 2.0f, (bounds.width - (2.0f * leftMargin)), height), __pBarBgColorReplacementBitmap);
330 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
333 opacity = bgColor.GetAlpha();
334 __pBarBgColorReplacementBitmap->SetAlphaConstant(opacity);
336 isCustomBarBitmap = IS_CUSTOM_BITMAP(PROGRESS::BAR_BG_NORMAL);
338 if (__pProgress->GetBarBackgroundColor() != __currentBarBgColor)
340 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBarBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pProgress->GetBarBackgroundColor());
342 SysTryCatch(NID_UI_CTRL, pReplacementBitmap != null, , r, "[%s] Failed to get replacement color.", GetErrorMessage(r));
343 delete __pBarBgColorReplacementBitmap;
344 __pBarBgColorReplacementBitmap = null;
346 __pBarBgColorReplacementBitmap = pReplacementBitmap;
347 __currentBarBgColor = __pProgress->GetBarBackgroundColor();
350 r = DrawBitmap(*pCanvas, FloatRectangle(leftMargin, (bounds.height - height) / 2.0f, (bounds.width - (2.0f * leftMargin)), height), __pBarBgColorReplacementBitmap);
351 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
353 if (isCustomBarBitmap == false)
355 r = DrawBitmap(*pCanvas, FloatRectangle(leftMargin, (bounds.height - height) / 2.0f, (bounds.width - (2.0f * leftMargin)), height), __pBarBgResourceEffectBitmap);
356 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
361 if (__pProgress->GetBarColor() != __currentBarColor)
363 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pProgress->GetBarColor());
365 SysTryCatch(NID_UI_CTRL, pReplacementBitmap != null, , r, "[%s] Failed to get replacement color.", GetErrorMessage(r));
366 delete __pBarColorReplacementBitmap;
367 __pBarColorReplacementBitmap = null;
369 __pBarColorReplacementBitmap = pReplacementBitmap;
370 __currentBarColor = __pProgress->GetBarColor();
372 if (__pProgress->IsEnabled() == false) // disabled
374 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
378 opacity = __pProgress->GetBarColor().GetAlpha();
379 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
382 isCustomBarBitmap = IS_CUSTOM_BITMAP(PROGRESS::BAR_NORMAL);
384 r = DrawBitmap(*pCanvas, FloatRectangle((leftMargin + offset), (bounds.height - height) / 2.0f, width, height), __pBarColorReplacementBitmap);
385 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
387 if (isCustomBarBitmap == false)
389 r = DrawBitmap(*pCanvas, FloatRectangle((leftMargin + offset), (bounds.height - height) / 2.0f, width, height), __pBarResourceEffectBitmap);
390 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
408 }}} // Tizen::Ui::Controls