Skip to content

Commit

Permalink
chore: add VerticalAlignment Center handle
Browse files Browse the repository at this point in the history
  • Loading branch information
rafael-rosa-knowcode committed Aug 23, 2023
1 parent d1b5cfd commit 25668b4
Show file tree
Hide file tree
Showing 2 changed files with 209 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,165 @@
</StackPanel>




<StackPanel Background="{StaticResource UnoColor}"
HorizontalAlignment="Stretch"
BorderBrush="Black"
BorderThickness="1"
Spacing="50"
Padding="20">




<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Left"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Left Margin 0,130,300,20"
Margin="0,130,300,20"/>
</utu:ShadowContainer>


<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Left"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Left Margin 300,20,0,130"
Margin="300,20,0,130"/>
</utu:ShadowContainer>







<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Right"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Right Margin 0,130,300,20"
Margin="0,130,300,20"/>
</utu:ShadowContainer>


<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Right"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Right Margin 300,20,0,130"
Margin="300,20,0,130"/>
</utu:ShadowContainer>




<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Center Margin 0,130,300,20"
Margin="0,130,300,20"/>
</utu:ShadowContainer>


<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Center Margin 300,20,0,130"
Margin="300,20,0,130"/>
</utu:ShadowContainer>




<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Stretch Margin 0,130,300,20"
Margin="0,130,300,20"/>
</utu:ShadowContainer>


<utu:ShadowContainer Shadows="{StaticResource NeumorphismBulging}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<TextBox Padding="10"
Background="{StaticResource UnoColor}"
BorderThickness="0"
CornerRadius="20"
Foreground="White"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
PlaceholderForeground="LightGray"
PlaceholderText="Raising element"
Text="Stretch Margin 300,20,0,130"
Margin="300,20,0,130"/>
</utu:ShadowContainer>


</StackPanel>

</StackPanel>

</ScrollViewer>
Expand Down
67 changes: 50 additions & 17 deletions src/Uno.Toolkit.Skia.WinUI/Controls/Shadows/ShadowContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#else
using _SKXamlCanvas = SkiaSharp.Views.Windows.SKXamlCanvas;
using _SKPaintSurfaceEventArgs = SkiaSharp.Views.Windows.SKPaintSurfaceEventArgs;
using Microsoft.UI;
using Microsoft.UI.Xaml.Media;
//using static Uno.UI.FeatureConfiguration;

#endif
Expand All @@ -36,12 +38,12 @@ public partial class ShadowContainer : ContentControl
private const string PART_Canvas_Inner = "PART_Canvas_Inner";
private const string PART_ShadowOwner = "PART_ShadowOwner";
private const string PART_ContentPresenter = "PART_ContentPresenter";

private Grid? _panel;
private Canvas? _canvas;
private Canvas? _canvasInner;
private Canvas? _canvasInner;
private ContentPresenter? _contentPresenter;

private FrameworkElement? _currentContent;
private Thickness? _currentOriginalMargin;

Expand Down Expand Up @@ -81,7 +83,7 @@ protected override void OnApplyTemplate()
throw new InvalidOperationException($"Grid for Canvas '{PART_ShadowOwner}' was not found in the control-template.");
_contentPresenter = GetTemplateChild(nameof(PART_ContentPresenter)) as ContentPresenter ??
throw new InvalidOperationException($"Grid for Canvas '{PART_ContentPresenter}' was not found in the control-template.");

_backgroundPaintContext.ShadowHost = new();
_foregroundPaintContext.ShadowHost = new() { IsHitTestVisible = false };
_backgroundPaintContext.ShadowHost.PaintSurface += OnPaintSurface;
Expand Down Expand Up @@ -181,6 +183,7 @@ private void UpdateCanvasSize(ShadowCollection? shadows)
if (_currentContent == null ||
_canvas == null ||
_canvasInner == null ||
_panel == null ||
_backgroundPaintContext.ShadowHost == null ||
_foregroundPaintContext.ShadowHost == null)
{
Expand All @@ -201,7 +204,8 @@ private void UpdateCanvasSize(ShadowCollection? shadows)
}

_canvasInner.Width = _canvas.Width = _currentContent.ActualWidth - _currentContent.Margin.Left - _currentContent.Margin.Right;
if (_canvas.Width < 0) {
if (_canvas.Width < 0)
{
_canvasInner.Width = _canvas.Width = 0;
}
_canvasInner.Height = _canvas.Height = _currentContent.ActualHeight - _currentContent.Margin.Top - _currentContent.Margin.Bottom;
Expand All @@ -218,19 +222,48 @@ private void UpdateCanvasSize(ShadowCollection? shadows)
double newHostHeight = _currentContent.ActualHeight + newHostSpreedHeight * 2;
double newHostWidth = _currentContent.ActualWidth + newHostSpreedWidth * 2;

var left = -(newHostSpreedWidth
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Left ? -_currentContent.Margin.Left : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Right && _currentContent.VerticalAlignment != VerticalAlignment.Center ? _currentContent.Margin.Right == 0 ? 0 :
_currentContent.ActualWidth + _currentContent.Margin.Right - _canvas.Margin.Right : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Stretch ? _currentContent.Margin.Right : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Center ? _currentContent.Margin.Left : 0)
);
var top = -(newHostSpreedHeight
+ (_currentContent.VerticalAlignment == VerticalAlignment.Top ? -_currentContent.Margin.Top : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Bottom ? +_currentContent.Margin.Bottom + _currentContent.ActualHeight : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Stretch ? _currentContent.Margin.Bottom : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Center ? _currentContent.Margin.Top : 0)
double top = 0;
double left = 0;

if (_currentContent.VerticalAlignment == VerticalAlignment.Center)
{
_canvasInner.Margin = _canvas.Margin = _currentContent.Margin;
_canvasInner.Margin = _canvas.Margin = _currentContent.Margin;

if (_currentContent.Margin == new Thickness(0, 0, 0, 0))
{
left = -newHostSpreedWidth;
top = -newHostSpreedHeight;
}
else
{
left = -newHostSpreedWidth
- (_currentContent.HorizontalAlignment == HorizontalAlignment.Left ? 0 : 0)
- (_currentContent.HorizontalAlignment == HorizontalAlignment.Right ? _currentContent.ActualWidth : 0)
- (_currentContent.HorizontalAlignment == HorizontalAlignment.Stretch ? +_currentContent.Margin.Left / 2 + _currentContent.Margin.Right / 2 : 0)
- (_currentContent.HorizontalAlignment == HorizontalAlignment.Center ? _currentContent.ActualWidth / 2 : 0)

;
top = -newHostSpreedHeight -_currentContent.ActualHeight / 2;
}

}
else
{
left = -(newHostSpreedWidth
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Left ? -_currentContent.Margin.Left : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Right && _currentContent.VerticalAlignment != VerticalAlignment.Center ? _currentContent.Margin.Right == 0 ? 0 :
_currentContent.ActualWidth + _currentContent.Margin.Right - _canvas.Margin.Right : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Stretch ? _currentContent.Margin.Right : 0)
+ (_currentContent.HorizontalAlignment == HorizontalAlignment.Center ? _currentContent.Margin.Left : 0)
);
top = -(newHostSpreedHeight
+ (_currentContent.VerticalAlignment == VerticalAlignment.Top ? -_currentContent.Margin.Top : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Bottom ? +_currentContent.Margin.Bottom + _currentContent.ActualHeight : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Stretch ? _currentContent.Margin.Bottom : 0)
+ (_currentContent.VerticalAlignment == VerticalAlignment.Center ? _currentContent.Margin.Top : 0)
);
}

FixOntoCanvas(_backgroundPaintContext.ShadowHost, left, top, newHostWidth, newHostHeight);
FixOntoCanvas(_foregroundPaintContext.ShadowHost, left, top, newHostWidth, newHostHeight);
Expand Down

0 comments on commit 25668b4

Please sign in to comment.