Minor improvements in MapRectangle and MapImage.

This commit is contained in:
ClemensF 2013-10-11 21:08:25 +02:00
parent f3f4b4c0fc
commit 415637a321
3 changed files with 36 additions and 24 deletions

View file

@ -12,13 +12,13 @@ namespace MapControl
{
public partial class MapImage
{
private static readonly Transform imageTransform = new MatrixTransform
{
Matrix = new Matrix(1d, 0d, 0d, -1d, 0d, 1d)
};
private void SourceChanged(ImageSource image)
{
var imageTransform = new MatrixTransform
{
Matrix = new Matrix(1d, 0d, 0d, -1d, 0d, 1d)
};
Fill = new ImageBrush
{
ImageSource = image,

View file

@ -2,7 +2,6 @@
// Copyright © Clemens Fischer 2012-2013
// Licensed under the Microsoft Public License (Ms-PL)
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
@ -10,19 +9,22 @@ namespace MapControl
{
public partial class MapImage
{
private static readonly Transform imageTransform = new ScaleTransform(1d, -1d);
private void SourceChanged(ImageSource image)
{
var bitmap = image as BitmapSource;
if (bitmap != null)
{
image = new TransformedBitmap(bitmap, imageTransform);
var imageTransform = new ScaleTransform(1d, -1d);
imageTransform.Freeze();
bitmap = new TransformedBitmap(bitmap, imageTransform);
bitmap.Freeze();
image = bitmap;
}
Fill = new ImageBrush { ImageSource = image };
SetBrushTransform();
}
}
}

View file

@ -13,20 +13,9 @@ namespace MapControl
{
StrokeThicknessProperty.OverrideMetadata(
typeof(MapRectangle), new FrameworkPropertyMetadata(0d));
}
protected void SetBrushTransform()
{
var tileBrush = Fill as TileBrush;
if (tileBrush != null && Data != null)
{
var geometry = (RectangleGeometry)Data;
tileBrush.ViewportUnits = BrushMappingMode.Absolute;
tileBrush.Viewport = geometry.Rect;
tileBrush.Transform = geometry.Transform;
}
FillProperty.OverrideMetadata(
typeof(MapRectangle), new FrameworkPropertyMetadata(FillPropertyChanged));
}
private void SetGeometry(Rect rect)
@ -40,7 +29,8 @@ namespace MapControl
geometry.Rect = rect;
geometry.Transform = ParentMap.ViewportTransform;
SetBrushTransform();
SetBrushTransform(Fill as TileBrush);
}
private void ClearGeometry()
@ -50,5 +40,25 @@ namespace MapControl
geometry.ClearValue(RectangleGeometry.RectProperty);
geometry.ClearValue(Geometry.TransformProperty);
}
private void SetBrushTransform(TileBrush tileBrush)
{
if (tileBrush != null && Data != null)
{
var geometry = (RectangleGeometry)Data;
tileBrush.ViewportUnits = BrushMappingMode.Absolute;
tileBrush.Viewport = geometry.Rect;
tileBrush.Transform = geometry.Transform;
}
}
private static void FillPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue != e.OldValue)
{
((MapRectangle)o).SetBrushTransform(e.NewValue as TileBrush);
}
}
}
}