diff options
author | Robin Watts <robin.watts@artifex.com> | 2013-04-04 16:41:55 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-05-16 19:25:40 +0100 |
commit | cb6fcf0d874a8e095a8781751a78cdfb35c10ab3 (patch) | |
tree | 0be31731b0285525e1bcbb7efcf78c8ab57deef6 /winrt/winapp | |
parent | 0de3169c52435458583955ac03fc57516d5d372e (diff) | |
download | mupdf-cb6fcf0d874a8e095a8781751a78cdfb35c10ab3.tar.xz |
Rename winRT to winrt
Diffstat (limited to 'winrt/winapp')
-rw-r--r-- | winrt/winapp/App.xaml | 20 | ||||
-rw-r--r-- | winrt/winapp/App.xaml.cpp | 109 | ||||
-rw-r--r-- | winrt/winapp/App.xaml.h | 25 | ||||
-rw-r--r-- | winrt/winapp/Assets/mupdf_logo.png | bin | 0 -> 12690 bytes | |||
-rw-r--r-- | winrt/winapp/Assets/mupdf_smallogo.png | bin | 0 -> 4108 bytes | |||
-rw-r--r-- | winrt/winapp/Assets/mupdf_splash.png | bin | 0 -> 23297 bytes | |||
-rw-r--r-- | winrt/winapp/Assets/mupdf_storelogo.png | bin | 0 -> 5382 bytes | |||
-rw-r--r-- | winrt/winapp/Common/StandardStyles.xaml | 1855 | ||||
-rw-r--r-- | winrt/winapp/MainPage.xaml | 111 | ||||
-rw-r--r-- | winrt/winapp/MainPage.xaml.cpp | 1995 | ||||
-rw-r--r-- | winrt/winapp/MainPage.xaml.h | 192 | ||||
-rw-r--r-- | winrt/winapp/Package.appxmanifest | 54 | ||||
-rw-r--r-- | winrt/winapp/pch.cpp | 6 | ||||
-rw-r--r-- | winrt/winapp/pch.h | 10 | ||||
-rw-r--r-- | winrt/winapp/winapp.vcxproj | 327 | ||||
-rw-r--r-- | winrt/winapp/winapp.vcxproj.filters | 52 |
16 files changed, 4756 insertions, 0 deletions
diff --git a/winrt/winapp/App.xaml b/winrt/winapp/App.xaml new file mode 100644 index 00000000..59d289e0 --- /dev/null +++ b/winrt/winapp/App.xaml @@ -0,0 +1,20 @@ +<Application + x:Class="winapp.App" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:winapp"> + + <Application.Resources> + <ResourceDictionary> + <ResourceDictionary.MergedDictionaries> + + <!-- + Styles that define common aspects of the platform look and feel + Required by Visual Studio project and item templates + --> + <ResourceDictionary Source="Common/StandardStyles.xaml"/> + </ResourceDictionary.MergedDictionaries> + + </ResourceDictionary> + </Application.Resources> +</Application> diff --git a/winrt/winapp/App.xaml.cpp b/winrt/winapp/App.xaml.cpp new file mode 100644 index 00000000..d51b19bb --- /dev/null +++ b/winrt/winapp/App.xaml.cpp @@ -0,0 +1,109 @@ +// +// App.xaml.cpp +// Implementation of the App class. +// + +#include "pch.h" +#include "MainPage.xaml.h" + + +using namespace winapp; + +using namespace Platform; +using namespace Windows::ApplicationModel; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Interop; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; + + +// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227 + +/// <summary> +/// Initializes the singleton application object. This is the first line of authored code +/// executed, and as such is the logical equivalent of main() or WinMain(). +/// </summary> +App::App() +{ + InitializeComponent(); + Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending); +} + +/// <summary> +/// Invoked when the application is launched normally by the end user. Other entry points +/// will be used when the application is launched to open a specific file, to display +/// search results, and so forth. +/// </summary> +/// <param name="args">Details about the launch request and process.</param> +void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args) +{ + auto rootFrame = dynamic_cast<Frame^>(Window::Current->Content); + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == nullptr) + { + // Create a Frame to act as the navigation context and associate it with + // a SuspensionManager key + rootFrame = ref new Frame(); + + if (args->PreviousExecutionState == ApplicationExecutionState::Terminated) + { + // TODO: Restore the saved session state only when appropriate, scheduling the + // final launch steps after the restore is complete + + } + + if (rootFrame->Content == nullptr) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + if (!rootFrame->Navigate(TypeName(MainPage::typeid), args->Arguments)) + { + throw ref new FailureException("Failed to create initial page"); + } + } + // Place the frame in the current Window + Window::Current->Content = rootFrame; + // Ensure the current window is active + Window::Current->Activate(); + } + else + { + if (rootFrame->Content == nullptr) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + if (!rootFrame->Navigate(TypeName(MainPage::typeid), args->Arguments)) + { + throw ref new FailureException("Failed to create initial page"); + } + } + // Ensure the current window is active + Window::Current->Activate(); + } +} + +/// <summary> +/// Invoked when application execution is being suspended. Application state is saved +/// without knowing whether the application will be terminated or resumed with the contents +/// of memory still intact. +/// </summary> +/// <param name="sender">The source of the suspend request.</param> +/// <param name="e">Details about the suspend request.</param> +void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e) +{ + (void) sender; // Unused parameter + (void) e; // Unused parameter + + //TODO: Save application state and stop any background activity +} diff --git a/winrt/winapp/App.xaml.h b/winrt/winapp/App.xaml.h new file mode 100644 index 00000000..760d4eb9 --- /dev/null +++ b/winrt/winapp/App.xaml.h @@ -0,0 +1,25 @@ +// +// App.xaml.h +// Declaration of the App class. +// + +#pragma once + +#include "App.g.h" + + +namespace winapp +{ + /// <summary> + /// Provides application-specific behavior to supplement the default Application class. + /// </summary> + ref class App sealed + { + public: + App(); + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args) override; + + private: + void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e); + }; +} diff --git a/winrt/winapp/Assets/mupdf_logo.png b/winrt/winapp/Assets/mupdf_logo.png Binary files differnew file mode 100644 index 00000000..ba6b005d --- /dev/null +++ b/winrt/winapp/Assets/mupdf_logo.png diff --git a/winrt/winapp/Assets/mupdf_smallogo.png b/winrt/winapp/Assets/mupdf_smallogo.png Binary files differnew file mode 100644 index 00000000..15997f5c --- /dev/null +++ b/winrt/winapp/Assets/mupdf_smallogo.png diff --git a/winrt/winapp/Assets/mupdf_splash.png b/winrt/winapp/Assets/mupdf_splash.png Binary files differnew file mode 100644 index 00000000..5f011d17 --- /dev/null +++ b/winrt/winapp/Assets/mupdf_splash.png diff --git a/winrt/winapp/Assets/mupdf_storelogo.png b/winrt/winapp/Assets/mupdf_storelogo.png Binary files differnew file mode 100644 index 00000000..1b6473d4 --- /dev/null +++ b/winrt/winapp/Assets/mupdf_storelogo.png diff --git a/winrt/winapp/Common/StandardStyles.xaml b/winrt/winapp/Common/StandardStyles.xaml new file mode 100644 index 00000000..cae5dc9e --- /dev/null +++ b/winrt/winapp/Common/StandardStyles.xaml @@ -0,0 +1,1855 @@ +<!-- + This file contains XAML styles that simplify application development. + + These are not merely convenient, but are required by most Visual Studio project and item templates. + Removing, renaming, or otherwise modifying the content of these files may result in a project that + does not build, or that will not build once additional pages are added. If variations on these + styles are desired it is recommended that you copy the content under a new name and modify your + private copy. +--> + +<ResourceDictionary + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + + <!-- Non-brush values that vary across themes --> + + <ResourceDictionary.ThemeDictionaries> + <ResourceDictionary x:Key="Default"> + <x:String x:Key="BackButtonGlyph"></x:String> + <x:String x:Key="BackButtonSnappedGlyph"></x:String> + </ResourceDictionary> + + <ResourceDictionary x:Key="HighContrast"> + <x:String x:Key="BackButtonGlyph"></x:String> + <x:String x:Key="BackButtonSnappedGlyph"></x:String> + </ResourceDictionary> + </ResourceDictionary.ThemeDictionaries> + + <x:String x:Key="ChevronGlyph"></x:String> + + <!-- RichTextBlock styles --> + + <Style x:Key="BasicRichTextStyle" TargetType="RichTextBlock"> + <Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrush}"/> + <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/> + <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> + <Setter Property="TextTrimming" Value="WordEllipsis"/> + <Setter Property="TextWrapping" Value="Wrap"/> + <Setter Property="Typography.StylisticSet20" Value="True"/> + <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> + <Setter Property="Typography.CaseSensitiveForms" Value="True"/> + </Style> + + <Style x:Key="BaselineRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BasicRichTextStyle}"> + <Setter Property="LineHeight" Value="20"/> + <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> + <!-- Properly align text along its baseline --> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="-1" Y="4"/> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="ItemRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BaselineRichTextStyle}"/> + + <Style x:Key="BodyRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BaselineRichTextStyle}"> + <Setter Property="FontWeight" Value="SemiLight"/> + </Style> + + <!-- TextBlock styles --> + + <Style x:Key="BasicTextStyle" TargetType="TextBlock"> + <Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrush}"/> + <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/> + <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> + <Setter Property="TextTrimming" Value="WordEllipsis"/> + <Setter Property="TextWrapping" Value="Wrap"/> + <Setter Property="Typography.StylisticSet20" Value="True"/> + <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> + <Setter Property="Typography.CaseSensitiveForms" Value="True"/> + </Style> + + <Style x:Key="BaselineTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BasicTextStyle}"> + <Setter Property="LineHeight" Value="20"/> + <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> + <!-- Properly align text along its baseline --> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="-1" Y="4"/> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="HeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontSize" Value="56"/> + <Setter Property="FontWeight" Value="Light"/> + <Setter Property="LineHeight" Value="40"/> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="-2" Y="8"/> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="SubheaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontSize" Value="26.667"/> + <Setter Property="FontWeight" Value="Light"/> + <Setter Property="LineHeight" Value="30"/> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="-1" Y="6"/> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="TitleTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontWeight" Value="SemiBold"/> + </Style> + + <Style x:Key="SubtitleTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontWeight" Value="Normal"/> + </Style> + + <Style x:Key="ItemTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"/> + + <Style x:Key="BodyTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontWeight" Value="SemiLight"/> + </Style> + + <Style x:Key="CaptionTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> + <Setter Property="FontSize" Value="12"/> + <Setter Property="Foreground" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> + </Style> + + <Style x:Key="GroupHeaderTextStyle" TargetType="TextBlock"> + <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> + <Setter Property="TextTrimming" Value="WordEllipsis"/> + <Setter Property="TextWrapping" Value="NoWrap"/> + <Setter Property="Typography.StylisticSet20" Value="True"/> + <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> + <Setter Property="Typography.CaseSensitiveForms" Value="True"/> + <Setter Property="FontSize" Value="26.667"/> + <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> + <Setter Property="FontWeight" Value="Light"/> + <Setter Property="LineHeight" Value="30"/> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="-1" Y="6"/> + </Setter.Value> + </Setter> + </Style> + + <!-- Button styles --> + + <!-- + TextButtonStyle is used to style a Button using subheader-styled text with no other adornment. There + are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle) + which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering + commands. + --> + <Style x:Key="TextButtonStyle" TargetType="ButtonBase"> + <Setter Property="MinWidth" Value="0"/> + <Setter Property="MinHeight" Value="0"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ButtonBase"> + <Grid Background="Transparent"> + <ContentPresenter x:Name="Text" Content="{TemplateBinding Content}" /> + <Rectangle + x:Name="FocusVisualWhite" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="1.5"/> + <Rectangle + x:Name="FocusVisualBlack" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="0.5"/> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Pressed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="FocusStates"> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> + <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Unfocused"/> + </VisualStateGroup> + <VisualStateGroup x:Name="CheckStates"> + <VisualState x:Name="Checked"/> + <VisualState x:Name="Unchecked"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Indeterminate"/> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="TextPrimaryButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource TextButtonStyle}"> + <Setter Property="Foreground" Value="{StaticResource ApplicationHeaderForegroundThemeBrush}"/> + </Style> + + <Style x:Key="TextSecondaryButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource TextButtonStyle}"> + <Setter Property="Foreground" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> + </Style> + + <!-- + TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment. + This style is used in the SearchResultsPage to allow selection among filters. + --> + <Style x:Key="TextRadioButtonStyle" TargetType="RadioButton" BasedOn="{StaticResource TextButtonStyle}"> + <Setter Property="Margin" Value="0,0,30,0"/> + </Style> + + <!-- + AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar. Content will be centered + and should fit within the 40 pixel radius glyph provided. 16-point Segoe UI Symbol is used for content text + to simplify the use of glyphs from that font. AutomationProperties.Name is used for the text below the glyph. + --> + <Style x:Key="AppBarButtonStyle" TargetType="ButtonBase"> + <Setter Property="Foreground" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> + <Setter Property="VerticalAlignment" Value="Stretch"/> + <Setter Property="FontFamily" Value="Segoe UI Symbol"/> + <Setter Property="FontWeight" Value="Normal"/> + <Setter Property="FontSize" Value="20"/> + <Setter Property="AutomationProperties.ItemType" Value="App Bar Button"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ButtonBase"> + <Grid x:Name="RootGrid" Width="100" Background="Transparent"> + <StackPanel VerticalAlignment="Top" Margin="0,12,0,11"> + <Grid Width="40" Height="40" Margin="0,0,0,5" HorizontalAlignment="Center"> + <TextBlock x:Name="BackgroundGlyph" Text="" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemBackgroundThemeBrush}"/> + <TextBlock x:Name="OutlineGlyph" Text="" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0"/> + <ContentPresenter x:Name="Content" HorizontalAlignment="Center" Margin="-1,-1,0,0" VerticalAlignment="Center"/> + </Grid> + <TextBlock + x:Name="TextLabel" + Text="{TemplateBinding AutomationProperties.Name}" + Foreground="{StaticResource AppBarItemForegroundThemeBrush}" + Margin="0,0,2,0" + FontSize="12" + TextAlignment="Center" + Width="88" + MaxHeight="32" + TextTrimming="WordEllipsis" + Style="{StaticResource BasicTextStyle}"/> + </StackPanel> + <Rectangle + x:Name="FocusVisualWhite" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="1.5"/> + <Rectangle + x:Name="FocusVisualBlack" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="0.5"/> + + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="ApplicationViewStates"> + <VisualState x:Name="FullScreenLandscape"/> + <VisualState x:Name="Filled"/> + <VisualState x:Name="FullScreenPortrait"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Visibility"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Width"> + <DiscreteObjectKeyFrame KeyTime="0" Value="60"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Snapped"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Visibility"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Width"> + <DiscreteObjectKeyFrame KeyTime="0" Value="60"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Pressed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="FocusStates"> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation + Storyboard.TargetName="FocusVisualWhite" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + <DoubleAnimation + Storyboard.TargetName="FocusVisualBlack" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Unfocused" /> + <VisualState x:Name="PointerFocused" /> + </VisualStateGroup> + <VisualStateGroup x:Name="CheckStates"> + <VisualState x:Name="Checked"> + <Storyboard> + <DoubleAnimation Duration="0" To="0" Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Opacity"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundCheckedGlyph" Storyboard.TargetProperty="Visibility"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Unchecked"/> + <VisualState x:Name="Indeterminate"/> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <!-- + Standard AppBarButton Styles for use with Button and ToggleButton + + An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font. + Uncomment any style you reference (as not all may be required). + --> + <Style x:Key="HelpAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="HelpAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Help"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SearchAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SearchAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Search"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OpenFileAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OpenFileAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Open File"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="NextAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="NextAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Next"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PreviousAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PreviousAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Previous"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="NoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="NoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="No"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SettingsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SettingsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Settings"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LinksAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LinksAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Links"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ContentsBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AllAppsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Contents"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ReflowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ReflowAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Reflow"/> + <Setter Property="Content" Value=""/> + </Style> + + + <!-- + + <Style x:Key="SkipBackAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SkipBackAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Skip Back"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SkipAheadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SkipAheadAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Skip Ahead"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PlayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PlayAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Play"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PauseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PauseAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Pause"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="EditAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="EditAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Edit"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SaveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SaveAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Save"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DeleteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DeleteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Delete"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DiscardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DiscardAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Discard"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RemoveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RemoveAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Remove"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AddAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AddAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Add"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="YesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="YesAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Yes"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MoreAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MoreAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="More"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RedoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RedoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Redo"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UndoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UndoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Undo"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="HomeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="HomeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Home"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OutAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Out"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FavoriteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FavoriteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Favorite"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PhotoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PhotoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Photo"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SettingsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SettingsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Settings"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="VideoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="VideoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Video"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RefreshAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RefreshAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Refresh"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DownloadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DownloadAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Download"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MailAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MailAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Mail"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UploadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UploadAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Upload"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="EmojiAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="EmojiAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Emoji"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TwoPageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TwoPageAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Two Page"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LeaveChatAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LeaveChatAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Upload"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MailForwardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MailForwardAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Forward Mail"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ClockAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ClockAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Clock"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SendAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SendAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Send"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CropAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CropAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Crop"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RotateCameraAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RotateCameraAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Rotate Camera"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PeopleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PeopleAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="People"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ClosePaneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ClosePaneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Close Pane"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OpenPaneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OpenPaneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Open Pane"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="WorldAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="WorldAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="World"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FlagAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FlagAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Flag"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PreviewLinkAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PreviewLinkAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Preview Link"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="GlobeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="GlobeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Globe"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TrimAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TrimAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Trim"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AttachCameraAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AttachCameraAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Attach Camera"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ZoomInAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ZoomInAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Zoom In"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BookmarksAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="BookmarksAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Bookmarks"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DocumentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DocumentAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Document"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ProtectedDocumentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ProtectedDocumentAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Protected Document"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PageAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Page"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BulletsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="BulletsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Bullets"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CommentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CommentAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Comment"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="Mail2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="Mail2AppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Mail2"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ContactInfoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ContactInfoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Contact Info"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="HangUpAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="HangUpAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Hang Up"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ViewAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ViewAllAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="View All"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MapPinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MapPinAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Map Pin"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PhoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PhoneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Phone"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="VideoChatAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="VideoChatAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Video Chat"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SwitchAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SwitchAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Switch"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ContactAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ContactAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Contact"/> + <Setter Property="Content" Value=""/> + </Style> + + --> + + <!-- + + <Style x:Key="RenameAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RenameAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Rename"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PinAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Pin"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MusicInfoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MusicInfoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Music Info"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="GoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="GoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Go"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="KeyboardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="KeyboardAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Keyboard"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DockLeftAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DockLeftAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Dock Left"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DockRightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DockRightAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Dock Right"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DockBottomAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DockBottomAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Dock Bottom"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RemoteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RemoteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Remote"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SyncAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SyncAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Sync"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RotateAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RotateAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Rotate"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ShuffleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ShuffleAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Shuffle"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ListAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ListAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="List"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ShopAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ShopAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Shop"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SelectAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SelectAllAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Select All"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OrientationAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OrientationAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Orientation"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ImportAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ImportAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Import"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ImportAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ImportAllAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Import All"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BrowsePhotosAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="BrowsePhotosAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Browse Photos"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="WebcamAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="WebcamAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Webcam"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="PicturesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PicturesAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Pictures"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SaveLocalAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SaveLocalAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Save Local"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CaptionAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CaptionAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Caption"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="StopAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="StopAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Stop"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ShowResultsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ShowResultsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Show Results"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="VolumeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="VolumeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Volume"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RepairAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RepairAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Repair"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MessageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MessageAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Message"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="Page2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="Page2AppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Page2"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CalendarDayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CalendarDayAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Day"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CalendarWeekAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CalendarWeekAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Week"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CalendarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CalendarAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Calendar"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CharactersAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CharactersAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Characters"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MailReplyAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MailReplyAllAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Reply All"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ReadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ReadAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Read"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LinkAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LinkAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Link"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AccountsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AccountsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Accounts"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ShowBccAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ShowBccAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Show Bcc"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="HideBccAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="HideBccAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Hide Bcc"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="CutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CutAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Cut"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AttachAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AttachAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Attach"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PasteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PasteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Paste"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FilterAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FilterAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Filter"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CopyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CopyAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Copy"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="Emoji2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="Emoji2AppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Emoji2"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ImportantAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ImportantAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Important"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MailReplyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MailReplyAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Reply"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SlideShowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SlideShowAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Slideshow"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SortAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SortAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Sort"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ManageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ManageAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Manage"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AllAppsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AllAppsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="All Apps"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DisconnectDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DisconnectDriveAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Disconnect Drive"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MapDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MapDriveAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Map Drive"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="NewWindowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="NewWindowAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="New Window"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OpenWithAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OpenWithAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Open With"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ContactPresenceAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ContactPresenceAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Presence"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PriorityAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PriorityAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Priority"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UploadSkyDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UploadSkyDriveAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Skydrive"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="GoToTodayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="GoToTodayAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Today"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FontAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FontAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Font"/> + <Setter Property="Content" Value=""/> + </Style> + + --> + + <!-- + + <Style x:Key="FontColorAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FontColorAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Font Color"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="Contact2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="Contact2AppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Contact"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FolderppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FolderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Folder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AudioAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AudioAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Audio"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PlaceholderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PlaceholderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Placeholder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ViewAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ViewAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="View"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SetLockScreenAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SetLockscreenAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Set Lockscreen"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SetTitleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SetTitleAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Set Title"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CcAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CcAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Cc"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="StopSlideShowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="StopSlideshowAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Stop Slideshow"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PermissionsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PermissionsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Permisions"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="HighlightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="HighlightAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Highlight"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DisableUpdatesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DisableUpdatesAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Disable Updates"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UnfavoriteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UnfavoriteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Unfavorite"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UnPinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UnPinAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Unpin"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OpenLocalAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OpenLocalAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Open Loal"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MuteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MuteAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Mute"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ItalicAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ItalicAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Italic"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="UnderlineAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UnderlineAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Underline"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BoldAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="BoldAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Bold"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MoveToFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MoveToFolderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Move to Folder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LikeDislikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LikeDislikeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Like/Dislike"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DislikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DislikeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Dislike"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LikeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Like"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AlignRightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AlignRightAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Align Right"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AlignCenterAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AlignCenterAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Align Center"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AlignLeftAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AlignLeftAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Align Left"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ZoomAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ZoomAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Zoom"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ZoomOutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ZoomOutAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Zoom Out"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OpenFileAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OpenFileAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Open File"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OtherUserAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OtherUserAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Other User"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AdminAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AdminAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Admin"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="StreetAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="StreetAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Street"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MapAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MapAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Map"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ClearSelectionAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ClearSelectionAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Clear Selection"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FontDecreaseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FontDecreaseAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Decrease Font"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FontIncreaseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FontIncreaseAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Increase Font"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FontSizeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FontSizeAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Font Size"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="CellphoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CellphoneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Cellphone"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ReshareAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ReshareAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Reshare"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TagAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TagAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Tag"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RepeatOneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RepeatOneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Repeat Once"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="RepeatAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="RepeatAllAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Repeat All"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OutlineStarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OutlineStarAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Outline Star"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SolidStarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SolidStarAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Solid Star"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CalculatorAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CalculatorAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Calculator"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="DirectionsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="DirectionsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Directions"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TargetAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TargetAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Target"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="LibraryAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="LibraryAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Library"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PhonebookAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PhonebookAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Phonebook"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MemoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MemoAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Memo"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="MicrophoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="MicrophoneAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Microphone"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="PostUpdateAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="PostUpdateAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Post Update"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BackToWindowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="BackToWindowAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Back to Window"/> + <Setter Property="Content" Value=""/> + </Style> + --> + + <!-- + <Style x:Key="FullScreenAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FullScreenAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Full Screen"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="NewFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="NewFolderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="New Folder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="CalendarReplyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="CalendarReplyAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Calendar Reply"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="UnsyncFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="UnsyncFolderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Unsync Folder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ReportHackedAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ReportHackedAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Report Hacked"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SyncFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SyncFolderAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Sync Folder"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="BlockContactAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="Block ContactAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="BlockContact"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="SwitchAppsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="SwitchAppsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Switch Apps"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="AddFriendAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="AddFriendAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Add Friend"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TouchPointerAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TouchPointerAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Touch Pointer"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="GoToStartAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="GoToStartAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Go to Start"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ZeroBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ZeroBarsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Zero Bars"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="OneBarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="OneBarAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="One Bar"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="TwoBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="TwoBarsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Two Bars"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="ThreeBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="ThreeBarsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Three Bars"/> + <Setter Property="Content" Value=""/> + </Style> + <Style x:Key="FourBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> + <Setter Property="AutomationProperties.AutomationId" Value="FourBarsAppBarButton"/> + <Setter Property="AutomationProperties.Name" Value="Four Bars"/> + <Setter Property="Content" Value=""/> + </Style> + + --> + + <!-- Title area styles --> + + <Style x:Key="PageHeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource HeaderTextStyle}"> + <Setter Property="TextWrapping" Value="NoWrap"/> + <Setter Property="VerticalAlignment" Value="Bottom"/> + <Setter Property="Margin" Value="0,0,30,40"/> + </Style> + + <Style x:Key="PageSubheaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource SubheaderTextStyle}"> + <Setter Property="TextWrapping" Value="NoWrap"/> + <Setter Property="VerticalAlignment" Value="Bottom"/> + <Setter Property="Margin" Value="0,0,0,40"/> + </Style> + + <Style x:Key="SnappedPageHeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource PageSubheaderTextStyle}"> + <Setter Property="Margin" Value="0,0,18,40"/> + </Style> + + <!-- + BackButtonStyle is used to style a Button for use in the title area of a page. Margins appropriate for + the conventional page layout are included as part of the style. + --> + <Style x:Key="BackButtonStyle" TargetType="Button"> + <Setter Property="MinWidth" Value="0"/> + <Setter Property="Width" Value="48"/> + <Setter Property="Height" Value="48"/> + <Setter Property="Margin" Value="36,0,36,36"/> + <Setter Property="VerticalAlignment" Value="Bottom"/> + <Setter Property="FontFamily" Value="Segoe UI Symbol"/> + <Setter Property="FontWeight" Value="Normal"/> + <Setter Property="FontSize" Value="56"/> + <Setter Property="AutomationProperties.AutomationId" Value="BackButton"/> + <Setter Property="AutomationProperties.Name" Value="Back"/> + <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <Grid x:Name="RootGrid"> + <Grid Margin="-1,-16,0,0"> + <TextBlock x:Name="BackgroundGlyph" Text="" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/> + <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/> + <TextBlock x:Name="ArrowGlyph" Text="" Foreground="{StaticResource BackButtonPressedForegroundThemeBrush}" Opacity="0"/> + </Grid> + <Rectangle + x:Name="FocusVisualWhite" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="1.5"/> + <Rectangle + x:Name="FocusVisualBlack" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="0.5"/> + + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="PointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Pressed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <DoubleAnimation + Storyboard.TargetName="ArrowGlyph" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + <DoubleAnimation + Storyboard.TargetName="NormalGlyph" + Storyboard.TargetProperty="Opacity" + To="0" + Duration="0"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Visibility"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="FocusStates"> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation + Storyboard.TargetName="FocusVisualWhite" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + <DoubleAnimation + Storyboard.TargetName="FocusVisualBlack" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Unfocused" /> + <VisualState x:Name="PointerFocused" /> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <!-- + PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page. Margins appropriate + for the conventional page layout are included as part of the style. + --> + <Style x:Key="PortraitBackButtonStyle" TargetType="Button" BasedOn="{StaticResource BackButtonStyle}"> + <Setter Property="Margin" Value="26,0,26,36"/> + </Style> + + <!-- + SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page. Margins appropriate + for the conventional page layout are included as part of the style. + + The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same + glyph but are actually distinct. + --> + <Style x:Key="SnappedBackButtonStyle" TargetType="Button"> + <Setter Property="MinWidth" Value="0"/> + <Setter Property="Margin" Value="20,0,0,0"/> + <Setter Property="VerticalAlignment" Value="Bottom"/> + <Setter Property="FontFamily" Value="Segoe UI Symbol"/> + <Setter Property="FontWeight" Value="Normal"/> + <Setter Property="FontSize" Value="26.66667"/> + <Setter Property="AutomationProperties.AutomationId" Value="BackButton"/> + <Setter Property="AutomationProperties.Name" Value="Back"/> + <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <Grid x:Name="RootGrid" Width="36" Height="36" Margin="-3,0,7,33"> + <Grid Margin="-1,-1,0,0"> + <TextBlock x:Name="BackgroundGlyph" Text="" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/> + <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonSnappedGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/> + <TextBlock x:Name="ArrowGlyph" Text="" Foreground="{StaticResource BackButtonPressedForegroundThemeBrush}" Opacity="0"/> + </Grid> + <Rectangle + x:Name="FocusVisualWhite" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="1.5"/> + <Rectangle + x:Name="FocusVisualBlack" + IsHitTestVisible="False" + Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" + StrokeEndLineCap="Square" + StrokeDashArray="1,1" + Opacity="0" + StrokeDashOffset="0.5"/> + + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="PointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Pressed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <DoubleAnimation + Storyboard.TargetName="ArrowGlyph" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + <DoubleAnimation + Storyboard.TargetName="NormalGlyph" + Storyboard.TargetProperty="Opacity" + To="0" + Duration="0"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Visibility"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="FocusStates"> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation + Storyboard.TargetName="FocusVisualWhite" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + <DoubleAnimation + Storyboard.TargetName="FocusVisualBlack" + Storyboard.TargetProperty="Opacity" + To="1" + Duration="0"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Unfocused" /> + <VisualState x:Name="PointerFocused" /> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <!-- Item templates --> + + <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage --> + <DataTemplate x:Key="Standard250x250ItemTemplate"> + <Grid HorizontalAlignment="Left" Width="250" Height="250"> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> + <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> + </Border> + <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> + <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/> + <TextBlock Text="{Binding Subtitle}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage --> + <DataTemplate x:Key="Standard500x130ItemTemplate"> + <Grid Height="110" Width="480" Margin="10"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110"> + <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> + </Border> + <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0"> + <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- List-appropriate 130 pixel high item template as seen in the SplitPage --> + <DataTemplate x:Key="Standard130ItemTemplate"> + <Grid Height="110" Margin="6"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110"> + <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> + </Border> + <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0"> + <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- + List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and + the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage + --> + <DataTemplate x:Key="Standard80ItemTemplate"> + <Grid Margin="6"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60"> + <Image Source="{Binding Image}" Stretch="UniformToFill"/> + </Border> + <StackPanel Grid.Column="1" Margin="10,0,0,0"> + <TextBlock Text="{Binding Title}" Style="{StaticResource ItemTextStyle}" MaxHeight="40"/> + <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage --> + <DataTemplate x:Key="StandardSmallIcon300x70ItemTemplate"> + <Grid Width="294" Margin="6"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,0,0,10" Width="40" Height="40"> + <Image Source="{Binding Image}" Stretch="UniformToFill"/> + </Border> + <StackPanel Grid.Column="1" Margin="10,-10,0,0"> + <TextBlock Text="{Binding Title}" Style="{StaticResource BodyTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Subtitle}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped --> + <DataTemplate x:Key="StandardSmallIcon70ItemTemplate"> + <Grid Margin="6"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,0,0,10" Width="40" Height="40"> + <Image Source="{Binding Image}" Stretch="UniformToFill"/> + </Border> + <StackPanel Grid.Column="1" Margin="10,-10,0,0"> + <TextBlock Text="{Binding Title}" Style="{StaticResource BodyTextStyle}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Subtitle}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> + <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> + </StackPanel> + </Grid> + </DataTemplate> + + <!-- + 190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage + Includes an elaborate tooltip to display title and description text + --> + <DataTemplate x:Key="StandardFileWithTooltip190x130ItemTemplate"> + <Grid> + <Grid Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> + <Image + Source="{Binding Image}" + Width="190" + Height="130" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Stretch="Uniform"/> + </Grid> + <ToolTipService.Placement>Mouse</ToolTipService.Placement> + <ToolTipService.ToolTip> + <ToolTip> + <ToolTip.Style> + <Style TargetType="ToolTip"> + <Setter Property="BorderBrush" Value="{StaticResource ToolTipBackgroundThemeBrush}" /> + <Setter Property="Padding" Value="0" /> + </Style> + </ToolTip.Style> + + <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + + <Grid Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="20"> + <Image + Source="{Binding Image}" + Width="160" + Height="160" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Stretch="Uniform"/> + </Grid> + <StackPanel Width="200" Grid.Column="1" Margin="0,20,20,20"> + <TextBlock Text="{Binding Title}" TextWrapping="NoWrap" Style="{StaticResource BodyTextStyle}"/> + <TextBlock Text="{Binding Description}" MaxHeight="140" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" Style="{StaticResource BodyTextStyle}"/> + </StackPanel> + </Grid> + </ToolTip> + </ToolTipService.ToolTip> + </Grid> + </DataTemplate> + + <!-- ScrollViewer styles --> + + <Style x:Key="HorizontalScrollViewerStyle" TargetType="ScrollViewer"> + <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/> + <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled" /> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" /> + <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> + </Style> + + <Style x:Key="VerticalScrollViewerStyle" TargetType="ScrollViewer"> + <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> + <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" /> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled" /> + <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> + </Style> + + <!-- Page layout roots typically use entrance animations and a theme-appropriate background color --> + + <Style x:Key="LayoutRootStyle" TargetType="Panel"> + <Setter Property="Background" Value="{StaticResource ApplicationPageBackgroundThemeBrush}"/> + <Setter Property="ChildrenTransitions"> + <Setter.Value> + <TransitionCollection> + <EntranceThemeTransition/> + </TransitionCollection> + </Setter.Value> + </Setter> + </Style> +</ResourceDictionary> diff --git a/winrt/winapp/MainPage.xaml b/winrt/winapp/MainPage.xaml new file mode 100644 index 00000000..9a557fad --- /dev/null +++ b/winrt/winapp/MainPage.xaml @@ -0,0 +1,111 @@ +<Page + x:Class="winapp.MainPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:winapp" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + <Page.BottomAppBar> + <AppBar> + <Grid Margin="38,0,0,0"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Slider x:Name="xaml_PageSlider" Minimum="0" Maximum="10" ValueChanged="Slider_ValueChanged" LostFocus="Slider_Released" Grid.Column="0" Margin="10,0" VerticalAlignment="Center" /> + <Button x:Name="Find_File" Style="{StaticResource OpenFileAppBarButtonStyle}" Tag="OpenFile" HorizontalAlignment="Right" Grid.Column="1" Click="Picker"/> + </Grid> + </AppBar> + </Page.BottomAppBar> + <Page.TopAppBar> + <AppBar x:Name="TopAppBar1" AutomationProperties.Name="Top App Bar"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <StackPanel x:Name="LeftPanel" Orientation="Horizontal"> + + </StackPanel> + <StackPanel x:Name="RightPanel" Orientation="Horizontal" HorizontalAlignment="Right"> + <Button x:Name="Search" Style="{StaticResource SearchAppBarButtonStyle}" Tag="Search" Click="Searcher"/> + <Button x:Name="Contents" Style="{StaticResource ContentsBarButtonStyle}" Tag="Contents" Click="ContentDisplay"/> + <Button x:Name="Links" Style="{StaticResource LinksAppBarButtonStyle}" Tag="Links" Click="Linker"/> + <Button x:Name="Reflow" Style="{StaticResource ReflowAppBarButtonStyle}" Tag="Reflow" Click="Reflower"/> + <Button x:Name="Help" Style="{StaticResource HelpAppBarButtonStyle}" Tag="Help"/> + </StackPanel> + </Grid> + </AppBar> + </Page.TopAppBar> + <Grid> + <Grid.Background> + <LinearGradientBrush EndPoint="-0.074,-0.068" StartPoint="1.027,1.024"> + <GradientStop Color="Black"/> + <GradientStop Color="White"/> + <GradientStop Color="White" Offset="0.919"/> + <GradientStop Color="#FFCDCDCD" Offset="0.741"/> + <GradientStop Color="#FF909090" Offset="0.524"/> + <GradientStop Color="#FF737373" Offset="0.421"/> + <GradientStop Color="#FF2A2A2A" Offset="0.155"/> + <GradientStop Color="#FF1A1A1A" Offset="0.097"/> + <GradientStop Color="#FF040404" Offset="0.018"/> + <GradientStop Color="#FFB3B3B3" Offset="0.651"/> + <GradientStop Color="#FF989898" Offset="0.556"/> + <GradientStop Color="#FF666666" Offset="0.375"/> + <GradientStop Color="#FF4B4B4B" Offset="0.278"/> + <GradientStop Color="#FF3A3A3A" Offset="0.215"/> + </LinearGradientBrush> + </Grid.Background> + + <ProgressBar x:Name="xaml_Progress" IsIndeterminate="False" Maximum="100" Value="0" Height="10" Width="400" IsEnabled="False" Opacity="0"/> + + <Grid x:Name="xaml_MainGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SizeChanged="GridSizeChanged"> + <Canvas x:Name="xaml_zoomCanvas" HorizontalAlignment="Center" VerticalAlignment="Center" DoubleTapped="Canvas_Double" + ManipulationDelta="Canvas_ManipulationDelta" ManipulationStarted="Canvas_ManipulationStarted" + ManipulationStarting="Canvas_ManipulationStarting" ManipulationCompleted="Canvas_ManipulationCompleted" + ManipulationMode="All" IsTapEnabled="True" Tapped="Canvas_Single_Tap"> + <FlipView x:Name="xaml_horiz_flipView" SelectionChanged="FlipView_SelectionChanged" DoubleTapped="FlipView_Double" VerticalAlignment="Center" + HorizontalAlignment="Center"> + <FlipView.ItemsPanel> + <ItemsPanelTemplate> + <VirtualizingStackPanel Orientation="Horizontal"/> + </ItemsPanelTemplate> + </FlipView.ItemsPanel> + </FlipView> + + <FlipView x:Name="xaml_vert_flipView" SelectionChanged="FlipView_SelectionChanged" DoubleTapped="FlipView_Double" VerticalAlignment="Center" + HorizontalAlignment="Center" IsEnabled="False" Opacity="0"> + <FlipView.ItemsPanel> + <ItemsPanelTemplate> + <VirtualizingStackPanel Orientation="Vertical"/> + </ItemsPanelTemplate> + </FlipView.ItemsPanel> + </FlipView> + + </Canvas> + <ListView x:Name="xaml_ListView" Foreground="Black" HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" Opacity="0" IsItemClickEnabled="True" + ItemClick="ContentSelected" SelectionMode="Single" IsEnabled="False"> + + <ListView.ItemTemplate> + <DataTemplate> + <StackPanel Margin="5,5,0,0" HorizontalAlignment="Left"> + <TextBlock TextWrapping="Wrap" Text="{Binding ContentItem}" FontFamily="Segoe UI" FontSize="20" /> + </StackPanel> + </DataTemplate> + </ListView.ItemTemplate> + + <ListView.Background> + <SolidColorBrush Color="LightGray"></SolidColorBrush> + </ListView.Background> + </ListView> + <WebView x:Name="xaml_WebView" HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" Visibility="Collapsed" + ManipulationDelta="WebViewDelta" + ManipulationStarting="WebViewStarting" + ManipulationCompleted="WebViewCompleted" ManipulationMode="All" + /> + </Grid> + </Grid> + </Page> diff --git a/winrt/winapp/MainPage.xaml.cpp b/winrt/winapp/MainPage.xaml.cpp new file mode 100644 index 00000000..b7e8eff7 --- /dev/null +++ b/winrt/winapp/MainPage.xaml.cpp @@ -0,0 +1,1995 @@ +// +// MainPage.xaml.cpp +// Implementation of the MainPage class. +// + +#include "pch.h" +#include "MainPage.xaml.h" +#include "LVContents.h" + +#define LOOK_AHEAD 1 /* A +/- count on the pages to pre-render */ +#define MIN_SCALE 0.5 +#define MAX_SCALE 4 +#define MARGIN_BUFF 400 +#define MAX_SEARCH 500 +#define SCALE_THUMB 0.25 + +static float screenScale = 1; +static fz_context *ctx = NULL; +fz_document *m_doc; + +int linkPage[MAX_SEARCH]; +char *linkUrl[MAX_SEARCH]; + +using namespace winapp; + +using namespace Windows::Foundation; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; +using namespace Windows::Graphics::Display; +using namespace ListViewContents; + +//****************** Added ***************** +using namespace Windows::Storage::Pickers; +using namespace Windows::Devices::Enumeration; +using namespace concurrency; +using namespace Windows::Graphics::Imaging; +//****************** End Add **************** + +typedef struct win_stream_struct_s +{ + IRandomAccessStream^ stream; +} win_stream_struct; +static win_stream_struct win_stream; + +#ifndef NDEBUG +unsigned int _mainThreadId = 0U; + +#ifdef __cplusplus +extern "C" { +#endif + + // The IsMainThread function returns true if the current thread is the app's main thread and false otherwise. + bool IsMainThread() + { + return (_mainThreadId == GetCurrentThreadId()); + } + + // The IsBackgroundThread function returns false if the current thread is the app's main thread and true otherwise. + bool IsBackgroundThread() + { + return (_mainThreadId != GetCurrentThreadId()); + } + + // The RecordMainThread function registers the main thread ID for use by the IsMainThread and IsBackgroundThread functions. + void RecordMainThread() + { + _mainThreadId = GetCurrentThreadId(); + } + +#ifdef __cplusplus +} +#endif + +#endif /* not NDEBUG */ + +MainPage::MainPage() +{ + InitializeComponent(); + + Windows::UI::Color color; + color.R = 0x25; + color.G = 0x72; + color.B = 0xAC; + color.A = 0x40; + m_textcolor_brush = ref new SolidColorBrush(color); + + color.R = 0xAC; + color.G = 0x72; + color.B = 0x25; + color.A = 0x40; + m_linkcolor_brush = ref new SolidColorBrush(color); + + // Create the image brush + m_renderedImage = ref new ImageBrush(); + m_doc = NULL; + m_content.num = 0; + CleanUp(); + RecordMainThread(); + + // use at most 128M for resource cache + ctx = fz_new_context(NULL, NULL, 128<<20); +} + +void run_async_non_interactive(std::function<void ()>&& action) +{ + Windows::UI::Core::CoreWindow^ wnd = Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow; + assert(wnd != nullptr); + + wnd->Dispatcher->RunAsync( + Windows::UI::Core::CoreDispatcherPriority::Low, + ref new Windows::UI::Core::DispatchedHandler([action]() + { + action(); + })); +} + +/// <summary> +/// Invoked when this page is about to be displayed in a Frame. +/// </summary> +/// <param name="e">Event data that describes how this page was reached. The Parameter +/// property is typically used to configure the page.</param> +void MainPage::OnNavigatedTo(NavigationEventArgs^ e) +{ + (void) e; // Unused parameter +} + +void winapp::MainPage::Picker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + FileOpenPicker^ openPicker = ref new FileOpenPicker(); + openPicker->ViewMode = PickerViewMode::List; + openPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary; + openPicker->FileTypeFilter->Append(".pdf"); + openPicker->FileTypeFilter->Append(".xps"); + openPicker->FileTypeFilter->Append(".oxps"); + + create_task(openPicker->PickSingleFileAsync()).then([this](StorageFile^ file) + { + if (file) + { + this->OpenDocumentPrep(file); + } + else + { + /* Nothing selected */ + } + }); +} + +void MainPage::NotifyUserFileNotExist() +{ + //NotifyUser("The file '" + Filename + "' does not exist. Use scenario one to create this file.", NotifyType::ErrorMessage); +} + +void MainPage::HandleFileNotFoundException(Platform::COMException^ e) +{ + if (e->HResult == 0x80070002) // Catch FileNotExistException + { + NotifyUserFileNotExist(); + } + else + { + throw e; + } +} + +RectSize MainPage::currPageSize(int page) +{ + RectSize Size; + + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(page); + + Size.height = flipview_temp->ActualHeight; + Size.width = flipview_temp->ActualWidth; + return Size; +} + +static RectSize measurePage(fz_document *doc, fz_page *page) +{ + RectSize pageSize; + fz_rect rect; + fz_rect *bounds = fz_bound_page(doc, page, &rect); + + pageSize.width = bounds->x1 - bounds->x0; + pageSize.height = bounds->y1 - bounds->y0; + return pageSize; +} + +static RectSize fitPageToScreen(RectSize page, RectSize screen) +{ + RectSize pageSize; + + float hscale = screen.width / page.width; + float vscale = screen.height / page.height; + float scale = fz_min(hscale, vscale); + pageSize.width = floorf(page.width * scale) / page.width; + pageSize.height = floorf(page.height * scale) / page.height; + return pageSize; +} + +spatial_info_t MainPage::InitSpatial(double scale) +{ + spatial_info_t value; + + value.size.height = this->ActualHeight; + value.size.width = this->ActualWidth; + value.scale_factor = scale; + return value; +} + +void Prepare_bmp(int width, int height, DataWriter ^dw) +{ + int row_size = width * 4; + int bmp_size = row_size * height + 54; + + dw->WriteString("BM"); + dw->ByteOrder = ByteOrder::LittleEndian; + dw->WriteInt32(bmp_size); + dw->WriteInt16(0); + dw->WriteInt16(0); + dw->WriteInt32(54); + dw->WriteInt32(40); + dw->WriteInt32(width); + dw->WriteInt32(height); + dw->WriteInt16(1); + dw->WriteInt16(32); + dw->WriteInt32(0); + dw->WriteInt32(row_size * height); + dw->WriteInt32(2835); + dw->WriteInt32(2835); + dw->WriteInt32(0); + dw->WriteInt32(0); +} + +void MainPage::ReleasePages(int old_page, int new_page) +{ + + if (old_page == new_page) return; + /* To keep from having memory issue reset the page back to + the thumb if we are done rendering the thumbnails */ + if (this->m_thumb_page_start == this->m_num_pages) + { + for (int k = old_page - LOOK_AHEAD; k <= old_page + LOOK_AHEAD; k++) + { + if (k < new_page - LOOK_AHEAD || k > new_page + LOOK_AHEAD) + { + if (k >= 0 && k < this->m_num_pages) + { + SetThumb(k); + } + } + } + } +} + +void MainPage::InitThumbnails() +{ + this->m_thumbnails.raster = ref new Array<InMemoryRandomAccessStream^>(m_num_pages); + this->m_thumbnails.scale = ref new Array<double>(m_num_pages); + this->m_thumbnails.canvas_h = ref new Array<Canvas^>(m_num_pages); + this->m_thumbnails.canvas_v = ref new Array<Canvas^>(m_num_pages); + this->m_thumbnails.size = ref new Array<Point>(m_num_pages); +} + +/* Return this page from a full res image to the thumb image. This should only + be called after all thumbs have been rendered. */ +void MainPage::SetThumb(int page_num) +{ + FlipViewItem ^flipview_temp = (FlipViewItem^) xaml_vert_flipView->Items->GetAt(page_num); + flipview_temp->Content = this->m_thumbnails.canvas_v[page_num]; + flipview_temp->Background = this->m_blankPage; + flipview_temp = (FlipViewItem^) xaml_horiz_flipView->Items->GetAt(page_num); + flipview_temp->Content = this->m_thumbnails.canvas_h[page_num]; + flipview_temp->Background = this->m_blankPage; +} + +/* Add rendered page into flipview structure at location page_num */ +void MainPage::AddPage(int page_num) +{ + FlipViewItem ^flipview_temp = ref new FlipViewItem(); + flipview_temp->Content = this->m_renderedCanvas; + m_curr_flipView->Items->Append(flipview_temp); +} + +/* Replace rendered page into flipview structure at location page_num */ +void MainPage::ReplacePage(int page_num) +{ + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(page_num); + flipview_temp->Content = this->m_renderedCanvas; + flipview_temp->Background = nullptr; +} + +/* Add rendered page into flipview structure at location page_num */ +void MainPage::AddBlankPage(int page_num) +{ + FlipViewItem ^flipview_temp = ref new FlipViewItem(); + flipview_temp->Background = this->m_blankPage; + m_curr_flipView->Items->Append(flipview_temp); +} + +/* Add rendered page into flipview structure at location page_num */ +void MainPage::AddBlankPage(int page_num, FlipView^ flip_view) +{ + FlipViewItem ^flipview_temp = ref new FlipViewItem(); + flipview_temp->Background = this->m_blankPage; + flip_view->Items->Append(flipview_temp); +} + +/* Add rendered page into flipview structure at location page_num */ +void MainPage::AddThumbNail(int page_num, FlipView^ flip_view) +{ + FlipViewItem ^flipview_temp = ref new FlipViewItem(); + flipview_temp->Content = this->m_renderedCanvas; + flip_view->Items->Append(flipview_temp); +} + +/* Create white image for us to use as place holder in large document for flip + view filling instead of the thumbnail image */ +void MainPage::CreateBlank(int width, int height) +{ + Array<unsigned char>^ bmp_data = ref new Array<unsigned char>(height * 4 * width); + /* Set up the memory stream */ + WriteableBitmap ^bmp = ref new WriteableBitmap(width, height); + InMemoryRandomAccessStream ^ras = ref new InMemoryRandomAccessStream(); + DataWriter ^dw = ref new DataWriter(ras->GetOutputStreamAt(0)); + /* Go ahead and write our header data into the memory stream */ + Prepare_bmp(width, height, dw); + + /* Set the data to all white */ + memset(bmp_data->Data, 255, height * 4 * width); + + /* Write the data */ + dw->WriteBytes(bmp_data); + + DataWriterStoreOperation^ result = dw->StoreAsync(); + /* Block on the Async call */ + while(result->Status != AsyncStatus::Completed) { + } + /* And store in a the image brush */ + bmp->SetSource(ras); + m_blankPage = ref new ImageBrush(); + m_blankPage->Stretch = Windows::UI::Xaml::Media::Stretch::None; + m_blankPage->ImageSource = bmp; +} + +/* win_read_file. Reading of windows managed stream. This is not ideal as I have + to read into a managed buffer and then transfer to the actual buffer I want. I + would like a more direct approach */ +static int win_read_file(fz_stream *stm, unsigned char *buf, int len) +{ + void *temp = stm->state; + win_stream_struct *stream = reinterpret_cast <win_stream_struct*> (temp); + IRandomAccessStream^ Stream = stream->stream; + unsigned long long curr_pos = Stream->Position; + unsigned long long length = Stream->Size; + + DataReader^ local_reader = ref new DataReader(Stream); + DataReaderLoadOperation^ result = local_reader->LoadAsync(len); + + /* Block on the Async call */ + while(result->Status != AsyncStatus::Completed) { + + } + result->GetResults(); + int curr_len2 = local_reader->UnconsumedBufferLength; + if (curr_len2 < len) + len = curr_len2; + + Platform::Array<unsigned char>^ arrByte = ref new Platform::Array<unsigned char>(len); + local_reader->ReadBytes(arrByte); + + memcpy(buf, arrByte->Data, len); + local_reader->DetachStream(); + + return len; +} + +static void win_seek_file(fz_stream *stm, int offset, int whence) +{ + void *temp = stm->state; + win_stream_struct *stream = reinterpret_cast <win_stream_struct*> (temp); + IRandomAccessStream^ Stream = stream->stream; + unsigned long long curr_pos = Stream->Position; + unsigned long long length = Stream->Size; + unsigned long long n; + + if (whence == SEEK_END) + { + n = length + offset; + } + else if (whence == SEEK_CUR) + { + n = curr_pos + offset; + } + else if (whence == SEEK_SET) + { + n = offset; + } + Stream->Seek(n); + curr_pos = Stream->Position; + stm->pos = n; + stm->rp = stm->bp; + stm->wp = stm->bp; +} + +static void win_close_file(fz_context *ctx, void *state) +{ + + DataReader^ dataReader = reinterpret_cast <DataReader^> (state); + + delete dataReader; +} + +void PixToMemStream(fz_pixmap *pix, DataWriter ^dw, Platform::Array<unsigned char> ^arr) +{ + unsigned char *samples = fz_pixmap_samples(ctx, pix); + int w = fz_pixmap_width(ctx, pix); + int h = fz_pixmap_height(ctx, pix); + + /* Write the data */ + dw->WriteBytes(arr); + + DataWriterStoreOperation^ result = dw->StoreAsync(); + /* Block on the Async call */ + while(result->Status != AsyncStatus::Completed) { + } +} + +void PageSize(fz_document *doc, fz_page *page, int *width, int *height, spatial_info_t spatial_info) +{ + RectSize pageSize; + RectSize scale; + RectSize screenSize; + + screenSize.height = spatial_info.size.height; + screenSize.width = spatial_info.size.width; + + screenSize.width *= screenScale; + screenSize.height *= screenScale; + + pageSize = measurePage(doc, page); + scale = fitPageToScreen(pageSize, screenSize); + *width = pageSize.width * scale.width * spatial_info.scale_factor; + *height = pageSize.height * scale.height * spatial_info.scale_factor; +} + +InMemoryRandomAccessStream^ RenderBitMap(fz_document *doc, fz_page *page, int *width, + int *height, spatial_info_t spatial_info) +{ + fz_matrix ctm, *pctm = &ctm; + fz_device *dev; + fz_pixmap *pix; + RectSize pageSize; + RectSize scale; + RectSize screenSize; + int bmp_width, bmp_height; + + screenSize.height = spatial_info.size.height; + screenSize.width = spatial_info.size.width; + + screenSize.width *= screenScale; + screenSize.height *= screenScale; + + pageSize = measurePage(doc, page); + scale = fitPageToScreen(pageSize, screenSize); + pctm = fz_scale(pctm, scale.width * spatial_info.scale_factor, scale.height * spatial_info.scale_factor); + bmp_width = pageSize.width * scale.width * spatial_info.scale_factor; + bmp_height = pageSize.height * scale.height * spatial_info.scale_factor; + *width = bmp_width; + *height = bmp_height; + + /* Y is flipped for some reason */ + ctm.f = bmp_height; + ctm.d = -ctm.d; + + /* Allocate space for bmp */ + Array<unsigned char>^ bmp_data = + ref new Array<unsigned char>(bmp_height * 4 * bmp_width); + /* Set up the memory stream */ + InMemoryRandomAccessStream ^ras = ref new InMemoryRandomAccessStream(); + DataWriter ^dw = ref new DataWriter(ras->GetOutputStreamAt(0)); + //m_memory_use += bmp_height * 4 * bmp_width; + /* Go ahead and write our header data into the memory stream */ + Prepare_bmp(bmp_width, bmp_height, dw); + /* Now get a pointer to our samples and pass it to fitz to use */ + pix = fz_new_pixmap_with_data(ctx, fz_device_bgr, bmp_width, bmp_height, &(bmp_data[0])); + fz_clear_pixmap_with_value(ctx, pix, 255); + dev = fz_new_draw_device(ctx, pix); + fz_run_page(doc, page, dev, pctm, NULL); + fz_free_device(dev); + /* Now the data into the memory stream */ + PixToMemStream(pix, dw, bmp_data); + /* Return raster stream */ + return ras; +} + +task<Canvas^> RenderPage_Task(fz_document *doc, int page_num, int *width, int *height, + spatial_info_t spatial_info, ImageBrush^ *renderedImage) +{ + fz_page *page = fz_load_page(doc, page_num); + int width_val, height_val; + auto p = std::make_shared<std::pair<int,int>>(-1,-1); + + /* This will launch rendering on another thread */ + auto t = create_task([spatial_info, page_num, doc, page, width, height, p]()-> InMemoryRandomAccessStream^ + { + InMemoryRandomAccessStream^ ras; + + /* Get raster bitmap stream */ + ras = RenderBitMap(doc, page, &(p->first), &(p->second), spatial_info); + *width = p->first; + *height = p->second; + + return ras; + }); + return t.then([renderedImage, doc, page, p](task<InMemoryRandomAccessStream^> the_task) + { + /* And store in a new image brush. Note: creation of WriteableBitmap + MUST be done by the UI thread. */ + InMemoryRandomAccessStream^ ras; + + assert(IsMainThread); + try + { + ras = the_task.get(); + } + catch (const task_canceled& e) + { + return (Canvas^) nullptr; + } + WriteableBitmap ^bmp = ref new WriteableBitmap(p->first, p->second); + bmp->SetSource(ras); + *renderedImage = ref new ImageBrush(); + (*renderedImage)->Stretch = Windows::UI::Xaml::Media::Stretch::None; + (*renderedImage)->ImageSource = bmp; + Canvas^ ret_Canvas = ref new Canvas(); + ret_Canvas->Width = p->first; + ret_Canvas->Height = p->second; + ret_Canvas->Background = *renderedImage; + fz_free_page(doc, page); + return ret_Canvas; + }, task_continuation_context::use_current()); +} + +Canvas^ RenderPage(fz_document *doc, fz_page *page, int *width, int *height, + spatial_info_t spatial_info, ImageBrush^ *renderedImage) +{ + InMemoryRandomAccessStream^ ras; + + /* Get raster bitmap stream */ + ras = RenderBitMap(doc, page, width, height, spatial_info); + + /* And store in a new image brush. Note: creation of WriteableBitmap + MUST be done by the UI thread. */ + WriteableBitmap ^bmp = ref new WriteableBitmap(*width, *height); + bmp->SetSource(ras); + *renderedImage = ref new ImageBrush(); + (*renderedImage)->Stretch = Windows::UI::Xaml::Media::Stretch::None; + (*renderedImage)->ImageSource = bmp; + Canvas^ ret_Canvas = ref new Canvas(); + ret_Canvas->Height = *height; + ret_Canvas->Width = *width; + ret_Canvas->Background = *renderedImage; + return ret_Canvas; +} + +void winapp::MainPage::SetupZoomCanvas() +{ + int height = this->ActualHeight; + int width = this->ActualWidth; + + CreateBlank(width, height); + xaml_zoomCanvas->Background = this->m_blankPage; + xaml_zoomCanvas->Background->Opacity = 0; + + /* Set the current flip view mode */ + if (height > width) + this->m_curr_flipView = xaml_vert_flipView; + else + this->m_curr_flipView = xaml_horiz_flipView; +} + +/* Clean up everything as we are opening a new document after having another + one open */ +void winapp::MainPage::CleanUp() +{ + /* Remove current pages in the flipviews */ + if (xaml_vert_flipView->Items->Size) + xaml_vert_flipView->Items->Clear(); + + if (xaml_horiz_flipView->Items->Size) + xaml_horiz_flipView->Items->Clear(); + + /* Clean up mupdf */ + if (m_doc != NULL) + fz_close_document(m_doc); + + this->m_curr_flipView = nullptr; + m_currpage = 0; + m_file_open = false; + m_doc = NULL; + m_slider_min = 0; + m_slider_max = 0; + m_init_done = false; + m_memory_use = 0; + m_zoom_mode = false; + m_from_doubleflip = false; + m_first_time = false; + m_insearch = false; + m_search_active = false; + m_sliderchange = false; + m_flip_from_searchlink = false; + m_num_pages = -1; + m_search_rect_count = 0; + ResetSearch(); + m_ren_status = REN_AVAILABLE; + m_thumb_page_start = 0; + m_thumb_page_stop = 0; + m_links_on = false; + + if (m_content.num) + { + //m_content.page->; + // m_content.string_margin->Dispose(); + //m_content.string_orig->Dispose(); + m_content.num = 0; + } + + m_curr_zoom = 1.0; + m_canvas_translate.X = 0; + m_canvas_translate.Y = 0; + + this->xaml_PageSlider->Minimum = m_slider_min; + this->xaml_PageSlider->Maximum = m_slider_max; + this->xaml_PageSlider->IsEnabled = false; +} + +/* Create the thumbnail images. This is started when we have space + on the render thread */ +void winapp::MainPage::RenderThumbs() +{ + spatial_info_t spatial_info = this->InitSpatial(1); + int num_pages = this->m_num_pages; + int thumb_pages = this->m_thumb_page_start; + int max_display = + max(spatial_info.size.height, spatial_info.size.width) * SCALE_THUMB; + cancellation_token_source cts; + auto token = cts.get_token(); + m_ThumbCancel = cts; + + this->m_ren_status = REN_THUMBS; + thumbs_t thumbnails = m_thumbnails; + + create_task([spatial_info, max_display, num_pages, thumb_pages, thumbnails, this]()-> int + { + spatial_info_t spatial_info_local = spatial_info; + InMemoryRandomAccessStream ^ras = ref new InMemoryRandomAccessStream(); + + for (int k = thumb_pages; k < num_pages; k++) + { + int width, height; + int max_page_size; + double scale_factor; + + fz_page *page = fz_load_page(m_doc, k); + // Get page size + spatial_info_local.scale_factor = 1; + PageSize(m_doc, page, &width, &height, spatial_info_local); + // Determine thumb scale factor + max_page_size = max(width, height); + scale_factor = (double) max_display/ (double) max_page_size; + spatial_info_local.scale_factor = 0.1; + thumbnails.raster[k] = RenderBitMap(m_doc, page, &width, &height, + spatial_info_local); + thumbnails.scale[k] = 0.1; + thumbnails.size[k].Y = height; + thumbnails.size[k].X = width; + if (is_task_cancellation_requested()) + { + /* Just return the pages that we have done so far.*/ + this->m_thumb_page_stop = k + 1; + cancel_current_task(); + } + } + return num_pages; /* all done with thumbnails! */ + }, token).then([this](task<int> the_task) + { + int new_end; + assert(IsMainThread); + + try + { + new_end = the_task.get(); + } + catch (const task_canceled& e) + { + new_end = this->m_thumb_page_stop; + } + + int old_end = this->m_thumb_page_start; + + /* Now go ahead and create the proper stuctures */ + this->m_ren_status = REN_UPDATE_THUMB_CANVAS; + this->m_thumb_page_start = new_end; + + for (int k = old_end; k < new_end; k++) + { + /* See if we already have something here as the main thread + may have already put in place the full scale image. Since this + operation is done on the main thread we should be safe here + from race conditions. Creation of bmp has to be done in ui thread */ + FlipViewItem ^flipview_temp_v = (FlipViewItem^) xaml_vert_flipView->Items->GetAt(k); + FlipViewItem ^flipview_temp_h = (FlipViewItem^) xaml_horiz_flipView->Items->GetAt(k); + FlipViewItem ^flipview_temp_curr = (FlipViewItem^) m_curr_flipView->Items->GetAt(k); + + if (flipview_temp_curr->Background != nullptr) + { + WriteableBitmap ^bmp = ref new WriteableBitmap(m_thumbnails.size[k].Y, m_thumbnails.size[k].X); + bmp->SetSource(m_thumbnails.raster[k]); + ImageBrush^ renderedImage = ref new ImageBrush(); + renderedImage->Stretch = Windows::UI::Xaml::Media::Stretch::Fill; + renderedImage->ImageSource = bmp; + /* Different flip view items cannot share the same canvas */ + m_thumbnails.canvas_h[k] = ref new Canvas(); + m_thumbnails.canvas_h[k]->Height = m_thumbnails.size[k].Y / m_thumbnails.scale[k]; + m_thumbnails.canvas_h[k]->Width = m_thumbnails.size[k].X / m_thumbnails.scale[k]; + m_thumbnails.canvas_h[k]->Background = renderedImage; + m_thumbnails.canvas_v[k] = ref new Canvas(); + m_thumbnails.canvas_v[k]->Height = m_thumbnails.size[k].Y / m_thumbnails.scale[k]; + m_thumbnails.canvas_v[k]->Width = m_thumbnails.size[k].X / m_thumbnails.scale[k]; + m_thumbnails.canvas_v[k]->Background = renderedImage; + flipview_temp_h->Content = m_thumbnails.canvas_h[k]; + flipview_temp_v->Content = m_thumbnails.canvas_v[k]; + } + } + this->m_ren_status = REN_AVAILABLE; + }, task_continuation_context::use_current()); +} + +void winapp::MainPage::OpenDocumentPrep(StorageFile^ file) +{ + if (this->m_num_pages != -1) + { + /* If the thumbnail thread is running then we need to end that first */ + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Create a task to wait until the renderer is available, then clean up then open */ + auto t = create_task([ren_status, ThumbCancel]()->int + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + return 0; + }).then([this](task<int> the_task) + { + CleanUp(); + return 0; + }, task_continuation_context::use_current()).then([this, file](task<int> the_task) + { + OpenDocument(file); + }, task_continuation_context::use_current()); + } + else + { + OpenDocument(file); + } +} + +void winapp::MainPage::OpenDocument(StorageFile^ file) +{ + String^ path = file->Path; + const wchar_t *w = path->Data(); + int cb = WideCharToMultiByte(CP_UTF8, 0, w, -1, nullptr, 0, nullptr, nullptr); + char* name = new char[cb]; + + WideCharToMultiByte(CP_UTF8, 0, w ,-1 ,name ,cb ,nullptr, nullptr); + char *ext = strrchr(name, '.'); + + this->SetupZoomCanvas(); + auto ui = task_continuation_context::use_current(); + + create_task(file->OpenAsync(FileAccessMode::Read)).then([this, file, ext, ui](task<IRandomAccessStream^> task) + { + try + { + IRandomAccessStream^ readStream = task.get(); + UINT64 const size = readStream->Size; + win_stream.stream = readStream; + + if (size <= MAXUINT32) + { + /* assign data reader to stream object */ + fz_stream *str; + + str = fz_new_stream(ctx, 0, win_read_file, win_close_file); + str->seek = win_seek_file; + str->state = reinterpret_cast <void*> (&win_stream); + + /* Now lets see if we can render the file */ + m_doc = fz_open_document_with_stream(ctx, ext, str); + m_num_pages = m_doc->count_pages(m_doc); + + if ((m_currpage) >= m_num_pages) + { + m_currpage = m_num_pages - 1; + } + else if (m_currpage < 0) + { + m_currpage = 0; + } + + /* Set up both flip views and intialize with blank pages */ + FlipView^ temp_flip; + if (this->m_curr_flipView == xaml_vert_flipView) + temp_flip = xaml_horiz_flipView; + else + temp_flip = xaml_vert_flipView; + + /* Initialize all the flipvew items */ + for (int k = 0; k < m_num_pages; k++) + { + AddBlankPage(k, xaml_horiz_flipView); + AddBlankPage(k, xaml_vert_flipView); + } + /* Do the current page now though */ + int height, width; + spatial_info_t spatial_info = InitSpatial(1); + + for (int k = 0; k < LOOK_AHEAD + 2; k++) + { + if (m_num_pages > k ) + { + fz_page *page = fz_load_page(m_doc, k); + this->m_renderedCanvas = RenderPage(m_doc, page, &width, + &height, spatial_info, + &m_renderedImage); + ReplacePage(k); + fz_free_page(m_doc, page); + } + } + + /* Update the slider settings, if more than one page */ + if (m_num_pages > 1) + { + this->xaml_PageSlider->Maximum = m_num_pages; + this->xaml_PageSlider->Minimum = 1; + this->xaml_PageSlider->IsEnabled = true; + } + else + { + this->xaml_PageSlider->Maximum = 0; + this->xaml_PageSlider->Minimum = 0; + this->xaml_PageSlider->IsEnabled = false; + } + this->m_init_done = true; + } + else + { + delete readStream; + } + } + catch(COMException^ ex) { + this->HandleFileNotFoundException(ex); + } + }).then([this, ui]() + { + InitThumbnails(); + this->RenderThumbs(); + }); +} + +task<int> winapp::MainPage::RenderRange(int curr_page, int *height, int *width) +{ + /* Render +/- the look ahead from where we are if blank page is present */ + spatial_info_t spatial_info = InitSpatial(1); + + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Create a task to wait until the renderer is available */ + auto t = create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }); + + return t.then([this, height, width, curr_page, spatial_info]() + { + // assert(IsMainThread); + int val = 0; + /* This runs on the main ui thread */ + for (int k = curr_page - LOOK_AHEAD; k <= curr_page + LOOK_AHEAD; k++) + { + if (k >= 0 && k < m_num_pages) + { + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(k); + if (flipview_temp->Background == this->m_blankPage) + { + fz_page *page = fz_load_page(m_doc, k); + this->m_ren_status = REN_PAGE; + m_renderedCanvas = RenderPage(m_doc, page, width, height, + spatial_info, &m_renderedImage); + ReplacePage(k); + fz_free_page(m_doc, page); + this->m_ren_status = REN_AVAILABLE; + } + } + } + + Canvas^ link_canvas = (Canvas^) (this->FindName("linkCanvas")); + if (link_canvas != nullptr) + { + Canvas^ Parent_Canvas = (Canvas^) link_canvas->Parent; + if (Parent_Canvas != nullptr) + { + Parent_Canvas->Children->RemoveAtEnd(); + delete link_canvas; + } + } + + RectSize rectsize = this->currPageSize(curr_page); + *height = rectsize.height; + *width = rectsize.width; + m_currpage = curr_page; + if (this->m_links_on) + { + fz_drop_link(ctx, this->m_links); + AddLinkCanvas(); + } + /* Check if thumb rendering is done. If not then restart */ + if (this->m_num_pages != this->m_thumb_page_start) + this->RenderThumbs(); + return val; + }, task_continuation_context::use_current()); +} + +void winapp::MainPage::Slider_Released(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e) +{ + int height, width; + int newValue = (int) this->xaml_PageSlider->Value - 1; /* zero based */ + + // this->RenderRange(newValue, &height, &width); +} + +void winapp::MainPage::Slider_ValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e) +{ + int newValue = (int) this->xaml_PageSlider->Value - 1; /* zero based */ + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + auto ui = task_continuation_context::use_current(); + + if (m_update_flip) + { + m_update_flip = false; + return; + } + + if (m_init_done && this->xaml_PageSlider->IsEnabled) + { + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(newValue); + if (flipview_temp->Background == this->m_blankPage) + { + create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this, newValue]() + { + int width, height; + fz_page *page = fz_load_page(m_doc, newValue); + spatial_info_t spatial_info = InitSpatial(1); + this->m_ren_status = REN_PAGE; + m_renderedCanvas = RenderPage(m_doc, page, &width, &height, spatial_info, + &m_renderedImage); + ReplacePage(newValue); + this->m_ren_status = REN_AVAILABLE; + this->m_currpage = newValue; + fz_free_page(m_doc, page); + m_sliderchange = true; + this->m_curr_flipView->SelectedIndex = newValue; + ResetSearch(); + }, ui); + } + } +} + +void winapp::MainPage::FlipView_SelectionChanged(Object^ sender, SelectionChangedEventArgs^ e) +{ + int pos = this->m_curr_flipView->SelectedIndex; + int height, width; + + m_update_flip = true; + if (xaml_PageSlider->IsEnabled) + { + xaml_PageSlider->Value = pos; + } + if (pos >= 0) + { + if (m_flip_from_searchlink) + { + m_flip_from_searchlink = false; + return; + } + else if (m_sliderchange) + { + m_sliderchange = false; + return; + } + else + { + ResetSearch(); + } + if (m_init_done) + { + /* Get the current page */ + int curr_page = this->m_currpage; + task<int> task = this->RenderRange(pos, &height, &width); + task.then([this, curr_page, pos](int val) + { + this->ReleasePages(curr_page, pos); + }, task_continuation_context::use_current()); + } + } +} + +void winapp::MainPage::Canvas_ManipulationStarting(Object^ sender, ManipulationStartingRoutedEventArgs^ e) +{ + bool handled; + + e->GetType(); + handled = e->Handled; +} + +void winapp::MainPage::Canvas_ManipulationStarted(Object^ sender, ManipulationStartedRoutedEventArgs^ e) +{ + this->m_touchpoint = e->Position; +} + +void winapp::MainPage::Canvas_ManipulationCompleted(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e) +{ + if (m_scaling_occured) + { + int width, height; + int pos = this->m_curr_flipView->SelectedIndex; + fz_page *page = fz_load_page(m_doc, pos); + spatial_info_t spatial_info = InitSpatial(m_curr_zoom); + + m_renderedCanvas = RenderPage(m_doc, page, &width, &height, spatial_info, + &m_renderedImage); + this->xaml_zoomCanvas->Background = this->m_renderedImage; + m_renderedImage->Stretch = Windows::UI::Xaml::Media::Stretch::None; + + this->xaml_zoomCanvas->Width = width; + this->xaml_zoomCanvas->Height = height; + } +} + +void winapp::MainPage::Canvas_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e) +{ + int width, height; + + m_changes = e->Cumulative; + if (e->Delta.Scale != 1 || m_first_time) + { + /* Render at scaled resolution */ + int pos = this->m_curr_flipView->SelectedIndex; + fz_page *page = fz_load_page(m_doc, pos); + spatial_info_t spatial_info = InitSpatial(m_curr_zoom); + + m_curr_zoom = m_curr_zoom * e->Delta.Scale; + if (m_curr_zoom < MIN_SCALE) m_curr_zoom = MIN_SCALE; + if (m_curr_zoom > MAX_SCALE) m_curr_zoom = MAX_SCALE; + if (m_first_time) + { + m_renderedCanvas = RenderPage(m_doc, page, &width, &height, spatial_info, + &m_renderedImage); + this->xaml_zoomCanvas->Background = this->m_renderedImage; + m_renderedImage->Stretch = Windows::UI::Xaml::Media::Stretch::None; + } + else + { + PageSize(m_doc, page, &width, &height, spatial_info); + m_renderedImage->Stretch = Windows::UI::Xaml::Media::Stretch::Fill; + } + this->xaml_zoomCanvas->Width = width; + this->xaml_zoomCanvas->Height = height; + m_zoom_size.X = width; + m_zoom_size.Y = height; + m_first_time = false; + m_scaling_occured = true; + } + + TranslateTransform ^trans_transform = ref new TranslateTransform(); + m_canvas_translate.X += e->Delta.Translation.X; + m_canvas_translate.Y += e->Delta.Translation.Y; + + if (m_canvas_translate.Y > ((this->ActualHeight + m_zoom_size.Y) / 2 - MARGIN_BUFF) ) + { + m_canvas_translate.Y = (this->ActualHeight + m_zoom_size.Y) / 2 - MARGIN_BUFF; + } + if (m_canvas_translate.Y < (MARGIN_BUFF - (this->ActualHeight + m_zoom_size.Y) / 2) ) + { + m_canvas_translate.Y = MARGIN_BUFF - (this->ActualHeight + m_zoom_size.Y) / 2; + } + if (m_canvas_translate.X > ((this->ActualWidth + m_zoom_size.X) / 2 - MARGIN_BUFF)) + { + m_canvas_translate.X = (this->ActualWidth + m_zoom_size.X) / 2 - MARGIN_BUFF; + } + + if (m_canvas_translate.X < (MARGIN_BUFF - (this->ActualWidth + m_zoom_size.X) / 2)) + { + m_canvas_translate.X = (MARGIN_BUFF - (this->ActualWidth + m_zoom_size.X) / 2); + } + + trans_transform->X = m_canvas_translate.X; + trans_transform->Y = m_canvas_translate.Y; + this->xaml_zoomCanvas->RenderTransform = trans_transform; +} + +void winapp::MainPage::FlipView_Double(Object^ sender, DoubleTappedRoutedEventArgs^ e) +{ + if (!m_zoom_mode && this->m_num_pages != -1) + { + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Create a task to wait until the renderer is available */ + auto t = create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this]() + { + m_zoom_mode = true; + int pos = this->m_curr_flipView->SelectedIndex; + int width, height; + fz_page *page = fz_load_page(m_doc, pos); + spatial_info_t spatial_info = InitSpatial(1); + + m_renderedCanvas = RenderPage(m_doc, page, &width, &height, spatial_info, + &m_renderedImage); + m_renderedImage->Stretch = Windows::UI::Xaml::Media::Stretch::None; + this->xaml_zoomCanvas->Background = m_renderedImage; + + this->xaml_zoomCanvas->Width = width; + this->xaml_zoomCanvas->Height = height; + + m_curr_flipView->IsEnabled = false; + this->xaml_zoomCanvas->Background->Opacity = 1; + this->m_curr_flipView->Opacity = 0.0; + m_first_time = true; + m_from_doubleflip = true; + m_curr_zoom = 1.0; + }, task_continuation_context::use_current()); + } +} + +void winapp::MainPage::Canvas_Double(Object^ sender, DoubleTappedRoutedEventArgs^ e) +{ + TranslateTransform ^trans_transform = ref new TranslateTransform(); + + if (m_zoom_mode && !m_from_doubleflip) + { + m_zoom_mode = false; + int pos = this->m_curr_flipView->SelectedIndex; + + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(pos); + Canvas^ Curr_Canvas = (Canvas^) (flipview_temp->Content); + + if (this->xaml_zoomCanvas->Background != Curr_Canvas->Background) + this->xaml_zoomCanvas->Background->Opacity = 0; + else + this->xaml_zoomCanvas->Background = nullptr; + this->m_curr_flipView->Opacity = 1; + m_curr_flipView->IsEnabled = true; + this->xaml_zoomCanvas->Height = this->ActualHeight; + this->xaml_zoomCanvas->Width = this->ActualWidth; + trans_transform->X = 0; + trans_transform->Y = 0; + m_canvas_translate.X = 0; + m_canvas_translate.Y = 0; + this->xaml_zoomCanvas->RenderTransform = trans_transform; + } + m_from_doubleflip = false; +} + +/* Search Related Code */ + +static int hit_count = 0; +static fz_rect hit_bbox[MAX_SEARCH]; + +static int +search_page(fz_document *doc, int number, char *needle, fz_cookie *cookie) +{ + fz_page *page = fz_load_page(doc, number); + + fz_text_sheet *sheet = fz_new_text_sheet(ctx); + fz_text_page *text = fz_new_text_page(ctx, &fz_empty_rect); + fz_device *dev = fz_new_text_device(ctx, sheet, text); + fz_run_page(doc, page, dev, &fz_identity, cookie); + fz_free_device(dev); + + hit_count = fz_search_text_page(ctx, text, needle, hit_bbox, nelem(hit_bbox));; + + fz_free_text_page(ctx, text); + fz_free_text_sheet(ctx, sheet); + fz_free_page(doc, page); + + return hit_count; +} + +void winapp::MainPage::Searcher(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + /* Update the app bar so that we can do the search */ + StackPanel^ leftPanel = (StackPanel^) this->TopAppBar->FindName("LeftPanel"); + + if (leftPanel != nullptr && m_insearch) + { + m_insearch = false; + leftPanel->Children->RemoveAtEnd(); + leftPanel->Children->RemoveAtEnd(); + leftPanel->Children->RemoveAtEnd(); + } + else if (leftPanel != nullptr && !m_insearch) + { + m_insearch = true; + Windows::UI::Xaml::Controls::Button^ PrevButton = ref new Button(); + PrevButton->Style = safe_cast<Windows::UI::Xaml::Style^>(App::Current->Resources->Lookup("PreviousAppBarButtonStyle")); + PrevButton->Click += ref new RoutedEventHandler(this, &winapp::MainPage::SearchPrev); + + Windows::UI::Xaml::Controls::Button^ NextButton = ref new Button(); + NextButton->Style = safe_cast<Windows::UI::Xaml::Style^>(App::Current->Resources->Lookup("NextAppBarButtonStyle")); + NextButton->Click += ref new RoutedEventHandler(this, &winapp::MainPage::SearchNext); + + Windows::UI::Xaml::Controls::TextBox^ SearchBox = ref new TextBox(); + SearchBox->Name = "findBox"; + SearchBox->Width = 200; + SearchBox->Height = 20; + + leftPanel->Children->Append(SearchBox); + leftPanel->Children->Append(PrevButton); + leftPanel->Children->Append(NextButton); + } +} + +void winapp::MainPage::ShowSearchResults(SearchResult_t result) +{ + int height, width; + int old_page = this->m_currpage; + int new_page = result.page_num; + spatial_info_t spatial_info = InitSpatial(1); + + //task<int> task = this->RenderRange(new_page, &height, &width); + this->m_ren_status = REN_PAGE; + task<Canvas^> the_task = RenderPage_Task(m_doc, new_page, &width, &height, + spatial_info, &m_renderedImage); + the_task.then([this, old_page, new_page](task<Canvas^> the_task) + { + assert(IsMainThread); + + try + { + this->m_renderedCanvas = the_task.get(); + } + catch (const task_canceled& e) + { + this->m_renderedCanvas = nullptr; + } + ReplacePage(new_page); + this->m_ren_status = REN_AVAILABLE; + this->ReleasePages(old_page, new_page); + }, task_continuation_context::use_current()).then([this, result]() + + { + /* Once the rendering is done launch this task to show the result */ + RectSize screenSize; + RectSize pageSize; + RectSize scale; + + if (this->m_links_on) + { + fz_drop_link(ctx, this->m_links); + AddLinkCanvas(); + } + fz_page *page = fz_load_page(m_doc, result.page_num); + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(result.page_num); + Canvas^ results_Canvas = (Canvas^) (flipview_temp->Content); + + m_searchpage = result.page_num; + + screenSize.height = this->ActualHeight; + screenSize.width = this->ActualWidth; + + screenSize.width *= screenScale; + screenSize.height *= screenScale; + + pageSize = measurePage(m_doc, page); + scale = fitPageToScreen(pageSize, screenSize); + + /* Now add the rects */ + for (int k = 0; k < result.box_count && k < MAX_SEARCH; k++) + { + /* Create a new ref counted Rectangle */ + Rectangle^ a_rectangle = ref new Rectangle(); + TranslateTransform ^trans_transform = ref new TranslateTransform(); + a_rectangle->Width = hit_bbox[k].x1 - hit_bbox[k].x0; + a_rectangle->Height = hit_bbox[k].y1 - hit_bbox[k].y0; + trans_transform->X = hit_bbox[k].x0 * scale.width; + trans_transform->Y = hit_bbox[k].y0 * scale.height; + a_rectangle->Width *= scale.width; + a_rectangle->Height *= scale.height; + a_rectangle->RenderTransform = trans_transform; + a_rectangle->Fill = m_textcolor_brush; + results_Canvas->Children->Append(a_rectangle); + m_search_rect_count += 1; + } + if (result.box_count > 0) + { + m_flip_from_searchlink = true; + this->m_curr_flipView->SelectedIndex = result.page_num; + m_currpage = result.page_num; + } + }, task_continuation_context::use_current()); +} + +void winapp::MainPage::SearchNext(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + StackPanel^ leftPanel = (StackPanel^) this->TopAppBar->FindName("LeftPanel"); + TextBox^ findBox = (TextBox^) leftPanel->FindName("findBox"); + String^ textToFind = findBox->Text; + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Create a task to wait until the renderer is available */ + create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this, textToFind]() + { + if (this->m_search_active == false) + SearchInDirection(1, textToFind); + }, task_continuation_context::use_current()); +} + +void winapp::MainPage::SearchPrev(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + StackPanel^ leftPanel = (StackPanel^) this->TopAppBar->FindName("LeftPanel"); + TextBox^ findBox = (TextBox^) leftPanel->FindName("findBox"); + String^ textToFind = findBox->Text; + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Create a task to wait until the renderer is available */ + create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this, textToFind]() + { + if (this->m_search_active == false) + SearchInDirection(-1, textToFind); + }, task_continuation_context::use_current()); +} + +void winapp::MainPage::CancelSearch(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + m_searchcts.cancel(); +} + +void winapp::MainPage::ResetSearch(void) +{ + m_searchpage = -1; +#if 0 + wchar_t buf[20]; + String^ TempString = ref new String(buf); + + /* Remove all the rects */ + for (int k = 0; k < this->m_search_rect_count; k++) + { + unsigned int index; + int len = swprintf_s(buf, 20, L"%s_%d", L"Rect",k); + Rectangle^ curr_rect = (Rectangle^) (m_curr_flipView->FindName(TempString)); + if (curr_rect != nullptr) + { + Canvas^ results_Canvas = (Canvas^) curr_rect->Parent; + results_Canvas->Children->IndexOf(curr_rect, &index); + results_Canvas->Children->RemoveAt(index); + } + } +#endif +} + +void winapp::MainPage::SearchInDirection(int dir, String^ textToFind) +{ + int start; + const wchar_t *w = textToFind->Data(); + int cb = WideCharToMultiByte(CP_UTF8, 0, textToFind->Data(), -1, nullptr, 0, nullptr, nullptr); + char* needle = new char[cb]; + fz_document *local_doc = m_doc; + + cancellation_token_source cts; + auto token = cts.get_token(); + m_searchcts = cts; + SearchResult_t result; + int pos = m_currpage; + + result.box_count = 0; + result.page_num = -1; + + WideCharToMultiByte(CP_UTF8, 0, textToFind->Data() ,-1 ,needle ,cb ,nullptr, nullptr); + + if (m_searchpage == pos) + start = pos + dir; + else + start = pos; + + /* ProgressBar^ my_xaml_Progress = (ProgressBar^) (this->FindName("xaml_Progress")); + my_xaml_Progress->Value = start; + my_xaml_Progress->IsEnabled = true; + my_xaml_Progress->Opacity = 1.0; */ + + /* ProgressBar^ my_bar = (ProgressBar^) (xaml_MainGrid->FindName("search_progress")); + + if (my_bar == nullptr) + { + my_bar = ref new ProgressBar(); + my_bar->Name = "search_progress"; + my_bar->Maximum = this->m_num_pages; + my_bar->Value = start; + my_bar->IsIndeterminate = false; + my_bar->Height = 10; + my_bar->Width = 400; + xaml_MainGrid->Children->Append(my_bar); + } + else + { + my_bar->Value = start; + } */ + this->m_search_active = true; + + /* Do task lambdas here to avoid UI blocking issues */ + auto search_task = create_task([this, needle, dir, start, local_doc, &result]()->SearchResult_t + { + for (int i = start; i >= 0 && i < fz_count_pages(local_doc); i += dir) + { + result.box_count = search_page(local_doc, i, needle, NULL); + result.page_num = i; + + //my_xaml_Progress->Value = i; + if (result.box_count) + { + free(needle); + return result; + } + if (is_task_cancellation_requested()) + { + free(needle); + } + } + /* Todo no matches found alert */ + free(needle); + return result; + }, token); + /* Do the continuation on the ui thread */ + search_task.then([this](task<SearchResult_t> the_task) + { + SearchResult_t the_result = the_task.get(); + if (the_result.box_count > 0) + { + // ProgressBar^ xaml_Progress = (ProgressBar^) (this->FindName("xaml_Progress")); + // xaml_Progress->IsEnabled = false; + // xaml_Progress->Opacity = 0.0; + this->ShowSearchResults(the_result); + this->m_search_active = false; + } + }, task_continuation_context::use_current()); +} + +/* This is here to handle when we rotate or go into the snapview mode + ToDo add in data binding to change the scroll direction */ +void winapp::MainPage::GridSizeChanged() +{ + int height = this->ActualHeight; + int width = this->ActualWidth; + FlipView^ old_flip = m_curr_flipView; + + if (m_zoom_mode) + { + Canvas_Double(nullptr, nullptr); + } + if (height > width) + { + m_curr_flipView = this->xaml_vert_flipView; + if (!m_zoom_mode) + { + this->xaml_zoomCanvas->Height = height; + this->xaml_zoomCanvas->Width = width; + this->m_curr_flipView->Height = height; + this->m_curr_flipView->Width = width; + } + xaml_vert_flipView->IsEnabled = true; + xaml_vert_flipView->Opacity = 1; + xaml_horiz_flipView->IsEnabled = false; + xaml_horiz_flipView->Opacity = 0; } + else + { + m_curr_flipView = this->xaml_horiz_flipView; + if (!m_zoom_mode) + { + this->xaml_zoomCanvas->Height = height; + this->xaml_zoomCanvas->Width = width; + this->m_curr_flipView->Height = height; + this->m_curr_flipView->Width = width; + } + xaml_horiz_flipView->IsEnabled = true; + xaml_horiz_flipView->Opacity = 1; + xaml_vert_flipView->IsEnabled = false; + xaml_vert_flipView->Opacity = 0; + } + // if (m_num_pages > 0 && this->m_links_on) + // ClearLinksCanvas(); + + UpDatePageSizes(); + + if (m_num_pages > 0 && old_flip != m_curr_flipView && old_flip != nullptr) + { + if ((this->m_curr_flipView->SelectedIndex == this->m_currpage) && this->m_links_on) + FlipView_SelectionChanged(nullptr, nullptr); + else + this->m_curr_flipView->SelectedIndex = this->m_currpage; + } +} + +void winapp::MainPage::UpDatePageSizes() +{ + int width, height; + + /* Render our current pages at the new resolution and rescale the thumbnail + canvas if needed */ + if (m_num_pages > 0) + { + for (int i = 0; i < m_num_pages; i++) + { + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(i); + if (flipview_temp != nullptr && flipview_temp->Content != nullptr) + { + Canvas^ curr_canvas = (Canvas^) flipview_temp->Content; + int curr_canvas_height = curr_canvas->Height; + int curr_canvas_width = curr_canvas->Width; + + double scale_x = (double) curr_canvas_height / (double) this->xaml_zoomCanvas->Height; + double scale_y = (double) curr_canvas_width / (double) this->xaml_zoomCanvas->Width; + + double min_scale = max(scale_x, scale_y); + curr_canvas->Height = curr_canvas_height / min_scale; + curr_canvas->Width = curr_canvas_width / min_scale; + } + } + + // this->RenderRange(this->m_currpage, &height, &width); + } +}; + +void winapp::MainPage::ClearLinksCanvas() +{ + Canvas^ link_canvas = (Canvas^) (this->FindName("linkCanvas")); + if (link_canvas != nullptr) + { + Canvas^ Parent_Canvas = (Canvas^) link_canvas->Parent; + if (Parent_Canvas != nullptr) + { + Parent_Canvas->Children->RemoveAtEnd(); + delete link_canvas; + } + } +} + +/* Link related code */ +void winapp::MainPage::Linker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + m_links_on = !m_links_on; + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + if (m_links_on) + { + auto t = create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }); + + t.then([this]() + { + AddLinkCanvas(); + }, task_continuation_context::use_current()); + } + else + ClearLinksCanvas(); +} + +void winapp::MainPage::AddLinkCanvas() +{ + if (m_links_on) + { + ClearLinksCanvas(); + /* To render current page with links */ + fz_page *page = fz_load_page(m_doc, this->m_currpage); + m_links = fz_load_links(m_doc, page); + + if (m_links != NULL) + { + RectSize screenSize; + RectSize pageSize; + RectSize scale; + + screenSize.height = this->ActualHeight; + screenSize.width = this->ActualWidth; + + screenSize.width *= screenScale; + screenSize.height *= screenScale; + pageSize = measurePage(m_doc, page); + scale = fitPageToScreen(pageSize, screenSize); + + /* A new canvas */ + Canvas^ link_canvas = ref new Canvas(); + link_canvas->Name = "linkCanvas"; + + /* Get current flipview item */ + FlipViewItem ^flipview_temp = (FlipViewItem^) m_curr_flipView->Items->GetAt(this->m_currpage); + Canvas^ curr_canvas = (Canvas^) flipview_temp->Content; + + link_canvas->Height = curr_canvas->Height; + link_canvas->Width = curr_canvas->Width; + curr_canvas->Children->Append(link_canvas); + + /* Now add the rects */ + fz_link *curr_link = m_links; + fz_rect curr_rect; + + while (curr_link != NULL) + { + Rectangle^ a_rectangle = ref new Rectangle(); + TranslateTransform ^trans_transform = ref new TranslateTransform(); + + a_rectangle->IsTapEnabled = true; + curr_rect = curr_link->rect; + a_rectangle->Width = curr_rect.x1 - curr_rect.x0; + a_rectangle->Height = curr_rect.y1 - curr_rect.y0; + trans_transform->X = curr_rect.x0 * scale.width; + trans_transform->Y = curr_rect.y0 * scale.height; + a_rectangle->Width *= scale.width; + a_rectangle->Height *= scale.height; + a_rectangle->RenderTransform = trans_transform; + a_rectangle->Fill = m_linkcolor_brush; + link_canvas->Children->Append(a_rectangle); + curr_link = curr_link->next; + } + } + } +} + +bool winapp::MainPage::CheckRect(Rectangle^ curr_rect, Point pt) +{ + TranslateTransform ^trans_transform = (TranslateTransform^) curr_rect->RenderTransform; + Point rect_start; + Point rect_end; + + rect_start.X = trans_transform->X; + rect_start.Y = trans_transform->Y; + rect_end.X = rect_start.X + curr_rect->Width; + rect_end.Y = rect_start.Y + curr_rect->Height; + if ((rect_start.X < pt.X) && (pt.X < rect_end.X) && (rect_start.Y < pt.Y) && (pt.Y < rect_end.Y)) + return true; + return false; +} + +void winapp::MainPage::Canvas_Single_Tap(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e) +{ + /* See if we are currently viewing any links */ + if (m_links_on) + { + Point pt; + Canvas^ link_canvas = (Canvas^) (m_curr_flipView->FindName("linkCanvas")); + if (link_canvas != nullptr) + { + pt = e->GetPosition(link_canvas); + IIterator<UIElement^> ^it = link_canvas->Children->First(); + int count = 0; + while (it->HasCurrent) + { + Rectangle^ curr_rect = (Rectangle^) (it->Current); + if (CheckRect(curr_rect, pt)) + { + JumpToLink(count); + break; + } + it->MoveNext(); + count += 1; + } + } + } +} + +/* Window string hurdles.... */ +String^ char_to_String(char *char_in) +{ + size_t size = MultiByteToWideChar(CP_ACP, 0, char_in, -1, NULL, 0); + wchar_t *pw; + pw = new wchar_t[size]; + if (!pw) + { + delete []pw; + return nullptr; + } + MultiByteToWideChar (CP_ACP, 0, char_in, -1, pw, size ); + String^ str_out = ref new String(pw); + delete []pw; + return str_out; +} + +void winapp::MainPage::JumpToLink(int index) +{ + fz_link *link = this->m_links; + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + + /* Get through the list */ + for (int k = 0; k < index; k++) + link = link->next; + + if (link->dest.kind == FZ_LINK_GOTO) + { + int page = link->dest.ld.gotor.page; + this->m_curr_flipView->SelectedIndex = page; + this->m_currpage = page; + + if (this->m_links_on) + { + fz_drop_link(ctx, this->m_links); + } + } + else if (link->dest.kind == FZ_LINK_URI) + { + String^ str = char_to_String(link->dest.ld.uri.uri); + // The URI to launch + auto uri = ref new Windows::Foundation::Uri(str); + // Set the option to show a warning + auto launchOptions = ref new Windows::System::LauncherOptions(); + launchOptions->TreatAsUntrusted = true; + + // Launch the URI with a warning prompt + concurrency::task<bool> launchUriOperation(Windows::System::Launcher::LaunchUriAsync(uri, launchOptions)); + launchUriOperation.then([](bool success) + { + if (success) + { + // URI launched + } + else + { + // URI launch failed + } + }); + } +} + +void winapp::MainPage::FlattenOutline(fz_outline *outline, int level) +{ + char indent[8*4+1]; + if (level > 8) + level = 8; + memset(indent, ' ', level * 4); + indent[level * 4] = 0; + + String^ indent_str = char_to_String(indent); + String^ str_indent; + + while (outline) + { + if (outline->dest.kind == FZ_LINK_GOTO) + { + int page = outline->dest.ld.gotor.page; + if (page >= 0 && outline->title) + { + /* Add to the contents */ + m_content.page->Append(page); + String^ str = char_to_String(outline->title); + m_content.string_orig->Append(str); + str_indent = str_indent->Concat(indent_str, str); + m_content.string_margin->Append(str_indent); + m_content.num += 1; + } + } + FlattenOutline(outline->down, level + 1); + outline = outline->next; + } +} + +/* Bring up the contents */ +void winapp::MainPage::ContentDisplay(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + if (this->m_num_pages < 0) return; + + if (this->xaml_ListView->IsEnabled) + { + this->xaml_ListView->Opacity = 0.0; + this->xaml_ListView->IsEnabled = false; + this->m_curr_flipView->Opacity = 1.0; + this->m_curr_flipView->IsEnabled = true; + } + else + { + if (!m_content.num) + { + /* Make sure we are good to go */ + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + fz_outline *root = NULL; + + /* Create a task to wait until the renderer is available */ + auto t = create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this, &root]() + { + root = fz_load_outline(m_doc); + if (root) + { + /* Flatten here if needed */ + m_content.page = ref new Vector<int>; + m_content.string_margin = ref new Vector<String^>; + m_content.string_orig = ref new Vector<String^>; + + + FlattenOutline(root, 0); + fz_free_outline(ctx, root); + + /* Bring up the content now */ + for (int k = 0; k < m_content.num; k++) + { + auto content_val = ref new LVContents; + content_val->Page = m_content.page->GetAt(k); + content_val->ContentItem = m_content.string_margin->GetAt(k); + this->xaml_ListView->Items->Append(content_val); + } + } + if (m_content.num) + { + this->xaml_ListView->Opacity = 1.0; + this->xaml_ListView->IsEnabled = true; + this->m_curr_flipView->Opacity = 0.0; + this->m_curr_flipView->IsEnabled = false; + } + /* Check if thumb rendering is done. If not then restart */ + if (this->m_num_pages != this->m_thumb_page_start) + this->RenderThumbs(); + }, task_continuation_context::use_current()); + } + else + { + this->xaml_ListView->Opacity = 1.0; + this->xaml_ListView->IsEnabled = true; + this->m_curr_flipView->Opacity = 0.0; + this->m_curr_flipView->IsEnabled = false; + } + } + +} + +void winapp::MainPage::ContentSelected(Platform::Object^ sender, Windows::UI::Xaml::Controls::ItemClickEventArgs^ e) +{ + + LVContents^ b = safe_cast<LVContents^>(e->ClickedItem); + int newpage = b->Page; + + if (newpage > -1 && newpage < this->m_num_pages) + { + this->xaml_ListView->Opacity = 0.0; + this->xaml_ListView->IsEnabled = false; + this->m_curr_flipView->Opacity = 1.0; + this->m_curr_flipView->IsEnabled = true; + + int old_page = this->m_currpage; + this->m_curr_flipView->SelectedIndex = newpage; + this->m_currpage = newpage; + } +} + + + +void winapp::MainPage::Reflower(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + if (xaml_WebView->Visibility == Windows::UI::Xaml::Visibility::Visible) + { + /* Go back to flip view */ + xaml_WebView->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + this->xaml_MainGrid->Opacity = 1.0; + this->m_curr_flipView->IsEnabled = true; + } + else if (this->m_curr_flipView->IsEnabled) + { + /* Only go from flip view to reflow */ + RenderingStatus_t *ren_status = &m_ren_status; + cancellation_token_source *ThumbCancel = &m_ThumbCancel; + /* Create a task to wait until the renderer is available */ + auto t = create_task([ren_status, ThumbCancel]() + { + if (*ren_status == REN_THUMBS) + ThumbCancel->cancel(); + while (*ren_status != REN_AVAILABLE) { + } + }).then([this]() + { + fz_rect bounds; + fz_output *out; + fz_page *page = fz_load_page(m_doc, this->m_currpage); + fz_text_sheet *sheet = fz_new_text_sheet(ctx); + fz_text_page *text = fz_new_text_page(ctx, &fz_empty_rect); + fz_device *dev = fz_new_text_device(ctx, sheet, text); + + fz_run_page(m_doc, page, dev, &fz_identity, NULL); + fz_free_device(dev); + dev = NULL; + fz_text_analysis(ctx, sheet, text); + fz_buffer *buf = fz_new_buffer(ctx, 256); + out = fz_new_output_buffer(ctx, buf); + fz_print_text_page_html(ctx, out, text); + + xaml_WebView->Visibility = Windows::UI::Xaml::Visibility::Visible; + this->xaml_MainGrid->Opacity = 0.0; + this->m_curr_flipView->IsEnabled = false; + String^ html_string = char_to_String((char*) buf->data); + // WebViewBrush^ web_brush = ref new WebViewBrush(); + this->xaml_WebView->NavigateToString(html_string); + + // web_brush->SourceName = "xaml_WebView"; + // web_brush->Redraw(); + // this->xaml_zoomCanvas->Background = web_brush; + // xaml_WebView->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + + + /* Check if thumb rendering is done. If not then restart */ + if (this->m_num_pages != this->m_thumb_page_start) + this->RenderThumbs(); + }, task_continuation_context::use_current()); + } +} + + + +void winapp::MainPage::WebViewDelta(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationDeltaRoutedEventArgs^ e) +{ + double scale_val = e->Delta.Scale; +} + + +void winapp::MainPage::WebViewStarting(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationStartingRoutedEventArgs^ e) +{ + int zz = 1; +} + + +void winapp::MainPage::WebViewCompleted(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e) +{ + int zz = 1; +} + + +void winapp::MainPage::TempViewStarting(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationStartingRoutedEventArgs^ e) +{ + + int zz = 1; +} diff --git a/winrt/winapp/MainPage.xaml.h b/winrt/winapp/MainPage.xaml.h new file mode 100644 index 00000000..6f4cd242 --- /dev/null +++ b/winrt/winapp/MainPage.xaml.h @@ -0,0 +1,192 @@ +// +// MainPage.xaml.h +// Declaration of the MainPage class. +// + +#pragma once + +#include "MainPage.g.h" +#include "fitz.h" +#include "fitz-internal.h" +#include "muxps.h" +#include "mupdf.h" +#include "ppl.h" +#include <collection.h> +#include <algorithm> +#include "LVContents.h" + +using namespace Platform; +using namespace Concurrency; +using namespace Windows::Storage; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Media::Imaging; +using namespace Windows::Storage::Streams; +using namespace Windows::Foundation; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml::Shapes; +using namespace Windows::Foundation::Collections; +using namespace Platform::Collections; +using namespace ListViewContents; + +typedef enum { + REN_AVAILABLE = 0, + REN_THUMBS, + REN_UPDATE_THUMB_CANVAS, + REN_PAGE /* Used to ignore value when source based setting */ +} RenderingStatus_t; + +typedef struct SearchResult_s +{ + int box_count; + int page_num; +} SearchResult_t; + +typedef struct RectSize_s +{ + float width; + float height; +} RectSize; + +typedef struct spatial_info_s +{ + RectSize size; + double scale_factor; +} spatial_info_t; + +typedef struct thumbs_s +{ + Array<InMemoryRandomAccessStream^>^ raster; + Array<double>^ scale; + Array<Point>^ size; + Array<Canvas^>^ canvas_v; + Array<Canvas^>^ canvas_h; +} thumbs_t; + +typedef struct content_s +{ + int num; + Vector<int>^ page; + Vector<String^>^ string_orig; + Vector<String^>^ string_margin; +} content_t; + + + + +namespace winapp +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public ref class MainPage sealed + { + public: + MainPage(); + + protected: + virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; + + /* added */ + private: + LVContents temp; + bool m_file_open; + int m_currpage; + int m_searchpage; + int m_num_pages; + int m_slider_min; + int m_slider_max; + bool m_init_done; + bool m_first_time; + bool m_flip_from_searchlink; + bool m_links_on; + int m_search_rect_count; + Point m_display_size; + cancellation_token_source m_searchcts; + cancellation_token_source m_thumbcts; + long long m_memory_use; + double m_curr_zoom; + Point m_zoom_size; + Point m_touchpoint; + Point m_canvas_translate; + Windows::UI::Input::ManipulationDelta m_changes; + ImageBrush^ m_renderedImage; + ImageBrush^ m_blankPage; + Canvas^ m_renderedCanvas; + ImageBrush^ m_zoomedImage; + SolidColorBrush^ m_textcolor_brush; + SolidColorBrush^ m_linkcolor_brush; + FlipView^ m_curr_flipView; + thumbs_t m_thumbnails; + RenderingStatus_t m_ren_status; + int m_thumb_page_start; + int m_thumb_page_stop; + cancellation_token_source m_ThumbCancel; + fz_link *m_links; + content_t m_content; + bool m_zoom_mode; + bool m_from_doubleflip; + bool m_scaling_occured; + bool m_insearch; /* Used for UI display */ + bool m_search_active; /* Used to avoid multiple UI clicks */ + bool m_sliderchange; + bool m_update_flip; + void Picker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void Searcher(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void OpenDocumentPrep(StorageFile^ file); + void OpenDocument(StorageFile^ file); + task<int> RenderRange(int curr_page, int *height, int *width); + void CleanUp(); + void AddPage(int page_num); + void ReplacePage(int page_num); + void AddBlankPage(int page_num); + void AddBlankPage(int page_num, FlipView^ flip_view); + void CreateBlank(int width, int height); + void HandleFileNotFoundException(Platform::COMException^ e); + void NotifyUserFileNotExist(); + void SetupZoomCanvas(); + RectSize currPageSize(int page); + void Slider_ValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e); + void Slider_Released(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e); + void FlipView_SelectionChanged(Object^ sender, SelectionChangedEventArgs^ e); + void FlipView_Double(Object^ sender, DoubleTappedRoutedEventArgs^ e); + void Canvas_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e); + void Canvas_ManipulationStarted(Object^ sender, ManipulationStartedRoutedEventArgs^ e); + void Canvas_ManipulationStarting(Object^ sender, ManipulationStartingRoutedEventArgs^ e); + void Canvas_Double(Object^ sender, DoubleTappedRoutedEventArgs^ e); + void SearchNext(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void SearchPrev(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void ResetSearch(void); + void CancelSearch(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void SearchInDirection(int dir, String^ textToFind); + void ShowSearchResults(SearchResult_t result); + void GridSizeChanged(); + void UpDatePageSizes(); + void ShowThumbnail(); + void Canvas_ManipulationCompleted(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e); + void AddThumbNail(int page_num, FlipView^ flip_view); + spatial_info_t InitSpatial(double scale); + void InitThumbnails(); + void RenderThumbs(); + void SetThumb(int page_num); + void ReleasePages(int old_page, int new_page); + void Linker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void AddLinkCanvas(); + void Canvas_Single_Tap(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e); + bool CheckRect(Rectangle^ curr_rect, Point pt); + void JumpToLink(int index); + void ClearLinksCanvas(); + void ContentDisplay(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void FlattenOutline(fz_outline *outline, int level); + void ListView_Single_Tap(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e); + void ContentSelected(Platform::Object^ sender, Windows::UI::Xaml::Controls::ItemClickEventArgs^ e); + void ContentChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e); + void Reflower(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void WebViewDelta(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationDeltaRoutedEventArgs^ e); + void WebViewStarting(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationStartingRoutedEventArgs^ e); + void WebViewCompleted(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e); + void TempViewStarting(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationStartingRoutedEventArgs^ e); +}; +} diff --git a/winrt/winapp/Package.appxmanifest b/winrt/winapp/Package.appxmanifest new file mode 100644 index 00000000..b890a743 --- /dev/null +++ b/winrt/winapp/Package.appxmanifest @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest"> + <Identity Name="d9462f36-8b87-4b46-897a-66f6c91774ec" Publisher="CN=michaelv" Version="1.0.0.0" /> + <Properties> + <DisplayName>winapp</DisplayName> + <PublisherDisplayName>michaelv</PublisherDisplayName> + <Logo>Assets\mupdf_storelogo.png</Logo> + </Properties> + <Prerequisites> + <OSMinVersion>6.2.1</OSMinVersion> + <OSMaxVersionTested>6.2.1</OSMaxVersionTested> + </Prerequisites> + <Resources> + <Resource Language="x-generate" /> + </Resources> + <Applications> + <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="winapp.App"> + <VisualElements DisplayName="winapp" Logo="Assets\mupdf_logo.png" SmallLogo="Assets\mupdf_smallogo.png" Description="winapp" ForegroundText="light" BackgroundColor="#464646"> + <DefaultTile ShowName="allLogos" /> + <SplashScreen Image="Assets\mupdf_splash.png" /> + <InitialRotationPreference> + <Rotation Preference="portrait" /> + <Rotation Preference="landscape" /> + <Rotation Preference="portraitFlipped" /> + <Rotation Preference="landscapeFlipped" /> + </InitialRotationPreference> + </VisualElements> + <Extensions> + <Extension Category="windows.fileOpenPicker"> + <FileOpenPicker> + <SupportedFileTypes> + <FileType>.pdf</FileType> + <FileType>.xps</FileType> + <FileType>.oxps</FileType> + </SupportedFileTypes> + </FileOpenPicker> + </Extension> + <Extension Category="windows.fileTypeAssociation"> + <FileTypeAssociation Name=".pdf"> + <SupportedFileTypes> + <FileType>.pdf</FileType> + <FileType>.xps</FileType> + <FileType>.oxps</FileType> + </SupportedFileTypes> + </FileTypeAssociation> + </Extension> + </Extensions> + </Application> + </Applications> + <Capabilities> + <Capability Name="documentsLibrary" /> + <Capability Name="internetClient" /> + </Capabilities> +</Package>
\ No newline at end of file diff --git a/winrt/winapp/pch.cpp b/winrt/winapp/pch.cpp new file mode 100644 index 00000000..01484ff5 --- /dev/null +++ b/winrt/winapp/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/winrt/winapp/pch.h b/winrt/winapp/pch.h new file mode 100644 index 00000000..751c0efb --- /dev/null +++ b/winrt/winapp/pch.h @@ -0,0 +1,10 @@ +// +// pch.h +// Header for standard system include files. +// + +#pragma once + +#include <collection.h> +#include <ppltasks.h> +#include "App.xaml.h" diff --git a/winrt/winapp/winapp.vcxproj b/winrt/winapp/winapp.vcxproj new file mode 100644 index 00000000..49bf0062 --- /dev/null +++ b/winrt/winapp/winapp.vcxproj @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|ARM"> + <Configuration>Debug</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Memento|ARM"> + <Configuration>Memento</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Memento|Win32"> + <Configuration>Memento</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Memento|x64"> + <Configuration>Memento</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM"> + <Configuration>Release</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{35c27df7-0cf2-413e-9c7a-6436afee5d4e}</ProjectGuid> + <RootNamespace>winapp</RootNamespace> + <DefaultLanguage>en-US</DefaultLanguage> + <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> + <AppContainerApplication>true</AppContainerApplication> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|ARM'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|ARM'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <PackageCertificateKeyFile>winapp_TemporaryKey.pfx</PackageCertificateKeyFile> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|ARM'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(Platform)\$(Configuration)\</OutDir> + <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <AdditionalUsingDirectories> + </AdditionalUsingDirectories> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader>Use</PrecompiledHeader> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <AdditionalUsingDirectories> + </AdditionalUsingDirectories> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PrecompiledHeader>Use</PrecompiledHeader> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <AdditionalUsingDirectories> + </AdditionalUsingDirectories> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Memento|ARM'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <AdditionalUsingDirectories> + </AdditionalUsingDirectories> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <AdditionalIncludeDirectories>../../xps/;../../fitz/;../../pdf/;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <AdditionalIncludeDirectories>../../xps/;../../fitz/;../../pdf/;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/$(Configuration)/libmupdf_winRT.lib;../$(Platform)/$(Configuration)/libthirdparty_winRT.lib;../$(Platform)/$(Configuration)/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/Debug/libmupdf_winRT.lib;../$(Platform)/Debug/libthirdparty_winRT.lib;../$(Platform)/Debug/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/Debug/libmupdf_winRT.lib;../$(Platform)/Debug/libthirdparty_winRT.lib;../$(Platform)/Debug/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> + <DisableSpecificWarnings>4453</DisableSpecificWarnings> + <AdditionalIncludeDirectories>../../fitz/;../../pdf/;../../xps/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies);../$(Platform)/Debug/libmupdf_winRT.lib;../$(Platform)/Debug/libthirdparty_winRT.lib;../$(Platform)/Debug/libmupdf-nov8_winRT.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="App.xaml.h"> + <DependentUpon>App.xaml</DependentUpon> + </ClInclude> + <ClInclude Include="LVContents.h" /> + <ClInclude Include="MainPage.xaml.h"> + <DependentUpon>MainPage.xaml</DependentUpon> + </ClInclude> + <ClInclude Include="pch.h" /> + </ItemGroup> + <ItemGroup> + <ApplicationDefinition Include="App.xaml"> + <SubType>Designer</SubType> + </ApplicationDefinition> + <Page Include="Common\StandardStyles.xaml"> + <SubType>Designer</SubType> + </Page> + <Page Include="MainPage.xaml"> + <SubType>Designer</SubType> + </Page> + </ItemGroup> + <ItemGroup> + <AppxManifest Include="Package.appxmanifest"> + <SubType>Designer</SubType> + </AppxManifest> + <None Include="winapp_TemporaryKey.pfx" /> + </ItemGroup> + <ItemGroup> + <Image Include="Assets\mupdf_logo.png" /> + <Image Include="Assets\mupdf_smallogo.png" /> + <Image Include="Assets\mupdf_splash.png" /> + <Image Include="Assets\mupdf_storelogo.png" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="App.xaml.cpp"> + <DependentUpon>App.xaml</DependentUpon> + </ClCompile> + <ClCompile Include="LVContents.cpp" /> + <ClCompile Include="MainPage.xaml.cpp"> + <DependentUpon>MainPage.xaml</DependentUpon> + </ClCompile> + <ClCompile Include="pch.cpp"> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Memento|ARM'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> + </ClCompile> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/winrt/winapp/winapp.vcxproj.filters b/winrt/winapp/winapp.vcxproj.filters new file mode 100644 index 00000000..400db2ec --- /dev/null +++ b/winrt/winapp/winapp.vcxproj.filters @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Common"> + <UniqueIdentifier>35c27df7-0cf2-413e-9c7a-6436afee5d4e</UniqueIdentifier> + </Filter> + <Filter Include="Assets"> + <UniqueIdentifier>10cafe4f-106e-4600-bee1-3f5891ecf28a</UniqueIdentifier> + </Filter> + <Page Include="Common\StandardStyles.xaml"> + <Filter>Common</Filter> + </Page> + </ItemGroup> + <ItemGroup> + <ApplicationDefinition Include="App.xaml" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="App.xaml.cpp" /> + <ClCompile Include="MainPage.xaml.cpp" /> + <ClCompile Include="pch.cpp" /> + <ClCompile Include="LVContents.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="App.xaml.h" /> + <ClInclude Include="MainPage.xaml.h" /> + <ClInclude Include="pch.h" /> + <ClInclude Include="LVContents.h" /> + </ItemGroup> + <ItemGroup> + <AppxManifest Include="Package.appxmanifest" /> + </ItemGroup> + <ItemGroup> + <None Include="winapp_TemporaryKey.pfx" /> + </ItemGroup> + <ItemGroup> + <Page Include="MainPage.xaml" /> + </ItemGroup> + <ItemGroup> + <Image Include="Assets\mupdf_logo.png"> + <Filter>Assets</Filter> + </Image> + <Image Include="Assets\mupdf_smallogo.png"> + <Filter>Assets</Filter> + </Image> + <Image Include="Assets\mupdf_splash.png"> + <Filter>Assets</Filter> + </Image> + <Image Include="Assets\mupdf_storelogo.png"> + <Filter>Assets</Filter> + </Image> + </ItemGroup> +</Project>
\ No newline at end of file |