public void OnLoop(FrameTime frameTime) { CurrentTimestamp = frameTime.TotalSeconds; BeforeAll?.Invoke(frameTime); BeforeUpdate?.Invoke(frameTime); Update?.Invoke(frameTime); AfterUpdate?.Invoke(frameTime); BeforeRender?.Invoke(frameTime); Render?.Invoke(frameTime); AfterRender?.Invoke(frameTime); AfterAll?.Invoke(frameTime); }
protected virtual void OnAfterRender(EventArgs e) => AfterRender?.Invoke(this, e);
public void Render(RenderContext context) { if (!Visible) { return; } UpdateLayout(); var view = Rectangle.Intersect(context.View, Bounds); if (view.Width == 0 || view.Height == 0) { return; } var batch = context.Batch; var oldScissorRectangle = CrossEngineStuff.GetScissor(); if (ClipToBounds && !MyraEnvironment.DisableClipping) { var newScissorRectangle = Rectangle.Intersect(oldScissorRectangle, view); if (newScissorRectangle.IsEmpty) { return; } context.Flush(); CrossEngineStuff.SetScissor(newScissorRectangle); } var oldOpacity = context.Opacity; var oldView = context.View; context.Opacity *= Opacity; context.View = view; BeforeRender?.Invoke(context); // Background var background = GetCurrentBackground(); if (background != null) { context.Draw(background, BackgroundBounds); } // Borders var border = GetCurrentBorder(); if (border != null) { var borderBounds = BorderBounds; if (BorderThickness.Left > 0) { context.Draw(border, new Rectangle(borderBounds.X, borderBounds.Y, BorderThickness.Left, borderBounds.Height)); } if (BorderThickness.Top > 0) { context.Draw(border, new Rectangle(borderBounds.X, borderBounds.Y, borderBounds.Width, BorderThickness.Top)); } if (BorderThickness.Right > 0) { context.Draw(border, new Rectangle(borderBounds.Right - BorderThickness.Right, borderBounds.Y, BorderThickness.Right, borderBounds.Height)); } if (BorderThickness.Bottom > 0) { context.Draw(border, new Rectangle(borderBounds.X, borderBounds.Bottom - BorderThickness.Bottom, borderBounds.Width, BorderThickness.Bottom)); } } InternalRender(context); AfterRender?.Invoke(context); // Restore context settings context.View = oldView; context.Opacity = oldOpacity; // Optional debug rendering if (MyraEnvironment.DrawWidgetsFrames) { batch.DrawRectangle(Bounds, Color.LightGreen); } if (MyraEnvironment.DrawKeyboardFocusedWidgetFrame && IsKeyboardFocused) { batch.DrawRectangle(Bounds, Color.Red); } if (MyraEnvironment.DrawMouseWheelFocusedWidgetFrame && IsMouseWheelFocused) { batch.DrawRectangle(Bounds, Color.Yellow); } if (ClipToBounds && !MyraEnvironment.DisableClipping) { // Restore scissor context.Flush(); CrossEngineStuff.SetScissor(oldScissorRectangle); } }
internal static void TrigAfterRender() => AfterRender?.Invoke();