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_GroupContainerPresenter.cpp
20 * @brief This is the implementation file for the _GroupContainerPresenter class.
24 #include <FBaseSysLog.h>
25 #include <FBaseErrorDefine.h>
26 #include <FGrpCanvas.h>
27 #include <FGrp_BitmapImpl.h>
28 #include "FUiCtrl_GroupContainerPresenter.h"
29 #include "FUi_ResourceManager.h"
30 #include "FUiAnim_VisualElement.h"
31 #include "FUi_CoordinateSystemUtils.h"
32 #include "FUiCtrl_Form.h"
34 using namespace Tizen::Graphics;
35 using namespace Tizen::Ui::Animations;
37 namespace Tizen { namespace Ui { namespace Controls
40 _GroupContainerPresenter::_GroupContainerPresenter(void)
45 _GroupContainerPresenter::_GroupContainerPresenter(_GroupContainer& groupContainer)
46 : __pGroupContainer(&groupContainer)
47 , __pSystemChildColorReplacedBgBitmap(null)
48 , __pSystemChildBgEffectBitmap(null)
49 , __pGroupContainerColorReplacedBgBitmap(null)
50 , __parentBgColor(Color(0, 0, 0, 0))
51 , __bgColor(Color(0, 0, 0, 0))
56 _GroupContainerPresenter::~_GroupContainerPresenter(void)
58 __pGroupContainer = null;
60 delete __pSystemChildColorReplacedBgBitmap;
61 __pSystemChildColorReplacedBgBitmap = null;
63 delete __pSystemChildBgEffectBitmap;
64 __pSystemChildBgEffectBitmap = null;
66 delete __pGroupContainerColorReplacedBgBitmap;
67 __pGroupContainerColorReplacedBgBitmap = null;
71 _GroupContainerPresenter::LoadResourceBitmaps(void)
74 Bitmap* pSystemChildBgBitmap = null;
75 Bitmap* pGroupContainerBgBitmap = null;
76 __parentBgColor = GetParentColor();
78 r = GET_BITMAP_CONFIG_N(GROUPCONTAINER::SYSTEM_CONTROL_BG, BITMAP_PIXEL_FORMAT_ARGB8888, pSystemChildBgBitmap);
79 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
81 if (__pSystemChildColorReplacedBgBitmap)
83 delete __pSystemChildColorReplacedBgBitmap;
84 __pSystemChildColorReplacedBgBitmap = null;
87 __pSystemChildColorReplacedBgBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pSystemChildBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __parentBgColor);
89 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Failed to get replacement color Bitmap.", GetErrorMessage(r));
91 if (__pSystemChildBgEffectBitmap == null)
93 r = GET_BITMAP_CONFIG_N(GROUPCONTAINER::BORDER_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pSystemChildBgEffectBitmap);
94 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
97 r = GET_BITMAP_CONFIG_N(GROUPCONTAINER::BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pGroupContainerBgBitmap);
98 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
100 if (__pGroupContainerColorReplacedBgBitmap)
102 delete __pGroupContainerColorReplacedBgBitmap;
103 __pGroupContainerColorReplacedBgBitmap = null;
106 __bgColor = __pGroupContainer->GetBackgroundColor();
108 __pGroupContainerColorReplacedBgBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pGroupContainerBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), __bgColor);
110 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Failed to get replacement color Bitmap.", GetErrorMessage(r));
112 delete pSystemChildBgBitmap;
113 delete pGroupContainerBgBitmap;
119 delete pSystemChildBgBitmap;
121 delete pGroupContainerBgBitmap;
123 delete __pSystemChildColorReplacedBgBitmap;
124 __pSystemChildColorReplacedBgBitmap = null;
126 delete __pSystemChildBgEffectBitmap;
127 __pSystemChildBgEffectBitmap = null;
133 _GroupContainerPresenter::Draw(void)
135 result r = E_SUCCESS;
136 FloatRectangle gridBounds(0.0f, 0.0f, 0.0f, 0.0f);
137 FloatRectangle rect(0.0f, 0.0f, 0.0f, 0.0f);
139 int lineAdjustPosition = 0;
142 int rows = __pGroupContainer->GetRowCount();
143 int columns = __pGroupContainer->GetColumnCount();
144 float lineWidth = __pGroupContainer->GetLineWidth();
146 if (__parentBgColor != GetParentColor() || __bgColor != __pGroupContainer->GetBackgroundColor())
148 LoadResourceBitmaps();
151 Canvas* pCanvas = __pGroupContainer->GetVisualElement()->GetCanvasN();
153 SysTryReturnVoidResult(NID_UI_CTRL, pCanvas != null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
155 Canvas* pControlCanvas = null;
156 _Control* pControl = __pGroupContainer->GetSystemChild();
157 SysTryCatch(NID_UI_CTRL, pControl != null, ,E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the child control.");
159 pControlCanvas = pControl->GetCanvasN();
160 SysTryCatch(NID_UI_CTRL, pControlCanvas != null, ,E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get the canvas.");
162 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
165 pControlCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
166 pControlCanvas->Clear();
168 pCanvas->SetLineStyle(LINE_STYLE_SOLID);
169 pCanvas->SetLineWidth(lineWidth);
171 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, ,r, "[%s] Propagating.", GetErrorMessage(r));
173 pCanvas->SetForegroundColor(__pGroupContainer->GetLineColor());
175 gridBounds = __pGroupContainer->GetGridBounds();
177 DrawBackgroundBitmapForGroupContainer(pCanvas);
178 DrawBackgroundBitmapForSystemChild(pControlCanvas);
179 DrawBackgroundEffectBitmapForSystemChild(pControlCanvas);
181 if (gridBounds.width < __pGroupContainer->GetBoundsF().width)
183 pCanvas->DrawLine(FloatPoint(gridBounds.x + gridBounds.width, gridBounds.y), FloatPoint(gridBounds.x + gridBounds.width, gridBounds.y + gridBounds.height));
186 if (gridBounds.height < __pGroupContainer->GetBoundsF().height)
188 pCanvas->DrawLine(FloatPoint(gridBounds.x, gridBounds.y + gridBounds.height), FloatPoint(gridBounds.x + gridBounds.width, gridBounds.y + gridBounds.height));
191 width = _CoordinateSystemUtils::ConvertToInteger(lineWidth);
192 lineAdjustPosition = ((width % 2) == 0) ? (width / 2) : ((width - 1) / 2);
194 for (rowIndex = 0; rowIndex < rows; rowIndex++)
196 for (columnIndex = 0; columnIndex < columns; columnIndex++)
198 __pGroupContainer->ResizeControl(rowIndex, columnIndex);
199 rect = __pGroupContainer->GetBoundsAt(rowIndex , columnIndex);
201 //Draw Cell Left and Top Lines for all cells
202 if ((__pGroupContainer->IsMerged(rowIndex, columnIndex) == false) || (__pGroupContainer->IsParent(rowIndex, columnIndex) == true))
207 pCanvas->DrawLine(FloatPoint(rect.x - lineWidth, rect.y - lineWidth + lineAdjustPosition), FloatPoint(rect.x + rect.width, rect.y - lineWidth + lineAdjustPosition));
210 if (columnIndex != 0)
212 pCanvas->DrawLine(FloatPoint(rect.x - lineWidth + lineAdjustPosition, rect.y), FloatPoint(rect.x - lineWidth + lineAdjustPosition, rect.y + rect.height));
219 delete pControlCanvas;
225 delete pControlCanvas;
231 _GroupContainerPresenter::DrawBackgroundBitmapForSystemChild(Canvas* pCanvas)
233 result r = E_SUCCESS;
235 FloatRectangle bounds = __pGroupContainer->GetBoundsF();
239 if(__pSystemChildColorReplacedBgBitmap != null)
241 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pSystemChildColorReplacedBgBitmap))
243 r = pCanvas->DrawNinePatchedBitmap(bounds, *__pSystemChildColorReplacedBgBitmap);
244 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
248 r = pCanvas->DrawBitmap(bounds, *__pSystemChildColorReplacedBgBitmap);
249 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
257 _GroupContainerPresenter::DrawBackgroundBitmapForGroupContainer(Canvas* pCanvas)
259 result r = E_SUCCESS;
261 FloatRectangle bounds = __pGroupContainer->GetBoundsF();
265 if(__pGroupContainerColorReplacedBgBitmap != null)
267 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pGroupContainerColorReplacedBgBitmap))
269 r = pCanvas->DrawNinePatchedBitmap(bounds, *__pGroupContainerColorReplacedBgBitmap);
270 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
274 r = pCanvas->DrawBitmap(bounds, *__pGroupContainerColorReplacedBgBitmap);
275 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
283 _GroupContainerPresenter::DrawBackgroundEffectBitmapForSystemChild(Canvas* pCanvas)
285 result r = E_SUCCESS;
287 FloatRectangle bounds = __pGroupContainer->GetBoundsF();
291 if(__pSystemChildBgEffectBitmap != null)
293 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pSystemChildBgEffectBitmap))
295 r = pCanvas->DrawNinePatchedBitmap(bounds, *__pSystemChildBgEffectBitmap);
296 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
300 r = pCanvas->DrawBitmap(bounds, *__pSystemChildBgEffectBitmap);
301 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
309 _GroupContainerPresenter::GetParentColor(void) const
311 _Control* pParentControl = __pGroupContainer->GetParent();
314 return Color(0, 0, 0, 0);
317 Color parentBgColor = pParentControl->GetBackgroundColor();
318 _Form* pForm = dynamic_cast<_Form*>(pParentControl);
320 while (pForm == null && parentBgColor.GetAlpha() == 0x00)
322 pParentControl = pParentControl->GetParent();
328 pForm = dynamic_cast<_Form*>(pParentControl);
329 parentBgColor = pParentControl->GetBackgroundColor();
332 return parentBgColor;
335 }}} // Tizen::Ui::Controls