Beispiel #1
0
        public async void EnterViewMode(ApplicationViewMode mode)
        {
            bool switched = false;

            if (ApplicationView.GetForCurrentView().IsViewModeSupported(mode))
            {
                switched = await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(mode);
            }
        }
Beispiel #2
0
        private async void AppBarButton_Click(object sender, RoutedEventArgs e)
        {
            ApplicationViewMode target = _viewMode == ApplicationViewMode.CompactOverlay ?
                                         ApplicationViewMode.Default : ApplicationViewMode.CompactOverlay;

            _viewMode = target;
            await ApplicationViewSwitcher.TryShowAsViewModeAsync(ViewID, target);

            VisualStateManager.GoToState(this, target.ToString(), false);
        }
Beispiel #3
0
        public static void HandleTitleBarForGrid(Grid element, ApplicationViewMode mode = ApplicationViewMode.Default)
        {
            lock (_handledElements)
            {
                //if (_handledElements.Contains(element))
                //    return;

                var applicationView     = ApplicationView.GetForCurrentView();
                var coreApplicationView = CoreApplication.GetCurrentView();

                if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
                {
                    var statusBar = StatusBar.GetForCurrentView();
                    if (statusBar != null)
                    {
                        var rect = statusBar.OccludedRect;
                        element.Padding = new Thickness(0, rect.Height, 0, 0);
                    }
                }
                else
                {
                    var coreTitleBar = coreApplicationView.TitleBar;

                    // this method captures "element" meaning the GC might not be able to collect it.
                    void UpdateTitleBarLayout(CoreApplicationViewTitleBar titleBar, object ev)
                    {
                        if (applicationView.ViewMode == ApplicationViewMode.CompactOverlay)
                        {
                            element.Padding = new Thickness(titleBar.SystemOverlayLeftInset / 2, 0, titleBar.SystemOverlayRightInset / 2, 0);
                        }
                        else
                        {
                            element.Padding = new Thickness(0, titleBar.Height, 0, 0);
                        }
                    }

                    // i *believe* this handles it? not 100% sure
                    void ElementUnloaded(object sender, RoutedEventArgs e)
                    {
                        coreTitleBar.LayoutMetricsChanged     -= UpdateTitleBarLayout;
                        (sender as FrameworkElement).Unloaded -= ElementUnloaded;

                        lock (_handledElements)
                        {
                            _handledElements.Remove(sender as FrameworkElement);
                        }
                    }

                    coreTitleBar.LayoutMetricsChanged += UpdateTitleBarLayout;
                    element.Unloaded += ElementUnloaded;

                    UpdateTitleBarLayout(coreTitleBar, null);
                }
            }
        }
Beispiel #4
0
        public static async Task OpenChannelWindowAsync(DiscordChannel channel, ApplicationViewMode mode = ApplicationViewMode.Default)
        {
            if (!MultipleWindowsSupported)
            {
                return;
            }

            if (await ActivateOtherWindow(channel))
            {
                return;
            }

            var viewId   = 0;
            var coreView = CoreApplication.CreateNewView();
            await coreView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                var coreWindow = coreView.CoreWindow;
                var window     = Window.Current;

                var frame = new Frame();
                try { ThemeManager.LoadCurrentTheme(frame.Resources); } catch { }

                window.Content = frame;
                window.Activate();

                frame.Navigate(typeof(MainPage), new MainPageArgs()
                {
                    ChannelId = channel.Id, FullFrame = true, ViewMode = mode
                });

                var applicationView = ApplicationView.GetForCurrentView();
                viewId = applicationView.Id;

                void OnConsolidated(ApplicationView sender, ApplicationViewConsolidatedEventArgs args)
                {
                    if (sender.Id == viewId && sender.Id != _mainWindowId)
                    {
                        if (args.IsAppInitiated)
                        {
                            return;
                        }

                        sender.Consolidated -= OnConsolidated;
                        _windowChannelDictionary.TryRemove(sender.Id, out _);
                    }
                }

                applicationView.Consolidated += OnConsolidated;
            });

            //var prefs = ViewModePreferences.CreateDefault(ApplicationViewMode.Default);
            await ApplicationViewSwitcher.TryShowAsViewModeAsync(viewId, mode);
        }
Beispiel #5
0
        private async Task ChangeViewModeAsync(ApplicationViewMode appViewMode)
        {
            var bmp = HeroImage.Source as BitmapImage;

            DefaultAspectRatio = CalculateAspectRatio(bmp.PixelWidth, bmp.PixelHeight);

            ViewModePreferences compactOptions = ViewModePreferences.CreateDefault(ApplicationViewMode.CompactOverlay);

            // Maximum size = 500 x 500
            // Minuimum size = 150 x 181
            // Sometimes not working
            // (when height > width => in portrait aspect ratio, videos have always landscape aspect ratio
            // => not a big problem)
            compactOptions.CustomSize = CalculateNewSize(SavedSize, DefaultAspectRatio);

            bool modeSwitched = await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(appViewMode, compactOptions);
        }
Beispiel #6
0
        // Displays a view in the specified view mode
        public async Task <ViewLifetimeControl> TryShowAsViewModeAsync(string windowTitle, Type pageType, ApplicationViewMode viewMode = ApplicationViewMode.Default)
        {
            ViewLifetimeControl viewControl = await CreateViewLifetimeControlAsync(windowTitle, pageType);

            SecondaryViews.Add(viewControl);
            viewControl.StartViewInUse();
            var viewShown = await ApplicationViewSwitcher.TryShowAsViewModeAsync(viewControl.Id, viewMode);

            viewControl.StopViewInUse();
            return(viewControl);
        }
 public void ShowViewMode(ApplicationViewMode mode)
 {
     WindowManager.ShowViewMode(mode);
 }
Beispiel #8
0
        public async Task <ViewLifetimeControl> OpenAsync(Func <ViewLifetimeControl, UIElement> content, object parameter, double width, double height, ApplicationViewMode viewMode)
        {
            if (_windows.TryGetValue(parameter, out IDispatcherContext value))
            {
                var newControl = await value.DispatchAsync(async() =>
                {
                    var control    = ViewLifetimeControl.GetForCurrentView();
                    var newAppView = ApplicationView.GetForCurrentView();

                    var preferences        = ViewModePreferences.CreateDefault(viewMode);
                    preferences.CustomSize = new Size(width, height);

                    await ApplicationViewSwitcher
                    .TryShowAsViewModeAsync(newAppView.Id, viewMode, preferences);

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
            else
            {
                var newView    = CoreApplication.CreateNewView();
                var dispatcher = new DispatcherContext(newView.Dispatcher);
                _windows[parameter] = dispatcher;

                var newControl = await dispatcher.DispatchAsync(async() =>
                {
                    var newWindow     = Window.Current;
                    newWindow.Closed += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                    };
                    newWindow.CoreWindow.Closed += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                    };

                    var newAppView           = ApplicationView.GetForCurrentView();
                    newAppView.Consolidated += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                        newWindow.Close();
                    };

                    if (ApiInformation.IsPropertyPresent("Windows.UI.ViewManagement.ApplicationView", "PersistedStateId"))
                    {
                        newAppView.PersistedStateId = "Calls";
                    }

                    var control       = ViewLifetimeControl.GetForCurrentView();
                    control.Released += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                        newWindow.Close();
                    };

                    newWindow.Content = content(control);
                    newWindow.Activate();

                    var preferences        = ViewModePreferences.CreateDefault(viewMode);
                    preferences.CustomSize = new Size(width, height);

                    await ApplicationViewSwitcher.TryShowAsViewModeAsync(newAppView.Id, viewMode, preferences);

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
        }
Beispiel #9
0
        public async Task <ViewLifetimeControl> TryShowAsViewModeAsync(string windowTitle, Type pageType, ApplicationViewMode viewMode = ApplicationViewMode.Default)
        {
            ViewLifetimeControl viewControl = await CreateViewLifetimeControlAsync(windowTitle, pageType);

            SecondaryViews.Add(viewControl);
            viewControl.StartViewInUse();

            ViewModePreferences compactOptions = ViewModePreferences.CreateDefault(viewMode);

            compactOptions.CustomSize = MediumSize;

            var viewShown = await ApplicationViewSwitcher.TryShowAsViewModeAsync(viewControl.Id, viewMode, compactOptions);

            viewControl.StopViewInUse();
            return(viewControl);
        }