Esempio n. 1
0
 void Dispose(bool disposing)
 {
     if (disposing)
     {
         var changeGuardian = WindowSizeChangeGuardian.Lookup(gameRendering.Game);
         if (changeGuardian != null)
         {
             changeGuardian.WindowSizeChanged -= registeredListener;
         }
     }
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }