From 67d4955664ec388a8f8ae4dc4ae1dfd75f2cd758 Mon Sep 17 00:00:00 2001 From: Tsanie Lily Date: Sun, 3 May 2020 23:46:08 +0800 Subject: [PATCH] initial --- .gitignore | 405 ++++++++++++++++++ Pixiview.iOS/AppDelegate.cs | 27 ++ .../AppIcon.appiconset/Contents.json | 117 +++++ .../AppIcon.appiconset/Icon1024.png | Bin 0 -> 45281 bytes .../AppIcon.appiconset/Icon120.png | Bin 0 -> 4876 bytes .../AppIcon.appiconset/Icon152.png | Bin 0 -> 5717 bytes .../AppIcon.appiconset/Icon167.png | Bin 0 -> 6130 bytes .../AppIcon.appiconset/Icon180.png | Bin 0 -> 6529 bytes .../AppIcon.appiconset/Icon20.png | Bin 0 -> 2378 bytes .../AppIcon.appiconset/Icon29.png | Bin 0 -> 2617 bytes .../AppIcon.appiconset/Icon40.png | Bin 0 -> 2906 bytes .../AppIcon.appiconset/Icon58.png | Bin 0 -> 3389 bytes .../AppIcon.appiconset/Icon60.png | Bin 0 -> 3428 bytes .../AppIcon.appiconset/Icon76.png | Bin 0 -> 3794 bytes .../AppIcon.appiconset/Icon80.png | Bin 0 -> 3887 bytes .../AppIcon.appiconset/Icon87.png | Bin 0 -> 4073 bytes Pixiview.iOS/Entitlements.plist | 7 + Pixiview.iOS/Info.plist | 48 +++ Pixiview.iOS/Main.cs | 15 + Pixiview.iOS/Pixiview.iOS.csproj | 147 +++++++ Pixiview.iOS/Properties/AssemblyInfo.cs | 35 ++ Pixiview.iOS/Renderers/AdaptedPageRenderer.cs | 68 +++ .../Resources/LaunchScreen.storyboard | 26 ++ Pixiview.sln | 57 +++ Pixiview/App.xaml | 28 ++ Pixiview/App.xaml.cs | 58 +++ Pixiview/AssemblyInfo.cs | 3 + Pixiview/MainPage.xaml | 18 + Pixiview/MainPage.xaml.cs | 34 ++ Pixiview/Pixiview.csproj | 21 + Pixiview/UI/AdaptedPage.cs | 20 + Pixiview/UI/NavigationTitle.cs | 104 +++++ Pixiview/UI/StyleDefinition.cs | 13 + Pixiview/Utils/Stores.cs | 44 ++ 34 files changed, 1295 insertions(+) create mode 100644 .gitignore create mode 100644 Pixiview.iOS/AppDelegate.cs create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png create mode 100644 Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png create mode 100644 Pixiview.iOS/Entitlements.plist create mode 100644 Pixiview.iOS/Info.plist create mode 100644 Pixiview.iOS/Main.cs create mode 100644 Pixiview.iOS/Pixiview.iOS.csproj create mode 100644 Pixiview.iOS/Properties/AssemblyInfo.cs create mode 100644 Pixiview.iOS/Renderers/AdaptedPageRenderer.cs create mode 100644 Pixiview.iOS/Resources/LaunchScreen.storyboard create mode 100644 Pixiview.sln create mode 100644 Pixiview/App.xaml create mode 100644 Pixiview/App.xaml.cs create mode 100644 Pixiview/AssemblyInfo.cs create mode 100644 Pixiview/MainPage.xaml create mode 100644 Pixiview/MainPage.xaml.cs create mode 100644 Pixiview/Pixiview.csproj create mode 100644 Pixiview/UI/AdaptedPage.cs create mode 100644 Pixiview/UI/NavigationTitle.cs create mode 100644 Pixiview/UI/StyleDefinition.cs create mode 100644 Pixiview/Utils/Stores.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed9dbcb --- /dev/null +++ b/.gitignore @@ -0,0 +1,405 @@ +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# content below from: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ \ No newline at end of file diff --git a/Pixiview.iOS/AppDelegate.cs b/Pixiview.iOS/AppDelegate.cs new file mode 100644 index 0000000..14d3c98 --- /dev/null +++ b/Pixiview.iOS/AppDelegate.cs @@ -0,0 +1,27 @@ +using Foundation; +using UIKit; + +namespace Pixiview.iOS +{ + // The UIApplicationDelegate for the application. This class is responsible for launching the + // User Interface of the application, as well as listening (and optionally responding) to + // application events from iOS. + [Register("AppDelegate")] + public partial class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate + { + // + // This method is invoked when the application has loaded and is ready to run. In this + // method you should instantiate the window, load the UI into it and then make the window + // visible. + // + // You have 17 seconds to return from this method, or iOS will terminate your application. + // + public override bool FinishedLaunching(UIApplication app, NSDictionary options) + { + Xamarin.Forms.Forms.Init(); + LoadApplication(new App()); + + return base.FinishedLaunching(app, options); + } + } +} diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..98f4d03 --- /dev/null +++ b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,117 @@ +{ + "images": [ + { + "scale": "2x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon40.png" + }, + { + "scale": "3x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon60.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon58.png" + }, + { + "scale": "3x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon87.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon80.png" + }, + { + "scale": "3x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "2x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "3x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon180.png" + }, + { + "scale": "1x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon20.png" + }, + { + "scale": "2x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "1x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon29.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon58.png" + }, + { + "scale": "1x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon80.png" + }, + { + "scale": "1x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon76.png" + }, + { + "scale": "2x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon152.png" + }, + { + "scale": "2x", + "size": "83.5x83.5", + "idiom": "ipad", + "filename": "Icon167.png" + }, + { + "scale": "1x", + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon1024.png" + } + ], + "properties": {}, + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b2982a96bdb5a67c689ab6e4ea3c291fcb684199 GIT binary patch literal 45281 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 literal 0 HcmV?d00001 diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png new file mode 100644 index 0000000000000000000000000000000000000000..e85949e3d1b13645b5483d3ba5af2851847f3dde GIT binary patch literal 4876 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 mlC|?D2Vxp=5 literal 0 HcmV?d00001 diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ed7fb42594f9d6796927d6f10d115036efbd88 GIT binary patch literal 6130 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 literal 0 HcmV?d00001 diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png new file mode 100644 index 0000000000000000000000000000000000000000..eed4f75811d65f033b5c9ad267168e91d541a5e6 GIT binary patch literal 6529 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 literal 0 HcmV?d00001 diff --git a/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png b/Pixiview.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png new file mode 100644 index 0000000000000000000000000000000000000000..aed090156b8a8298a44606d5e7666dca0955779d GIT binary patch literal 3794 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 L+-sL(b134UK=G{; literal 0 HcmV?d00001 diff --git a/Pixiview.iOS/Entitlements.plist b/Pixiview.iOS/Entitlements.plist new file mode 100644 index 0000000..e9a3005 --- /dev/null +++ b/Pixiview.iOS/Entitlements.plist @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Pixiview.iOS/Info.plist b/Pixiview.iOS/Info.plist new file mode 100644 index 0000000..8e84970 --- /dev/null +++ b/Pixiview.iOS/Info.plist @@ -0,0 +1,48 @@ + + + + + UIDeviceFamily + + 1 + 2 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + MinimumOSVersion + 11.0 + CFBundleDisplayName + Pixiview + CFBundleIdentifier + org.tsanie.Pixiview + CFBundleVersion + 1.0 + UILaunchStoryboardName + LaunchScreen + CFBundleName + Pixiview + XSAppIconAssets + Assets.xcassets/AppIcon.appiconset + UIAppFonts + + fa-light-300.ttf + fa-regular-400.ttf + fa-solid-900.ttf + + UIViewControllerBasedStatusBarAppearance + + UIStatusBarStyle + UIStatusBarStyleDefault + + diff --git a/Pixiview.iOS/Main.cs b/Pixiview.iOS/Main.cs new file mode 100644 index 0000000..bb47b41 --- /dev/null +++ b/Pixiview.iOS/Main.cs @@ -0,0 +1,15 @@ +using UIKit; + +namespace Pixiview.iOS +{ + public class Application + { + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, "AppDelegate"); + } + } +} diff --git a/Pixiview.iOS/Pixiview.iOS.csproj b/Pixiview.iOS/Pixiview.iOS.csproj new file mode 100644 index 0000000..a297a95 --- /dev/null +++ b/Pixiview.iOS/Pixiview.iOS.csproj @@ -0,0 +1,147 @@ + + + + Debug + iPhoneSimulator + 8.0.30703 + 2.0 + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051} + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {6143fdea-f3c2-4a09-aafa-6e230626515e} + Exe + Pixiview.iOS + Resources + Pixiview.iOS + true + NSUrlSessionHandler + automatic + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG + prompt + 4 + x86_64 + None + true + + + none + true + bin\iPhoneSimulator\Release + prompt + 4 + None + x86_64 + + + true + full + false + bin\iPhone\Debug + DEBUG + prompt + 4 + ARM64 + iPhone Developer + true + Entitlements.plist + None + -all + + + none + true + bin\iPhone\Release + prompt + 4 + ARM64 + iPhone Developer + Entitlements.plist + + + + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + + + + + + + + + + {7F310047-BCBB-45F5-BD16-F246BA72AF73} + Pixiview + + + + + + + + + + + + \ No newline at end of file diff --git a/Pixiview.iOS/Properties/AssemblyInfo.cs b/Pixiview.iOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..01ee389 --- /dev/null +++ b/Pixiview.iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Pixiview.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Pixiview.iOS")] +[assembly: AssemblyCopyright("Copyright © Tsanie 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs b/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs new file mode 100644 index 0000000..248e127 --- /dev/null +++ b/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs @@ -0,0 +1,68 @@ +using System.Diagnostics.CodeAnalysis; +using Pixiview.iOS.Renderers; +using Pixiview.UI; +using Pixiview.Utils; +using UIKit; +using Xamarin.Forms; +using Xamarin.Forms.Platform.iOS; + +[assembly: ExportRenderer(typeof(AdaptedPage), typeof(AdaptedPageRenderer))] +namespace Pixiview.iOS.Renderers +{ + public class AdaptedPageRenderer : PageRenderer + { + public override void ViewDidLoad() + { + base.ViewDidLoad(); + + if (Element is AdaptedPage page) + { + page.OnLoad(); + } + } + + public override void ViewDidAppear(bool animated) + { + base.ViewDidAppear(animated); + + var style = ConvertStyle(StatusBar.GetStatusBarStyle(Element)); + if (UIApplication.SharedApplication.StatusBarStyle != style) + { + SetStatusBarStyle(style); + } + } + + private void SetStatusBarStyle(UIStatusBarStyle style) + { + if (style == UIStatusBarStyle.BlackOpaque) + { + UIApplication.SharedApplication.SetStatusBarHidden(true, UIStatusBarAnimation.Fade); + } + else + { + UIApplication.SharedApplication.SetStatusBarStyle(style, true); + UIApplication.SharedApplication.SetStatusBarHidden(false, UIStatusBarAnimation.Fade); + } + + SetNeedsStatusBarAppearanceUpdate(); + } + + [SuppressMessage("Code Notifications", "XI0002:Notifies you from using newer Apple APIs when targeting an older OS version", Justification = "")] + [SuppressMessage("Style", "IDE0066:Convert switch statement to expression", Justification = "")] + private UIStatusBarStyle ConvertStyle(StatusBarStyles style) + { + switch (style) + { + case StatusBarStyles.DarkText: + return UIStatusBarStyle.DarkContent; + case StatusBarStyles.WhiteText: + return UIStatusBarStyle.LightContent; + case StatusBarStyles.Hidden: + return UIStatusBarStyle.BlackOpaque; + case StatusBarStyles.Default: + default: + return UIStatusBarStyle.Default; + } + } + } +} diff --git a/Pixiview.iOS/Resources/LaunchScreen.storyboard b/Pixiview.iOS/Resources/LaunchScreen.storyboard new file mode 100644 index 0000000..ec605eb --- /dev/null +++ b/Pixiview.iOS/Resources/LaunchScreen.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Pixiview.sln b/Pixiview.sln new file mode 100644 index 0000000..086460a --- /dev/null +++ b/Pixiview.sln @@ -0,0 +1,57 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pixiview.Android", "Pixiview.Android\Pixiview.Android.csproj", "{B695E0C4-084A-456D-B075-718E55BA1FD6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pixiview.iOS", "Pixiview.iOS\Pixiview.iOS.csproj", "{0CDD279E-3CAB-4CCA-A7C4-BC499724D051}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pixiview", "Pixiview\Pixiview.csproj", "{7F310047-BCBB-45F5-BD16-F246BA72AF73}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + Release|iPhone = Release|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|Any CPU.Build.0 = Release|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Debug|iPhone.Build.0 = Debug|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|iPhone.ActiveCfg = Release|Any CPU + {B695E0C4-084A-456D-B075-718E55BA1FD6}.Release|iPhone.Build.0 = Release|Any CPU + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|Any CPU.Build.0 = Release|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|iPhone.ActiveCfg = Debug|iPhone + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Debug|iPhone.Build.0 = Debug|iPhone + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|iPhone.ActiveCfg = Release|iPhone + {0CDD279E-3CAB-4CCA-A7C4-BC499724D051}.Release|iPhone.Build.0 = Release|iPhone + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|Any CPU.Build.0 = Release|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Debug|iPhone.Build.0 = Debug|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|iPhone.ActiveCfg = Release|Any CPU + {7F310047-BCBB-45F5-BD16-F246BA72AF73}.Release|iPhone.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/Pixiview/App.xaml b/Pixiview/App.xaml new file mode 100644 index 0000000..cd3f8d4 --- /dev/null +++ b/Pixiview/App.xaml @@ -0,0 +1,28 @@ + + + + Black + White + #333333 + White + + + + \ No newline at end of file diff --git a/Pixiview/App.xaml.cs b/Pixiview/App.xaml.cs new file mode 100644 index 0000000..3da910a --- /dev/null +++ b/Pixiview/App.xaml.cs @@ -0,0 +1,58 @@ +using Pixiview.UI; +using Pixiview.Utils; +using Xamarin.Forms; + +namespace Pixiview +{ + public partial class App : Application + { + public const string TitleButton = nameof(TitleButton); + public const string TitleLabel = nameof(TitleLabel); + + public const string WindowColor = nameof(WindowColor); + public const string TextColor = nameof(TextColor); + public const string MainColor = nameof(MainColor); + public const string MainTextColor = nameof(MainTextColor); + + public const string IconLightFontFamily = nameof(IconLightFontFamily); + public const string IconRegularFontFamily = nameof(IconRegularFontFamily); + public const string IconSolidFontFamily = nameof(IconSolidFontFamily); + public const string IconLeft = nameof(IconLeft); + public const string FontSizeTitle = nameof(FontSizeTitle); + public const string FontSizeTitleIcon = nameof(FontSizeTitleIcon); + //public const string Horizon10 = nameof(Horizon10); + + public App() + { + InitializeComponent(); + InitResources(); + } + + private void InitResources() + { + var p = DependencyService.Get().GetEnvironment(); + + Resources.Add(IconLightFontFamily, p.IconLightFontFamily); + Resources.Add(IconRegularFontFamily, p.IconRegularFontFamily); + Resources.Add(IconSolidFontFamily, p.IconSolidFontFamily); + + Resources.Add(IconLeft, p.IconLeft); + Resources.Add(FontSizeTitle, StyleDefinition.FontSizeTitle); + Resources.Add(FontSizeTitleIcon, StyleDefinition.FontSizeTitleIcon); + //Resources.Add(Horizon10, StyleDefinition.Horizon10); + } + + protected override void OnStart() + { + MainPage = UIFactory.CreateNavigationPage(new MainPage()); + } + + protected override void OnSleep() + { + } + + protected override void OnResume() + { + } + } +} diff --git a/Pixiview/AssemblyInfo.cs b/Pixiview/AssemblyInfo.cs new file mode 100644 index 0000000..c859952 --- /dev/null +++ b/Pixiview/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using Xamarin.Forms.Xaml; + +[assembly: XamlCompilation(XamlCompilationOptions.Compile)] \ No newline at end of file diff --git a/Pixiview/MainPage.xaml b/Pixiview/MainPage.xaml new file mode 100644 index 0000000..7802739 --- /dev/null +++ b/Pixiview/MainPage.xaml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/Pixiview/MainPage.xaml.cs b/Pixiview/MainPage.xaml.cs new file mode 100644 index 0000000..c47c903 --- /dev/null +++ b/Pixiview/MainPage.xaml.cs @@ -0,0 +1,34 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using Pixiview.UI; +using Pixiview.Utils; + +namespace Pixiview +{ + // Learn more about making custom code visible in the Xamarin.Forms previewer + // by visiting https://aka.ms/xamarinforms-previewer + [DesignTimeVisible(false)] + public partial class MainPage : AdaptedPage + { + public MainPage() + { + InitializeComponent(); + BindingContext = this; + } + + public override void OnLoad() + { + Debug.WriteLine(Stores.PersonalFolder); + } + + void NavigationTitle_RightButtonClicked(object sender, EventArgs e) + { + } + + void NavigationTitle_LeftButtonClicked(object sender, EventArgs e) + { + DisplayAlert("title", "message", "Ok"); + } + } +} diff --git a/Pixiview/Pixiview.csproj b/Pixiview/Pixiview.csproj new file mode 100644 index 0000000..776110c --- /dev/null +++ b/Pixiview/Pixiview.csproj @@ -0,0 +1,21 @@ + + + + netstandard2.0 + true + + + + portable + true + + + + + + + + + + + \ No newline at end of file diff --git a/Pixiview/UI/AdaptedPage.cs b/Pixiview/UI/AdaptedPage.cs new file mode 100644 index 0000000..1fc6131 --- /dev/null +++ b/Pixiview/UI/AdaptedPage.cs @@ -0,0 +1,20 @@ +using System; +using Xamarin.Forms; + +namespace Pixiview.UI +{ + public class AdaptedPage : ContentPage + { + public event EventHandler Load; + + public AdaptedPage() + { + SetDynamicResource(BackgroundColorProperty, App.WindowColor); + } + + public virtual void OnLoad() + { + Load?.Invoke(this, EventArgs.Empty); + } + } +} diff --git a/Pixiview/UI/NavigationTitle.cs b/Pixiview/UI/NavigationTitle.cs new file mode 100644 index 0000000..6db773c --- /dev/null +++ b/Pixiview/UI/NavigationTitle.cs @@ -0,0 +1,104 @@ +using System; +using Xamarin.Forms; + +namespace Pixiview.UI +{ + public class NavigationTitle : ContentView + { + public static readonly BindableProperty TitleProperty = BindableProperty.Create( + nameof(Title), typeof(string), typeof(NavigationTitle)); + public static readonly BindableProperty IsLeftButtonVisibleProperty = BindableProperty.Create( + nameof(IsLeftButtonVisible), typeof(bool), typeof(NavigationTitle)); + public static readonly BindableProperty IsRightButtonVisibleProperty = BindableProperty.Create( + nameof(IsRightButtonVisible), typeof(bool), typeof(NavigationTitle)); + public static readonly BindableProperty RightButtonTextProperty = BindableProperty.Create( + nameof(RightButtonText), typeof(string), typeof(NavigationTitle)); + + public string Title + { + get => (string)GetValue(TitleProperty); + set => SetValue(TitleProperty, value); + } + public bool IsLeftButtonVisible + { + get => (bool)GetValue(IsLeftButtonVisibleProperty); + set => SetValue(IsLeftButtonVisibleProperty, value); + } + public bool IsRightButtonVisible + { + get => (bool)GetValue(IsRightButtonVisibleProperty); + set => SetValue(IsRightButtonVisibleProperty, value); + } + public string RightButtonText + { + get => (string)GetValue(RightButtonTextProperty); + set => SetValue(RightButtonTextProperty, value); + } + + public event EventHandler LeftButtonClicked; + public event EventHandler RightButtonClicked; + + public NavigationTitle() + { + BindingContext = this; + + var left = GetLinkButton(nameof(IsLeftButtonVisible), + padding: StyleDefinition.HorizonRight10); + left.SetDynamicResource(Button.FontFamilyProperty, App.IconRegularFontFamily); + left.SetDynamicResource(Button.TextProperty, App.IconLeft); + left.Clicked += Left_Clicked; + + var title = new Label(); + title.SetDynamicResource(StyleProperty, App.TitleLabel); + title.SetBinding(Label.TextProperty, nameof(Title)); + Grid.SetColumnSpan(title, 3); + + var right = GetLinkButton(nameof(IsRightButtonVisible), + text: nameof(RightButtonText), + horizon: LayoutOptions.End, + padding: StyleDefinition.HorizonLeft10); + right.Clicked += Right_Clicked; + Grid.SetColumn(right, 2); + + Content = new Grid + { + ColumnDefinitions = + { + new ColumnDefinition { Width = GridLength.Auto }, + new ColumnDefinition(), + new ColumnDefinition { Width = GridLength.Auto } + }, + ColumnSpacing = 0, + Children = { title, left, right } + }; + } + + private void Left_Clicked(object sender, EventArgs e) + { + LeftButtonClicked?.Invoke(sender, e); + } + + private void Right_Clicked(object sender, EventArgs e) + { + RightButtonClicked?.Invoke(sender, e); + } + + private Button GetLinkButton(string visibility, string text = null, LayoutOptions horizon = default, Thickness padding = default) + { + var button = new Button + { + VerticalOptions = LayoutOptions.Center, + HorizontalOptions = horizon, + Padding = padding + }; + button.SetBinding(IsVisibleProperty, visibility); + if (text != null) + { + button.SetBinding(Button.TextProperty, text); + } + button.SetDynamicResource(StyleProperty, App.TitleButton); + return button; + } + } +} + diff --git a/Pixiview/UI/StyleDefinition.cs b/Pixiview/UI/StyleDefinition.cs new file mode 100644 index 0000000..744af93 --- /dev/null +++ b/Pixiview/UI/StyleDefinition.cs @@ -0,0 +1,13 @@ +using Xamarin.Forms; + +namespace Pixiview.UI +{ + public static class StyleDefinition + { + public static readonly double FontSizeTitle = 18.0; + public static readonly double FontSizeTitleIcon = 24.0; + + public static readonly Thickness HorizonLeft10 = new Thickness(10, 0, 0, 0); + public static readonly Thickness HorizonRight10 = new Thickness(0, 0, 10, 0); + } +} diff --git a/Pixiview/Utils/Stores.cs b/Pixiview/Utils/Stores.cs new file mode 100644 index 0000000..f435a9e --- /dev/null +++ b/Pixiview/Utils/Stores.cs @@ -0,0 +1,44 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Pixiview.Utils +{ + public class Stores + { + public static readonly string PersonalFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + //public static readonly string CacheFolder = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache); + public const string ImageFolder = "images"; + + [SuppressMessage("Style", "IDE0063:Use simple 'using' statement", Justification = "")] + public static async Task DownloadImage(string url) + { + var uri = new Uri(url); + var handler = new HttpClientHandler + { + Proxy = new WebProxy("10.0.10.100", 8088), + UseProxy = true + }; + var client = new HttpClient(handler) + { + BaseAddress = new Uri($"{uri.Scheme}://{uri.Host}") + }; + using (var request = new HttpRequestMessage(HttpMethod.Get, uri.PathAndQuery) + { + Version = new Version(2, 0) + }) + { + request.Headers.Referrer = new Uri("https://www.pixiv.net/"); + var file = Path.Combine(PersonalFolder, ImageFolder, Path.GetFileName(uri.LocalPath)); + using (var response = await client.SendAsync(request)) + using (var fs = File.OpenWrite(file)) + { + await response.Content.CopyToAsync(fs); + } + } + } + } +}