コード例 #1
0
        /// <summary>
        /// Tries to get a service from an <see cref="IPerspexDependencyResolver"/>, throwing an
        /// exception if not found.
        /// </summary>
        /// <typeparam name="T">The service type.</typeparam>
        /// <param name="resolver">The resolver.</param>
        /// <returns>The service.</returns>
        private static T TryGetService <T>(IPerspexDependencyResolver resolver) where T : class
        {
            var result = resolver.GetService <T>();

            System.Diagnostics.Debug.WriteLineIf(
                result == null,
                $"Could not create {typeof(T).Name} : maybe Application.RegisterServices() wasn't called?");

            return(result);
        }
コード例 #2
0
ファイル: TopLevel.cs プロジェクト: Serg2DFX/Perspex
        /// <summary>
        /// Initializes a new instance of the <see cref="TopLevel"/> class.
        /// </summary>
        /// <param name="impl">The platform-specific window implementation.</param>
        /// <param name="dependencyResolver">
        /// The dependency resolver to use. If null the default dependency resolver will be used.
        /// </param>
        public TopLevel(ITopLevelImpl impl, IPerspexDependencyResolver dependencyResolver)
        {
            if (impl == null)
            {
                throw new InvalidOperationException(
                          "Could not create window implementation: maybe no windowing subsystem was initialized?");
            }

            PlatformImpl = impl;

            dependencyResolver = dependencyResolver ?? PerspexLocator.Current;
            var renderInterface = TryGetService <IPlatformRenderInterface>(dependencyResolver);
            var styler          = TryGetService <IStyler>(dependencyResolver);

            _accessKeyHandler          = TryGetService <IAccessKeyHandler>(dependencyResolver);
            _inputManager              = TryGetService <IInputManager>(dependencyResolver);
            _keyboardNavigationHandler = TryGetService <IKeyboardNavigationHandler>(dependencyResolver);
            LayoutManager              = TryGetService <ILayoutManager>(dependencyResolver);
            _renderQueueManager        = TryGetService <IRenderQueueManager>(dependencyResolver);
            (TryGetService <ITopLevelRenderer>(dependencyResolver) ?? new DefaultTopLevelRenderer()).Attach(this);

            PlatformImpl.SetInputRoot(this);
            PlatformImpl.Activated   = HandleActivated;
            PlatformImpl.Deactivated = HandleDeactivated;
            PlatformImpl.Closed      = HandleClosed;
            PlatformImpl.Input       = HandleInput;
            PlatformImpl.Resized     = HandleResized;

            Size clientSize = ClientSize = PlatformImpl.ClientSize;

            if (LayoutManager != null)
            {
                LayoutManager.Root = this;
                LayoutManager.LayoutNeeded.Subscribe(_ => HandleLayoutNeeded());
                LayoutManager.LayoutCompleted.Subscribe(_ => HandleLayoutCompleted());
            }

            if (_keyboardNavigationHandler != null)
            {
                _keyboardNavigationHandler.SetOwner(this);
            }

            if (_accessKeyHandler != null)
            {
                _accessKeyHandler.SetOwner(this);
            }

            styler?.ApplyStyles(this);

            GetObservable(ClientSizeProperty).Skip(1).Subscribe(x => PlatformImpl.ClientSize = x);
            GetObservable(PointerOverElementProperty)
            .Select(
                x => (x as InputElement)?.GetObservable(CursorProperty) ?? Observable.Empty <Cursor>())
            .Switch().Subscribe(cursor => PlatformImpl.SetCursor(cursor?.PlatformCursor));
        }
コード例 #3
0
        /// <summary>
        /// Tries to get a service from an <see cref="IPerspexDependencyResolver"/>, throwing an
        /// exception if not found.
        /// </summary>
        /// <typeparam name="T">The service type.</typeparam>
        /// <param name="resolver">The resolver.</param>
        /// <returns>The service.</returns>
        private T TryGetService <T>(IPerspexDependencyResolver resolver) where T : class
        {
            var result = resolver.GetService <T>();

            if (result == null)
            {
                Logger.Warning(
                    LogArea.Control,
                    this,
                    "Could not create {Service} : maybe Application.RegisterServices() wasn't called?",
                    typeof(T));
            }

            return(result);
        }
コード例 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PerspexLocator.Current.GetService <IPopupImpl>(), dependencyResolver)
 {
     GetObservable(ParentProperty).Subscribe(x => InheritanceParent = (PerspexObject)x);
 }
コード例 #5
0
ファイル: PerspexLocator.cs プロジェクト: vebin/Perspex
 public ResolverDisposable(IPerspexDependencyResolver resolver, PerspexLocator mutable)
 {
     _resolver = resolver;
     _mutable  = mutable;
 }
コード例 #6
0
ファイル: PerspexLocator.cs プロジェクト: vebin/Perspex
 public PerspexLocator(IPerspexDependencyResolver parentScope)
 {
     _parentScope = parentScope;
 }
コード例 #7
0
ファイル: PerspexLocator.cs プロジェクト: vebin/Perspex
 public static T GetService <T>(this IPerspexDependencyResolver resolver)
 {
     return((T)resolver.GetService(typeof(T)));
 }
コード例 #8
0
ファイル: PopupRoot.cs プロジェクト: furesoft/Perspex
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PlatformManager.CreatePopup(), dependencyResolver)
 {
     GetObservable(ParentProperty).Subscribe(x => InheritanceParent = (PerspexObject)x);
 }
コード例 #9
0
ファイル: PopupRoot.cs プロジェクト: rdterner/Perspex
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PerspexLocator.Current.GetService<IPopupImpl>(), dependencyResolver)
 {
     GetObservable(ParentProperty).Subscribe(x => InheritanceParent = (PerspexObject)x);
 }
コード例 #10
0
ファイル: PopupRoot.cs プロジェクト: vebin/Perspex
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PlatformManager.CreatePopup(), dependencyResolver)
 {
 }
コード例 #11
0
ファイル: PopupRoot.cs プロジェクト: Serg2DFX/Perspex
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PlatformManager.CreatePopup(), dependencyResolver)
 {
     GetObservable(ParentProperty).Subscribe(x => InheritanceParent = (PerspexObject)x);
 }
コード例 #12
0
ファイル: PopupRoot.cs プロジェクト: KvanTTT/Perspex
 /// <summary>
 /// Initializes a new instance of the <see cref="PopupRoot"/> class.
 /// </summary>
 /// <param name="dependencyResolver">
 /// The dependency resolver to use. If null the default dependency resolver will be used.
 /// </param>
 public PopupRoot(IPerspexDependencyResolver dependencyResolver)
     : base(PlatformManager.CreatePopup(), dependencyResolver)
 {
 }