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

28
src/Avalonia.Controls/GridWPF.cs

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

Loading…
Cancel
Save