internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = rectangle.Stroke.ToSharpDX(renderTarget, rect); //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRect(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } //renderTarget.PopLayer(); }
private void _drawSelectedTile(SharpDX.Direct2D1.DeviceContext d2dContext) { if (_selectedRect != null) { var strokeStyle_dashed = new SharpDX.Direct2D1.StrokeStyle(d2dContext.Factory, new SharpDX.Direct2D1.StrokeStyleProperties() { DashOffset = (offsetSelectedDash / 5), DashStyle = SharpDX.Direct2D1.DashStyle.Dash }); ////drown out the shadow of the tile //d2dContext.DrawRectangle( // new RectangleF(_selectedRect.Rectangle.X - 2, _selectedRect.Rectangle.Y - 2, _selectedRect.Rectangle.Width + 4, _selectedRect.Rectangle.Height + 4), // new SharpDX.Direct2D1.SolidColorBrush(d2dContext, Color.White), // 4 // ); //draw an animated dash around border of tile d2dContext.DrawRectangle( new RectangleF(_selectedRect.Rectangle.X - 2, _selectedRect.Rectangle.Y - 2, _selectedRect.Rectangle.Width + 4, _selectedRect.Rectangle.Height + 4), new SharpDX.Direct2D1.SolidColorBrush(d2dContext, Color.Yellow), 4, strokeStyle_dashed); //_drawTiles(_selectedRect.UniqueId); offsetSelectedDash++; if (offsetSelectedDash > 100) offsetSelectedDash = 0; } }
private void _drawDesktopOutline( SharpDX.Direct2D1.DeviceContext d2dContext) { //BORDER d2dContext.Transform = Matrix.Translation(_globalTranslation) * Matrix.Scaling(_globalScale); d2dContext.DrawRectangle( _layoutDeviceScreenSize, _generalLightGrayColor, 3 ); //WIDTH d2dContext.Transform = Matrix.Translation(_globalTranslation) * Matrix.Scaling(_globalScale); d2dContext.FillRectangle( new RectangleF(0, -30, 100, 30), _generalLightGrayColor ); d2dContext.Transform = Matrix.Translation(10, 0, 0) * Matrix.Translation(_globalTranslation) * Matrix.Scaling(_globalScale); d2dContext.DrawText(_layoutDetail.Width.ToString(), _generalTextFormat, new RectangleF(0, -30, 100, 30), _generalLightWhiteColor); ////HEIGHT double angleRadians = 90 * Math.PI / 180; //90 degrees d2dContext.Transform = Matrix.RotationZ((float)angleRadians) * Matrix.Identity * Matrix.Translation(_globalTranslation) * Matrix.Scaling(_globalScale); d2dContext.FillRectangle( new RectangleF(0, 0, 100, 30), _generalLightGrayColor ); d2dContext.Transform = Matrix.RotationZ((float)angleRadians) * Matrix.Translation(0, 10, 0) * Matrix.Translation(_globalTranslation) * Matrix.Scaling(_globalScale); d2dContext.DrawText(_layoutDetail.Height.ToString(), _generalTextFormat, new RectangleF(0, 0, 100, 30), _generalLightWhiteColor); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect); try { var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRectangle(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } finally { if (fill != null) fill.Dispose(); if (stroke != null) stroke.Dispose(); } }