public void FillRectangle(float x, float y, float width, float height, System.Drawing.Color clr) { SharpDX.Mathematics.Interop.RawRectangleF rect = new SharpDX.Mathematics.Interop.RawRectangleF { Left = x, Top = y, Right = x + width, Bottom = y + height }; SharpDX.Direct2D1.SolidColorBrush brush = new SharpDX.Direct2D1.SolidColorBrush(d2dRenderTarget, ToColor(clr)); d2dRenderTarget.FillRectangle(rect, brush); brush.Dispose(); }
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(); }
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(); } } }
private void OnRender() { lock (_renderContextLock) { if (_renderTarget?.IsDisposed ?? true) { return; } _renderTarget.BeginDraw(); _renderTarget.Clear(_backgroundColor); if (_experimentStarted) // Draw blocks { var secsPassed = (CurrentTime - _stageUpdatedAt) / 1000.0; switch (_paradigm) { case SsvepExperiment.Configuration.TestConfig.StimulationParadigm.Flicker: foreach (var block in _blocks) { if (block.BorderWidth > 0) { _solidColorBrush.Color = _blockBorderColor; _renderTarget.FillRectangle(block.BorderRect, _solidColorBrush); } if (!_trialStarted || block.Patterns == null) { _solidColorBrush.Color = _blockNormalColor; } else { _solidColorBrush.Color = Color.SmoothStep(_blockNormalColor, _blockFlashingColor, (float)ConvertCosineValueToGrayScale(block.Patterns[0].Sample(secsPassed))); } _renderTarget.FillRectangle(block.ContentRect, _solidColorBrush); if (block.FixationPointSize > 0) { _solidColorBrush.Color = _blockFixationPointColor; _renderTarget.FillEllipse(block.CenterPointEllipse, _solidColorBrush); } } break; case SsvepExperiment.Configuration.TestConfig.StimulationParadigm.DualFlickers: foreach (var block in _blocks) { if (block.BorderWidth > 0) { _solidColorBrush.Color = _blockBorderColor; _renderTarget.FillRectangle(block.BorderRect, _solidColorBrush); } for (var i = 0; i < block.DualFlickerRects.Length; i++) { if (!_trialStarted || block.Patterns == null) { _solidColorBrush.Color = _blockNormalColor; } else { _solidColorBrush.Color = Color.SmoothStep(_blockNormalColor, _blockFlashingColor, (float)ConvertCosineValueToGrayScale(block.Patterns[i].Sample(secsPassed))); } _renderTarget.FillRectangle(block.DualFlickerRects[i], _solidColorBrush); } if (block.FixationPointSize > 0) { _solidColorBrush.Color = _blockFixationPointColor; _renderTarget.FillEllipse(block.CenterPointEllipse, _solidColorBrush); } } break; } } else if (!(_displayText?.IsBlank() ?? true)) // Draw text { _solidColorBrush.Color = _fontColor; _renderTarget.DrawText(_displayText, _textFormat, new RawRectangleF(0, 0, Width, Height), _solidColorBrush, SharpDX.Direct2D1.DrawTextOptions.None); } _renderTarget.EndDraw(); _swapChain.Present(1, SharpDX.DXGI.PresentFlags.None, _presentParameters); } }