summaryrefslogtreecommitdiff
path: root/winrt/winapp
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2013-04-04 16:41:55 +0100
committerRobin Watts <robin.watts@artifex.com>2013-05-16 19:25:40 +0100
commitcb6fcf0d874a8e095a8781751a78cdfb35c10ab3 (patch)
tree0be31731b0285525e1bcbb7efcf78c8ab57deef6 /winrt/winapp
parent0de3169c52435458583955ac03fc57516d5d372e (diff)
downloadmupdf-cb6fcf0d874a8e095a8781751a78cdfb35c10ab3.tar.xz
Rename winRT to winrt
Diffstat (limited to 'winrt/winapp')
-rw-r--r--winrt/winapp/App.xaml20
-rw-r--r--winrt/winapp/App.xaml.cpp109
-rw-r--r--winrt/winapp/App.xaml.h25
-rw-r--r--winrt/winapp/Assets/mupdf_logo.pngbin0 -> 12690 bytes
-rw-r--r--winrt/winapp/Assets/mupdf_smallogo.pngbin0 -> 4108 bytes
-rw-r--r--winrt/winapp/Assets/mupdf_splash.pngbin0 -> 23297 bytes
-rw-r--r--winrt/winapp/Assets/mupdf_storelogo.pngbin0 -> 5382 bytes
-rw-r--r--winrt/winapp/Common/StandardStyles.xaml1855
-rw-r--r--winrt/winapp/MainPage.xaml111
-rw-r--r--winrt/winapp/MainPage.xaml.cpp1995
-rw-r--r--winrt/winapp/MainPage.xaml.h192
-rw-r--r--winrt/winapp/Package.appxmanifest54
-rw-r--r--winrt/winapp/pch.cpp6
-rw-r--r--winrt/winapp/pch.h10
-rw-r--r--winrt/winapp/winapp.vcxproj327
-rw-r--r--winrt/winapp/winapp.vcxproj.filters52
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
new file mode 100644
index 00000000..ba6b005d
--- /dev/null
+++ b/winrt/winapp/Assets/mupdf_logo.png
Binary files differ
diff --git a/winrt/winapp/Assets/mupdf_smallogo.png b/winrt/winapp/Assets/mupdf_smallogo.png
new file mode 100644
index 00000000..15997f5c
--- /dev/null
+++ b/winrt/winapp/Assets/mupdf_smallogo.png
Binary files differ
diff --git a/winrt/winapp/Assets/mupdf_splash.png b/winrt/winapp/Assets/mupdf_splash.png
new file mode 100644
index 00000000..5f011d17
--- /dev/null
+++ b/winrt/winapp/Assets/mupdf_splash.png
Binary files differ
diff --git a/winrt/winapp/Assets/mupdf_storelogo.png b/winrt/winapp/Assets/mupdf_storelogo.png
new file mode 100644
index 00000000..1b6473d4
--- /dev/null
+++ b/winrt/winapp/Assets/mupdf_storelogo.png
Binary files differ
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">&#xE071;</x:String>
+ <x:String x:Key="BackButtonSnappedGlyph">&#xE0BA;</x:String>
+ </ResourceDictionary>
+
+ <ResourceDictionary x:Key="HighContrast">
+ <x:String x:Key="BackButtonGlyph">&#xE071;</x:String>
+ <x:String x:Key="BackButtonSnappedGlyph">&#xE0C4;</x:String>
+ </ResourceDictionary>
+ </ResourceDictionary.ThemeDictionaries>
+
+ <x:String x:Key="ChevronGlyph">&#xE26B;</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="&#xE0A8;" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemBackgroundThemeBrush}"/>
+ <TextBlock x:Name="OutlineGlyph" Text="&#xE0A7;" 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="&#xE11B;"/>
+ </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="&#xE11A;"/>
+ </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="&#xE1A5;"/>
+ </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="&#xE111;"/>
+ </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="&#xE112;"/>
+ </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="&#xE10A;"/>
+ </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="&#xE115;"/>
+ </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="&#xE167;"/>
+ </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="&#xE179;"/>
+ </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="&#xE18B;"/>
+ </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="&#xE100;"/>
+ </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="&#xE101;"/>
+ </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="&#xE102;"/>
+ </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="&#xE103;"/>
+ </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="&#xE104;"/>
+ </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="&#xE105;"/>
+ </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="&#xE106;"/>
+ </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="&#xE107;"/>
+ </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="&#xE108;"/>
+ </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="&#xE109;"/>
+ </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="&#xE10B;"/>
+ </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="&#xE10C;"/>
+ </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="&#xE10D;"/>
+ </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="&#xE10E;"/>
+ </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="&#xE10F;"/>
+ </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="&#xE110;"/>
+ </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="&#xE113;"/>
+ </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="&#xE114;"/>
+ </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="&#xE115;"/>
+ </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="&#xE116;"/>
+ </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="&#xE117;"/>
+ </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="&#xE118;"/>
+ </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="&#xE119;"/>
+ </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="&#xE11C;"/>
+ </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="&#xE11D;"/>
+ </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="&#xE11E;"/>
+ </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="&#xE11F;"/>
+ </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="&#xE120;"/>
+ </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="&#xE121;"/>
+ </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="&#xE122;"/>
+ </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="&#xE123;"/>
+ </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="&#xE124;"/>
+ </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="&#xE125;"/>
+ </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="&#xE126;"/>
+ </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="&#xE127;"/>
+ </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="&#xE128;"/>
+ </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="&#xE129;"/>
+ </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="&#xE12A;"/>
+ </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="&#xE12B;"/>
+ </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="&#xE12C;"/>
+ </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="&#xE12D;"/>
+ </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="&#xE12E;"/>
+ </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="&#xE12F;"/>
+ </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="&#xE130;"/>
+ </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="&#xE131;"/>
+ </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="&#xE132;"/>
+ </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="&#xE133;"/>
+ </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="&#xE134;"/>
+ </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="&#xE135;"/>
+ </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="&#xE136;"/>
+ </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="&#xE137;"/>
+ </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="&#xE138;"/>
+ </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="&#xE139;"/>
+ </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="&#xE13A;"/>
+ </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="&#xE13B;"/>
+ </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="&#xE13C;"/>
+ </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="&#xE13D;"/>
+ </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="&#xE13E;"/>
+ </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="&#xE141;"/>
+ </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="&#xE142;"/>
+ </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="&#xE143;"/>
+ </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="&#xE144;"/>
+ </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="&#xE145;"/>
+ </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="&#xE146;"/>
+ </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="&#xE147;"/>
+ </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="&#xE148;"/>
+ </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="&#xE149;"/>
+ </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="&#xE14A;"/>
+ </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="&#xE14B;"/>
+ </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="&#xE14C;"/>
+ </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="&#xE14D;"/>
+ </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="&#xE14E;"/>
+ </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="&#xE14F;"/>
+ </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="&#xE150;"/>
+ </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="&#xE151;"/>
+ </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="&#xE155;"/>
+ </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="&#xE156;"/>
+ </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="&#xE158;"/>
+ </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="&#xE159;"/>
+ </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="&#xE15A;"/>
+ </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="&#xE15B;"/>
+ </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="&#xE15C;"/>
+ </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="&#xE15D;"/>
+ </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="&#xE15E;"/>
+ </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="&#xE15F;"/>
+ </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="&#xE160;"/>
+ </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="&#xE161;"/>
+ </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="&#xE162;"/>
+ </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="&#xE163;"/>
+ </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="&#xE164;"/>
+ </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="&#xE165;"/>
+ </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="&#xE166;"/>
+ </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="&#xE167;"/>
+ </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="&#xE168;"/>
+ </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="&#xE169;"/>
+ </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="&#xE16A;"/>
+ </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="&#xE16B;"/>
+ </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="&#xE16C;"/>
+ </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="&#xE16D;"/>
+ </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="&#xE16E;"/>
+ </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="&#xE16F;"/>
+ </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="&#xE170;"/>
+ </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="&#xE171;"/>
+ </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="&#xE172;"/>
+ </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="&#xE173;"/>
+ </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="&#xE174;"/>
+ </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="&#xE178;"/>
+ </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="&#xE179;"/>
+ </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="&#xE17A;"/>
+ </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="&#xE17B;"/>
+ </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="&#xE17C;"/>
+ </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="&#xE17D;"/>
+ </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="&#xE181;"/>
+ </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="&#xE182;"/>
+ </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="&#xE183;"/>
+ </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="&#xE184;"/>
+ </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="&#xE185;"/>
+ </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="&#xE186;"/>
+ </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="&#xE187;"/>
+ </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="&#xE188;"/>
+ </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="&#xE189;"/>
+ </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="&#xE18A;"/>
+ </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="&#xE18B;"/>
+ </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="&#xE18C;"/>
+ </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="&#xE18D;"/>
+ </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="&#xE190;"/>
+ </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="&#xE191;"/>
+ </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="&#xE192;"/>
+ </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="&#xE193;"/>
+ </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="&#xE194;"/>
+ </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="&#xE195;"/>
+ </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="&#xE196;"/>
+ </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="&#xE197;"/>
+ </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="&#xE198;"/>
+ </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="&#xE199;"/>
+ </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="&#xE19A;"/>
+ </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="&#xE19B;"/>
+ </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="&#xE19C;"/>
+ </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="&#xE19D;"/>
+ </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="&#xE19E;"/>
+ </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="&#xE19F;"/>
+ </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="&#xE1A0;"/>
+ </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="&#xE1A1;"/>
+ </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="&#xE1A2;"/>
+ </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="&#xE1A3;"/>
+ </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="&#xE1A4;"/>
+ </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="&#xE1A5;"/>
+ </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="&#xE1A6;"/>
+ </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="&#xE1A7;"/>
+ </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="&#xE1C3;"/>
+ </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="&#xE1C4;"/>
+ </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="&#xE1C5;"/>
+ </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="&#xE1C6;"/>
+ </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="&#xE1C7;"/>
+ </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="&#xE1C8;"/>
+ </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="&#xE1C9;"/>
+ </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="&#xE1CA;"/>
+ </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="&#xE1CB;"/>
+ </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="&#xE1CC;"/>
+ </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="&#xE1CD;"/>
+ </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="&#xE1CE;"/>
+ </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="&#xE1CF;"/>
+ </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="&#xE1D0;"/>
+ </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="&#xE1D1;"/>
+ </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="&#xE1D2;"/>
+ </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="&#xE1D3;"/>
+ </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="&#xE1D4;"/>
+ </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="&#xE1D5;"/>
+ </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="&#xE1D6;"/>
+ </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="&#xE1D7;"/>
+ </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="&#xE1D8;"/>
+ </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="&#xE1D9;"/>
+ </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="&#xE1DA;"/>
+ </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="&#xE1DB;"/>
+ </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="&#xE1DD;"/>
+ </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="&#xE1DE;"/>
+ </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="&#xE1DF;"/>
+ </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="&#xE1E0;"/>
+ </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="&#xE1E1;"/>
+ </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="&#xE1E2;"/>
+ </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="&#xE1E3;"/>
+ </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="&#xE1E4;"/>
+ </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="&#xE1E5;"/>
+ </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="&#xE1E6;"/>
+ </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="&#xE1E7;"/>
+ </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="&#xE1E8;"/>
+ </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="&#xE1E9;"/>
+ </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="&#xE0A8;" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/>
+ <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/>
+ <TextBlock x:Name="ArrowGlyph" Text="&#xE0A6;" 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="&#xE0D4;" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/>
+ <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonSnappedGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/>
+ <TextBlock x:Name="ArrowGlyph" Text="&#xE0C4;" 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