performance optimization

This commit is contained in:
NaBian committed 2020-10-29 22:50:12 +08:00
1 parent 4b7124d5c8
commit 65c2e10dc7
8 files changed
+124 -84

No files matched your search

@@ -37,9 +37,11 @@ namespace HandyControl.Controls
protected override Size MeasureOverride(Size availableSize)
{
if (Children.Count == 0) return new Size(Diameter, Diameter);
var diameter = Diameter;
var newSize = new Size(Diameter, Diameter);
if (Children.Count == 0) return new Size(diameter, diameter);
var newSize = new Size(diameter, diameter);
foreach (UIElement element in Children)
{
@@ -51,6 +53,9 @@ namespace HandyControl.Controls
protected override Size ArrangeOverride(Size finalSize)
{
var keepVertical = KeepVertical;
var offsetAngle = OffsetAngle;
var i = 0;
var perDeg = 360.0 / Children.Count;
var radius = Diameter / 2;
@@ -59,19 +64,23 @@ namespace HandyControl.Controls
{
var centerX = element.DesiredSize.Width / 2.0;
var centerY = element.DesiredSize.Height / 2.0;
var angle = perDeg * i++ + OffsetAngle;
var angle = perDeg * i++ + offsetAngle;
var transform = new RotateTransform
{
CenterX = centerX,
CenterY = centerY,
Angle = KeepVertical ? 0 : angle
Angle = keepVertical ? 0 : angle
};
element.RenderTransform = transform;
var r = Math.PI * angle / 180.0;
var x = radius * Math.Cos(r);
var y = radius * Math.Sin(r);
var rectX = x + finalSize.Width / 2 - centerX;
var rectY = y + finalSize.Height / 2 - centerY;
element.Arrange(new Rect(rectX, rectY, element.DesiredSize.Width, element.DesiredSize.Height));
}