Мерцающий курсор после изменения размера окна (Monogame) - PullRequest
0 голосов
/ 01 июля 2019

Я реализовал пользовательское изменение размера в приложении (чтобы исправить отсутствие рендеринга во время изменения размера), и иногда после изменения размера курсор начинает мерцать.

Курсор установлен следующим образом:

public enum CursorCode {
            ...
        }

        public static CursorCode current = CursorCode.Default;

        public static void SetCursor ( CursorCode code ) {
            current = code;
            switch ( code ) {
                case CursorCode.ResizeNWSE:
                    System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.SizeNWSE;
                    break;
...
            }
        }

Это не вызвано, чтобы быть установленным к чему-то другому, чем я хочу.Он вызывается каждый кадр (до current) и обновляется.Мерцает только и только когда я двигаю мышью.Когда я отдыхаю, он остается равным current.

Размер окна изменяется таким образом:

var mx = beginX + Input.mouseX;
            var my = beginY + Input.mouseY;

            if ( toResize.Contains( Side.Right ) ) {
                graphics.PreferredBackBufferWidth = Math.Min( Math.Max( mx, 50 ), dragWindow.area.Width );
            }

            if ( toResize.Contains( Side.Bottom ) ) {
                graphics.PreferredBackBufferHeight = Math.Min( Math.Max( my, 50 ), dragWindow.area.Height );
            }

            if ( toResize.Contains( Side.Top ) ) {
                var h = graphics.PreferredBackBufferHeight;
                graphics.PreferredBackBufferHeight = Math.Min( Math.Max( my - Input.mouseY * 2, 50 ), dragWindow.area.Height );
                var delta = h - Math.Min( Math.Max( my - Input.mouseY * 2, 50 ), dragWindow.area.Height );
                Window.Position = new Point( Window.Position.X, Window.Position.Y + delta );
                beginY -= delta;
            }

            if ( toResize.Contains( Side.Left ) ) {
                var w = graphics.PreferredBackBufferWidth;
                graphics.PreferredBackBufferWidth = Math.Min( Math.Max( mx - Input.mouseX * 2, 50 ), dragWindow.area.Width );
                var delta = w - Math.Min( Math.Max( mx - Input.mouseX * 2, 50 ), dragWindow.area.Width );
                Window.Position = new Point( Window.Position.X + delta, Window.Position.Y );
                beginX -= delta;
            }

            graphics.ApplyChanges();

После того, как я завершу изменение размера, проблема не исчезнет.Так не бывает всегда.

...