|
|
|
@ -521,24 +521,27 @@ namespace Perspex.Layout |
|
|
|
{ |
|
|
|
if (IsVisible) |
|
|
|
{ |
|
|
|
var originX = finalRect.X + Margin.Left; |
|
|
|
var originY = finalRect.Y + Margin.Top; |
|
|
|
var sizeMinusMargins = new Size( |
|
|
|
Math.Max(0, finalRect.Width - Margin.Left - Margin.Right), |
|
|
|
Math.Max(0, finalRect.Height - Margin.Top - Margin.Bottom)); |
|
|
|
var margin = Margin; |
|
|
|
var originX = finalRect.X + margin.Left; |
|
|
|
var originY = finalRect.Y + margin.Top; |
|
|
|
var availableSizeMinusMargins = new Size( |
|
|
|
Math.Max(0, finalRect.Width - margin.Left - margin.Right), |
|
|
|
Math.Max(0, finalRect.Height - margin.Top - margin.Bottom)); |
|
|
|
var horizontalAlignment = HorizontalAlignment; |
|
|
|
var verticalAlignment = VerticalAlignment; |
|
|
|
var size = sizeMinusMargins; |
|
|
|
var size = availableSizeMinusMargins; |
|
|
|
var scale = GetLayoutScale(); |
|
|
|
|
|
|
|
if (horizontalAlignment != HorizontalAlignment.Stretch) |
|
|
|
{ |
|
|
|
size = size.WithWidth(Math.Min(size.Width, DesiredSize.Width)); |
|
|
|
size = size.WithWidth(Math.Min(size.Width, DesiredSize.Width) |
|
|
|
- margin.Left - margin.Right); |
|
|
|
} |
|
|
|
|
|
|
|
if (verticalAlignment != VerticalAlignment.Stretch) |
|
|
|
{ |
|
|
|
size = size.WithHeight(Math.Min(size.Height, DesiredSize.Height)); |
|
|
|
size = size.WithHeight(Math.Min(size.Height, DesiredSize.Height) |
|
|
|
- margin.Top - margin.Bottom); |
|
|
|
} |
|
|
|
|
|
|
|
size = LayoutHelper.ApplyLayoutConstraints(this, size); |
|
|
|
@ -548,9 +551,9 @@ namespace Perspex.Layout |
|
|
|
size = new Size( |
|
|
|
Math.Ceiling(size.Width * scale) / scale, |
|
|
|
Math.Ceiling(size.Height * scale) / scale); |
|
|
|
sizeMinusMargins = new Size( |
|
|
|
Math.Ceiling(sizeMinusMargins.Width * scale) / scale, |
|
|
|
Math.Ceiling(sizeMinusMargins.Height * scale) / scale); |
|
|
|
availableSizeMinusMargins = new Size( |
|
|
|
Math.Ceiling(availableSizeMinusMargins.Width * scale) / scale, |
|
|
|
Math.Ceiling(availableSizeMinusMargins.Height * scale) / scale); |
|
|
|
} |
|
|
|
|
|
|
|
size = ArrangeOverride(size).Constrain(size); |
|
|
|
@ -559,10 +562,10 @@ namespace Perspex.Layout |
|
|
|
{ |
|
|
|
case HorizontalAlignment.Center: |
|
|
|
case HorizontalAlignment.Stretch: |
|
|
|
originX += (sizeMinusMargins.Width - size.Width) / 2; |
|
|
|
originX += (availableSizeMinusMargins.Width - size.Width) / 2; |
|
|
|
break; |
|
|
|
case HorizontalAlignment.Right: |
|
|
|
originX += sizeMinusMargins.Width - size.Width; |
|
|
|
originX += availableSizeMinusMargins.Width - size.Width; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
@ -570,10 +573,10 @@ namespace Perspex.Layout |
|
|
|
{ |
|
|
|
case VerticalAlignment.Center: |
|
|
|
case VerticalAlignment.Stretch: |
|
|
|
originY += (sizeMinusMargins.Height - size.Height) / 2; |
|
|
|
originY += (availableSizeMinusMargins.Height - size.Height) / 2; |
|
|
|
break; |
|
|
|
case VerticalAlignment.Bottom: |
|
|
|
originY += sizeMinusMargins.Height - size.Height; |
|
|
|
originY += availableSizeMinusMargins.Height - size.Height; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
|