| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 | 
							- <UserControl xmlns="https://github.com/avaloniaui"
 
-              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
-              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 
-              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 
- 			 xmlns:components="using:InABox.Avalonia.Components"
 
- 			 xmlns:converters="using:InABox.Avalonia.Converters"
 
- 			 xmlns:image="using:InABox.Avalonia.Components.ImageEditing"
 
- 			 xmlns:system="using:System"
 
-              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
 
-              x:Class="InABox.Avalonia.Components.ImageEditor">
 
- 	<UserControl.Styles>
 
- 		<Style Selector="Button">
 
- 			<Setter Property="Background"
 
- 					Value="Transparent"/>
 
- 			<Setter Property="ClipToBounds"
 
- 					Value="False"/>
 
- 		</Style>
 
- 		<Style Selector="Button:flyout-open /template/ ContentPresenter">
 
- 			<Setter Property="BoxShadow"
 
- 					Value="0 0 10 DarkGray"/>
 
- 		</Style>
 
- 		<Style Selector="Button.active /template/ ContentPresenter">
 
- 			<Setter Property="BoxShadow"
 
- 					Value="0 0 10 DarkGray"/>
 
- 		</Style>
 
- 		<Style Selector="Button:disabled">
 
- 			<Setter Property="Foreground"
 
- 					Value="#909090"/>
 
- 		</Style>
 
- 		<Style Selector="Button:disabled /template/ ContentPresenter">
 
- 			<Setter Property="Background"
 
- 					Value="Transparent"/>
 
- 		</Style>
 
- 		<Style Selector="Button:pointerover /template/ ContentPresenter#PART_ContentPresenter">
 
- 			<Setter Property="BorderBrush" Value="{Binding $parent[Button].BorderBrush}" />
 
- 			<Setter Property="BorderThickness" Value="{Binding $parent[Button].BorderThickness}" />
 
- 			<Setter Property="Background" Value="{Binding $parent[Button].Background}" />
 
- 			<Setter Property="Foreground" Value="{Binding $parent[Button].Foreground}" />
 
- 		</Style>
 
- 		
 
- 		<Style Selector="FlyoutPresenter">
 
- 			<Setter Property="Padding" Value="5"/>
 
- 			<Setter Property="Background" Value="Transparent"/>
 
- 			<Setter Property="BorderThickness" Value="0"/>
 
- 			<Setter Property="CornerRadius" Value="0"/>
 
- 			<Setter Property="ClipToBounds" Value="False"/>
 
- 		</Style>
 
- 		<Style Selector="FlyoutPresenter > Border">
 
- 			<Setter Property="Padding" Value="{StaticResource PrsControlSpacing}"/>
 
- 			<Setter Property="BorderBrush" Value="Black"/>
 
- 			<Setter Property="BorderThickness" Value="0"/>
 
- 			<Setter Property="Background" Value="White"/>
 
- 			<Setter Property="BoxShadow" Value="0 0 10 Gray"/>
 
- 		</Style>
 
- 		<Style Selector="Rectangle.Separator">
 
- 			<Setter Property="Fill" Value="Gray"/>
 
- 			<Setter Property="Width" Value="1"/>
 
- 			<Setter Property="VerticalAlignment" Value="Stretch"/>
 
- 			<Setter Property="Margin" Value="0,10"/>
 
- 		</Style>
 
- 	</UserControl.Styles>
 
- 	<UserControl.Resources>
 
- 		<converters:DoubleCalculator x:Key="Add1Calculator" Constants="1.0" Type="Sum"/>
 
- 	</UserControl.Resources>
 
- 	<Border CornerRadius="{Binding $parent[components:ImageEditor].CornerRadius}" ClipToBounds="True">
 
- 		<Grid>
 
- 			<Grid.RowDefinitions>
 
- 				<RowDefinition Height="Auto"/>
 
- 				<RowDefinition Height="*"/>
 
- 				<RowDefinition Height="Auto"/>
 
- 			</Grid.RowDefinitions>
 
- 			<Canvas Name="OuterCanvas" Grid.Row="1" Background="White" PointerWheelChanged="OuterCanvas_PointerWheelChanged">
 
- 				<Canvas.GestureRecognizers>
 
- 					<image:PanAndZoomGestureRecognizer/>
 
- 				</Canvas.GestureRecognizers>
 
- 				<Canvas.Styles>
 
- 					<Style Selector="Thumb">
 
- 						<Setter Property="Template">
 
- 							<ControlTemplate>
 
- 								<Border Background="LightGray"
 
- 										BorderBrush="Black"
 
- 										BorderThickness="1"/>
 
- 							</ControlTemplate>
 
- 						</Setter>
 
- 					</Style>
 
- 				</Canvas.Styles>
 
- 				<Border Name="ImageBorder" Background="White"
 
- 						BoxShadow="0 0 10 Gray">
 
- 					<Grid>
 
- 						<Image Name="Image" Source="{Binding $parent[components:ImageEditor].Source}"/>
 
- 						<Canvas Name="Canvas"
 
- 								Background="Transparent"
 
- 								PointerPressed="Canvas_PointerPressed"
 
- 								PointerMoved="Canvas_PointerMoved"
 
- 								PointerReleased="Canvas_PointerReleased"
 
- 								ClipToBounds="True"/>
 
- 					</Grid>
 
- 				</Border>
 
- 			</Canvas>
 
- 			<Border Grid.Row="0"
 
- 					BoxShadow="0 0 10 Gray"
 
- 					IsVisible="{Binding $parent[components:ImageEditor].ShowButtons}">
 
- 				<Border ClipToBounds="True"
 
- 						Background="White">
 
- 					<Grid>
 
- 						<Grid.ColumnDefinitions>
 
- 							<ColumnDefinition Width="*"/>
 
- 							<ColumnDefinition Width="Auto"/>
 
- 							<ColumnDefinition Width="*"/>
 
- 						</Grid.ColumnDefinitions>
 
- 						<ItemsControl Grid.Column="1" ItemsSource="{Binding $parent[components:ImageEditor].ModeButtons}">
 
- 							<ItemsControl.ItemTemplate>
 
- 								<DataTemplate DataType="components:ImageEditorModeButton">
 
- 									<Button Classes.active="{Binding Active}"
 
- 											Width="40" Height="40" Margin="10"
 
- 											CommandParameter="{Binding Mode}"
 
- 											Command="{Binding $parent[components:ImageEditor].SetModeCommand}"
 
- 											Content="{Binding Content}"/>
 
- 								</DataTemplate>
 
- 							</ItemsControl.ItemTemplate>
 
- 							<ItemsControl.ItemsPanel>
 
- 								<ItemsPanelTemplate>
 
- 									<UniformGrid Margin="-10" Rows="1"/>
 
- 								</ItemsPanelTemplate>
 
- 							</ItemsControl.ItemsPanel>
 
- 						</ItemsControl>
 
- 					</Grid>
 
- 				</Border>
 
- 			</Border>
 
- 			<Border Grid.Row="2"
 
- 					BoxShadow="0 0 10 Gray"
 
- 					IsVisible="{Binding $parent[components:ImageEditor].ShowButtons}">
 
- 				<Border ClipToBounds="True"
 
- 						Background="White">
 
- 					<Grid>
 
- 						<Grid.ColumnDefinitions>
 
- 							<ColumnDefinition Width="*"/>
 
- 							<ColumnDefinition Width="Auto"/>
 
- 							<ColumnDefinition Width="*"/>
 
- 						</Grid.ColumnDefinitions>
 
- 						<StackPanel Grid.Column="1" Margin="-10"
 
- 									Orientation="Horizontal">
 
- 							<Button Name="FontSizeButton" Width="40" Height="40"
 
- 									Margin="10">
 
- 								<Canvas Width="25" Height="25"
 
- 										HorizontalAlignment="Center" VerticalAlignment="Center">
 
- 									<TextBlock Text="A" FontSize="20"
 
- 											   Canvas.Left="2"
 
- 											   Canvas.Bottom="1"/>
 
- 									<TextBlock Text="A" FontSize="10"
 
- 											   Canvas.Left="15"
 
- 											   Canvas.Bottom="3"/>
 
- 								</Canvas>
 
- 								<Button.Flyout>
 
- 									<Flyout Placement="Top" VerticalOffset="0">
 
- 										<Border>
 
- 											<Grid>
 
- 												<Grid.RowDefinitions>
 
- 													<RowDefinition Height="40"/>
 
- 													<RowDefinition Height="Auto"/>
 
- 												</Grid.RowDefinitions>
 
- 												<TextBlock FontSize="{Binding $parent[components:ImageEditor].FontSize}"
 
- 														   Text="Aa"
 
- 														   VerticalAlignment="Center"
 
- 														   TextAlignment="Center"/>
 
- 												<Slider Value="{Binding $parent[components:ImageEditor].FontSize}"
 
- 														Grid.Row="1"
 
- 														Minimum="5.0"
 
- 														Maximum="40.0"
 
- 														Width="150"/>
 
- 											</Grid>
 
- 										</Border>
 
- 									</Flyout>
 
- 								</Button.Flyout>
 
- 							</Button>
 
- 							<Button Name="LineThicknessButton" Width="40" Height="40"
 
- 									Margin="10">
 
- 								<Canvas Width="25" Height="21"
 
- 										HorizontalAlignment="Center" VerticalAlignment="Center">
 
- 									<Line StrokeThickness="0.5"
 
- 										  Stroke="Black"
 
- 										  StartPoint="0,0"
 
- 										  EndPoint="25,0"/>
 
- 									<Line StrokeThickness="1"
 
- 										  Stroke="Black"
 
- 										  StartPoint="0,3"
 
- 										  EndPoint="25,3"/>
 
- 									<Line StrokeThickness="2"
 
- 										  Stroke="Black"
 
- 										  StartPoint="0,7"
 
- 										  EndPoint="25,7"/>
 
- 									<Line StrokeThickness="3"
 
- 										  Stroke="Black"
 
- 										  StartPoint="0,12.5"
 
- 										  EndPoint="25,12.5"/>
 
- 									<Line StrokeThickness="5"
 
- 										  Stroke="Black"
 
- 										  StartPoint="0,19.5"
 
- 										  EndPoint="25,19.5"/>
 
- 								</Canvas>
 
- 								<Button.Flyout>
 
- 									<Flyout Placement="Top" VerticalOffset="0">
 
- 										<Border>
 
- 											<Grid>
 
- 												<Grid.RowDefinitions>
 
- 													<RowDefinition Height="20"/>
 
- 													<RowDefinition Height="Auto"/>
 
- 												</Grid.RowDefinitions>
 
- 												<Line Grid.Row="0"
 
- 													  Margin="20"
 
- 													  StartPoint="0,0"
 
- 													  EndPoint="150,0"
 
- 													  StrokeLineCap="Round"
 
- 													  Stroke="Black">
 
- 													<Line.StrokeThickness>
 
- 														<MultiBinding Converter="{StaticResource Add1Calculator}">
 
- 															<Binding Path="$parent[components:ImageEditor].LineThickness"/>
 
- 														</MultiBinding>
 
- 													</Line.StrokeThickness>
 
- 												</Line>
 
- 												<Line Grid.Row="0"
 
- 													  Margin="20"
 
- 													  StartPoint="0,0"
 
- 													  EndPoint="150,0"
 
- 													  StrokeThickness="{Binding $parent[components:ImageEditor].LineThickness}"
 
- 													  StrokeLineCap="Round"
 
- 													  Stroke="{Binding $parent[components:ImageEditor].PrimaryBrush}"/>
 
- 												<Slider Value="{Binding $parent[components:ImageEditor].LineThickness}"
 
- 														Grid.Row="1"
 
- 														Minimum="1.0"
 
- 														Maximum="30.0"
 
- 														Width="150"/>
 
- 											</Grid>
 
- 										</Border>
 
- 									</Flyout>
 
- 								</Button.Flyout>
 
- 							</Button>
 
- 							<Button Name="PrimaryColour" Width="40" Height="40"
 
- 									Margin="10">
 
- 								<Ellipse Width="25" Height="25"
 
- 										 Margin="10"
 
- 										 HorizontalAlignment="Center" VerticalAlignment="Center"
 
- 										 Fill="{Binding $parent[components:ImageEditor].PrimaryBrush,Converter={x:Static components:ImageEditorTransparentImageBrushConverter.Instance}}"
 
- 										 Stroke="Black" StrokeThickness="1"/>
 
- 								<Button.Flyout>
 
- 									<Flyout Placement="Top" VerticalOffset="0">
 
- 										<Border>
 
- 											<ColorView Color="{Binding $parent[components:ImageEditor].PrimaryBrush,Converter={x:Static converters:BrushToColorConverter.Instance}}"/>
 
- 										</Border>
 
- 									</Flyout>
 
- 								</Button.Flyout>
 
- 							</Button>
 
- 							<Button Name="SecondaryColour" Width="40" Height="40"
 
- 									Margin="10">
 
- 								<Ellipse Width="25" Height="25"
 
- 										 Margin="10"
 
- 										 HorizontalAlignment="Center" VerticalAlignment="Center"
 
- 										 Fill="{Binding $parent[components:ImageEditor].SecondaryBrush,Converter={x:Static components:ImageEditorTransparentImageBrushConverter.Instance}}"
 
- 										 Stroke="Black" StrokeThickness="1"/>
 
- 								<Button.Flyout>
 
- 									<Flyout Placement="Top" VerticalOffset="0">
 
- 										<Border>
 
- 											<ColorView Color="{Binding $parent[components:ImageEditor].SecondaryBrush,Converter={x:Static converters:BrushToColorConverter.Instance}}"/>
 
- 										</Border>
 
- 									</Flyout>
 
- 								</Button.Flyout>
 
- 							</Button>
 
- 							<Rectangle Classes="Separator"/>
 
- 							<Button Name="UndoButton" Width="40" Height="40"
 
- 									Margin="10"
 
- 									Command="{Binding $parent[components:ImageEditor].UndoCommand}"
 
- 									IsEnabled="False">
 
- 								<Canvas Width="25" Height="25">
 
- 									<Path Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2">
 
- 										<Path.Data>
 
- 											<PathGeometry>
 
- 												<PathFigure StartPoint="4,9" IsClosed="False">
 
- 													<LineSegment Point="10,3"/>
 
- 													<ArcSegment Point="18,17" Size="8,8"/>
 
- 													<LineSegment Point="11,24"/>
 
- 												</PathFigure>
 
- 											</PathGeometry>
 
- 										</Path.Data>
 
- 									</Path>
 
- 									<Line StartPoint="4,10" EndPoint="13,10"
 
- 										  Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2"
 
- 										  StrokeLineCap="Round"/>
 
- 									<Line StartPoint="3,10" EndPoint="3,1"
 
- 										  Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2"
 
- 										  StrokeLineCap="Round"/>
 
- 								</Canvas>
 
- 							</Button>
 
- 							<Button Name="RedoButton" Width="40" Height="40"
 
- 									Margin="10"
 
- 									Command="{Binding $parent[components:ImageEditor].RedoCommand}"
 
- 									IsEnabled="False">
 
- 								<Canvas Width="25" Height="25">
 
- 									<Path Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2">
 
- 										<Path.Data>
 
- 											<PathGeometry>
 
- 												<PathFigure StartPoint="21,9" IsClosed="False">
 
- 													<LineSegment Point="15,3"/>
 
- 													<ArcSegment Point="7,17" Size="8,8" SweepDirection="CounterClockwise"/>
 
- 													<LineSegment Point="14,24"/>
 
- 												</PathFigure>
 
- 											</PathGeometry>
 
- 										</Path.Data>
 
- 									</Path>
 
- 									<Line StartPoint="21,10" EndPoint="12,10"
 
- 										  Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2"
 
- 										  StrokeLineCap="Round"/>
 
- 									<Line StartPoint="22,10" EndPoint="22,1"
 
- 										  Stroke="{Binding $parent[Button].Foreground}" StrokeThickness="2"
 
- 										  StrokeLineCap="Round"/>
 
- 								</Canvas>
 
- 							</Button>
 
- 						</StackPanel>
 
- 					</Grid>
 
- 				</Border>
 
- 			</Border>
 
- 		</Grid>
 
- 	</Border>
 
- </UserControl>
 
 
  |