[NUI] synchronize View.ExcludeLayouting and FlexLayout.PositionType (#2254)
authorYeongJong Lee <cleanlyj@naver.com>
Fri, 20 Nov 2020 07:51:37 +0000 (16:51 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Thu, 26 Nov 2020 08:19:50 +0000 (17:19 +0900)
Simple Test
```cs
//Default value test
bool Default_ExcludeLayouting = view.ExcludeLayouting; // False
FlexLayout.PositionType Default_FlexPositionType = FlexLayout.GetFlexPositionType(view); //Relative

// FlexPositionType test depending on ExcludeLayouting
view.ExcludeLayouting = true;
FlexLayout.PositionType FlexPositionType = FlexLayout.GetFlexPositionType(view); //Absolute

// ExcludeLayouting test depending on FlexLayout.SetFlexPositionType
FlexLayout.SetFlexPositionType(view, FlexLayout.PositionType.Relative);
bool ExcludeLayouting = view.ExcludeLayouting; // False;
```

src/Tizen.NUI/src/public/Layouting/FlexLayout.cs

index 2a22439..1c8dbec 100755 (executable)
@@ -47,7 +47,23 @@ namespace Tizen.NUI
         /// FlexPositionTypeProperty
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty FlexPositionTypeProperty = BindableProperty.CreateAttached("FlexPositionType", typeof(PositionType), typeof(FlexLayout), PositionType.Relative, validateValue: ValidateEnum((int)PositionType.Relative, (int)PositionType.Absolute), propertyChanged: OnChildPropertyChanged);
+        public static readonly BindableProperty FlexPositionTypeProperty = BindableProperty.CreateAttached("FlexPositionType", typeof(PositionType), typeof(FlexLayout), PositionType.Relative, validateValue: ValidateEnum((int)PositionType.Relative, (int)PositionType.Absolute),
+        propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            if (bindable is View view)
+            {
+                view.ExcludeLayouting = (PositionType)newValue == PositionType.Absolute;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var view = (View)bindable;
+            if (view.ExcludeLayouting)
+                return PositionType.Absolute;
+
+            return PositionType.Relative;
+        });
+
 
         /// <summary>
         /// AspectRatioProperty
@@ -674,24 +690,19 @@ namespace Tizen.NUI
 
                 if (layoutItem.Owner.ExcludeLayouting)
                 {
-                    SetFlexPositionType(Child, PositionType.Absolute);
-                    Interop.FlexLayout.FlexLayout_SetFlexPositionType(childHandleRef, (int)PositionType.Absolute);
                     MeasureChildWithoutPadding(layoutItem, widthMeasureSpec, heightMeasureSpec);
                     continue;
                 }
-                else
-                {
-                    SetFlexPositionType(Child, PositionType.Relative);
-                    Interop.FlexLayout.FlexLayout_SetFlexPositionType(childHandleRef, (int)PositionType.Relative);
-                }
 
                 AlignmentType flexAlignemnt = GetFlexAlignmentSelf(Child);
+                PositionType positionType = GetFlexPositionType(Child);
                 float flexAspectRatio = GetFlexAspectRatio(Child);
                 float flexBasis = GetFlexBasis(Child);
                 float flexShrink = GetFlexShrink(Child);
                 float flexGrow = GetFlexGrow(Child);
 
                 Interop.FlexLayout.FlexLayout_SetFlexAlignmentSelf(childHandleRef, (int)flexAlignemnt);
+                Interop.FlexLayout.FlexLayout_SetFlexPositionType(childHandleRef, (int)positionType);
                 Interop.FlexLayout.FlexLayout_SetFlexAspectRatio(childHandleRef, flexAspectRatio);
                 Interop.FlexLayout.FlexLayout_SetFlexBasis(childHandleRef, flexBasis);
                 Interop.FlexLayout.FlexLayout_SetFlexShrink(childHandleRef, flexShrink);