2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
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.
18 * @file FUiCtrl_OverlayPanelImpl.cpp
19 * @brief This is the implementation file for _OverlayPanelImpl class.
24 #include <FBaseSysLog.h>
25 #include <FUiCtrlOverlayPanel.h>
27 #include <FSys_EnvironmentImpl.h>
28 #include <FIo_RegistryImpl.h>
30 #include "FUi_UiBuilder.h"
31 #include "FUiCtrl_OverlayPanelImpl.h"
32 #include "FUi_ResourceSizeInfo.h"
33 #include "FUi_ResourceManager.h"
35 using namespace Tizen::Base;
36 using namespace Tizen::Graphics;
37 using namespace Tizen::Ui::Animations;
38 using namespace Tizen::Io;
39 using namespace Tizen::System;
44 const wchar_t* _UI_REGISTRY_PATH = L"/usr/etc/system-info.ini";
45 const wchar_t* _UI_INFO_SESSION = L"UiControlInfo";
49 namespace Tizen { namespace Ui { namespace Controls
52 bool _OverlayPanelImpl::overlayPanelPixelFomatList[]= {false,};
54 Tizen::Graphics::Dimension
55 _OverlayPanelImpl::OverlayPanelSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
58 Dimension dimension(0, 0);
61 result r = GET_SHAPE_CONFIG("OVERLAYPANEL::MIN_RENDERER_SIZE", orientation, minimumSize);
62 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, dimension, r, "[%s] Propagating.", GetErrorMessage(r));
64 dimension.width = minimumSize;
65 dimension.height = minimumSize;
67 SetLastResult(E_SUCCESS);
73 _OverlayPanelImpl::CreateOverlayPanelImplN(OverlayPanel* pPublic, const Rectangle& bounds)
75 result r = GET_SIZE_INFO(OverlayPanel).CheckInitialSizeValid(Dimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
76 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, E_INVALID_ARG, "[E_INVALID_ARG] A specified input parameter is invalid.");
78 _OverlayPanel* pCore = _OverlayPanel::CreateOverlayPanelN(bounds);
80 SysTryReturn(NID_UI_CTRL, pCore != null, null, r, "[%s] Propagating.", GetErrorMessage(r));
82 _OverlayPanelImpl* pImpl = new (std::nothrow) _OverlayPanelImpl(pPublic, pCore);
83 r = _ControlImpl::CheckConstruction(pCore, pImpl);
84 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
86 r = pImpl->InitializeBoundsProperties(GET_SIZE_INFO(OverlayPanel), bounds, _CONTROL_ORIENTATION_PORTRAIT);
87 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
89 SetLastResult(E_SUCCESS);
98 _OverlayPanelImpl::~_OverlayPanelImpl(void)
104 _OverlayPanelImpl::SetRendererRotation(OverlayPanel::Rotation rotation)
106 GetCore().SetRendererRotation(rotation);
110 _OverlayPanelImpl::SetRendererAspectRatio(bool fix)
112 GetCore().SetRendererAspectRatio(fix);
116 _OverlayPanelImpl::SetRendererSize(const Dimension& dimension)
118 GetCore().SetRendererSize(dimension);
122 _OverlayPanelImpl::SetInputBuffer(const Dimension& destDim, const ByteBuffer& srcBuffer, const Dimension& srcDim, OverlayPanel::BufferPixelFormat srcFormat)
124 if (!_OverlayPanelImpl::overlayPanelPixelFomatList[0])
126 result r = _OverlayPanelImpl::SetPixelFormatList();
127 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
130 if (!_OverlayPanelImpl::overlayPanelPixelFomatList[srcFormat])
132 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] srcFormat [%d] is not supported!", srcFormat);
133 return E_UNSUPPORTED_FORMAT;
136 result r = GetCore().SetInputBuffer(destDim, srcBuffer, srcDim, srcFormat);
138 if ((r == E_INVALID_ARG) || (r == E_UNSUPPORTED_FORMAT) || (r == E_SYSTEM))
140 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
142 else if (r != E_SUCCESS)
145 SysLogException(NID_UI_CTRL, r, "[E_SYSTEM] A system error occurred.");
152 _OverlayPanelImpl::GetBackgroundBufferInfo(BufferInfo& bufferInfo) const
154 result r = GetCore().GetBackgroundBufferInfo(bufferInfo);
156 if (r == E_OPERATION_FAILED)
158 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
160 else if (r != E_SUCCESS)
162 r = E_OPERATION_FAILED;
163 SysLogException(NID_UI_CTRL, r, "[E_OPERATION_FAILED] The operation has failed.");
169 _OverlayPanelImpl::_OverlayPanelImpl(OverlayPanel* pPublic, _OverlayPanel* pCore)
170 : _ContainerImpl(pPublic, pCore)
175 _OverlayPanelImpl::GetMaskingColor(void) const
177 return GetCore().GetMaskingColor();
181 _OverlayPanelImpl::GetPublicClassName(void) const
183 return "Tizen::Ui::Controls::OverlayPanel";
187 _OverlayPanelImpl::GetCore(void) const
189 return static_cast <const _OverlayPanel&>(_ControlImpl::GetCore());
193 _OverlayPanelImpl::GetCore(void)
195 return static_cast <_OverlayPanel&>(_ControlImpl::GetCore());
199 _OverlayPanelImpl::GetPublic(void) const
201 return static_cast <const OverlayPanel&>(_ControlImpl::GetPublic());
205 _OverlayPanelImpl::GetPublic(void)
207 return static_cast <OverlayPanel&>(_ControlImpl::GetPublic());
211 _OverlayPanelImpl::GetInstance(OverlayPanel& overlayPanel)
213 return static_cast<_OverlayPanelImpl*> (overlayPanel._pControlImpl);
216 const _OverlayPanelImpl*
217 _OverlayPanelImpl::GetInstance(const OverlayPanel& overlayPanel)
219 return static_cast<const _OverlayPanelImpl*> (overlayPanel._pControlImpl);
223 _OverlayPanelImpl::SetPixelFormatList(void)
228 result r = E_SUCCESS;
231 r = _reg.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
234 if (r == E_OUT_OF_MEMORY)
236 SysTryReturn(NID_UI_CTRL, r != E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
240 SysAssertf(0, "failed to Construct the _RegistryImpl");
244 r = _reg.GetValue(_UI_INFO_SESSION, L"OverlayRegionBufferPixelFormat", formatList);
245 SysAssertf(!IsFailed(r), "Failed to get a registry value");
248 String formatList(L"ARGB8888/RGB565/YCbCr420P");
252 if (formatList.Contains(L"ARGB8888"))
254 overlayPanelPixelFomatList[OverlayPanel::BUFFER_PIXEL_FORMAT_ARGB8888+1] = true;
258 if (formatList.Contains(L"RGB565"))
260 overlayPanelPixelFomatList[OverlayPanel::BUFFER_PIXEL_FORMAT_RGB565+1] = true;
264 if (formatList.Contains(L"YCbCr420P"))
266 overlayPanelPixelFomatList[OverlayPanel::BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR+1] = true;
270 SysAssertf(set, "registry file is something wrong");
272 overlayPanelPixelFomatList[0] = set;
277 class _OverlayPanelMaker
278 : public _UiBuilderControlMaker
281 _OverlayPanelMaker(_UiBuilder* uibuilder)
282 :_UiBuilderControlMaker(uibuilder){};
283 virtual ~_OverlayPanelMaker(){};
285 static _UiBuilderControlMaker* GetInstance(_UiBuilder* uibuilder)
287 _OverlayPanelMaker* _pOverlayPanelMaker = new (std::nothrow) _OverlayPanelMaker(uibuilder);
288 return _pOverlayPanelMaker;
292 virtual Tizen::Ui::Control* Make(_UiBuilderControl* pControl)
295 _UiBuilderControlLayout* pControlProperty = NULL;
296 OverlayPanel* pOverlayPanel = NULL;
297 Tizen::Graphics::Rectangle rect;
299 GetProperty(pControl, &pControlProperty);
300 if (pControlProperty == null)
305 rect = pControlProperty->GetRect();
307 pOverlayPanel = new (std::nothrow) OverlayPanel();
308 if (pOverlayPanel == null)
314 r = pOverlayPanel->Construct(rect);
317 delete pOverlayPanel;
321 return pOverlayPanel;
325 _OverlayPanelRegister::_OverlayPanelRegister()
327 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
328 pUiBuilderControlTableManager->RegisterControl("OverlayPanel", _OverlayPanelMaker::GetInstance);
331 _OverlayPanelRegister::~_OverlayPanelRegister()
333 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
334 pUiBuilderControlTableManager->UnregisterControl("OverlayPanel");
336 static _OverlayPanelRegister OverlayPanelRegisterToUIbuilder;
337 }}} // Tizen::Ui::Controls