Merge branch 'upgrade' into badge
This commit is contained in:
28
Ursa.sln
28
Ursa.sln
@@ -8,6 +8,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ursa.Themes.Semi", "src\Urs
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demo", "Demo", "{A41BAF0D-DA61-4A63-889A-084BAD36FD66}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demo", "Demo", "{A41BAF0D-DA61-4A63-889A-084BAD36FD66}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ursa.Demo.Android", "demo\Ursa.Demo.Android\Ursa.Demo.Android.csproj", "{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ursa.Demo.Desktop", "demo\Ursa.Demo.Desktop\Ursa.Demo.Desktop.csproj", "{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ursa.Demo.iOS", "demo\Ursa.Demo.iOS\Ursa.Demo.iOS.csproj", "{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ursa.Demo.Browser", "demo\Ursa.Demo.Browser\Ursa.Demo.Browser.csproj", "{D1942476-8473-4608-BB9F-5AC01083BBDA}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -26,8 +34,28 @@ Global
|
|||||||
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Release|Any CPU.Build.0 = Release|Any CPU
|
{53B5F277-3AEB-4661-ACAE-15CFFF2ED800}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D1942476-8473-4608-BB9F-5AC01083BBDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D1942476-8473-4608-BB9F-5AC01083BBDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D1942476-8473-4608-BB9F-5AC01083BBDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D1942476-8473-4608-BB9F-5AC01083BBDA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(NestedProjects) = preSolution
|
GlobalSection(NestedProjects) = preSolution
|
||||||
{407A91FD-A88B-459B-8DCE-8C6AA98279FE} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
{407A91FD-A88B-459B-8DCE-8C6AA98279FE} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
||||||
|
{3FC76CD9-CE5D-4804-A8D6-4E292EB296AA} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
||||||
|
{B6BAB821-A9FE-44F3-B9CD-06E27FDB63F6} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
||||||
|
{94C2BBD9-8B57-4AE9-AAFD-7D4335B15A8E} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
||||||
|
{D1942476-8473-4608-BB9F-5AC01083BBDA} = {A41BAF0D-DA61-4A63-889A-084BAD36FD66}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
6
demo/Directory.Build.props
Normal file
6
demo/Directory.Build.props
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<AvaloniaVersion>11.0.0</AvaloniaVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
BIN
demo/Ursa.Demo.Android/Icon.png
Normal file
BIN
demo/Ursa.Demo.Android/Icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
17
demo/Ursa.Demo.Android/MainActivity.cs
Normal file
17
demo/Ursa.Demo.Android/MainActivity.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Content.PM;
|
||||||
|
using Avalonia.Android;
|
||||||
|
|
||||||
|
namespace Ursa.Demo.Android;
|
||||||
|
|
||||||
|
[Activity(
|
||||||
|
Label = "Ursa",
|
||||||
|
Theme = "@style/MyTheme.NoActionBar",
|
||||||
|
Icon = "@drawable/icon",
|
||||||
|
MainLauncher = true,
|
||||||
|
LaunchMode = LaunchMode.SingleTop,
|
||||||
|
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
||||||
|
public class MainActivity : AvaloniaMainActivity<App>
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
5
demo/Ursa.Demo.Android/Properties/AndroidManifest.xml
Normal file
5
demo/Ursa.Demo.Android/Properties/AndroidManifest.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<application android:label="Ursa" android:icon="@drawable/Icon" />
|
||||||
|
</manifest>
|
||||||
44
demo/Ursa.Demo.Android/Resources/AboutResources.txt
Normal file
44
demo/Ursa.Demo.Android/Resources/AboutResources.txt
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
Images, layout descriptions, binary blobs and string dictionaries can be included
|
||||||
|
in your application as resource files. Various Android APIs are designed to
|
||||||
|
operate on the resource IDs instead of dealing with images, strings or binary blobs
|
||||||
|
directly.
|
||||||
|
|
||||||
|
For example, a sample Android app that contains a user interface layout (main.axml),
|
||||||
|
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
|
||||||
|
would keep its resources in the "Resources" directory of the application:
|
||||||
|
|
||||||
|
Resources/
|
||||||
|
drawable/
|
||||||
|
icon.png
|
||||||
|
|
||||||
|
layout/
|
||||||
|
main.axml
|
||||||
|
|
||||||
|
values/
|
||||||
|
strings.xml
|
||||||
|
|
||||||
|
In order to get the build system to recognize Android resources, set the build action to
|
||||||
|
"AndroidResource". The native Android APIs do not operate directly with filenames, but
|
||||||
|
instead operate on resource IDs. When you compile an Android application that uses resources,
|
||||||
|
the build system will package the resources for distribution and generate a class called "R"
|
||||||
|
(this is an Android convention) that contains the tokens for each one of the resources
|
||||||
|
included. For example, for the above Resources layout, this is what the R class would expose:
|
||||||
|
|
||||||
|
public class R {
|
||||||
|
public class drawable {
|
||||||
|
public const int icon = 0x123;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class layout {
|
||||||
|
public const int main = 0x456;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class strings {
|
||||||
|
public const int first_string = 0xabc;
|
||||||
|
public const int second_string = 0xbcd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
|
||||||
|
to reference the layout/main.axml file, or R.strings.first_string to reference the first
|
||||||
|
string in the dictionary file values/strings.xml.
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<animated-vector
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:aapt="http://schemas.android.com/aapt">
|
||||||
|
<aapt:attr name="android:drawable">
|
||||||
|
<vector
|
||||||
|
android:name="vector"
|
||||||
|
android:width="128dp"
|
||||||
|
android:height="128dp"
|
||||||
|
android:viewportWidth="128"
|
||||||
|
android:viewportHeight="128">
|
||||||
|
<group
|
||||||
|
android:name="wrapper"
|
||||||
|
android:translateX="21"
|
||||||
|
android:translateY="21">
|
||||||
|
<group android:name="group">
|
||||||
|
<path
|
||||||
|
android:name="path"
|
||||||
|
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z"
|
||||||
|
android:strokeWidth="1"/>
|
||||||
|
<path
|
||||||
|
android:name="path_1"
|
||||||
|
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z"
|
||||||
|
android:strokeWidth="1"
|
||||||
|
android:fillType="evenOdd"/>
|
||||||
|
<path
|
||||||
|
android:name="path_2"
|
||||||
|
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z"
|
||||||
|
android:strokeWidth="1"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</vector>
|
||||||
|
</aapt:attr>
|
||||||
|
<target android:name="path">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:duration="1000"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#161c2d"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
<target android:name="path_1">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:duration="1000"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#f9f9fb"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
<target android:name="path_2">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:duration="1000"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#f9f9fb"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
</animated-vector>
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<animated-vector
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:aapt="http://schemas.android.com/aapt">
|
||||||
|
<aapt:attr name="android:drawable">
|
||||||
|
<vector
|
||||||
|
android:name="vector"
|
||||||
|
android:width="128dp"
|
||||||
|
android:height="128dp"
|
||||||
|
android:viewportWidth="128"
|
||||||
|
android:viewportHeight="128">
|
||||||
|
<group
|
||||||
|
android:name="wrapper"
|
||||||
|
android:translateX="21"
|
||||||
|
android:translateY="21">
|
||||||
|
<group android:name="group">
|
||||||
|
<path
|
||||||
|
android:name="path"
|
||||||
|
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z"
|
||||||
|
android:fillColor="#00ffffff"
|
||||||
|
android:strokeWidth="1"/>
|
||||||
|
<path
|
||||||
|
android:name="path_1"
|
||||||
|
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z"
|
||||||
|
android:fillColor="#00ffffff"
|
||||||
|
android:strokeWidth="1"
|
||||||
|
android:fillType="evenOdd"/>
|
||||||
|
<path
|
||||||
|
android:name="path_2"
|
||||||
|
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z"
|
||||||
|
android:fillColor="#00ffffff"
|
||||||
|
android:strokeWidth="1"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</vector>
|
||||||
|
</aapt:attr>
|
||||||
|
<target android:name="path_2">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:startOffset="100"
|
||||||
|
android:duration="900"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#161c2d"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
<target android:name="path">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:duration="500"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#f9f9fb"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
<target android:name="path_1">
|
||||||
|
<aapt:attr name="android:animation">
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="fillColor"
|
||||||
|
android:startOffset="100"
|
||||||
|
android:duration="900"
|
||||||
|
android:valueFrom="#00ffffff"
|
||||||
|
android:valueTo="#161c2d"
|
||||||
|
android:valueType="colorType"
|
||||||
|
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||||
|
</aapt:attr>
|
||||||
|
</target>
|
||||||
|
</animated-vector>
|
||||||
13
demo/Ursa.Demo.Android/Resources/drawable/splash_screen.xml
Normal file
13
demo/Ursa.Demo.Android/Resources/drawable/splash_screen.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<color android:color="@color/splash_background"/>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item android:drawable="@drawable/icon"
|
||||||
|
android:width="120dp"
|
||||||
|
android:height="120dp"
|
||||||
|
android:gravity="center" />
|
||||||
|
|
||||||
|
</layer-list>
|
||||||
4
demo/Ursa.Demo.Android/Resources/values-night/colors.xml
Normal file
4
demo/Ursa.Demo.Android/Resources/values-night/colors.xml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="splash_background">#212121</color>
|
||||||
|
</resources>
|
||||||
21
demo/Ursa.Demo.Android/Resources/values-v31/styles.xml
Normal file
21
demo/Ursa.Demo.Android/Resources/values-v31/styles.xml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="MyTheme">
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar">
|
||||||
|
<item name="android:windowActionBar">false</item>
|
||||||
|
<item name="android:windowBackground">@null</item>
|
||||||
|
<item name="android:windowNoTitle">true</item>
|
||||||
|
<item name="android:windowSplashScreenBackground">@color/splash_background</item>
|
||||||
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/avalonia_anim</item>
|
||||||
|
<item name="android:windowSplashScreenAnimationDuration">1000</item>
|
||||||
|
<item name="postSplashScreenTheme">@style/MyTheme.Main</item>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<style name="MyTheme.Main"
|
||||||
|
parent ="MyTheme.NoActionBar">
|
||||||
|
<item name="android:windowIsTranslucent">true</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
||||||
4
demo/Ursa.Demo.Android/Resources/values/colors.xml
Normal file
4
demo/Ursa.Demo.Android/Resources/values/colors.xml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="splash_background">#FFFFFF</color>
|
||||||
|
</resources>
|
||||||
12
demo/Ursa.Demo.Android/Resources/values/styles.xml
Normal file
12
demo/Ursa.Demo.Android/Resources/values/styles.xml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="MyTheme">
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
|
||||||
|
<item name="android:windowActionBar">false</item>
|
||||||
|
<item name="android:windowBackground">@drawable/splash_screen</item>
|
||||||
|
<item name="android:windowNoTitle">true</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
||||||
30
demo/Ursa.Demo.Android/Ursa.Demo.Android.csproj
Normal file
30
demo/Ursa.Demo.Android/Ursa.Demo.Android.csproj
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net7.0-android</TargetFramework>
|
||||||
|
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ApplicationId>com.irihitech.Ursa</ApplicationId>
|
||||||
|
<ApplicationVersion>1</ApplicationVersion>
|
||||||
|
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
|
||||||
|
<AndroidPackageFormat>apk</AndroidPackageFormat>
|
||||||
|
<AndroidEnableProfiledAot>False</AndroidEnableProfiledAot>
|
||||||
|
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
|
||||||
|
<RootNamespace>Ursa.Demo.Android</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidResource Include="Icon.png">
|
||||||
|
<Link>Resources\drawable\Icon.png</Link>
|
||||||
|
</AndroidResource>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia.Android" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.1"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ursa.Demo\Ursa.Demo.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
60
demo/Ursa.Demo.Browser/AppBundle/Logo.svg
Normal file
60
demo/Ursa.Demo.Browser/AppBundle/Logo.svg
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="150mm"
|
||||||
|
height="150mm"
|
||||||
|
viewBox="0 0 150 150"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||||
|
sodipodi:docname="Ursa.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.0733976"
|
||||||
|
inkscape:cx="420.62698"
|
||||||
|
inkscape:cy="287.40515"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1009"
|
||||||
|
inkscape:window-x="1072"
|
||||||
|
inkscape:window-y="828"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showguides="false" />
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<g
|
||||||
|
inkscape:label="图层 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
style="fill:#8b44ac;fill-opacity:1;stroke-width:2.97966"
|
||||||
|
d="m 100.35265,84.999841 -11.092124,18.358659 17.500904,21.64134 23.53993,-0.12158 -6.16228,-5.95745 -10.47589,-28.936171 z"
|
||||||
|
id="path1564" />
|
||||||
|
<path
|
||||||
|
id="path3903"
|
||||||
|
style="fill:#8b44ac;fill-opacity:1;stroke-width:2.83662"
|
||||||
|
d="m 58.540112,25.000052 a 49.753061,49.999968 0 0 0 -49.2796799,43.280563 7.450939,7.4879154 0 0 1 5.4151739,7.202144 7.450939,7.4879154 0 0 1 -5.2958013,7.166488 49.753061,49.999968 0 0 0 49.1603073,42.350383 49.753061,49.999968 0 0 0 0.720369,-0.01 V 99.953617 A 25,25 0 0 1 35.260396,74.999585 25,25 0 0 1 59.260481,50.046069 V 25.009871 a 49.753061,49.999968 0 0 0 -0.720369,-0.0098 z" />
|
||||||
|
<path
|
||||||
|
id="path7668"
|
||||||
|
style="fill:#8b44ac;stroke-width:0.284365"
|
||||||
|
d="m 12.260526,75.499841 a 5,5 0 0 1 -5.0000003,5 5,5 0 0 1 -5,-5 5,5 0 0 1 5,-5 5,5 0 0 1 5.0000003,5 z" />
|
||||||
|
<path
|
||||||
|
id="path1349"
|
||||||
|
style="display:inline;fill:#000000;fill-opacity:1;stroke-width:2.95471"
|
||||||
|
d="m 64.835335,25.001086 c -0.252232,0.0049 -0.418027,0.02606 -0.489376,0.06253 l -0.02119,25.128183 A 25,25 0 0 1 86.260384,74.999585 25,25 0 0 1 64.282397,99.794454 l -0.0217,25.205176 h 19.51405 L 75.815026,116.82235 97.383219,78.001469 132.8162,93.667696 145.39786,81.014205 135.98293,69.221643 133.75775,57.773246 112.01851,33.92974 109.4507,40.816141 C 91.909393,28.568672 68.61881,24.927601 64.835335,25.001086 Z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
74
demo/Ursa.Demo.Browser/AppBundle/app.css
Normal file
74
demo/Ursa.Demo.Browser/AppBundle/app.css
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
:root {
|
||||||
|
--sat: env(safe-area-inset-top);
|
||||||
|
--sar: env(safe-area-inset-right);
|
||||||
|
--sab: env(safe-area-inset-bottom);
|
||||||
|
--sal: env(safe-area-inset-left);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HTML styles for the splash screen */
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
color: white;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purple {
|
||||||
|
color: #8b44ac;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
opacity: 0.05;
|
||||||
|
height: 35%;
|
||||||
|
width: 35%;
|
||||||
|
position: absolute;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
right: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
margin-right: 3%;
|
||||||
|
margin-bottom: 5%;
|
||||||
|
z-index: 5000;
|
||||||
|
background-position: right bottom;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#avalonia-splash a {
|
||||||
|
color: whitesmoke;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#avalonia-splash {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
color: whitesmoke;
|
||||||
|
background: #1b2a4e;
|
||||||
|
font-family: 'Nunito', sans-serif;
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.splash-close {
|
||||||
|
animation: fadeout 0.25s linear forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeout {
|
||||||
|
0% {
|
||||||
|
opacity: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: collapse;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
demo/Ursa.Demo.Browser/AppBundle/favicon.ico
Normal file
BIN
demo/Ursa.Demo.Browser/AppBundle/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 169 KiB |
30
demo/Ursa.Demo.Browser/AppBundle/index.html
Normal file
30
demo/Ursa.Demo.Browser/AppBundle/index.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Ursa.Demo.Browser</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<base href="/" />
|
||||||
|
<link rel="modulepreload" href="./main.js" />
|
||||||
|
<link rel="modulepreload" href="./dotnet.js" />
|
||||||
|
<link rel="modulepreload" href="./avalonia.js" />
|
||||||
|
<link rel="stylesheet" href="./app.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="margin: 0px; overflow: hidden">
|
||||||
|
<div id="out">
|
||||||
|
<div id="avalonia-splash">
|
||||||
|
<div class="center">
|
||||||
|
<h2 class="purple">
|
||||||
|
Powered by
|
||||||
|
<a class="highlight" href="https://github.com/irihitech/Ursa.Avalonia/" target="_blank">Ursa</a>
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<img class="icon" src="Logo.svg" alt="Ursa Logo" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type='module' src="./main.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
13
demo/Ursa.Demo.Browser/AppBundle/main.js
Normal file
13
demo/Ursa.Demo.Browser/AppBundle/main.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { dotnet } from './dotnet.js'
|
||||||
|
|
||||||
|
const is_browser = typeof window != "undefined";
|
||||||
|
if (!is_browser) throw new Error(`Expected to be running in a browser`);
|
||||||
|
|
||||||
|
const dotnetRuntime = await dotnet
|
||||||
|
.withDiagnosticTracing(false)
|
||||||
|
.withApplicationArgumentsFromQuery()
|
||||||
|
.create();
|
||||||
|
|
||||||
|
const config = dotnetRuntime.getConfig();
|
||||||
|
|
||||||
|
await dotnetRuntime.runMainAndExit(config.mainAssemblyName, [window.location.search]);
|
||||||
17
demo/Ursa.Demo.Browser/Program.cs
Normal file
17
demo/Ursa.Demo.Browser/Program.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Runtime.Versioning;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Browser;
|
||||||
|
|
||||||
|
[assembly: SupportedOSPlatform("browser")]
|
||||||
|
|
||||||
|
namespace Ursa.Demo.Browser;
|
||||||
|
|
||||||
|
internal partial class Program
|
||||||
|
{
|
||||||
|
private static async Task Main(string[] args) => await BuildAvaloniaApp()
|
||||||
|
.StartBrowserAppAsync("out");
|
||||||
|
|
||||||
|
public static AppBuilder BuildAvaloniaApp()
|
||||||
|
=> AppBuilder.Configure<App>();
|
||||||
|
}
|
||||||
13
demo/Ursa.Demo.Browser/Properties/launchSettings.json
Normal file
13
demo/Ursa.Demo.Browser/Properties/launchSettings.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"Ursa.Demo.Browser": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
},
|
||||||
|
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
||||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/debug?browser={browserInspectUri}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
20
demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj
Normal file
20
demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
|
||||||
|
<WasmMainJSPath>AppBundle\main.js</WasmMainJSPath>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<WasmExtraFilesToDeploy Include="AppBundle\**"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia.Browser" Version="$(AvaloniaVersion)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ursa.Demo\Ursa.Demo.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
11
demo/Ursa.Demo.Browser/runtimeconfig.template.json
Normal file
11
demo/Ursa.Demo.Browser/runtimeconfig.template.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"wasmHostProperties": {
|
||||||
|
"perHostConfig": [
|
||||||
|
{
|
||||||
|
"name": "browser",
|
||||||
|
"html-path": "index.html",
|
||||||
|
"Host": "browser"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
using Avalonia;
|
using System;
|
||||||
using System;
|
using Avalonia;
|
||||||
|
using Avalonia.Dialogs;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
namespace Ursa.Demo;
|
namespace Ursa.Demo.Desktop;
|
||||||
|
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
@@ -10,11 +12,23 @@ class Program
|
|||||||
// yet and stuff might break.
|
// yet and stuff might break.
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args) => BuildAvaloniaApp()
|
public static void Main(string[] args) => BuildAvaloniaApp()
|
||||||
|
.With(new FontManagerOptions
|
||||||
|
{
|
||||||
|
FontFallbacks = new[]
|
||||||
|
{
|
||||||
|
new FontFallback
|
||||||
|
{
|
||||||
|
FontFamily = new FontFamily("Microsoft YaHei")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
.StartWithClassicDesktopLifetime(args);
|
.StartWithClassicDesktopLifetime(args);
|
||||||
|
|
||||||
// Avalonia configuration, don't remove; also used by visual designer.
|
// Avalonia configuration, don't remove; also used by visual designer.
|
||||||
public static AppBuilder BuildAvaloniaApp()
|
public static AppBuilder BuildAvaloniaApp()
|
||||||
=> AppBuilder.Configure<App>()
|
=> AppBuilder.Configure<App>()
|
||||||
|
.UseManagedSystemDialogs()
|
||||||
.UsePlatformDetect()
|
.UsePlatformDetect()
|
||||||
|
.With(new Win32PlatformOptions())
|
||||||
.LogToTrace();
|
.LogToTrace();
|
||||||
}
|
}
|
||||||
24
demo/Ursa.Demo.Desktop/Ursa.Demo.Desktop.csproj
Normal file
24
demo/Ursa.Demo.Desktop/Ursa.Demo.Desktop.csproj
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.
|
||||||
|
One for Windows with net7.0-windows TFM, one for MacOS with net7.0-macos and one with net7.0 TFM for Linux.-->
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
|
||||||
|
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||||
|
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ursa.Demo\Ursa.Demo.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<!-- This manifest is used on Windows only.
|
<!-- This manifest is used on Windows only.
|
||||||
Don't remove it as it might cause problems with window transparency and embeded controls.
|
Don't remove it as it might cause problems with window transparency and embeded controls.
|
||||||
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
|
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
|
||||||
<assemblyIdentity version="1.0.0.0" name="AvaloniaTest.Desktop"/>
|
<assemblyIdentity version="1.0.0.0" name="Ursa.Demo.Desktop"/>
|
||||||
|
|
||||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
<application>
|
<application>
|
||||||
20
demo/Ursa.Demo.iOS/AppDelegate.cs
Normal file
20
demo/Ursa.Demo.iOS/AppDelegate.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Foundation;
|
||||||
|
using UIKit;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.iOS;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
namespace Ursa.Demo.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 : AvaloniaAppDelegate<App>
|
||||||
|
{
|
||||||
|
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
|
||||||
|
{
|
||||||
|
return base.CustomizeAppBuilder(builder);
|
||||||
|
}
|
||||||
|
}
|
||||||
5
demo/Ursa.Demo.iOS/Entitlements.plist
Normal file
5
demo/Ursa.Demo.iOS/Entitlements.plist
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict/>
|
||||||
|
</plist>
|
||||||
47
demo/Ursa.Demo.iOS/Info.plist
Normal file
47
demo/Ursa.Demo.iOS/Info.plist
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>Ursa.Demo</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>companyName.Ursa.Demo</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>10.0</string>
|
||||||
|
<key>UIDeviceFamily</key>
|
||||||
|
<array>
|
||||||
|
<integer>1</integer>
|
||||||
|
<integer>2</integer>
|
||||||
|
</array>
|
||||||
|
<key>UILaunchStoryboardName</key>
|
||||||
|
<string>LaunchScreen</string>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UIStatusBarHidden</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
14
demo/Ursa.Demo.iOS/Main.cs
Normal file
14
demo/Ursa.Demo.iOS/Main.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using UIKit;
|
||||||
|
|
||||||
|
namespace Ursa.Demo.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, typeof(AppDelegate));
|
||||||
|
}
|
||||||
|
}
|
||||||
43
demo/Ursa.Demo.iOS/Resources/LaunchScreen.xib
Normal file
43
demo/Ursa.Demo.iOS/Resources/LaunchScreen.xib
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207" />
|
||||||
|
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1" />
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" />
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder" />
|
||||||
|
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="480" height="480" />
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" />
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2022 " textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines"
|
||||||
|
minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||||
|
<rect key="frame" x="20" y="439" width="441" height="21" />
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17" />
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor" />
|
||||||
|
<nil key="highlightedColor" />
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Ursa.Demo" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines"
|
||||||
|
minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||||
|
<rect key="frame" x="20" y="140" width="441" height="43" />
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="36" />
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor" />
|
||||||
|
<nil key="highlightedColor" />
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite" />
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC" />
|
||||||
|
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk" />
|
||||||
|
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l" />
|
||||||
|
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0" />
|
||||||
|
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9" />
|
||||||
|
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g" />
|
||||||
|
</constraints>
|
||||||
|
<nil key="simulatedStatusBarMetrics" />
|
||||||
|
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics" />
|
||||||
|
<point key="canvasLocation" x="548" y="455" />
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
17
demo/Ursa.Demo.iOS/Ursa.Demo.iOS.csproj
Normal file
17
demo/Ursa.Demo.iOS/Ursa.Demo.iOS.csproj
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net6.0-ios</TargetFramework>
|
||||||
|
<SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia.iOS" Version="$(AvaloniaVersion)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ursa.Demo\Ursa.Demo.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<Application
|
<Application
|
||||||
x:Class="Ursa.Demo.App"
|
x:Class="Ursa.Demo.App"
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
xmlns:local="using:Ursa.Demo">
|
|
||||||
<Application.Styles>
|
<Application.Styles>
|
||||||
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
|
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
|
||||||
<StyleInclude Source="avares://Ursa.Themes.Semi/Index.axaml" />
|
<StyleInclude Source="avares://Ursa.Themes.Semi/Index.axaml" />
|
||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
</Application>
|
</Application>
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using Avalonia.Data.Core;
|
|
||||||
using Avalonia.Data.Core.Plugins;
|
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Ursa.Demo.ViewModels;
|
using Ursa.Demo.ViewModels;
|
||||||
using Ursa.Demo.Views;
|
using Ursa.Demo.Views;
|
||||||
@@ -19,11 +17,16 @@ public partial class App : Application
|
|||||||
{
|
{
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
// Line below is needed to remove Avalonia data validation.
|
desktop.MainWindow = new MainWindow()
|
||||||
// Without this line you will get duplicate validations from both Avalonia and CT
|
|
||||||
desktop.MainWindow = new MainWindow
|
|
||||||
{
|
{
|
||||||
DataContext = new MainWindowViewModel(),
|
DataContext = new MainViewViewModel(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
|
||||||
|
{
|
||||||
|
singleView.MainView = new MainView()
|
||||||
|
{
|
||||||
|
DataContext = new MainViewViewModel(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,29 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
<LangVersion>latest</LangVersion>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
|
||||||
<AvaloniaUseCompiledBindingsByDefault>false</AvaloniaUseCompiledBindingsByDefault>
|
<AvaloniaUseCompiledBindingsByDefault>false</AvaloniaUseCompiledBindingsByDefault>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="Assets\**" />
|
<AvaloniaResource Include="Assets\**"/>
|
||||||
<None Remove=".gitignore" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<TrimmerRootDescriptor Include="Roots.xml" />
|
<TrimmerRootDescriptor Include="Roots.xml"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.0.0-rc1.1" />
|
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-rc1.1" />
|
|
||||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-rc1.1" />
|
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)"/>
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0"/>
|
||||||
<PackageReference Include="Semi.Avalonia" Version="11.0.0-rc1" />
|
<PackageReference Include="Semi.Avalonia" Version="11.0.0"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\Ursa.Themes.Semi\Ursa.Themes.Semi.csproj" />
|
<ProjectReference Include="..\..\src\Ursa.Themes.Semi\Ursa.Themes.Semi.csproj"/>
|
||||||
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj" />
|
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
39
demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
Normal file
39
demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
|
|
||||||
|
namespace Ursa.Demo.ViewModels;
|
||||||
|
|
||||||
|
public class MainViewViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
public MenuViewModel Menus { get; set; } = new MenuViewModel();
|
||||||
|
|
||||||
|
private object? _content;
|
||||||
|
|
||||||
|
public object? Content
|
||||||
|
{
|
||||||
|
get => _content;
|
||||||
|
set => SetProperty(ref _content, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainViewViewModel()
|
||||||
|
{
|
||||||
|
WeakReferenceMessenger.Default.Register<MainViewViewModel, string>(this, OnNavigation);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void OnNavigation(MainViewViewModel vm, string s)
|
||||||
|
{
|
||||||
|
Content = s switch
|
||||||
|
{
|
||||||
|
MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyBanner => new BannerDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
|
||||||
|
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,40 +1,6 @@
|
|||||||
|
namespace Ursa.Demo.ViewModels;
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
|
||||||
|
|
||||||
namespace Ursa.Demo.ViewModels;
|
|
||||||
|
|
||||||
public class MainWindowViewModel : ViewModelBase
|
public class MainWindowViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
public MenuViewModel Menus { get; set; } = new MenuViewModel();
|
public MainViewViewModel MainViewViewModel { get; set; } = new MainViewViewModel();
|
||||||
|
|
||||||
private object? _content;
|
|
||||||
public object? Content
|
|
||||||
{
|
|
||||||
get => _content;
|
|
||||||
set => SetProperty(ref _content, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MainWindowViewModel()
|
|
||||||
{
|
|
||||||
WeakReferenceMessenger.Default.Register<MainWindowViewModel, string>(this, OnNavigation);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void OnNavigation(MainWindowViewModel vm, string s)
|
|
||||||
{
|
|
||||||
Content = s switch
|
|
||||||
{
|
|
||||||
MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyBanner => new BannerDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
85
demo/Ursa.Demo/Views/MainView.axaml
Normal file
85
demo/Ursa.Demo/Views/MainView.axaml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Ursa.Demo.Views.MainView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:converters="clr-namespace:Ursa.Demo.Converters"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:u="https://irihi.tech/ursa"
|
||||||
|
xmlns:vm="using:Ursa.Demo.ViewModels"
|
||||||
|
d:DesignHeight="450"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="vm:MainViewViewModel"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
<Design.DataContext>
|
||||||
|
<vm:MainViewViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
|
||||||
|
<Grid ColumnDefinitions="Auto, *" RowDefinitions="Auto, *">
|
||||||
|
<Border
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
Padding="8,4"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
Theme="{DynamicResource CardBorder}">
|
||||||
|
<u:NavigationMenu ItemsSource="{Binding Menus.MenuItems}" ShowCollapseButton="True">
|
||||||
|
<u:NavigationMenu.Header>
|
||||||
|
<TextBlock
|
||||||
|
Classes="H4"
|
||||||
|
Text="Ursa"
|
||||||
|
Theme="{DynamicResource TitleTextBlock}" />
|
||||||
|
</u:NavigationMenu.Header>
|
||||||
|
<u:NavigationMenu.Icon>
|
||||||
|
<Image
|
||||||
|
Width="48"
|
||||||
|
Height="48"
|
||||||
|
RenderOptions.BitmapInterpolationMode="HighQuality"
|
||||||
|
Source="../Assets/Ursa.ico" />
|
||||||
|
</u:NavigationMenu.Icon>
|
||||||
|
<u:NavigationMenu.ItemTemplate>
|
||||||
|
<converters:MenuDataTemplateSelector>
|
||||||
|
<converters:MenuDataTemplateSelector.MenuTemplate>
|
||||||
|
<DataTemplate DataType="vm:MenuItemViewModel">
|
||||||
|
<u:NavigationMenuItem
|
||||||
|
Command="{Binding ActivateCommand}"
|
||||||
|
Header="{Binding MenuHeader}"
|
||||||
|
ItemsSource="{Binding Children}">
|
||||||
|
<u:NavigationMenuItem.Icon>
|
||||||
|
<Border
|
||||||
|
Width="10"
|
||||||
|
Height="10"
|
||||||
|
Background="{DynamicResource SemiBlue6}"
|
||||||
|
CornerRadius="3" />
|
||||||
|
</u:NavigationMenuItem.Icon>
|
||||||
|
</u:NavigationMenuItem>
|
||||||
|
</DataTemplate>
|
||||||
|
</converters:MenuDataTemplateSelector.MenuTemplate>
|
||||||
|
<converters:MenuDataTemplateSelector.SeparatorTemplate>
|
||||||
|
<DataTemplate DataType="vm:MenuItemViewModel">
|
||||||
|
<u:NavigationMenuSeparator Header="{Binding MenuHeader}" />
|
||||||
|
</DataTemplate>
|
||||||
|
</converters:MenuDataTemplateSelector.SeparatorTemplate>
|
||||||
|
</converters:MenuDataTemplateSelector>
|
||||||
|
</u:NavigationMenu.ItemTemplate>
|
||||||
|
</u:NavigationMenu>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<ToggleButton
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.Column="1"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
Content="Update Theme"
|
||||||
|
IsCheckedChanged="ToggleButton_OnIsCheckedChanged" />
|
||||||
|
<ContentControl
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="12"
|
||||||
|
Content="{Binding Content}">
|
||||||
|
<ContentControl.ContentTemplate>
|
||||||
|
<converters:ViewLocator />
|
||||||
|
</ContentControl.ContentTemplate>
|
||||||
|
</ContentControl>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</UserControl>
|
||||||
24
demo/Ursa.Demo/Views/MainView.axaml.cs
Normal file
24
demo/Ursa.Demo/Views/MainView.axaml.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Avalonia.Styling;
|
||||||
|
|
||||||
|
namespace Ursa.Demo.Views;
|
||||||
|
|
||||||
|
public partial class MainView : UserControl
|
||||||
|
{
|
||||||
|
public MainView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ToggleButton_OnIsCheckedChanged(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var app = Application.Current;
|
||||||
|
if (app is not null)
|
||||||
|
{
|
||||||
|
var theme = app.ActualThemeVariant;
|
||||||
|
app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,87 +2,16 @@
|
|||||||
x:Class="Ursa.Demo.Views.MainWindow"
|
x:Class="Ursa.Demo.Views.MainWindow"
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:converters="clr-namespace:Ursa.Demo.Converters"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:pages="clr-namespace:Ursa.Demo.Pages"
|
xmlns:views="clr-namespace:Ursa.Demo.Views"
|
||||||
xmlns:u="https://irihi.tech/ursa"
|
xmlns:viewModels="clr-namespace:Ursa.Demo.ViewModels"
|
||||||
xmlns:vm="using:Ursa.Demo.ViewModels"
|
|
||||||
Title="Ursa.Demo"
|
Title="Ursa.Demo"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
x:CompileBindings="True"
|
||||||
x:DataType="vm:MainWindowViewModel"
|
x:DataType="viewModels:MainWindowViewModel"
|
||||||
Icon="/Assets/Ursa.ico"
|
Icon="/Assets/Ursa.ico"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
|
<views:MainView />
|
||||||
<Design.DataContext>
|
</Window>
|
||||||
<vm:MainWindowViewModel />
|
|
||||||
</Design.DataContext>
|
|
||||||
|
|
||||||
<Grid ColumnDefinitions="Auto, *" RowDefinitions="Auto, *">
|
|
||||||
<Border
|
|
||||||
Grid.RowSpan="2"
|
|
||||||
Padding="8,4"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
Theme="{DynamicResource CardBorder}">
|
|
||||||
<u:NavigationMenu ItemsSource="{Binding Menus.MenuItems}" ShowCollapseButton="True">
|
|
||||||
<u:NavigationMenu.Header>
|
|
||||||
<TextBlock
|
|
||||||
Classes="H4"
|
|
||||||
Text="Ursa"
|
|
||||||
Theme="{DynamicResource TitleTextBlock}" />
|
|
||||||
</u:NavigationMenu.Header>
|
|
||||||
<u:NavigationMenu.Icon>
|
|
||||||
<Image
|
|
||||||
Width="48"
|
|
||||||
Height="48"
|
|
||||||
RenderOptions.BitmapInterpolationMode="HighQuality"
|
|
||||||
Source="../Assets/Ursa.ico" />
|
|
||||||
</u:NavigationMenu.Icon>
|
|
||||||
<u:NavigationMenu.ItemTemplate>
|
|
||||||
<converters:MenuDataTemplateSelector>
|
|
||||||
<converters:MenuDataTemplateSelector.MenuTemplate>
|
|
||||||
<DataTemplate DataType="vm:MenuItemViewModel">
|
|
||||||
<u:NavigationMenuItem
|
|
||||||
Command="{Binding ActivateCommand}"
|
|
||||||
Header="{Binding MenuHeader}"
|
|
||||||
ItemsSource="{Binding Children}">
|
|
||||||
<u:NavigationMenuItem.Icon>
|
|
||||||
<Border
|
|
||||||
Width="10"
|
|
||||||
Height="10"
|
|
||||||
Background="{DynamicResource SemiBlue6}"
|
|
||||||
CornerRadius="3" />
|
|
||||||
</u:NavigationMenuItem.Icon>
|
|
||||||
</u:NavigationMenuItem>
|
|
||||||
</DataTemplate>
|
|
||||||
</converters:MenuDataTemplateSelector.MenuTemplate>
|
|
||||||
<converters:MenuDataTemplateSelector.SeparatorTemplate>
|
|
||||||
<DataTemplate DataType="vm:MenuItemViewModel">
|
|
||||||
<u:NavigationMenuSeparator Header="{Binding MenuHeader}" />
|
|
||||||
</DataTemplate>
|
|
||||||
</converters:MenuDataTemplateSelector.SeparatorTemplate>
|
|
||||||
</converters:MenuDataTemplateSelector>
|
|
||||||
</u:NavigationMenu.ItemTemplate>
|
|
||||||
</u:NavigationMenu>
|
|
||||||
</Border>
|
|
||||||
|
|
||||||
<ToggleButton
|
|
||||||
Grid.Row="0"
|
|
||||||
Grid.Column="1"
|
|
||||||
HorizontalAlignment="Right"
|
|
||||||
Content="Update Theme"
|
|
||||||
IsCheckedChanged="ToggleButton_OnIsCheckedChanged" />
|
|
||||||
<ContentControl
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"
|
|
||||||
Margin="12"
|
|
||||||
Content="{Binding Content}">
|
|
||||||
<ContentControl.ContentTemplate>
|
|
||||||
<converters:ViewLocator />
|
|
||||||
</ContentControl.ContentTemplate>
|
|
||||||
</ContentControl>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
</Window>
|
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Interactivity;
|
|
||||||
using Avalonia.Styling;
|
|
||||||
|
|
||||||
namespace Ursa.Demo.Views;
|
namespace Ursa.Demo.Views;
|
||||||
|
|
||||||
@@ -11,14 +8,4 @@ public partial class MainWindow : Window
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ToggleButton_OnIsCheckedChanged(object? sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var app = Application.Current;
|
|
||||||
if (app is not null)
|
|
||||||
{
|
|
||||||
var theme = app.ActualThemeVariant;
|
|
||||||
app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
5
src/Package.props
Normal file
5
src/Package.props
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<AvaloniaVersion>11.0.0</AvaloniaVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<ControlTheme x:Key="{x:Type u:Badge}" TargetType="{x:Type u:Badge}">
|
<ControlTheme x:Key="{x:Type u:Badge}" TargetType="{x:Type u:Badge}">
|
||||||
<!-- Set a very large corner radius to achieve pill look. -->
|
<!-- Set a very large corner radius to achieve pill look. -->
|
||||||
<Setter Property="u:Badge.CornerRadius" Value="100" />
|
<Setter Property="u:Badge.CornerRadius" Value="100" />
|
||||||
<Setter Property="u:Badge.FontSize" Value="8" />
|
<Setter Property="u:Badge.FontSize" Value="14" />
|
||||||
<Setter Property="u:Badge.Background" Value="{DynamicResource BadgePrimaryBadgeBackground}" />
|
<Setter Property="u:Badge.Background" Value="{DynamicResource BadgePrimaryBadgeBackground}" />
|
||||||
<Setter Property="u:Badge.ClipToBounds" Value="False" />
|
<Setter Property="u:Badge.ClipToBounds" Value="False" />
|
||||||
<Setter Property="u:Badge.HorizontalAlignment" Value="Center" />
|
<Setter Property="u:Badge.HorizontalAlignment" Value="Center" />
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<Import Project="../Package.props"/>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
@@ -11,11 +13,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.0.0-rc1.1" />
|
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Ursa\Ursa.csproj" />
|
<ProjectReference Include="..\Ursa\Ursa.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Avalonia.Controls;
|
|||||||
using Avalonia.Controls.Metadata;
|
using Avalonia.Controls.Metadata;
|
||||||
using Avalonia.Controls.Presenters;
|
using Avalonia.Controls.Presenters;
|
||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
using Ursa.Common;
|
using Ursa.Common;
|
||||||
@@ -75,9 +76,9 @@ public class Badge: ContentControl
|
|||||||
_badgeContent = e.NameScope.Find<ContentPresenter>(PART_BadgeContentPresenter);
|
_badgeContent = e.NameScope.Find<ContentPresenter>(PART_BadgeContentPresenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnLoaded()
|
protected override void OnLoaded(RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnLoaded();
|
base.OnLoaded(e);
|
||||||
UpdateBadgePosition();
|
UpdateBadgePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<Import Project="../Package.props"/>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
@@ -11,11 +13,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.0.0-rc1.1" />
|
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="TypeConverters" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user