Merged PR 241133: Add proper capabilities checking to SampleGallery.
Add proper capabilities checking to SampleGallery. - Filter sample list based on capability requirements of each sample. - Add virtual on SamplePage to allow samples to handle capability changes.
This commit is contained in:
Родитель
d8a8696c9d
Коммит
9020235680
|
@ -14,7 +14,6 @@
|
|||
|
||||
using SamplesCommon;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Numerics;
|
||||
using Windows.Foundation;
|
||||
using Windows.UI;
|
||||
|
@ -28,11 +27,26 @@ namespace CompositionSampleGallery
|
|||
public sealed partial class MainPage : Page
|
||||
{
|
||||
private static MainPage _instance;
|
||||
#if SDKVERSION_INSIDER
|
||||
private static CompositionCapabilities _capabilities;
|
||||
#endif
|
||||
private static bool _areEffectsSupported;
|
||||
private static bool _areEffectsFast;
|
||||
|
||||
public MainPage(Rect imageBounds)
|
||||
{
|
||||
_instance = this;
|
||||
|
||||
// Get hardware capabilities and register changed event listener
|
||||
#if SDKVERSION_INSIDER
|
||||
_capabilities = CompositionCapabilities.GetForCurrentView();
|
||||
_capabilities.Changed += HandleCapabilitiesChangedAsync;
|
||||
_areEffectsSupported = _capabilities.AreEffectsSupported();
|
||||
_areEffectsFast = _capabilities.AreEffectsFast();
|
||||
#else
|
||||
_areEffectsSupported = true;
|
||||
_areEffectsFast = true;
|
||||
#endif
|
||||
this.InitializeComponent();
|
||||
|
||||
// Initialize the surface loader
|
||||
|
@ -47,6 +61,58 @@ namespace CompositionSampleGallery
|
|||
get { return _instance; }
|
||||
}
|
||||
|
||||
public static bool AreEffectsSupported
|
||||
{
|
||||
get { return _areEffectsSupported; }
|
||||
}
|
||||
|
||||
public static bool AreEffectsFast
|
||||
{
|
||||
get { return _areEffectsFast; }
|
||||
}
|
||||
|
||||
#if SDKVERSION_INSIDER
|
||||
private async void HandleCapabilitiesChangedAsync(CompositionCapabilities sender, object args)
|
||||
{
|
||||
_areEffectsSupported = _capabilities.AreEffectsSupported();
|
||||
_areEffectsFast = _capabilities.AreEffectsFast();
|
||||
|
||||
if (MainFrame.Content is SampleHost host)
|
||||
{
|
||||
SamplePage page = (SamplePage)host.ContentFrame.Content;
|
||||
page.OnCapabiliesChanged(_areEffectsSupported, _areEffectsFast);
|
||||
}
|
||||
|
||||
MySampleListControl.RefreshSampleList();
|
||||
|
||||
|
||||
//
|
||||
// Let the user know that the display config has changed and some samples may or may
|
||||
// not be available
|
||||
//
|
||||
|
||||
if (!_areEffectsSupported || !_areEffectsFast)
|
||||
{
|
||||
string message;
|
||||
|
||||
if (!_areEffectsSupported)
|
||||
{
|
||||
message = "Your display configuration may have changed. Your current graphics hardware does not support effects. Some samples will not be available";
|
||||
}
|
||||
else
|
||||
{
|
||||
message = "Your display configuration may have changed. Your current graphics hardware does not support advanced effects. Some samples will not be available";
|
||||
}
|
||||
|
||||
var messageDialog = new MessageDialog(message);
|
||||
messageDialog.Commands.Add(new UICommand("Close"));
|
||||
|
||||
// Show the message dialog
|
||||
await messageDialog.ShowAsync();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private async void ShowCustomSplashScreen(Rect imageBounds)
|
||||
{
|
||||
Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
|
||||
|
|
|
@ -58,7 +58,6 @@ namespace CompositionSampleGallery
|
|||
|
||||
// Get hardware capabilities and register changed event listener
|
||||
_capabilities = CompositionCapabilities.GetForCurrentView();
|
||||
_capabilities.Changed += HandleCapabilitiesChanged;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -95,6 +94,7 @@ namespace CompositionSampleGallery
|
|||
_backgroundImageVisual = _compositor.CreateSpriteVisual();
|
||||
_imageContainer = _compositor.CreateContainerVisual();
|
||||
_imageSurfaceBrush = _compositor.CreateSurfaceBrush();
|
||||
_capabilities.Changed += HandleCapabilitiesChanged;
|
||||
|
||||
ElementCompositionPreview.SetElementChildVisual(ImageCanvas, _imageContainer);
|
||||
|
||||
|
@ -250,6 +250,8 @@ namespace CompositionSampleGallery
|
|||
/// </summary>
|
||||
private void Page_Unloaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_capabilities.Changed -= HandleCapabilitiesChanged;
|
||||
|
||||
if (_imageSurfaceBrush != null)
|
||||
{
|
||||
_imageLoader.Dispose();
|
||||
|
|
|
@ -39,13 +39,17 @@ namespace CompositionSampleGallery
|
|||
private Type _pageType;
|
||||
private SampleType _sampleType;
|
||||
private SampleCategory _sampleCategory;
|
||||
private bool _requiresFastEffects;
|
||||
private bool _requiresEffects;
|
||||
|
||||
public SampleDefinition(string name, Type pageType, SampleType sampleType, SampleCategory sampleArea)
|
||||
public SampleDefinition(string name, Type pageType, SampleType sampleType, SampleCategory sampleArea, bool requiresEffects, bool requiresFastEffects)
|
||||
{
|
||||
_name = name;
|
||||
_pageType = pageType;
|
||||
_sampleType = sampleType;
|
||||
_sampleCategory = sampleArea;
|
||||
_requiresEffects = requiresEffects;
|
||||
_requiresFastEffects = requiresFastEffects;
|
||||
}
|
||||
|
||||
public string Name { get { return _name; } }
|
||||
|
@ -66,6 +70,9 @@ namespace CompositionSampleGallery
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool RequiresEffects { get { return _requiresEffects; } }
|
||||
public bool RequiresFastEffects { get { return _requiresFastEffects; } }
|
||||
}
|
||||
|
||||
public class SampleDefinitions
|
||||
|
@ -73,49 +80,49 @@ namespace CompositionSampleGallery
|
|||
static SampleDefinition[] definitions =
|
||||
{
|
||||
#if SDKVERSION_INSIDER
|
||||
new SampleDefinition(BorderPlayground.StaticSampleName, typeof(BorderPlayground), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(CompCapabilities.StaticSampleName, typeof(CompCapabilities), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(TransparentWindow.StaticSampleName, typeof(TransparentWindow), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(BorderPlayground.StaticSampleName, typeof(BorderPlayground), SampleType.Reference, SampleCategory.Effects, false, true),
|
||||
new SampleDefinition(CompCapabilities.StaticSampleName, typeof(CompCapabilities), SampleType.Reference, SampleCategory.Effects, false, false),
|
||||
new SampleDefinition(TransparentWindow.StaticSampleName, typeof(TransparentWindow), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
#endif
|
||||
|
||||
#if SDKVERSION_14393
|
||||
new SampleDefinition(BackDropSample.StaticSampleName, typeof(BackDropSample), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(Curtain.StaticSampleName, typeof(Curtain), SampleType.Reference, SampleCategory.Interactions),
|
||||
new SampleDefinition(ForegroundFocusEffects.StaticSampleName, typeof(ForegroundFocusEffects), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(Gears.StaticSampleName, typeof(Gears), SampleType.EndToEnd, SampleCategory.ExpressionAnimations),
|
||||
new SampleDefinition(ImplicitAnimationTransformer.StaticSampleName, typeof(ImplicitAnimationTransformer), SampleType.Reference, SampleCategory.Animations),
|
||||
new SampleDefinition(NowPlaying.StaticSampleName, typeof(NowPlaying), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(PhotoViewer.StaticSampleName, typeof(PhotoViewer), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(PullToAnimate.StaticSampleName, typeof(PullToAnimate), SampleType.EndToEnd, SampleCategory.Interactions),
|
||||
new SampleDefinition(ShadowPlayground.StaticSampleName, typeof(ShadowPlayground), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(ShadowInterop.StaticSampleName, typeof(ShadowInterop), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(ShadowsAdvanced.StaticSampleName, typeof(ShadowsAdvanced), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(TextShimmer.StaticSampleName, typeof(TextShimmer), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(ThumbnailLighting.StaticSampleName, typeof(ThumbnailLighting), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(BlurPlayground.StaticSampleName, typeof(BlurPlayground), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(VideoPlayground.StaticSampleName, typeof(VideoPlayground), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(LayerDepth.StaticSampleName, typeof(LayerDepth), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(Photos.StaticSampleName, typeof(Photos), SampleType.EndToEnd, SampleCategory.Animations),
|
||||
new SampleDefinition(Interactions3D.StaticSampleName, typeof(Interactions3D), SampleType.EndToEnd, SampleCategory.Interactions),
|
||||
new SampleDefinition(TreeEffects.StaticSampleName, typeof(TreeEffects), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(LayerVisualAnd3DTransform.StaticSampleName, typeof(LayerVisualAnd3DTransform), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(NineGridResizing.StaticSampleName, typeof(NineGridResizing), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(LightSphere.StaticSampleName, typeof(LightSphere), SampleType.Reference, SampleCategory.Effects),
|
||||
new SampleDefinition(BackDropSample.StaticSampleName, typeof(BackDropSample), SampleType.Reference, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(Curtain.StaticSampleName, typeof(Curtain), SampleType.Reference, SampleCategory.Interactions, false, false),
|
||||
new SampleDefinition(ForegroundFocusEffects.StaticSampleName, typeof(ForegroundFocusEffects), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(Gears.StaticSampleName, typeof(Gears), SampleType.EndToEnd, SampleCategory.ExpressionAnimations, false, false),
|
||||
new SampleDefinition(ImplicitAnimationTransformer.StaticSampleName, typeof(ImplicitAnimationTransformer), SampleType.Reference, SampleCategory.Animations, false, false),
|
||||
new SampleDefinition(NowPlaying.StaticSampleName, typeof(NowPlaying), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(PhotoViewer.StaticSampleName, typeof(PhotoViewer), SampleType.EndToEnd, SampleCategory.Effects, true, false),
|
||||
new SampleDefinition(PullToAnimate.StaticSampleName, typeof(PullToAnimate), SampleType.EndToEnd, SampleCategory.Interactions, true, true),
|
||||
new SampleDefinition(ShadowPlayground.StaticSampleName, typeof(ShadowPlayground), SampleType.Reference, SampleCategory.Visuals, true, true),
|
||||
new SampleDefinition(ShadowInterop.StaticSampleName, typeof(ShadowInterop), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(ShadowsAdvanced.StaticSampleName, typeof(ShadowsAdvanced), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(TextShimmer.StaticSampleName, typeof(TextShimmer), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(ThumbnailLighting.StaticSampleName, typeof(ThumbnailLighting), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(BlurPlayground.StaticSampleName, typeof(BlurPlayground), SampleType.Reference, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(VideoPlayground.StaticSampleName, typeof(VideoPlayground), SampleType.Reference, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(LayerDepth.StaticSampleName, typeof(LayerDepth), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(Photos.StaticSampleName, typeof(Photos), SampleType.EndToEnd, SampleCategory.Animations, false, false),
|
||||
new SampleDefinition(Interactions3D.StaticSampleName, typeof(Interactions3D), SampleType.EndToEnd, SampleCategory.Interactions, false, false),
|
||||
new SampleDefinition(TreeEffects.StaticSampleName, typeof(TreeEffects), SampleType.Reference, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(LayerVisualAnd3DTransform.StaticSampleName, typeof(LayerVisualAnd3DTransform), SampleType.EndToEnd, SampleCategory.Effects, true, true),
|
||||
new SampleDefinition(NineGridResizing.StaticSampleName, typeof(NineGridResizing), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(LightSphere.StaticSampleName, typeof(LightSphere), SampleType.Reference, SampleCategory.Effects, true, true),
|
||||
#endif
|
||||
|
||||
#if SDKVERSION_10586
|
||||
new SampleDefinition(BasicXamlInterop.StaticSampleName, typeof(BasicXamlInterop), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(ParallaxingListItems.StaticSampleName, typeof(ParallaxingListItems), SampleType.EndToEnd, SampleCategory.ExpressionAnimations),
|
||||
new SampleDefinition(Perspective.StaticSampleName, typeof(Perspective), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(PointerEnterEffects.StaticSampleName, typeof(PointerEnterEffects), SampleType.EndToEnd, SampleCategory.Effects),
|
||||
new SampleDefinition(PropertySets.StaticSampleName, typeof(PropertySets), SampleType.Reference, SampleCategory.ExpressionAnimations),
|
||||
new SampleDefinition(ColorBloomTransition.StaticSampleName, typeof(ColorBloomTransition), SampleType.EndToEnd, SampleCategory.Transitions),
|
||||
new SampleDefinition(ColorSlideTransition.StaticSampleName, typeof(ColorSlideTransition), SampleType.EndToEnd, SampleCategory.Transitions),
|
||||
new SampleDefinition(ZoomWithPerspective.StaticSampleName, typeof(ZoomWithPerspective), SampleType.EndToEnd, SampleCategory.Visuals),
|
||||
new SampleDefinition(FlipToReveal.StaticSampleName, typeof(FlipToReveal), SampleType.EndToEnd, SampleCategory.Transitions),
|
||||
new SampleDefinition(Z_OrderScrolling.StaticSampleName, typeof(Z_OrderScrolling), SampleType.EndToEnd, SampleCategory.ExpressionAnimations),
|
||||
new SampleDefinition(ConnectedAnimationShell.StaticSampleName, typeof(ConnectedAnimationShell), SampleType.EndToEnd, SampleCategory.Transitions),
|
||||
new SampleDefinition(BasicLayoutAndTransforms.StaticSampleName, typeof(BasicLayoutAndTransforms), SampleType.Reference, SampleCategory.Visuals),
|
||||
new SampleDefinition(BasicXamlInterop.StaticSampleName, typeof(BasicXamlInterop), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(ParallaxingListItems.StaticSampleName, typeof(ParallaxingListItems), SampleType.EndToEnd, SampleCategory.ExpressionAnimations, false, false),
|
||||
new SampleDefinition(Perspective.StaticSampleName, typeof(Perspective), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(PointerEnterEffects.StaticSampleName, typeof(PointerEnterEffects), SampleType.EndToEnd, SampleCategory.Effects, true, false),
|
||||
new SampleDefinition(PropertySets.StaticSampleName, typeof(PropertySets), SampleType.Reference, SampleCategory.ExpressionAnimations, false, false),
|
||||
new SampleDefinition(ColorBloomTransition.StaticSampleName, typeof(ColorBloomTransition), SampleType.EndToEnd, SampleCategory.Transitions, false, false),
|
||||
new SampleDefinition(ColorSlideTransition.StaticSampleName, typeof(ColorSlideTransition), SampleType.EndToEnd, SampleCategory.Transitions, false, false),
|
||||
new SampleDefinition(ZoomWithPerspective.StaticSampleName, typeof(ZoomWithPerspective), SampleType.EndToEnd, SampleCategory.Visuals, false, false),
|
||||
new SampleDefinition(FlipToReveal.StaticSampleName, typeof(FlipToReveal), SampleType.EndToEnd, SampleCategory.Transitions, false, false),
|
||||
new SampleDefinition(Z_OrderScrolling.StaticSampleName, typeof(Z_OrderScrolling), SampleType.EndToEnd, SampleCategory.ExpressionAnimations, false, false),
|
||||
new SampleDefinition(ConnectedAnimationShell.StaticSampleName, typeof(ConnectedAnimationShell), SampleType.EndToEnd, SampleCategory.Transitions, false, false),
|
||||
new SampleDefinition(BasicLayoutAndTransforms.StaticSampleName, typeof(BasicLayoutAndTransforms), SampleType.Reference, SampleCategory.Visuals, false, false),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
using System.Linq;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Data;
|
||||
|
||||
namespace CompositionSampleGallery
|
||||
{
|
||||
|
@ -24,12 +25,7 @@ namespace CompositionSampleGallery
|
|||
{
|
||||
this.InitializeComponent();
|
||||
|
||||
var result = from sampleDef in SampleDefinitions.Definitions
|
||||
orderby sampleDef.DisplayName
|
||||
group sampleDef by sampleDef.SampleCategory into sampleGroup
|
||||
orderby sampleGroup.Key
|
||||
select sampleGroup;
|
||||
SampleViewSource.Source = result;
|
||||
RefreshSampleList();
|
||||
}
|
||||
|
||||
private void SampleList_ItemClick(object sender, ItemClickEventArgs e)
|
||||
|
@ -39,5 +35,39 @@ namespace CompositionSampleGallery
|
|||
|
||||
SamplesSplitView.IsPaneOpen = false;
|
||||
}
|
||||
|
||||
public void RefreshSampleList()
|
||||
{
|
||||
IOrderedEnumerable<IGrouping<SampleCategory, SampleDefinition>> result;
|
||||
|
||||
if (MainPage.AreEffectsFast)
|
||||
{
|
||||
result = from sampleDef in SampleDefinitions.Definitions
|
||||
orderby sampleDef.DisplayName
|
||||
group sampleDef by sampleDef.SampleCategory into sampleGroup
|
||||
orderby sampleGroup.Key
|
||||
select sampleGroup;
|
||||
}
|
||||
else if (MainPage.AreEffectsSupported)
|
||||
{
|
||||
result = from sampleDef in SampleDefinitions.Definitions
|
||||
where !sampleDef.RequiresFastEffects
|
||||
orderby sampleDef.DisplayName
|
||||
group sampleDef by sampleDef.SampleCategory into sampleGroup
|
||||
orderby sampleGroup.Key
|
||||
select sampleGroup;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = from sampleDef in SampleDefinitions.Definitions
|
||||
where !sampleDef.RequiresEffects
|
||||
orderby sampleDef.DisplayName
|
||||
group sampleDef by sampleDef.SampleCategory into sampleGroup
|
||||
orderby sampleGroup.Key
|
||||
select sampleGroup;
|
||||
}
|
||||
|
||||
SampleViewSource.Source = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,5 +37,10 @@ namespace CompositionSampleGallery
|
|||
host.SampleCode.NavigateUri = new Uri(SampleCodeUri);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void OnCapabiliesChanged(bool areEffectSupported, bool areEffectsFast)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче