Browse Source

Cleanup MinSize.

pull/2563/head
Jumar Macato 7 years ago
parent
commit
b6d01fcaeb
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 39
      src/Avalonia.Controls/DefinitionBase.cs
  2. 28
      src/Avalonia.Controls/GridWPF.cs

39
src/Avalonia.Controls/DefinitionBase.cs

@ -43,13 +43,11 @@ namespace Avalonia.Controls
/// Internal helper to access up-to-date UserMaxSize property value.
/// </summary>
internal abstract double UserMaxSize { get; }
private double _minSize; // used during measure to accumulate size for "Auto" and "Star" DefinitionBase's
/// <summary>
/// Layout-time user size type.
/// </summary>
internal Grid.LayoutTimeSizeType SizeType {get; set;}
internal Grid.LayoutTimeSizeType SizeType { get; set; }
/// <summary>
/// Returns or sets measure size for the definition.
/// </summary>
@ -81,17 +79,9 @@ namespace Avalonia.Controls
internal double SizeCache { get; set; }
/// <summary>
/// Returns min size.
/// Used during measure to accumulate size for "Auto" and "Star" DefinitionBase's
/// </summary>
internal double MinSize
{
get
{
double minSize = _minSize;
return (minSize);
}
}
internal double MinSize { get; set; }
/// <summary>
/// Updates min size.
@ -99,28 +89,7 @@ namespace Avalonia.Controls
/// <param name="minSize">New size.</param>
internal void UpdateMinSize(double minSize)
{
_minSize = Math.Max(_minSize, minSize);
}
/// <summary>
/// Sets min size.
/// </summary>
/// <param name="minSize">New size.</param>
internal void SetMinSize(double minSize)
{
_minSize = minSize;
}
/// <summary>
/// Returns min size, always taking into account shared state.
/// </summary>
internal double MinSizeForArrange
{
get
{
double minSize = _minSize;
return (minSize);
}
MinSize = Math.Max(MinSize, minSize);
}
/// <summary>

28
src/Avalonia.Controls/GridWPF.cs

@ -708,7 +708,7 @@ namespace Avalonia.Controls
for (int i = 0; i < definitions.Length; ++i)
{
// Reset minimum size.
definitions[i].SetMinSize(0);
definitions[i].MinSize = 0;
double userMinSize = definitions[i].UserMinSize;
double userMaxSize = definitions[i].UserMaxSize;
@ -719,7 +719,7 @@ namespace Avalonia.Controls
case (GridUnitType.Pixel):
definitions[i].SizeType = LayoutTimeSizeType.Pixel;
userSize = definitions[i].UserSize.Value;
// this was brought with NewLayout and defeats squishy behavior
userMinSize = Math.Max(userMinSize, Math.Min(userSize, userMaxSize));
break;
@ -784,11 +784,11 @@ namespace Avalonia.Controls
{
if (isRows)
{
DefinitionsV[i].SetMinSize(minSizes[i]);
DefinitionsV[i].MinSize = minSizes[i];
}
else
{
DefinitionsU[i].SetMinSize(minSizes[i]);
DefinitionsU[i].MinSize = minSizes[i];
}
}
}
@ -1642,14 +1642,14 @@ namespace Avalonia.Controls
double starWeight = StarWeight(def, scale);
totalStarWeight += starWeight;
if (def.MinSizeForArrange > 0.0)
if (def.MinSize > 0.0)
{
// store ratio w/min in MeasureSize (for now)
definitionIndices[minCount++] = i;
def.MeasureSize = starWeight / def.MinSizeForArrange;
def.MeasureSize = starWeight / def.MinSize;
}
double effectiveMaxSize = Math.Max(def.MinSizeForArrange, def.UserMaxSize);
double effectiveMaxSize = Math.Max(def.MinSize, def.UserMaxSize);
if (!double.IsPositiveInfinity(effectiveMaxSize))
{
// store ratio w/max in SizeCache (for now)
@ -1669,7 +1669,7 @@ namespace Avalonia.Controls
break;
case (GridUnitType.Auto):
userSize = def.MinSizeForArrange;
userSize = def.MinSize;
break;
}
@ -1688,7 +1688,7 @@ namespace Avalonia.Controls
userMaxSize = def.UserMaxSize;
}
def.SizeCache = Math.Max(def.MinSizeForArrange, Math.Min(userSize, userMaxSize));
def.SizeCache = Math.Max(def.MinSize, Math.Min(userSize, userMaxSize));
takenSize += def.SizeCache;
}
}
@ -1752,14 +1752,14 @@ namespace Avalonia.Controls
{
resolvedIndex = definitionIndices[minCount - 1];
resolvedDef = definitions[resolvedIndex];
resolvedSize = resolvedDef.MinSizeForArrange;
resolvedSize = resolvedDef.MinSize;
--minCount;
}
else
{
resolvedIndex = definitionIndices[defCount + maxCount - 1];
resolvedDef = definitions[resolvedIndex];
resolvedSize = Math.Max(resolvedDef.MinSizeForArrange, resolvedDef.UserMaxSize);
resolvedSize = Math.Max(resolvedDef.MinSize, resolvedDef.UserMaxSize);
--maxCount;
}
@ -1882,7 +1882,7 @@ namespace Avalonia.Controls
// min and max should have no effect by now, but just in case...
resolvedSize = Math.Min(resolvedSize, def.UserMaxSize);
resolvedSize = Math.Max(def.MinSizeForArrange, resolvedSize);
resolvedSize = Math.Max(def.MinSize, resolvedSize);
// Use the raw (unrounded) sizes to update takenSize, so that
// proportions are computed in the same terms as in phase 3;
@ -1974,7 +1974,7 @@ namespace Avalonia.Controls
{
DefinitionBase definition = definitions[definitionIndices[i]];
double final = definition.SizeCache - dpiIncrement;
final = Math.Max(final, definition.MinSizeForArrange);
final = Math.Max(final, definition.MinSize);
if (final < definition.SizeCache)
{
adjustedSize -= dpiIncrement;
@ -1990,7 +1990,7 @@ namespace Avalonia.Controls
{
DefinitionBase definition = definitions[definitionIndices[i]];
double final = definition.SizeCache + dpiIncrement;
final = Math.Max(final, definition.MinSizeForArrange);
final = Math.Max(final, definition.MinSize);
if (final > definition.SizeCache)
{
adjustedSize += dpiIncrement;

Loading…
Cancel
Save