From: Jean-Philippe Bruyère Date: Tue, 5 May 2020 14:38:20 +0000 (+0200) Subject: try force measure of stretched children from stack having Fit measure X-Git-Tag: v0.9.5-beta~121 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=b1ccb02be5d186e4a8b1c6bec9284183ac352f06;p=jp%2Fcrow.git try force measure of stretched children from stack having Fit measure --- diff --git a/Crow/src/Widgets/Border.cs b/Crow/src/Widgets/Border.cs index b3c72030..b9d7e333 100644 --- a/Crow/src/Widgets/Border.cs +++ b/Crow/src/Widgets/Border.cs @@ -122,7 +122,7 @@ namespace Crow } } - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { int tmp = base.measureRawSize (lt); return tmp < 0 ? tmp : tmp + 2 * BorderWidth; diff --git a/Crow/src/Widgets/GenericStack.cs b/Crow/src/Widgets/GenericStack.cs index 3e0a8cfb..eeec15c6 100644 --- a/Crow/src/Widgets/GenericStack.cs +++ b/Crow/src/Widgets/GenericStack.cs @@ -56,7 +56,7 @@ namespace Crow else layoutType &= (~LayoutingType.Y); } - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { int totSpace = Math.Max(0, Spacing * (Children.Count (c => c.Visible) - 1)); if (lt == LayoutingType.Width) { diff --git a/Crow/src/Widgets/Group.cs b/Crow/src/Widgets/Group.cs index b2f6f418..0a4b964c 100644 --- a/Crow/src/Widgets/Group.cs +++ b/Crow/src/Widgets/Group.cs @@ -223,25 +223,19 @@ namespace Crow } return false; } - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { if (Children.Count > 0) { if (lt == LayoutingType.Width) { if (largestChild == null) searchLargestChild (); - /*if (largestChild == null) { - //if still null, not possible to determine a width - //because all children are stretched, force first one to fit - Children [0].Width = Measure.Fit; - return -1;//cancel actual sizing to let child computation take place - }*/ + if (largestChild == null) + searchLargestChild (true); } else { if (tallestChild == null) searchTallestChild (); - /*if (tallestChild == null) { - Children [0].Height = Measure.Fit; - return -1; - }*/ + if (tallestChild == null) + searchTallestChild (true); } } return base.measureRawSize (lt); @@ -380,7 +374,8 @@ namespace Crow tallestChild = null; contentSize = 0; } - void searchLargestChild(){ + void searchLargestChild (bool forceMeasure = false) + { #if DEBUG_LAYOUTING Debug.WriteLine("\tSearch largest child"); #endif @@ -389,15 +384,21 @@ namespace Crow for (int i = 0; i < Children.Count; i++) { if (!Children [i].Visible) continue; - if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Width)) + int cw = 0; + if (forceMeasure) + cw = children [i].measureRawSize (LayoutingType.Width); + else if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Width)) continue; - if (Children [i].Slot.Width > contentSize.Width) { - contentSize.Width = Children [i].Slot.Width; + else + cw = Children [i].Slot.Width; + if (cw > contentSize.Width) { + contentSize.Width = cw; largestChild = Children [i]; } } } - void searchTallestChild(){ + void searchTallestChild (bool forceMeasure = false) + { #if DEBUG_LAYOUTING Debug.WriteLine("\tSearch tallest child"); #endif @@ -406,10 +407,15 @@ namespace Crow for (int i = 0; i < Children.Count; i++) { if (!Children [i].Visible) continue; - if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Height)) + int ch = 0; + if (forceMeasure) + ch = children [i].measureRawSize (LayoutingType.Height); + else if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Height)) continue; - if (Children [i].Slot.Height > contentSize.Height) { - contentSize.Height = Children [i].Slot.Height; + else + ch = Children [i].Slot.Height; + if (ch > contentSize.Height) { + contentSize.Height = ch; tallestChild = Children [i]; } } diff --git a/Crow/src/Widgets/Image.cs b/Crow/src/Widgets/Image.cs index 87111e84..dd80a1bc 100644 --- a/Crow/src/Widgets/Image.cs +++ b/Crow/src/Widgets/Image.cs @@ -160,7 +160,7 @@ namespace Crow #endregion #region GraphicObject overrides - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { if (_pic == null) return 2 * Margin; diff --git a/Crow/src/Widgets/Label.cs b/Crow/src/Widgets/Label.cs index a03a0bdc..071c993b 100644 --- a/Crow/src/Widgets/Label.cs +++ b/Crow/src/Widgets/Label.cs @@ -417,7 +417,7 @@ namespace Crow { Size cachedTextSize = default(Size); #region GraphicObject overrides - protected override int measureRawSize(LayoutingType lt) + public override int measureRawSize(LayoutingType lt) { if (lines == null) lines = getLines; diff --git a/Crow/src/Widgets/Shape.cs b/Crow/src/Widgets/Shape.cs index ac006b82..5f576134 100644 --- a/Crow/src/Widgets/Shape.cs +++ b/Crow/src/Widgets/Shape.cs @@ -218,7 +218,7 @@ namespace Crow } - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { if ((lt == LayoutingType.Width && contentSize.Width == 0) || (lt == LayoutingType.Height && contentSize.Height == 0)) { if (size != default (Size)) diff --git a/Crow/src/Widgets/TextRun.cs b/Crow/src/Widgets/TextRun.cs index f784f90e..054d2c2a 100644 --- a/Crow/src/Widgets/TextRun.cs +++ b/Crow/src/Widgets/TextRun.cs @@ -145,7 +145,7 @@ namespace Crow } #region GraphicObject overrides - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { if (lines == null) lines = getLines; diff --git a/Crow/src/Widgets/Widget.cs b/Crow/src/Widgets/Widget.cs index 736ed59d..98198d05 100644 --- a/Crow/src/Widgets/Widget.cs +++ b/Crow/src/Widgets/Widget.cs @@ -1441,7 +1441,7 @@ namespace Crow #region Layouting /// return size of content + margins - protected virtual int measureRawSize (LayoutingType lt) { + public virtual int measureRawSize (LayoutingType lt) { return lt == LayoutingType.Width ? contentSize.Width + 2 * margin: contentSize.Height + 2 * margin; } diff --git a/Crow/src/Widgets/Wrapper.cs b/Crow/src/Widgets/Wrapper.cs index cc319856..a170e390 100644 --- a/Crow/src/Widgets/Wrapper.cs +++ b/Crow/src/Widgets/Wrapper.cs @@ -118,7 +118,7 @@ namespace Crow #endregion #region GraphicObject Overrides - protected override int measureRawSize (LayoutingType lt) + public override int measureRawSize (LayoutingType lt) { int tmp = 0; //Wrapper can't fit in the opposite direction of the wrapper, this func is called only if Fit diff --git a/Samples/BasicTests/BasicTests.cs b/Samples/BasicTests/BasicTests.cs index 90917302..4e89ca79 100644 --- a/Samples/BasicTests/BasicTests.cs +++ b/Samples/BasicTests/BasicTests.cs @@ -33,7 +33,8 @@ namespace tests //testFiles = new string [] { @"Interfaces/Divers/welcome.crow" }; //testFiles = new string [] { @"Interfaces/TemplatedGroup/3.crow" }; //testFiles = new string [] { @"Interfaces/Divers/testShape.crow" }; - testFiles = new string [] { @"Interfaces/TemplatedControl/testEnumSelector.crow" }; + //testFiles = new string [] { @"Interfaces/TemplatedControl/testEnumSelector.crow" }; + testFiles = new string [] { @"Interfaces/Stack/StretchedInFit.crow" }; //testFiles = new string [] { @"Interfaces/Divers/colorPicker2.crow" }; testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/GraphicObject", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Container", "*.crow")).ToArray (); diff --git a/Samples/common/ui/Interfaces/Stack/StretchedInFit.crow b/Samples/common/ui/Interfaces/Stack/StretchedInFit.crow new file mode 100644 index 00000000..42c30647 --- /dev/null +++ b/Samples/common/ui/Interfaces/Stack/StretchedInFit.crow @@ -0,0 +1,7 @@ + + + \ No newline at end of file