Browse Source

More fies for Image COntrol, Container Enter,...

pull/584/head
jogibear9988 11 years ago
parent
commit
7fd896abad
  1. 28
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs
  2. 8
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs
  3. 27
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml
  4. 32
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Converters.cs
  5. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
  6. 43
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs
  7. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
  8. 5
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
  9. 5
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RotateThumbExtension.cs
  10. 10
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SkewThumbExtension.cs
  11. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs

28
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
/// <summary> /// <summary>
/// A control that displays adorner panels. /// A control that displays adorner panels.
/// </summary> /// </summary>
sealed class AdornerLayer : Panel public sealed class AdornerLayer : Panel
{ {
#region AdornerPanelCollection #region AdornerPanelCollection
internal sealed class AdornerPanelCollection : ICollection<AdornerPanel>, IReadOnlyCollection<AdornerPanel> internal sealed class AdornerPanelCollection : ICollection<AdornerPanel>, IReadOnlyCollection<AdornerPanel>
@ -222,22 +222,20 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
protected override Size ArrangeOverride(Size finalSize) protected override Size ArrangeOverride(Size finalSize)
{ {
foreach (AdornerPanel adorner in this.Children) { foreach (AdornerPanel adorner in this.Children) {
if (adorner.AdornedElement.IsDescendantOf(_designPanel)) { if (adorner.AdornedElement.IsDescendantOf(_designPanel))
adorner.RenderTransform = (Transform)adorner.AdornedElement.TransformToAncestor(_designPanel); {
var rt = (MatrixTransform) adorner.AdornedElement.TransformToAncestor(_designPanel);
if (adorner.AdornedDesignItem != null && adorner.AdornedDesignItem.Parent != null && adorner.AdornedDesignItem.Parent.View is Canvas && adorner.AdornedElement.RenderSize.Height == 0 && adorner.AdornedElement.RenderSize.Width == 0)
{
var xOffset = rt.Matrix.OffsetX - (((FrameworkElement)adorner.AdornedElement).Width / 2);
var yOffset = rt.Matrix.OffsetY - (((FrameworkElement)adorner.AdornedElement).Height / 2);
rt = new MatrixTransform(new Matrix(rt.Matrix.M11, rt.Matrix.M12, rt.Matrix.M21, rt.Matrix.M22, xOffset, yOffset));
}
adorner.RenderTransform = rt;
} }
//Fix Adorner Display of Image (or maybe other components...) adorner.Arrange(new Rect(new Point(0, 0), adorner.DesiredSize));
var size = adorner.DesiredSize;
//if (size.Height==0 && size.Width==0 && adorner.AdornedElement is FrameworkElement)
// size = new Size(((FrameworkElement)adorner.AdornedElement).Width, ((FrameworkElement)adorner.AdornedElement).Height);
//if (double.IsNaN(size.Width))
// size.Width = 0;
//if (double.IsNaN(size.Height))
// size.Height = 0;
adorner.Arrange(new Rect(new Point(0, 0), size));
} }
return finalSize; return finalSize;
} }

8
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs

@ -146,7 +146,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
if (double.IsNaN(wr)) if (double.IsNaN(wr))
{ {
wr = (double) rightDescriptor.GetValue(adornedControl); wr = (double) rightDescriptor.GetValue(adornedControl);
wr = canvas.ActualWidth - (adornedControl.ActualWidth + wr); wr = canvas.ActualWidth - (PlacementOperation.GetRealElementSize(adornedControl).Width + wr);
} }
else else
{ {
@ -167,7 +167,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
if (double.IsNaN(wr)) if (double.IsNaN(wr))
{ {
wr = (double)bottomDescriptor.GetValue(adornedControl); wr = (double)bottomDescriptor.GetValue(adornedControl);
wr = canvas.ActualHeight - (adornedControl.ActualHeight + wr); wr = canvas.ActualHeight - (PlacementOperation.GetRealElementSize(adornedControl).Height + wr);
} }
else else
{ {
@ -188,7 +188,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
if (double.IsNaN(wr)) if (double.IsNaN(wr))
{ {
wr = (double) leftDescriptor.GetValue(adornedControl); wr = (double) leftDescriptor.GetValue(adornedControl);
wr = canvas.ActualWidth - (adornedControl.ActualWidth + wr); wr = canvas.ActualWidth - (PlacementOperation.GetRealElementSize(adornedControl).Width + wr);
} }
else else
{ {
@ -209,7 +209,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
if (double.IsNaN(wr)) if (double.IsNaN(wr))
{ {
wr = (double)topDescriptor.GetValue(adornedControl); wr = (double)topDescriptor.GetValue(adornedControl);
wr = canvas.ActualHeight - (adornedControl.ActualHeight + wr); wr = canvas.ActualHeight - (PlacementOperation.GetRealElementSize(adornedControl).Height + wr);
} }
else else
{ {

27
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml

@ -2,7 +2,7 @@
<!-- <!--
This file contains the default styles used by the Controls in ICSharpCode.WpfDesign.Designer.Controls This file contains the default styles used by the Controls in ICSharpCode.WpfDesign.Designer.Controls
--> -->
<Converters:LevelConverter x:Key="FormatDoubleConverter" /> <Converters:LevelConverter x:Key="FormatDoubleConverter" />
<ControlConvertors:HandleLengthWithOffset x:Key="HandleLengthWithOffset" /> <ControlConvertors:HandleLengthWithOffset x:Key="HandleLengthWithOffset" />
<SolidColorBrush Color="#FF474747" x:Key="HandleBrush" /> <SolidColorBrush Color="#FF474747" x:Key="HandleBrush" />
<Style TargetType="{x:Type Controls:PanelMoveAdorner}"> <Style TargetType="{x:Type Controls:PanelMoveAdorner}">
@ -333,8 +333,17 @@
<RowDefinition Height="5" /> <RowDefinition Height="5" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Path SnapsToDevicePixels="True" Grid.Row="0" Stroke="#AC0000" StrokeThickness="1.0" Data="M0,0 L1,0 M0.75,0 L0.75,1" Stretch="Fill" /> <Path SnapsToDevicePixels="True" Grid.Row="0" Stroke="#AC0000" StrokeThickness="1.0" Data="M0,0 L1,0 M0.75,0 L0.75,1" Stretch="Fill" />
<TextBlock Text="{Binding Path=ActualHeight, Converter={x:Static Converters:FormatDoubleConverter.Instance}}" HorizontalAlignment="Center" Margin="8,0,0,1" Padding="1,1,1,1" FontSize="10" Grid.Row="1"> <TextBlock HorizontalAlignment="Center" Margin="8,0,0,1" Padding="1,1,1,1" FontSize="10" Grid.Row="1">
<TextBlock.LayoutTransform> <TextBlock.Text>
<MultiBinding Converter="{x:Static Converters:ControlToRealHeightConverter.Instance}" StringFormat="0">
<MultiBinding.Bindings>
<Binding />
<Binding Path="ActualHeight" UpdateSourceTrigger="PropertyChanged" />
<Binding Path="Height" UpdateSourceTrigger="PropertyChanged" />
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
<TextBlock.LayoutTransform>
<RotateTransform Angle="270" CenterX="0.5" CenterY="0.5" /> <RotateTransform Angle="270" CenterX="0.5" CenterY="0.5" />
</TextBlock.LayoutTransform> </TextBlock.LayoutTransform>
</TextBlock> </TextBlock>
@ -355,7 +364,17 @@
<ColumnDefinition Width="5" /> <ColumnDefinition Width="5" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Path Grid.Column="0" Stroke="#AC0000" StrokeThickness="1" Data="M0,0 L0,1 M0,0.75 L1,0.75" Stretch="Fill" SnapsToDevicePixels="True" /> <Path Grid.Column="0" Stroke="#AC0000" StrokeThickness="1" Data="M0,0 L0,1 M0,0.75 L1,0.75" Stretch="Fill" SnapsToDevicePixels="True" />
<TextBlock Text="{Binding Path=ActualWidth, Converter={x:Static Converters:FormatDoubleConverter.Instance}}" HorizontalAlignment="Center" Margin="0,8,0,0" Padding="1,1,1,1" FontSize="10" Grid.Column="1" /> <TextBlock HorizontalAlignment="Center" Margin="0,8,0,0" Padding="1,1,1,1" FontSize="10" Grid.Column="1">
<TextBlock.Text>
<MultiBinding Converter="{x:Static Converters:ControlToRealWidthConverter.Instance}" StringFormat="0">
<MultiBinding.Bindings>
<Binding />
<Binding Path="ActualWidth" UpdateSourceTrigger="PropertyChanged" />
<Binding Path="Width" UpdateSourceTrigger="PropertyChanged" />
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<Path Grid.Column="2" Stroke="#AC0000" StrokeThickness="1" Data="M0,0.75 L3,0.75 M3,0 L3,1 " Stretch="Fill" SnapsToDevicePixels="True" /> <Path Grid.Column="2" Stroke="#AC0000" StrokeThickness="1" Data="M0,0.75 L3,0.75 M3,0 L3,1 " Stretch="Fill" SnapsToDevicePixels="True" />
</Grid> </Grid>
</ControlTemplate> </ControlTemplate>

32
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Converters.cs

@ -160,7 +160,37 @@ namespace ICSharpCode.WpfDesign.Designer.Converters
} }
} }
public class FormatDoubleConverter : IValueConverter public class ControlToRealWidthConverter : IMultiValueConverter
{
public static readonly ControlToRealWidthConverter Instance = new ControlToRealWidthConverter();
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return PlacementOperation.GetRealElementSize((UIElement)values[0]).Width;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class ControlToRealHeightConverter : IMultiValueConverter
{
public static readonly ControlToRealHeightConverter Instance = new ControlToRealHeightConverter();
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return PlacementOperation.GetRealElementSize((UIElement)values[0]).Height;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class FormatDoubleConverter : IValueConverter
{ {
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "converter is immutable")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "converter is immutable")]
public static readonly FormatDoubleConverter Instance=new FormatDoubleConverter(); public static readonly FormatDoubleConverter Instance=new FormatDoubleConverter();

17
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

@ -219,10 +219,19 @@ namespace ICSharpCode.WpfDesign.Designer
//Set custom HitTestFilterCallbak //Set custom HitTestFilterCallbak
public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; } public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
/// <summary>
/// Gets/Sets the design context. public AdornerLayer AdornerLayer
/// </summary> {
public DesignContext Context { get
{
return _adornerLayer;
}
}
/// <summary>
/// Gets/Sets the design context.
/// </summary>
public DesignContext Context {
get { return _context; } get { return _context; }
set { _context = value; } set { _context = value; }
} }

43
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs

@ -37,25 +37,37 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
{ {
AdornerPanel adornerPanel; AdornerPanel adornerPanel;
AdornerPanel cachedAdornerPanel; AdornerPanel cachedAdornerPanel;
Border border;
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
UpdateAdorner(); this.ExtendedItem.PropertyChanged += OnPropertyChanged;
}
UpdateAdorner();
}
protected override void OnRemove()
{
this.ExtendedItem.PropertyChanged -= OnPropertyChanged;
base.OnRemove();
}
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (sender == null || e.PropertyName == "Width" || e.PropertyName == "Height")
{
((DesignPanel) this.ExtendedItem.Services.DesignPanel).AdornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true);
}
}
void UpdateAdorner() void UpdateAdorner()
{ {
var element = ExtendedItem.Component as UIElement; var element = ExtendedItem.Component as UIElement;
if (element != null) { if (element != null) {
//if (element.IsVisible) {
CreateAdorner(); CreateAdorner();
//} }
//else {
// RemoveAdorner();
//}
}
} }
private void CreateAdorner() private void CreateAdorner()
@ -65,7 +77,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (cachedAdornerPanel == null) { if (cachedAdornerPanel == null) {
cachedAdornerPanel = new AdornerPanel(); cachedAdornerPanel = new AdornerPanel();
cachedAdornerPanel.Order = AdornerOrder.Background; cachedAdornerPanel.Order = AdornerOrder.Background;
var border = new Border(); border = new Border();
border.BorderThickness = new Thickness(1); border.BorderThickness = new Thickness(1);
border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC)); border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
border.Background = Brushes.Transparent; border.Background = Brushes.Transparent;
@ -87,15 +99,8 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
e.Handled = true; e.Handled = true;
this.ExtendedItem.Services.Selection.SetSelectedComponents(new DesignItem[] {this.ExtendedItem}, this.ExtendedItem.Services.Selection.SetSelectedComponents(new DesignItem[] {this.ExtendedItem},
SelectionTypes.Auto); SelectionTypes.Auto);
((DesignPanel) this.ExtendedItem.Services.DesignPanel).Focus();
} }
} }
private void RemoveAdorner()
{
if (adornerPanel != null) {
Adorners.Remove(adornerPanel);
adornerPanel = null;
}
}
} }
} }

6
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
AdornerPanel adornerPanel; AdornerPanel adornerPanel;
AdornerPanel cachedAdornerPanel; AdornerPanel cachedAdornerPanel;
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
@ -58,9 +58,9 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
element.IsVisibleChanged += (s, e) => UpdateAdorner(); element.IsVisibleChanged += (s, e) => UpdateAdorner();
} }
} }
} }
void UpdateAdorner() void UpdateAdorner()
{ {
var element = ExtendedItem.Component as UIElement; var element = ExtendedItem.Component as UIElement;
if (element != null) { if (element != null) {

5
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs

@ -80,7 +80,10 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public virtual void EndPlacement(PlacementOperation operation) public virtual void EndPlacement(PlacementOperation operation)
{ {
InfoTextEnterArea.Stop(ref infoTextEnterArea); InfoTextEnterArea.Stop(ref infoTextEnterArea);
}
this.ExtendedItem.Services.Selection.SetSelectedComponents(null);
this.ExtendedItem.Services.Selection.SetSelectedComponents(operation.PlacedItems.Select(x => x.Item).ToList());
}
public virtual Rect GetPosition(PlacementOperation operation, DesignItem item) public virtual Rect GetPosition(PlacementOperation operation, DesignItem item)
{ {

5
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RotateThumbExtension.cs

@ -42,7 +42,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
readonly DesignItem[] extendedItemArray = new DesignItem[1]; readonly DesignItem[] extendedItemArray = new DesignItem[1];
IPlacementBehavior resizeBehavior; IPlacementBehavior resizeBehavior;
PlacementOperation operation; PlacementOperation operation;
private AdornerLayer _adornerLayer;
public RotateThumbExtension() public RotateThumbExtension()
{ {
@ -81,8 +80,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
private void drag_Rotate_Started(DragListener drag) private void drag_Rotate_Started(DragListener drag)
{ {
_adornerLayer = this.adornerPanel.TryFindParent<AdornerLayer>();
var designerItem = this.ExtendedItem.Component as FrameworkElement; var designerItem = this.ExtendedItem.Component as FrameworkElement;
this.parent = VisualTreeHelper.GetParent(designerItem) as UIElement; this.parent = VisualTreeHelper.GetParent(designerItem) as UIElement;
this.centerPoint = designerItem.TranslatePoint( this.centerPoint = designerItem.TranslatePoint(
@ -140,7 +137,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
} }
rtTransform.Properties["Angle"].SetValue(destAngle); rtTransform.Properties["Angle"].SetValue(destAngle);
_adornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true); ((DesignPanel) this.ExtendedItem.Services.DesignPanel).AdornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true);
} }
} }

10
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SkewThumbExtension.cs

@ -228,16 +228,18 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
AdornerPanel.SetPlacement(thumb1, AdornerPanel.SetPlacement(thumb1,
new RelativePlacement(HorizontalAlignment.Center, VerticalAlignment.Top) { new RelativePlacement(HorizontalAlignment.Center, VerticalAlignment.Top) {
YOffset = 0, YOffset = 0,
XOffset = -1 * ((FrameworkElement)ExtendedItem.View).ActualWidth / 4 XOffset = -1 * PlacementOperation.GetRealElementSize(ExtendedItem.View).Width / 4
}); });
AdornerPanel.SetPlacement(thumb2, AdornerPanel.SetPlacement(thumb2,
new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Center) { new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Center) {
YOffset = -1 * ((FrameworkElement)ExtendedItem.View).ActualHeight / 4, YOffset = -1 * PlacementOperation.GetRealElementSize(ExtendedItem.View).Height / 4,
XOffset = 0 XOffset = 0
}); });
}
} ((DesignPanel)this.ExtendedItem.Services.DesignPanel).AdornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true);
}
}
protected override void OnRemove() protected override void OnRemove()
{ {

16
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs

@ -213,8 +213,20 @@ namespace ICSharpCode.WpfDesign
public static Size GetRealElementSize(UIElement element) public static Size GetRealElementSize(UIElement element)
{ {
var size = element.RenderSize; var size = element.RenderSize;
if (element is FrameworkElement && !double.IsNaN(((FrameworkElement)element).Width) && !double.IsNaN(((FrameworkElement)element).Height)) if (element is FrameworkElement && !double.IsNaN(((FrameworkElement)element).Width))
size = new Size(((FrameworkElement)element).Width, ((FrameworkElement)element).Height); size.Width = ((FrameworkElement)element).Width;
if (element is FrameworkElement && !double.IsNaN(((FrameworkElement)element).Height))
size.Height = ((FrameworkElement)element).Height;
if (element is FrameworkElement && size.Width < ((FrameworkElement)element).MinWidth)
size.Width = ((FrameworkElement)element).MinWidth;
if (element is FrameworkElement && size.Height < ((FrameworkElement)element).MinHeight)
size.Height = ((FrameworkElement)element).Height;
if (element is FrameworkElement && size.Width == 0)
size.Width = element.DesiredSize.Width;
if (element is FrameworkElement && size.Height == 0)
size.Height = element.DesiredSize.Height;
return size; return size;
} }

Loading…
Cancel
Save