Browse Source

Fixed leak in Linear/RadialGradientBrush.

Steven Kirk 10 years ago
parent
commit
417ab4d345

+ 18 - 19
src/Windows/Perspex.Direct2D1/Media/LinearGradientBrushImpl.cs

@@ -26,26 +26,25 @@ namespace Perspex.Direct2D1.Media
             var startPoint = brush.StartPoint.ToPixels(destinationSize);
             var endPoint = brush.EndPoint.ToPixels(destinationSize);
 
-            PlatformBrush = new SharpDX.Direct2D1.LinearGradientBrush(
+            using (var stops = new SharpDX.Direct2D1.GradientStopCollection(
                 target,
-                new SharpDX.Direct2D1.LinearGradientBrushProperties
-                {
-                    StartPoint = startPoint.ToSharpDX(),
-                    EndPoint = endPoint.ToSharpDX()
-                },
-                new SharpDX.Direct2D1.BrushProperties
-                {
-                    Opacity = (float)brush.Opacity,
-                    Transform = SharpDX.Matrix3x2.Identity,
-                },
-                new SharpDX.Direct2D1.GradientStopCollection(target, gradientStops, brush.SpreadMethod.ToDirect2D())
-            );
-        }
-
-        public override void Dispose()
-        {
-            ((SharpDX.Direct2D1.LinearGradientBrush)PlatformBrush)?.GradientStopCollection.Dispose();
-            base.Dispose();
+                gradientStops,
+                brush.SpreadMethod.ToDirect2D()))
+            {
+                PlatformBrush = new SharpDX.Direct2D1.LinearGradientBrush(
+                    target,
+                    new SharpDX.Direct2D1.LinearGradientBrushProperties
+                    {
+                        StartPoint = startPoint.ToSharpDX(),
+                        EndPoint = endPoint.ToSharpDX()
+                    },
+                    new SharpDX.Direct2D1.BrushProperties
+                    {
+                        Opacity = (float)brush.Opacity,
+                        Transform = SharpDX.Matrix3x2.Identity,
+                    },
+                    stops);
+            }
         }
     }
 }

+ 20 - 21
src/Windows/Perspex.Direct2D1/Media/RadialGradientBrushImpl.cs

@@ -30,28 +30,27 @@ namespace Perspex.Direct2D1.Media
             var radiusX = brush.Radius;
             var radiusY = brush.Radius;
 
-            PlatformBrush = new SharpDX.Direct2D1.RadialGradientBrush(
+            using (var stops = new SharpDX.Direct2D1.GradientStopCollection(
                 target,
-                new SharpDX.Direct2D1.RadialGradientBrushProperties
-                {
-                    Center = centerPoint.ToSharpDX(),
-                    GradientOriginOffset = GradientOriginOffset.ToSharpDX(),
-                    RadiusX = (float)radiusX,
-                    RadiusY = (float)radiusY
-                },
-                new SharpDX.Direct2D1.BrushProperties
-                {
-                    Opacity = (float)brush.Opacity,
-                    Transform = SharpDX.Matrix3x2.Identity,
-                },
-                new SharpDX.Direct2D1.GradientStopCollection(target, gradientStops, brush.SpreadMethod.ToDirect2D())
-            );
-        }
-
-        public override void Dispose()
-        {
-            ((SharpDX.Direct2D1.RadialGradientBrush)PlatformBrush)?.GradientStopCollection.Dispose();
-            base.Dispose();
+                gradientStops,
+                brush.SpreadMethod.ToDirect2D()))
+            {
+                PlatformBrush = new SharpDX.Direct2D1.RadialGradientBrush(
+                    target,
+                    new SharpDX.Direct2D1.RadialGradientBrushProperties
+                    {
+                        Center = centerPoint.ToSharpDX(),
+                        GradientOriginOffset = GradientOriginOffset.ToSharpDX(),
+                        RadiusX = (float)radiusX,
+                        RadiusY = (float)radiusY
+                    },
+                    new SharpDX.Direct2D1.BrushProperties
+                    {
+                        Opacity = (float)brush.Opacity,
+                        Transform = SharpDX.Matrix3x2.Identity,
+                    },
+                    stops);
+            }
         }
     }
 }