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); } } }
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); }
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(); }