Пример #1
0
 private void EndDraw()
 {
     if (GraphicsDevice != null)
     {
         WindowBackend?.EndDraw(this);
     }
 }
Пример #2
0
        static void Main()
        {
            GL.Initialize(new DummyGL());
            GraphicsContextBackend.SetInstance(new DummyGC());
            WindowBackend.SetInstance(new DummyWindow());

            UnoGenerated();
            DotNetApplication.Start();

            const double targetTime = 1.0 / 60;

            while (Application.Current != null)
            {
                var startTime = Clock.GetSeconds();

                Bootstrapper.OnUpdate();
                Bootstrapper.OnDraw();

                var renderTime = Clock.GetSeconds() - startTime;
                var msTimeout  = (int)((targetTime - renderTime) * 1000.0 + 0.5);

                if (msTimeout > 0)
                {
                    Thread.Sleep(msTimeout);
                }
            }
        }
Пример #3
0
        public void Initialize()
        {
            if (Environment.GetEnvironmentVariable("UNO_WINDOW_HIDDEN") == "1")
            {
                Window.IsVisible = false;
            }

            _unoWindow.Initialize();
            OpenGL.GL.Initialize(new MonoMacGL(), !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DEBUG_GL")));
            GraphicsContextBackend.SetInstance(_unoGC);
            WindowBackend.SetInstance(_unoWindow);

            Window.WillClose += (sender, args) => Bootstrapper.OnAppTerminating(_unoWindow);

            Window.AcceptsMouseMovedEvents = true;
            Window.MakeFirstResponder(this);
        }
Пример #4
0
        private DeviceResetError BeginDraw()
        {
            if (_graphicsDeviceService == null)
            {
                return(DeviceResetError.None);
            }

            var deviceResetError = HandleDeviceReset();

            if (deviceResetError != DeviceResetError.None)
            {
                return(deviceResetError);
            }

            var clientSize     = ClientSize;
            var graphicsDevice = GraphicsDevice;

            if (graphicsDevice == null)
            {
                return(DeviceResetError.Failed);
            }

            WindowBackend?.PrepareDraw(this, graphicsDevice.PresentationParameters);

            var viewport = new Viewport();

            viewport.X = 0;
            viewport.Y = 0;

            viewport.Width  = clientSize.Width;
            viewport.Height = clientSize.Height;

            viewport.MinDepth = 0;
            viewport.MaxDepth = 1;

            if (!graphicsDevice.Viewport.Equals(viewport))
            {
                graphicsDevice.Viewport = viewport;
            }

            WindowBackend?.BeginDraw(this);

            return(DeviceResetError.None);
        }
Пример #5
0
        public void Initialize(IUnoWindow parent)
        {
            Window = parent;
            OpenGL.GL.Initialize(GL, !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DEBUG_GL")));
            GraphicsContextBackend.SetInstance(CoreGC);
            WindowBackend.SetInstance(CoreWindow);

            SizeChanged += (sender, e) => Bootstrapper.OnWindowSizeChanged(CoreWindow);

            MouseDown += (sender, e) =>
            {
                MouseButton button;
                if (!WinFormsHelper.TryGetUnoMouseButton(e.Button, out button))
                {
                    return;
                }

                _hasDown    = true;
                _lastX      = e.X;
                _lastY      = e.Y;
                _lastbutton = button;
                Bootstrapper.OnMouseDown(CoreWindow, e.X, e.Y, button);
            };

            MouseUp += (sender, e) =>
            {
                MouseButton button;
                if (!WinFormsHelper.TryGetUnoMouseButton(e.Button, out button))
                {
                    return;
                }

                Bootstrapper.OnMouseUp(CoreWindow, e.X, e.Y, button);
                _hasDown = false;
            };

            MouseLeave += (sender, e) => Bootstrapper.OnMouseOut(CoreWindow);
            MouseMove  += (sender, e) => Bootstrapper.OnMouseMove(CoreWindow, e.X, e.Y);

            MouseWheel += (sender, e) =>
            {
                var numLinesPerScroll = SystemInformation.MouseWheelScrollLines;
                var deltaMode         = numLinesPerScroll > 0
                    ? WheelDeltaMode.DeltaLine
                    : WheelDeltaMode.DeltaPage;

                var delta = deltaMode == WheelDeltaMode.DeltaLine ? (e.Delta / 120.0f) * numLinesPerScroll : e.Delta / 120.0f;
                Bootstrapper.OnMouseWheel(CoreWindow, 0, delta, (int)deltaMode);
            };

            PreviewKeyDown += (sender, e) =>
            {
                // TODO: By doing this the tab key will not be sent to wpf at all, it should be treated as IsInputKey only when not handled by Uno. A better solution could be done by reading http://msdn.microsoft.com/en-us/library/ms742474%28v=vs.110%29.aspx and http://blogs.msdn.com/b/nickkramer/archive/2006/06/09/623203.aspx
                switch (e.KeyData)
                {
                case Keys.Left:
                case Keys.Right:
                case Keys.Up:
                case Keys.Down:
                case Keys.Tab:
                    e.IsInputKey = true;
                    break;

                case Keys.Control | Keys.Left:
                case Keys.Control | Keys.Right:
                case Keys.Control | Keys.Up:
                case Keys.Control | Keys.Down:
                case Keys.Control | Keys.Tab:
                    e.IsInputKey = true;
                    break;

                case Keys.Shift | Keys.Left:
                case Keys.Shift | Keys.Right:
                case Keys.Shift | Keys.Up:
                case Keys.Shift | Keys.Down:
                case Keys.Shift | Keys.Tab:
                    e.IsInputKey = true;
                    break;

                case Keys.Control | Keys.Shift | Keys.Left:
                case Keys.Control | Keys.Shift | Keys.Right:
                case Keys.Control | Keys.Shift | Keys.Up:
                case Keys.Control | Keys.Shift | Keys.Down:
                case Keys.Control | Keys.Shift | Keys.Tab:
                    e.IsInputKey = true;
                    break;
                }
            };

            KeyDown += (sender, e) =>
            {
                Key key;
                if (!WinFormsHelper.TryGetUnoKey(e.KeyCode, out key))
                {
                    return;
                }

                e.Handled = Bootstrapper.OnKeyDown(CoreWindow, key);

                if (!e.Handled && key == Key.F11)
                {
                    Window.IsFullscreen = !Window.IsFullscreen;
                }
            };

            KeyUp += (sender, e) =>
            {
                Key key;
                if (!WinFormsHelper.TryGetUnoKey(e.KeyCode, out key))
                {
                    return;
                }

                e.Handled = Bootstrapper.OnKeyUp(CoreWindow, key);
            };

            KeyPress += (sender, e) =>
            {
                if (CoreWindow.IsTextInputActive() && (ModifierKeys & (Keys.Control | Keys.Alt)) != Keys.Control)
                {
                    e.Handled = Bootstrapper.OnTextInput(CoreWindow, e.KeyChar.ToString());
                }
            };

            GotFocus  += (sender, e) => DotNetApplication.EnterInteractive();
            LostFocus += (senders, e) => DotNetApplication.ExitInteractive();
        }