private static void DrawMarqueeToolRectangular(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, TransformerRect transformerRect, Rect sourceRectangle, MarqueeCompositeMode compositeMode = MarqueeCompositeMode.New) { switch (compositeMode) { case MarqueeCompositeMode.New: { drawingSession.Clear(Windows.UI.Colors.Transparent); Rect rect = transformerRect.ToRect(); drawingSession.FillRectangle(rect, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Add: { Rect rect = transformerRect.ToRect(); drawingSession.FillRectangle(rect, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Subtract: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationOut; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Intersect: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationIn; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Xor: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.Xor; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; } }
private static void DrawMarqueeToolEllipse(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, TransformerRect transformerRect, Rect sourceRectangle, MarqueeCompositeMode compositeMode = MarqueeCompositeMode.New) { switch (compositeMode) { case MarqueeCompositeMode.New: { drawingSession.Clear(Windows.UI.Colors.Transparent); Vector2 centerPoint = transformerRect.Center; float width = transformerRect.Width / 2; float height = transformerRect.Height / 2; drawingSession.FillEllipse(centerPoint, width, height, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Add: { Vector2 centerPoint = transformerRect.Center; float width = transformerRect.Width / 2; float height = transformerRect.Height / 2; drawingSession.FillEllipse(centerPoint, width, height, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Subtract: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationOut; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Intersect: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationIn; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Xor: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.Xor; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; } }
/// <summary> /// Fill a marquee mask with a marquee-tool. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="resourceCreator"> The resource-creator. </param> /// <param name="toolType"> The marquee-tool type. </param> /// <param name="marqueeTool"> The marquee-tool. </param> /// <param name="sourceRectangle"> The source rectangle. </param> /// <param name="compositeMode"> The composite mode. </param> public static void FillMarqueeMaskl(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, MarqueeToolType toolType, MarqueeTool marqueeTool, Rect sourceRectangle, MarqueeCompositeMode compositeMode) { switch (toolType) { case MarqueeToolType.Rectangular: drawingSession.DrawMarqueeToolRectangular(resourceCreator, marqueeTool.TransformerRect, sourceRectangle, compositeMode); break; case MarqueeToolType.Elliptical: drawingSession.DrawMarqueeToolEllipse(resourceCreator, marqueeTool.TransformerRect, sourceRectangle, compositeMode); break; case MarqueeToolType.Polygonal: case MarqueeToolType.FreeHand: Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, marqueeTool.Points.ToArray()); drawingSession.DrawMarqueeToolGeometry(resourceCreator, canvasGeometry, sourceRectangle, compositeMode); break; } }