Browse Source

Use brush interfaces in rendering backends.

pull/910/head
Steven Kirk 9 years ago
parent
commit
74a0faa637
  1. 8
      src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs
  2. 3
      src/Gtk/Avalonia.Cairo/Media/ImageBrushImpl.cs
  3. 3
      src/Gtk/Avalonia.Cairo/Media/LinearGradientBrushImpl.cs
  4. 3
      src/Gtk/Avalonia.Cairo/Media/RadialGradientBrushImpl.cs
  5. 2
      src/Gtk/Avalonia.Cairo/Media/TileBrushes.cs
  6. 3
      src/Gtk/Avalonia.Cairo/Media/VisualBrushImpl.cs
  7. 14
      src/Shared/RenderHelpers/TileBrushImplHelper.cs
  8. 8
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  9. 12
      src/Windows/Avalonia.Direct2D1/Media/DrawingContext.cs
  10. 3
      src/Windows/Avalonia.Direct2D1/Media/LinearGradientBrushImpl.cs
  11. 3
      src/Windows/Avalonia.Direct2D1/Media/RadialGradientBrushImpl.cs
  12. 6
      src/Windows/Avalonia.Direct2D1/Media/TileBrushImpl.cs

8
src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs

@ -290,10 +290,10 @@ namespace Avalonia.Cairo.Media
private BrushImpl CreateBrushImpl(IBrush brush, Size destinationSize)
{
var solid = brush as SolidColorBrush;
var linearGradientBrush = brush as LinearGradientBrush;
var radialGradientBrush = brush as RadialGradientBrush;
var imageBrush = brush as ImageBrush;
var visualBrush = brush as VisualBrush;
var linearGradientBrush = brush as ILinearGradientBrush;
var radialGradientBrush = brush as IRadialGradientBrush;
var imageBrush = brush as IImageBrush;
var visualBrush = brush as IVisualBrush;
BrushImpl impl = null;
if (solid != null)

3
src/Gtk/Avalonia.Cairo/Media/ImageBrushImpl.cs

@ -1,11 +1,12 @@
using System;
using Avalonia.Media;
using global::Cairo;
namespace Avalonia.Cairo.Media
{
public class ImageBrushImpl : BrushImpl
{
public ImageBrushImpl(Avalonia.Media.ImageBrush brush, Size destinationSize)
public ImageBrushImpl(IImageBrush brush, Size destinationSize)
{
this.PlatformBrush = TileBrushes.CreateTileBrush(brush, destinationSize);
}

3
src/Gtk/Avalonia.Cairo/Media/LinearGradientBrushImpl.cs

@ -1,11 +1,12 @@
using System;
using Avalonia.Media;
using global::Cairo;
namespace Avalonia.Cairo
{
public class LinearGradientBrushImpl : BrushImpl
{
public LinearGradientBrushImpl(Avalonia.Media.LinearGradientBrush brush, Size destinationSize)
public LinearGradientBrushImpl(ILinearGradientBrush brush, Size destinationSize)
{
var start = brush.StartPoint.ToPixels(destinationSize);
var end = brush.EndPoint.ToPixels(destinationSize);

3
src/Gtk/Avalonia.Cairo/Media/RadialGradientBrushImpl.cs

@ -1,11 +1,12 @@
using System;
using Avalonia.Media;
using global::Cairo;
namespace Avalonia.Cairo
{
public class RadialGradientBrushImpl : BrushImpl
{
public RadialGradientBrushImpl(Avalonia.Media.RadialGradientBrush brush, Size destinationSize)
public RadialGradientBrushImpl(IRadialGradientBrush brush, Size destinationSize)
{
var center = brush.Center.ToPixels(destinationSize);
var gradientOrigin = brush.GradientOrigin.ToPixels(destinationSize);

2
src/Gtk/Avalonia.Cairo/Media/TileBrushes.cs

@ -14,7 +14,7 @@ namespace Avalonia.Cairo.Media
{
internal static class TileBrushes
{
public static SurfacePattern CreateTileBrush(TileBrush brush, Size targetSize)
public static SurfacePattern CreateTileBrush(ITileBrush brush, Size targetSize)
{
var helper = new TileBrushImplHelper(brush, targetSize);
if (!helper.IsValid)

3
src/Gtk/Avalonia.Cairo/Media/VisualBrushImpl.cs

@ -1,11 +1,12 @@
using System;
using Avalonia.Media;
using global::Cairo;
namespace Avalonia.Cairo.Media
{
public class VisualBrushImpl : BrushImpl
{
public VisualBrushImpl(Avalonia.Media.VisualBrush brush, Size destinationSize)
public VisualBrushImpl(IVisualBrush brush, Size destinationSize)
{
this.PlatformBrush = TileBrushes.CreateTileBrush(brush, destinationSize);
}

14
src/Shared/RenderHelpers/TileBrushImplHelper.cs

@ -17,17 +17,17 @@ namespace Avalonia.RenderHelpers
private readonly Vector _scale;
private readonly Vector _translate;
private readonly Size _imageSize;
private readonly VisualBrush _visualBrush;
private readonly ImageBrush _imageBrush;
private readonly IVisualBrush _visualBrush;
private readonly IImageBrush _imageBrush;
private readonly Matrix _transform;
private readonly Rect _drawRect;
public bool IsValid { get; }
public TileBrushImplHelper(TileBrush brush, Size targetSize)
public TileBrushImplHelper(ITileBrush brush, Size targetSize)
{
_imageBrush = brush as ImageBrush;
_visualBrush = brush as VisualBrush;
_imageBrush = brush as IImageBrush;
_visualBrush = brush as IVisualBrush;
if (_imageBrush != null)
{
if (_imageBrush.Source == null)
@ -112,7 +112,7 @@ namespace Avalonia.RenderHelpers
/// <summary>
/// Calculates a translate based on a <see cref="TileBrush"/>, a source and destination
/// Calculates a translate based on an <see cref="ITileBrush"/>, a source and destination
/// rectangle and a scale.
/// </summary>
/// <param name="brush">The brush.</param>
@ -122,7 +122,7 @@ namespace Avalonia.RenderHelpers
/// <returns>A vector with the X and Y _translate.</returns>
public static Vector CalculateTranslate(
TileBrush brush,
ITileBrush brush,
Rect sourceRect,
Rect destinationRect,
Vector scale)

8
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -148,14 +148,14 @@ namespace Avalonia.Skia
return rv;
}
var gradient = brush as GradientBrush;
var gradient = brush as IGradientBrush;
if (gradient != null)
{
var tileMode = gradient.SpreadMethod.ToSKShaderTileMode();
var stopColors = gradient.GradientStops.Select(s => s.Color.ToSKColor()).ToArray();
var stopOffsets = gradient.GradientStops.Select(s => (float)s.Offset).ToArray();
var linearGradient = brush as LinearGradientBrush;
var linearGradient = brush as ILinearGradientBrush;
if (linearGradient != null)
{
var start = linearGradient.StartPoint.ToPixels(targetSize).ToSKPoint();
@ -168,7 +168,7 @@ namespace Avalonia.Skia
}
else
{
var radialGradient = brush as RadialGradientBrush;
var radialGradient = brush as IRadialGradientBrush;
if (radialGradient != null)
{
var center = radialGradient.Center.ToPixels(targetSize).ToSKPoint();
@ -187,7 +187,7 @@ namespace Avalonia.Skia
return rv;
}
var tileBrush = brush as TileBrush;
var tileBrush = brush as ITileBrush;
if (tileBrush != null)
{
var helper = new TileBrushImplHelper(tileBrush, targetSize);

12
src/Windows/Avalonia.Direct2D1/Media/DrawingContext.cs

@ -311,11 +311,11 @@ namespace Avalonia.Direct2D1.Media
/// <returns>The Direct2D brush wrapper.</returns>
public BrushImpl CreateBrush(IBrush brush, Size destinationSize)
{
var solidColorBrush = brush as Avalonia.Media.ISolidColorBrush;
var linearGradientBrush = brush as Avalonia.Media.LinearGradientBrush;
var radialGradientBrush = brush as Avalonia.Media.RadialGradientBrush;
var imageBrush = brush as Avalonia.Media.ImageBrush;
var visualBrush = brush as Avalonia.Media.VisualBrush;
var solidColorBrush = brush as ISolidColorBrush;
var linearGradientBrush = brush as ILinearGradientBrush;
var radialGradientBrush = brush as IRadialGradientBrush;
var imageBrush = brush as IImageBrush;
var visualBrush = brush as IVisualBrush;
if (solidColorBrush != null)
{
@ -339,7 +339,7 @@ namespace Avalonia.Direct2D1.Media
}
else
{
return new SolidColorBrushImpl((Avalonia.Media.SolidColorBrush)null, _renderTarget);
return new SolidColorBrushImpl(null, _renderTarget);
}
}

3
src/Windows/Avalonia.Direct2D1/Media/LinearGradientBrushImpl.cs

@ -2,13 +2,14 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Linq;
using Avalonia.Media;
namespace Avalonia.Direct2D1.Media
{
public class LinearGradientBrushImpl : BrushImpl
{
public LinearGradientBrushImpl(
Avalonia.Media.LinearGradientBrush brush,
ILinearGradientBrush brush,
SharpDX.Direct2D1.RenderTarget target,
Size destinationSize)
{

3
src/Windows/Avalonia.Direct2D1/Media/RadialGradientBrushImpl.cs

@ -2,13 +2,14 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Linq;
using Avalonia.Media;
namespace Avalonia.Direct2D1.Media
{
public class RadialGradientBrushImpl : BrushImpl
{
public RadialGradientBrushImpl(
Avalonia.Media.RadialGradientBrush brush,
IRadialGradientBrush brush,
SharpDX.Direct2D1.RenderTarget target,
Size destinationSize)
{

6
src/Windows/Avalonia.Direct2D1/Media/TileBrushImpl.cs

@ -10,7 +10,7 @@ namespace Avalonia.Direct2D1.Media
public sealed class TileBrushImpl : BrushImpl
{
public TileBrushImpl(
TileBrush brush,
ITileBrush brush,
SharpDX.Direct2D1.RenderTarget target,
Size targetSize)
{
@ -34,7 +34,7 @@ namespace Avalonia.Direct2D1.Media
}
}
private static BrushProperties GetBrushProperties(TileBrush brush, Rect destinationRect)
private static BrushProperties GetBrushProperties(ITileBrush brush, Rect destinationRect)
{
var tileTransform =
brush.TileMode != TileMode.None ?
@ -48,7 +48,7 @@ namespace Avalonia.Direct2D1.Media
};
}
private static BitmapBrushProperties GetBitmapBrushProperties(TileBrush brush)
private static BitmapBrushProperties GetBitmapBrushProperties(ITileBrush brush)
{
var tileMode = brush.TileMode;

Loading…
Cancel
Save