void Dispose(bool disposing) { if (disposing) { var changeGuardian = WindowSizeChangeGuardian.Lookup(gameRendering.Game); if (changeGuardian != null) { changeGuardian.WindowSizeChanged -= registeredListener; } } }
public static IWindowSizeChangeGuardian Install(Game game) { var srv = game.Services.GetService <IWindowSizeChangeGuardian>(); if (srv != null) { return(srv); } var created = new WindowSizeChangeGuardian(game); game.Services.AddService(typeof(IWindowSizeChangeGuardian), created); game.Components.Add(created); return(created); }
public static IDisposable TrackScreenSize(this GameRendering r, Insets insets = new Insets()) { void UpdateBounds() { var cb = r.Game.Window.ClientBounds; var x = insets.Left; var y = insets.Top; var w = Math.Max(1, cb.Width - insets.Horizontal); var h = Math.Max(1, cb.Height - insets.Vertical); r.Bounds = new Rect(x, y, w, h); } void Handler(object o, EventArgs eventArgs) => UpdateBounds(); var changeGuardian = WindowSizeChangeGuardian.Install(r.Game); EventHandler handlerRef = Handler; changeGuardian.WindowSizeChanged += handlerRef; // finally initialize once UpdateBounds(); return(new ScreenTrackingSubscription(r, handlerRef)); }