public UGRadialGradientBrush(IUGContext context, Vector2 center, float radius, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { Center = center; Radius = radius; EdgeBehavior = edgeBehavior; Stops = gradientStops.ToArray(); if (Stops.Length < 2) { throw new ArgumentException(nameof(gradientStops)); } unsafe { var baseFunction = CGFunctionsHelper.GetCGFunction(EdgeBehavior); CGFunction.CGFunctionEvaluate function = (data, outData) => baseFunction(Stops, data, outData); var domain = new nfloat[] { 0, edgeBehavior != UGEdgeBehavior.Clamp ? 1.5F : 1 }; _function = new CGFunction(domain, new nfloat[] { 0, 1, 0, 1, 0, 1, 0, 1 }, function); } var cgCenter = Center.ToCGPoint(); var cgRadius = EdgeBehavior != UGEdgeBehavior.Clamp ? 1.5F * Radius : Radius; using (var colorSpace = CGColorSpace.CreateSrgb()) { _native = CGShading.CreateRadial(colorSpace, cgCenter, 0F, cgCenter, cgRadius, _function, true, true); } }
public static CGFunctionEvaluateWithStops GetCGFunction(UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(CGClampFunction); case UGEdgeBehavior.Wrap: return(CGWrapFunction); case UGEdgeBehavior.Mirror: return(CGMirrorFunction); default: throw new NotSupportedException(); } }
public static CanvasEdgeBehavior ToWinRTEdgeBehavior(this UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(CanvasEdgeBehavior.Clamp); case UGEdgeBehavior.Wrap: return(CanvasEdgeBehavior.Wrap); case UGEdgeBehavior.Mirror: return(CanvasEdgeBehavior.Mirror); default: throw new NotSupportedException(); } }
public static GradientSpreadMethod ToWPFSpreadMethod(this UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(GradientSpreadMethod.Pad); case UGEdgeBehavior.Wrap: return(GradientSpreadMethod.Repeat); case UGEdgeBehavior.Mirror: return(GradientSpreadMethod.Reflect); default: throw new NotSupportedException(); } }
public static Shader.TileMode ToAGShaderTileMode(this UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(Shader.TileMode.Clamp); case UGEdgeBehavior.Wrap: return(Shader.TileMode.Repeat); case UGEdgeBehavior.Mirror: return(Shader.TileMode.Mirror); default: throw new NotSupportedException(); } }
public static WrapMode ToGDIWrapMode(this UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(WrapMode.Clamp); case UGEdgeBehavior.Wrap: return(WrapMode.Tile); case UGEdgeBehavior.Mirror: return(WrapMode.TileFlipXY); default: throw new NotSupportedException(); } }
public UGRadialGradientBrush(IUGContext context, Vector2 center, float radius, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { Center = center; Radius = radius; EdgeBehavior = edgeBehavior; Stops = gradientStops.ToArray(); if (Stops.Length < 2) { throw new ArgumentException(nameof(gradientStops)); } var colors = gradientStops.Select(s => s.Color.ColorAsInt).ToArray(); var offsets = gradientStops.Select(s => s.Offset).ToArray(); _native = new RadialGradient( Center.X, Center.Y, Radius, colors, offsets, edgeBehavior.ToAGShaderTileMode()); }
public UGLinearGradientBrush(IUGContext context, Vector2 startPoint, Vector2 endPoint, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { StartPoint = startPoint; EndPoint = endPoint; EdgeBehavior = edgeBehavior; Stops = gradientStops.ToArray(); if (Stops.Length < 2) { throw new ArgumentException(nameof(gradientStops)); } var colors = gradientStops.Select(s => s.Color.ColorAsInt).ToArray(); var offsets = gradientStops.Select(s => s.Offset).ToArray(); _native = new LinearGradient( StartPoint.X, StartPoint.Y, EndPoint.X, EndPoint.Y, colors, offsets, edgeBehavior.ToAGShaderTileMode()); }
public UGRadialGradientBrush(IUGContext context, Vector2 center, float radius, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { Radius = radius; var ugStops = gradientStops.Reverse().ToArray(); if (ugStops.Length < 2) { throw new ArgumentException(nameof(gradientStops)); } for (var i = 0; i < ugStops.Length; ++i) { ugStops[i].Offset = 1F - ugStops[i].Offset; } var size = radius * 4F; var offset = .5F * size; using (var path = new GraphicsPath()) { path.AddEllipse(center.X - offset, center.Y - offset, size, size); var native = new PathGradientBrush(path); native.CenterPoint = center.ToGDIPointF(); native.WrapMode = edgeBehavior.ToGDIWrapMode(); native.InterpolationColors = ugStops.ToGDIColorBlendWithEdgeBehavior(edgeBehavior); _native = native; } }
public UGRadialGradientBrush(IUGContext context, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) : this(context, new Vector2(.5F, .5F), .5F, gradientStops, edgeBehavior) { }
public UGRadialGradientBrush(IUGContext context, UGColor startColor, UGColor endColor, UGEdgeBehavior edgeBehavior) : this(context, new Vector2(.5F, .5F), .5F, new[] { new UGGradientStop(startColor, 0F), new UGGradientStop(endColor, 1F) }, edgeBehavior) { }
public UGLinearGradientBrush(IUGContext context, Vector2 startPoint, Vector2 endPoint, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { var count = gradientStops.Count(); if (count < 2) { throw new ArgumentException(nameof(gradientStops)); } var device = ((UGContext)context).Device; var winrtStops = gradientStops.ToWinRTGradientStops(); var native = new CanvasLinearGradientBrush(device, winrtStops, edgeBehavior.ToWinRTEdgeBehavior(), CanvasAlphaMode.Premultiplied); native.StartPoint = startPoint; native.EndPoint = endPoint; _native = native; }
public UGLinearGradientBrush(IUGContext context, Vector2 startPoint, Vector2 endPoint, UGColor startColor, UGColor endColor, UGEdgeBehavior edgeBehavior) : this(context, startPoint, endPoint, new[] { new UGGradientStop(startColor, 0F), new UGGradientStop(endColor, 1F) }, edgeBehavior) { }
public UGLinearGradientBrush(IUGContext context, UGColor startColor, UGColor endColor, float angle, UGEdgeBehavior edgeBehavior) : this(context, Vector2.Zero, UGLinearGradientHelper.EndPointFromAngle(angle), startColor, endColor, edgeBehavior) { }
public UGLinearGradientBrush(IUGContext context, Vector2 startPoint, Vector2 endPoint, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { var count = gradientStops.Count(); if (count < 2) { throw new ArgumentException(nameof(gradientStops)); } var wpfStops = gradientStops.ToWPFGradientStopCollection(count); var native = new LinearGradientBrush(wpfStops, startPoint.ToWPFPoint(), endPoint.ToWPFPoint()); native.SpreadMethod = edgeBehavior.ToWPFSpreadMethod(); native.Freeze(); _native = native; }
public UGRadialGradientBrush(IUGContext context, Vector2 center, float radius, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { var count = gradientStops.Count(); if (count < 2) { throw new ArgumentException(nameof(gradientStops)); } var wpfStops = gradientStops.ToWPFGradientStopCollection(count); var native = new RadialGradientBrush(wpfStops); var wpfCenter = center.ToWPFPoint(); native.Center = wpfCenter; native.GradientOrigin = wpfCenter; native.RadiusX = radius; native.RadiusY = radius; native.SpreadMethod = edgeBehavior.ToWPFSpreadMethod(); native.Freeze(); _native = native; }
public UGRadialGradientBrush(IUGContext context, Vector2 center, float radius, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { var count = gradientStops.Count(); if (count < 2) { throw new ArgumentException(nameof(gradientStops)); } var device = ((UGContext)context).Device; var winrtStops = gradientStops.ToWinRTGradientStops(); var native = new CanvasRadialGradientBrush(device, winrtStops, edgeBehavior.ToWinRTEdgeBehavior(), CanvasAlphaMode.Premultiplied); native.Center = center; native.RadiusX = radius; native.RadiusY = radius; _native = native; }
public static ColorBlend ToGDIColorBlendWithEdgeBehavior(this UGGradientStop[] ugStops, UGEdgeBehavior edgeBehavior) { switch (edgeBehavior) { case UGEdgeBehavior.Clamp: return(ugStops.ToGDIClampColorBlend()); case UGEdgeBehavior.Wrap: return(ugStops.ToGDIWrapColorBlend()); case UGEdgeBehavior.Mirror: return(ugStops.ToGDIMirrorColorBlend()); default: throw new NotSupportedException(); } }
public UGLinearGradientBrush(IUGContext context, Vector2 startPoint, Vector2 endPoint, IEnumerable <UGGradientStop> gradientStops, UGEdgeBehavior edgeBehavior) { StartPoint = startPoint; EndPoint = endPoint; var ugStops = gradientStops.ToArray(); if (ugStops.Length < 2) { throw new ArgumentException(nameof(gradientStops)); } var diff = endPoint - startPoint; var angle = MathHelper.RadiansToDegrees((float)Math.Atan2(diff.Y, diff.X)); var native = new LinearGradientBrush( new RectangleF(0F, 0F, 1F, 1F), Color.Transparent, Color.Transparent, angle, false); native.InterpolationColors = ugStops.ToGDIColorBlend(); _native = native; }