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.
18 * @file FUi_LayoutLayout.cpp
19 * @brief This is the implementation file for Layout class.
21 * This file contains the implementation of Layout class.
24 #include <FBaseSysLog.h>
25 #include <FGrpCoordinateSystem.h>
26 #include <FGrpFloatRectangle.h>
27 #include <FGrpFloatDimension.h>
28 #include <FGrpFloatPoint.h>
29 #include "FUi_LayoutLayout.h"
30 #include "FUi_LayoutLayoutItemProxy.h"
31 #include "FUi_LayoutProxyList.h"
32 #include "FUi_LayoutLayoutItemInfo.h"
33 #include "FUi_LayoutLayoutList.h"
35 using namespace Tizen::Graphics;
37 namespace Tizen { namespace Ui { namespace _Layout
46 , __pContainerProxy(null)
49 , __partialUpdateState(false)
50 , __determineState(false)
56 LayoutItemProxy* pContainerProxy = GetContainerProxy();
57 if (pContainerProxy != null)
59 LayoutContainer* pContainer = static_cast <LayoutContainer*>(pContainerProxy->GetItem());
62 pContainer->OnDestroyLayout(*this);
68 delete __pContainerProxy;
75 Layout::GetContainerProxy(void)
77 if (__pContainerProxy == null)
82 if (__rootLayout == false)
84 LayoutContainer* pContainer = static_cast <LayoutContainer*>(__pContainerProxy->GetItem());
85 if (pContainer == null)
87 SysLog(NID_UI, "Container is null.");
91 LayoutContainer* pParentContainer = pContainer->GetParentContainer();
92 if (pParentContainer == null)
94 SysLog(NID_UI, "Parent of container is null.");
98 Layout* pParentLayout = __pContainerProxy->GetParentLayout();
99 if (pParentLayout == null)
101 SysLog(NID_UI, "Parent layout of container is null.");
105 if (pParentLayout != pParentContainer->__pCurrentLayout)
107 ProxyListNode* pNode = pParentContainer->__pCurrentLayout->__pProxyList->GetFirstNode();
108 while (pNode != null)
110 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
111 LayoutContainer* pResultContainer = static_cast <LayoutContainer*>(pItemProxy->GetItem());
112 if (pContainer == pResultContainer)
114 __pContainerProxy = pItemProxy;
117 pNode = __pProxyList->GetNextNode(*pNode);
122 return __pContainerProxy;
126 Layout::SetLayoutRect(const LayoutRect layoutRect)
130 __width = layoutRect.w;
131 __height = layoutRect.h;
135 Layout::GetLayoutRect(void) const
137 LayoutRect layoutRect = {__x, __y, __width, __height};
143 Layout::SetItemAlignment(const LayoutItem& item, const ItemAlign align)
147 if (align.HAlign < ITEM_HORIZONTAL_ALIGN_LEFT || align.HAlign > ITEM_HORIZONTAL_ALIGN_LEFT_RIGHT ||
148 align.VAlign < ITEM_VERTICAL_ALIGN_TOP || align.VAlign > ITEM_VERTICAL_ALIGN_TOP_BOTTOM)
150 SysTryReturn(NID_UI, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The alignment parameter is invalid parameter.");
153 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
154 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
156 pItemProxy->SetItemAlignment(align);
158 SetUpdateState(true);
163 Layout::GetItemAlignment(const LayoutItem& item, ItemAlign& align) const
167 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
168 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
170 align = pItemProxy->GetItemAlignment();
176 Layout::SetItemMargin(const LayoutItem& item, const ItemMargin margin)
180 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
181 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
183 pItemProxy->SetItemMargin(margin);
185 SetUpdateState(true);
190 Layout::GetItemMargin(const LayoutItem& item, ItemMargin& margin) const
194 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
195 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
197 margin = pItemProxy->GetItemMargin();
203 Layout::SetItemWidthMatchMode(const LayoutItem& item, const LayoutMatchMode matchMode)
207 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
208 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
210 pItemProxy->SetItemWidthMatchMode(matchMode);
212 SetUpdateState(true);
217 Layout::GetItemWidthMatchMode(const LayoutItem& item, LayoutMatchMode& matchMode) const
221 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
222 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
224 matchMode = pItemProxy->GetItemWidthMatchMode();
230 Layout::SetItemHeightMatchMode(const LayoutItem& item, const LayoutMatchMode matchMode)
234 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
235 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
237 pItemProxy->SetItemHeightMatchMode(matchMode);
239 SetUpdateState(true);
244 Layout::GetItemHeightMatchMode(const LayoutItem& item, LayoutMatchMode& matchMode) const
248 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
249 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
251 matchMode = pItemProxy->GetItemHeightMatchMode();
257 Layout::SetItemBaseRect(const LayoutItem& item, const LayoutRect baseRect)
261 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
262 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
264 pItemProxy->SetItemBaseRect(baseRect);
266 SetUpdateState(true);
271 Layout::GetItemBaseRect(const LayoutItem& item, LayoutRect& baseRect) const
275 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
276 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
278 baseRect = pItemProxy->GetItemBaseRect();
284 Layout::ItemExists(LayoutItem& item)
286 if (__pProxyList->GetItemProxy(item) != null)
294 Layout::CheckParentFlag(void)
300 return UPDATEFLAG_NO_FLAG;
303 LayoutItemProxy* pContainerProxy = GetContainerProxy();
304 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
306 Layout* pParentLayout = pContainerProxy->GetParentLayout();
307 SysTryReturn(NID_UI, pParentLayout != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
309 LayoutItemProxy* pParentContainerProxy = pParentLayout->GetContainerProxy();
310 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the parent container.");
312 return CheckFlagInternal(*pParentContainerProxy);
316 Layout::CheckCurrentFlag(void)
322 return UPDATEFLAG_NO_FLAG;
325 LayoutItemProxy* pContainerProxy = GetContainerProxy();
326 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
328 return CheckFlagInternal(*pContainerProxy);
332 Layout::CheckFlagInternal(LayoutItemProxy& containerProxy)
336 LayoutMatchMode widthMode = containerProxy.GetItemWidthMatchMode();
337 LayoutMatchMode heightMode = containerProxy.GetItemHeightMatchMode();
338 ItemAlign align = containerProxy.GetItemAlignment();
340 if (widthMode == NONE_MODE && heightMode == NONE_MODE)
342 updateFlag |= UPDATEFLAG_NONE_MODE;
345 if (widthMode == MATCH_PARENT || heightMode == MATCH_PARENT)
347 updateFlag |= UPDATEFLAG_MATCH_PARENT;
350 if (widthMode == WRAP_CONTENT || heightMode == WRAP_CONTENT)
352 updateFlag |= UPDATEFLAG_WRAPCONTENT;
355 if (align.HAlign != ITEM_HORIZONTAL_ALIGN_LEFT || align.VAlign != ITEM_VERTICAL_ALIGN_TOP)
357 updateFlag |= UPDATEFLAG_ALIGNMENT;
360 return static_cast <LayoutUpdateFlag>(updateFlag);
365 Layout::UpdateLayout(void)
367 result r = UpdateLayoutInternal(UPDATEFLAG_NO_FLAG);
368 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to UpdateLayout.", GetErrorMessage(r));
369 r = DetermineWindowRectToAllItem();
370 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to DetermineWindowRectToAllItem.", GetErrorMessage(r));
376 Layout::DetermineWindowRectToAllItem(void)
380 LayoutItemProxy* pContainerProxy = GetContainerProxy();
381 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
385 if (__determineState)
388 __determineState = false;
393 Layout* pParentLayout = pContainerProxy->GetParentLayout();
394 SysTryReturn(NID_UI, pParentLayout != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
395 return pParentLayout->DetermineWindowRectToAllItem();
402 Layout::OnDetermine(void)
404 ProxyList* pProxyList = GetProxyList();
405 SysAssertf(pProxyList != null, "ProxyList is invalid");
407 LayoutItemProxy* pContainerProxy = GetContainerProxy();
408 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
411 pContainerProxy->GetItemWindowRect(itemRect);
412 pContainerProxy->SetItemWindowRect(itemRect, false);
418 pContainerProxy->SetItemWindowRect(itemRect, true);
420 ProxyListNode* pCurNode = pProxyList->GetFirstNode();
421 while (pCurNode != null)
423 LayoutItemProxy* pItemProxy = pCurNode->GetItemProxy();
424 LayoutContainer* pCurContainer = static_cast<LayoutContainer*>(pItemProxy->GetItem());
425 SysTryReturn(NID_UI, pCurContainer != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] This item is not container.");
427 pCurContainer->GetLayout()->OnDetermine();
429 pCurNode = pProxyList->GetNextNode(*pCurNode);
437 Layout::SetUpdateState(bool state)
441 LayoutItemProxy* pContainerProxy = GetContainerProxy();
443 SysTryReturnVoidResult(NID_UI, pContainerProxy != null, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
447 __updateState = state;
451 Layout* pParentLayout = pContainerProxy->GetParentLayout();
452 SysTryReturnVoidResult(NID_UI, pParentLayout != null, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
453 return pParentLayout->SetUpdateState(state);
458 Layout::PartialUpdateLayout(void)
462 LayoutUpdateFlag flag = CheckCurrentFlag();
463 SysTryReturn(NID_UI, flag != UPDATEFLAG_ERROR, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] CheckCurrentFlag is failed.");
465 result r = UpdateLayoutInternal(flag);
466 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to UpdateLayout.", GetErrorMessage(r));
468 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to OnDetermine.", GetErrorMessage(r));
475 Layout::OnLayoutTrigger(Layout& layout, bool layoutUpdating)
479 LayoutItemProxy* pContainerProxy = layout.GetContainerProxy();
481 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE,
482 "[E_INVALID_STATE] Did not set the container.");
484 LayoutRect containerRect;
485 pContainerProxy->GetItemWindowRect(containerRect);
486 LayoutContainer* pContainer = static_cast <LayoutContainer*>(pContainerProxy->GetItem());
487 SysTryReturn(NID_UI, pContainer != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
489 LayoutRect containerClientRect = {0.0f, 0.0f, containerRect.w, containerRect.h};
490 pContainer->ConvertWindowToClientBounds(containerClientRect, containerClientRect);
492 LayoutSize containerSize = {containerClientRect.w, containerClientRect.h};
494 pContainer->SetIntendedWindowSize(containerSize);
495 return layout.OnLayout(containerRect.w, containerRect.h, layoutUpdating);
499 Layout::UpdateLayoutInternal(LayoutUpdateFlag updateFlag)
503 LayoutItemProxy* pContainerProxy = GetContainerProxy();
505 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
511 if (updateFlag == UPDATEFLAG_NO_FLAG)
513 __updateState = false;
515 __determineState = true;
516 return OnLayoutTrigger(*this, true);
525 Layout* pParentLayout = pContainerProxy->GetParentLayout();
526 SysTryReturn(NID_UI, pParentLayout != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
528 if (updateFlag != UPDATEFLAG_NO_FLAG)
530 if (updateFlag & UPDATEFLAG_MATCH_PARENT || updateFlag & UPDATEFLAG_ALIGNMENT || pParentLayout->__partialUpdateState)
532 LayoutUpdateFlag parentflag = CheckParentFlag();
533 SysTryReturn(NID_UI, parentflag != UPDATEFLAG_ERROR, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] CheckParentFlag is failed.");
535 if (parentflag & UPDATEFLAG_MATCH_PARENT || parentflag & UPDATEFLAG_ALIGNMENT || pParentLayout->__partialUpdateState)
537 return pParentLayout->UpdateLayoutInternal(parentflag);
541 return OnLayoutTrigger(*pParentLayout, true);
546 return OnLayoutTrigger(*this, true);
550 return pParentLayout->UpdateLayoutInternal(UPDATEFLAG_NO_FLAG);
555 Layout::AddItem(LayoutItem& addItem)
557 LayoutItemProxy* pItemProxy = CreateProxy(addItem);
558 SysTryReturn(NID_UI, pItemProxy != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to create proxy of layout item.");
560 LayoutContainer* pContainer = static_cast <LayoutContainer*>(&addItem);
561 if (pContainer != null)
563 LayoutListNode* pCurNode = pContainer->GetLayoutList()->GetFirstNode();
567 Layout* pLayout = pCurNode->GetLayout();
570 if (pLayout->__rootLayout == true)
572 delete pLayout->__pContainerProxy;
573 pLayout->__pContainerProxy = pItemProxy;
574 pLayout->__rootLayout = false;
577 pCurNode = pContainer->GetLayoutList()->GetNextNode(*pCurNode);
581 if (__pProxyList->AddNode(*pItemProxy) == null)
583 pItemProxy->Destroy();
584 result r = GetLastResult();
585 SysTryReturn(NID_UI, false, r, r, "[%s] Failed to add layout item.", GetErrorMessage(r));
588 pItemProxy->SetParentLayout(this);
589 pItemProxy->SetParentContainer(static_cast <LayoutContainer*>(__pContainerProxy->GetItem()));
592 pItemProxy->GetItemWindowRect(itemRect);
594 pItemProxy->SetItemBaseRect(itemRect);
596 SetUpdateState(true);
601 Layout::RemoveItem(const LayoutItem& removeItem)
605 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(removeItem);
606 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
607 "[E_INVALID_STATE] Control dose not belong to layout.");
609 result r = __pProxyList->RemoveNode(*pItemProxy);
612 SysLog(NID_UI, "Failed to RemoveNode()");
613 SysTryReturn(NID_UI, r, r, r, "[E_INVALID_STATE] Failed to remove layout item.");
616 pItemProxy->SetParentLayout(null);
617 pItemProxy->SetParentContainer(null);
618 pItemProxy->Destroy();
624 Layout::OnChangeViewPosition(int viewPosX, int viewPosY)
628 if (viewPosX != 0 || viewPosY != 0)
630 ProxyListNode* pNode = __pProxyList->GetFirstNode();
631 while (pNode != null)
633 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
634 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
635 "[E_INVALID_STATE] Layout proxy list error.");
638 pItemProxy->GetItemWindowRect(itemRect);
639 itemRect.x += viewPosX;
640 itemRect.y += viewPosY;
641 result r = pItemProxy->SetItemWindowRect(itemRect);
647 pNode = __pProxyList->GetNextNode(*pNode);
658 Layout::CalculateAlignment(const LayoutAlignMode alignMode)
662 result r = E_SUCCESS;
663 bool needMeasure = false;
665 SysAssertf(__pProxyList != null, "ProxyList is invalid.");
667 ProxyListNode* pNode = __pProxyList->GetFirstNode();
668 while (pNode != null)
670 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
671 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout proxy list error.");
673 ItemAlign align = pItemProxy->GetItemAlignment();
674 ItemMargin margin = pItemProxy->GetItemMargin();
676 pItemProxy->GetItemWindowRect(itemRect);
678 if (alignMode == BOTH || alignMode == HORIZONTALONLY)
680 switch (align.HAlign)
682 case ITEM_HORIZONTAL_ALIGN_LEFT:
684 itemRect.x = __x + margin.left;
688 case ITEM_HORIZONTAL_ALIGN_CENTER:
690 itemRect.x = (__x + (__width / 2)) - (itemRect.w / 2);
694 case ITEM_HORIZONTAL_ALIGN_RIGHT:
696 itemRect.x = (__x + __width) - (itemRect.w + margin.right);
700 case ITEM_HORIZONTAL_ALIGN_LEFT_RIGHT:
702 itemRect.x = __x + margin.left;
703 itemRect.w = __width - (margin.left + margin.right);
708 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
716 if (alignMode == BOTH || alignMode == VERTICALONLY)
718 switch (align.VAlign)
720 case ITEM_VERTICAL_ALIGN_TOP:
722 itemRect.y = __y + margin.top;
726 case ITEM_VERTICAL_ALIGN_MIDDLE:
728 itemRect.y = (__y + (__height / 2)) - (itemRect.h / 2);
732 case ITEM_VERTICAL_ALIGN_BOTTOM:
734 itemRect.y = (__y + __height) - (itemRect.h + margin.bottom);
738 case ITEM_VERTICAL_ALIGN_TOP_BOTTOM:
740 itemRect.y = __y + margin.top;
741 itemRect.h = __height - (margin.top + margin.bottom);
746 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
756 r = pItemProxy->Measure(itemRect.w, itemRect.h);
761 pItemProxy->GetMeasuredSize(itemRect.w, itemRect.h);
763 r = pItemProxy->SetItemWindowRect(itemRect);
769 pNode = __pProxyList->GetNextNode(*pNode);
776 Layout::SetContainer(LayoutContainer* pContainer)
780 if (pContainer == null)
782 ProxyListNode* pNode = __pProxyList->GetFirstNode();
783 while (pNode != null)
785 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
786 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
787 "[E_INVALID_STATE] Layout proxy list error.");
789 pItemProxy->SetParentContainer(null);
791 pNode = __pProxyList->GetNextNode(*pNode);
794 if (__pContainerProxy)
798 //__pContainerProxy->Destroy();
799 delete __pContainerProxy;
800 __rootLayout = false;
802 __pContainerProxy = null;
808 LayoutContainer* pParentContainer = pContainer->GetParentContainer();
809 if (pParentContainer == null)
811 if (__rootLayout && __pContainerProxy != null)
813 delete __pContainerProxy;
816 __pContainerProxy = CreateProxy(*pContainer);
817 SysTryReturn(NID_UI, __pContainerProxy != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to create proxy of layout item.");
823 Layout* pParentLayout = pParentContainer->GetLayout();
824 SysTryReturn(NID_UI, pParentLayout, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set a layout.");
826 ProxyListNode* pNode = pParentLayout->__pProxyList->GetFirstNode();
827 while (pNode != null)
829 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
830 if (pItemProxy == null)
832 return E_INVALID_STATE;
834 LayoutContainer* pResultContainer = static_cast <LayoutContainer*>(pItemProxy->GetItem());
835 if (pContainer == pResultContainer)
837 if (__rootLayout && __pContainerProxy != null)
839 delete __pContainerProxy;
840 __rootLayout = false;
842 __pContainerProxy = pItemProxy;
845 pNode = __pProxyList->GetNextNode(*pNode);
853 Layout::CreateProxy(LayoutItem& item)
855 return LayoutItemProxy::Create(*this, item);
859 Layout::SetRootLayout(bool rootCheck)
861 __rootLayout = rootCheck;
865 Layout::CheckItem(const LayoutItem& checkItem)
869 ProxyListNode* pNode = __pProxyList->GetFirstNode();
870 while (pNode != null)
872 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
873 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Invalid proxy list node.");
875 LayoutItem* pItem = pItemProxy->GetItem();
876 SysTryReturn(NID_UI, pItem != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Invalid layout item.");
878 SysTryReturn(NID_UI, &checkItem != pItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Control belong to layout.");
880 pNode = __pProxyList->GetNextNode(*pNode);
887 Layout::HasLayoutContainer(void)
889 return __pContainerProxy != null;
893 Layout::SetPartialUpdateFlag(bool flag)
895 __partialUpdateState = flag;
899 Layout::SetItemList(ProxyList* pItemList)
901 __pProxyList = pItemList;
905 Layout::GetProxyList(void) const
911 Layout::AlignToDevice(const LayoutPoint layoutPoint, LayoutPoint& alignedPoint)
913 FloatPoint point(layoutPoint.x, layoutPoint.y);
914 point = CoordinateSystem::AlignToDevice(point);
916 alignedPoint.x = point.x;
917 alignedPoint.y = point.y;
921 Layout::AlignToDevice(const LayoutSize layoutSize, LayoutSize& alignedSize)
923 FloatDimension size(layoutSize.w, layoutSize.h);
924 size = CoordinateSystem::AlignToDevice(size);
926 alignedSize.w = size.width;
927 alignedSize.h = size.height;
931 Layout::AlignToDevice(const LayoutRect layoutRect, LayoutRect& alignedRect)
933 FloatRectangle rect(layoutRect.x, layoutRect.y, layoutRect.w, layoutRect.h);
934 rect = CoordinateSystem::AlignToDevice(rect);
936 alignedRect.x = rect.x;
937 alignedRect.y = rect.y;
938 alignedRect.w = rect.width;
939 alignedRect.h = rect.height;
942 }}} // Tizen::Ui::_Layout