コード例 #1
0
 protected override IDisposable Run(IObserver <IObservable <TSource> > observer, IDisposable cancel, Action <IDisposable> setSink)
 {
     if (_scheduler == null)
     {
         var sink = new _(this, observer, cancel);
         setSink(sink);
         return(sink.Run());
     }
     else if (_count > 0)
     {
         var sink = new BoundedWindowImpl(this, observer, cancel);
         setSink(sink);
         return(sink.Run());
     }
     else
     {
         if (_timeSpan == _timeShift)
         {
             var sink = new TimeShiftImpl(this, observer, cancel);
             setSink(sink);
             return(sink.Run());
         }
         else
         {
             var sink = new WindowImpl(this, observer, cancel);
             setSink(sink);
             return(sink.Run());
         }
     }
 }
コード例 #2
0
ファイル: Window.cs プロジェクト: vvnurmi/assaultwing
 public Window(WindowImpl impl)
 {
     Impl = impl;
 }
コード例 #3
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            var scene = Services.GetService <SceneSystem>();

            Camera = scene.GraphicsCompositor.Cameras[0].Camera;

            if (Camera == null)
            {
                return;
            }

            all = ((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime)
                  .Windows.Select(w => (WindowImpl)w.PlatformImpl);

            if (!all.Any(w => w.IsVisible))
            {
                return;
            }

            var modifiers = GetRawInputModifiers();

            foreach (var _event in input.Events)
            {
                if (_event is PointerEvent pointerEvent)
                {
                    if (pointerEvent.EventType == PointerEventType.Pressed)
                    {
                        var newFocusedWindow = Get2DWindow(lastMousePosition) ?? Get3DWindow();

                        if (focusedWindow != newFocusedWindow)
                        {
                            if (focusedWindow != null)
                            {
                                var tosave = focusedWindow;
                                Dispatcher.UIThread.Post(() =>
                                {
                                    tosave.Deactivated?.Invoke();
                                    tosave.LostFocus?.Invoke();
                                }, DispatcherPriority.Input);
                            }

                            focusedWindow = newFocusedWindow;

                            if (focusedWindow != null)
                            {
                                var tosave = focusedWindow;
                                Dispatcher.UIThread.Post(() =>
                                {
                                    tosave.Activated?.Invoke();
                                }, DispatcherPriority.Input);
                            }
                        }
                    }

                    if (pointerEvent.Device is IMouseDevice)
                    {
                        if (pointerEvent.EventType == PointerEventType.Moved)
                        {
                            lastMousePosition = pointerEvent.AbsolutePosition;
                            CalculateRay(lastMousePosition);

                            var newHoveredWindow = Get2DWindow(lastMousePosition) ?? Get3DWindow();

                            if (hoveredWindow != newHoveredWindow)
                            {
                                if (hoveredWindow != null)
                                {
                                    var inputRoot = hoveredWindow.InputRoot;
                                    SendEvents(hoveredWindow, new RawPointerEventArgs(hoveredWindow.MouseDevice, Timestamp,
                                                                                      inputRoot, RawPointerEventType.LeaveWindow, new Avalonia.Point(-1, -1), modifiers));
                                }

                                hoveredWindow = newHoveredWindow;
                            }

                            if (hoveredWindow != null)
                            {
                                var position  = ScreenToWindowPoint(hoveredWindow, pointerEvent.AbsolutePosition);
                                var inputRoot = hoveredWindow.InputRoot;
                                SendEvents(hoveredWindow, new RawPointerEventArgs(hoveredWindow.MouseDevice, Timestamp,
                                                                                  inputRoot, RawPointerEventType.Move, position.ToAvalonia(), modifiers));
                            }
                        }
                    }
                }
                else if (_event is MouseButtonEvent mouseEvent && focusedWindow != null)
                {
                    var position = ScreenToWindowPoint(focusedWindow, lastMousePosition);
                    SendEvents(focusedWindow, new RawPointerEventArgs(focusedWindow.MouseDevice, Timestamp, focusedWindow.InputRoot, ToAvalonia(mouseEvent.Button, mouseEvent.IsDown),
                                                                      position.ToAvalonia(), modifiers));
                }