Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
865e317d4e | ||
|
|
da11f5973a | ||
|
|
849eb14cec | ||
|
|
a573c24e32 | ||
|
|
246f7a4f45 | ||
|
|
d17fab17ba | ||
|
|
3b2aeca0fc | ||
|
|
0d63c553a2 | ||
|
|
0479743c31 | ||
|
|
0892677473 | ||
|
|
cf7fc27040 | ||
|
|
d6cb8403b7 | ||
|
|
ee1012c84d | ||
|
|
db80c8e268 | ||
|
|
07e679a17a | ||
|
|
de8c033e1d | ||
|
|
5e9af6dc69 | ||
|
|
d36d93584d | ||
|
|
b2e8d926a5 | ||
|
|
ed6b476a2f | ||
|
|
2360b726b7 | ||
|
|
2130c5bff2 | ||
|
|
07ee187a94 | ||
|
|
4b1ea2c311 | ||
|
|
f4820adf2d | ||
|
|
fa9d8f3a34 | ||
|
|
e5c0d28d03 | ||
|
|
112028b1c4 | ||
|
|
f40f469839 | ||
|
|
6ec3671d54 | ||
|
|
4c31a020e5 | ||
|
|
ea185d683d | ||
|
|
9827dfe6b1 | ||
|
|
1e7dbc4c7e | ||
|
|
d6f5e79f1d | ||
|
|
7ea480e72c | ||
|
|
8acfab11df | ||
|
|
68d2d64ea7 | ||
|
|
703f1c496b | ||
|
|
22c2baf321 | ||
|
|
c872c8a159 | ||
|
|
b8712ea371 | ||
|
|
37c2a73d41 | ||
|
|
c32ffdb9aa | ||
|
|
251e350381 | ||
|
|
a7fb68aeb5 | ||
|
|
eb760621f9 | ||
|
|
afcbb475d0 | ||
|
|
55bee3795f | ||
|
|
9231325b2a | ||
|
|
ae3525aef6 | ||
|
|
d37e315ccc | ||
|
|
bf37e576db | ||
|
|
ae98762d7b | ||
|
|
79376bd7f5 | ||
|
|
39f9c5044f | ||
|
|
01f1c584da | ||
|
|
b5379c9e55 | ||
|
|
078fd87541 | ||
|
|
e8de9d77be | ||
|
|
b94b4424c5 | ||
|
|
2c80778627 | ||
|
|
6e13cb8f34 | ||
|
|
b8fa063141 | ||
|
|
29300ae5f3 | ||
|
|
782099e225 | ||
|
|
d29e3a2d38 | ||
|
|
d25e25b0d7 | ||
|
|
288eb16fd2 | ||
|
|
f11e2341a1 | ||
|
|
11e06efe3e | ||
|
|
ecb1ca9aff | ||
|
|
f7de4faf85 | ||
|
|
3aefd5e877 | ||
|
|
3e5e6a116a | ||
|
|
6ce12ce286 | ||
|
|
c1054c0fa5 | ||
|
|
9f25b1853f | ||
|
|
24cd01c47b | ||
|
|
ccaad35cc8 | ||
|
|
aab2e417ba | ||
|
|
85abe84774 | ||
|
|
f22ec12782 | ||
|
|
54e613dec0 | ||
|
|
3d9618c0d1 | ||
|
|
e6cbf1bcea | ||
|
|
5a6507aad4 | ||
|
|
1bc80d2ab4 | ||
|
|
082a3b70ed | ||
|
|
b681fd2235 | ||
|
|
fe6ac9623f | ||
|
|
4e97e1b7f6 | ||
|
|
4d539baa15 | ||
|
|
cadf6c2be6 | ||
|
|
2faa8e824c | ||
|
|
efc278f2a4 | ||
|
|
ca90312476 | ||
|
|
0546522eb5 | ||
|
|
1a6438eff6 | ||
|
|
edb2f8affb | ||
|
|
dab60bcd25 | ||
|
|
1ba0c1f785 | ||
|
|
4a1ae528ab | ||
|
|
de29d52ee3 | ||
|
|
16997b6c6a | ||
|
|
2209595917 | ||
|
|
d136360505 | ||
|
|
28b25f3ce8 | ||
|
|
e1f44b817d | ||
|
|
bbd2b88ce0 | ||
|
|
24aeacc177 | ||
|
|
1b46ebc96a | ||
|
|
9a14d52844 | ||
|
|
296552db2b | ||
|
|
fa3ceaccdc | ||
|
|
8cfb83ddb9 | ||
|
|
a93b1cbb78 | ||
|
|
79a88c7bbd | ||
|
|
d009f9aad4 | ||
|
|
2b34cf92b1 | ||
|
|
3e71678f9f | ||
|
|
52fd23f382 | ||
|
|
27297c4baf | ||
|
|
c9ca3e21dd | ||
|
|
de8bd62033 | ||
|
|
9c755091c3 | ||
|
|
22914a8fef | ||
|
|
a7b0c99156 | ||
|
|
fd77a16261 | ||
|
|
1e10c603cf | ||
|
|
5a6f7ff65c | ||
|
|
b09d781ed9 | ||
|
|
5922816b74 | ||
|
|
953f8d6522 | ||
|
|
003df684bd | ||
|
|
7449fd962b | ||
|
|
74e3cbd2bc | ||
|
|
96af648f29 | ||
|
|
cc7f53a335 | ||
|
|
f5029746bb | ||
|
|
7fd234802e | ||
|
|
d6a0dff432 | ||
|
|
3160664403 | ||
|
|
4566696e33 | ||
|
|
fa10d1052e | ||
|
|
c51142652f | ||
|
|
948a2dbb9f | ||
|
|
16f5d88851 | ||
|
|
aa9eb5062a | ||
|
|
d2f56f5e9a | ||
|
|
424c0f7822 | ||
|
|
3af13c52d1 | ||
|
|
db868de4a7 | ||
|
|
4748483016 | ||
|
|
50aeca6c87 | ||
|
|
58e91f098f | ||
|
|
bc25996f85 | ||
|
|
a91abe6de5 | ||
|
|
a0968ebcb2 | ||
|
|
c96af3133e | ||
|
|
bf9d9214ad | ||
|
|
4b7f5c383c | ||
|
|
ae371e5943 | ||
|
|
4ca3da708b | ||
|
|
3eda478d04 | ||
|
|
ab26ba1401 | ||
|
|
7f0cee6a1a | ||
|
|
f268c1a530 | ||
|
|
573b874e74 | ||
|
|
eb4c142c45 | ||
|
|
8feb787b7f | ||
|
|
21fe71edff | ||
|
|
9a4e60266d | ||
|
|
babe4e2d80 | ||
|
|
d6d0d1bfa1 | ||
|
|
d938aa33a5 | ||
|
|
82bac88306 | ||
|
|
7b2888de34 | ||
|
|
e3eb1776de | ||
|
|
92e7460fe5 | ||
|
|
545d421347 | ||
|
|
4fe04bdf6a | ||
|
|
cf5bf182ec | ||
|
|
94c1199602 | ||
|
|
ec2b13277f | ||
|
|
f607effc77 | ||
|
|
28d53082ab | ||
|
|
c996bbb721 | ||
|
|
4a5beaea9e | ||
|
|
479580c5d0 | ||
|
|
59d77db55d | ||
|
|
a8965dad8a | ||
|
|
0dc0e01efb | ||
|
|
91a47ada6e | ||
|
|
f5dbf91e93 | ||
|
|
abe58fed60 | ||
|
|
94882bc6a3 | ||
|
|
8863852db2 | ||
|
|
bc8dd1f11f | ||
|
|
ca95502b5d | ||
|
|
e15d2359b6 | ||
|
|
cc4dc1f289 | ||
|
|
62fa42e661 | ||
|
|
92f9e74058 | ||
|
|
0dca54692d | ||
|
|
cdc133b946 | ||
|
|
8cabdf1be7 | ||
|
|
c773027cd4 | ||
|
|
827de1afa7 | ||
|
|
b85ae2aae0 | ||
|
|
32a0608054 | ||
|
|
f01b5ae652 | ||
|
|
a21b44f072 | ||
|
|
ec6ae4f161 | ||
|
|
77319fa4ef | ||
|
|
8654dd3e24 | ||
|
|
481c4ee310 | ||
|
|
9c7172efa2 | ||
|
|
1938a16bcf | ||
|
|
050cdeaf0f | ||
|
|
d95522537d | ||
|
|
8fc34fc5f6 | ||
|
|
e9f07d0153 | ||
|
|
b7e8e69e04 | ||
|
|
bb42416ced | ||
|
|
4635377b35 | ||
|
|
ab8cc4f253 | ||
|
|
3c7bf29bf6 | ||
|
|
67b3c025f3 | ||
|
|
ab21452409 | ||
|
|
fa33bd533f | ||
|
|
ddb5343f6c | ||
|
|
c34ab74594 | ||
|
|
0cdb6f060e | ||
|
|
20d15460c1 | ||
|
|
5cb5faacb0 | ||
|
|
d22e16c44b | ||
|
|
65425e87f0 | ||
|
|
91c4843d84 | ||
|
|
e9ec97b152 | ||
|
|
296bc1597d | ||
|
|
90eeb05620 | ||
|
|
5962f4c4dc | ||
|
|
a50f099e73 | ||
|
|
ec3f14099e | ||
|
|
8988155734 | ||
|
|
1fb407f110 | ||
|
|
97ad4af6a4 | ||
|
|
a650c698ad | ||
|
|
dcc4647001 | ||
|
|
d8c7ea4043 | ||
|
|
3fa07a7418 | ||
|
|
a9870ab3e5 | ||
|
|
fd404f4431 | ||
|
|
137f400740 | ||
|
|
627adcac29 | ||
|
|
e8b4df592d | ||
|
|
3c82561858 | ||
|
|
6754802cb8 | ||
|
|
73fd1d8b48 | ||
|
|
264516d12a | ||
|
|
861b0576c1 | ||
|
|
c63dba2e28 | ||
|
|
cbe3b954fc | ||
|
|
6b74930e1a | ||
|
|
37ac356c70 | ||
|
|
a7cc28a299 | ||
|
|
e1294ce0c2 | ||
|
|
36dc7cc946 | ||
|
|
d0de493cea | ||
|
|
fe587f3054 | ||
|
|
160b65563d | ||
|
|
a21ec579fb | ||
|
|
19ee399a94 | ||
|
|
5ee361bc06 | ||
|
|
f3494ba13b | ||
|
|
05dce06dcd | ||
|
|
0cea7caef2 | ||
|
|
f9ebc32f8b | ||
|
|
2de1a12e42 | ||
|
|
d2874d88ea | ||
|
|
cd39edeefd | ||
|
|
fe000c95b6 | ||
|
|
868143a248 | ||
|
|
cddf671fd6 | ||
|
|
ed9cab2175 | ||
|
|
fc1e2f3cac | ||
|
|
4fd203eab8 | ||
|
|
4defb58b0e | ||
|
|
42c0842a1d | ||
|
|
725112e350 | ||
|
|
7d9607b97e | ||
|
|
ebfcb9779b | ||
|
|
a99f6f5e14 | ||
|
|
8dd516e5d2 | ||
|
|
6cede51159 | ||
|
|
d4a7714751 | ||
|
|
7f57f0192c | ||
|
|
9921781f74 | ||
|
|
1a4cfd3f51 | ||
|
|
b8964286c9 | ||
|
|
5f8e33e015 | ||
|
|
b68a2eeb37 | ||
|
|
c903f3e755 | ||
|
|
0e7ccbb641 | ||
|
|
b51fe94053 | ||
|
|
151afb0ba3 | ||
|
|
2b276e9440 | ||
|
|
7f5ebf1cb6 | ||
|
|
457867b0b1 | ||
|
|
549100a52c | ||
|
|
9a6d4353c7 | ||
|
|
f8475322cf | ||
|
|
2a350c24c8 | ||
|
|
a47d17055b | ||
|
|
07e61dea44 | ||
|
|
664f242a11 | ||
|
|
029801c386 | ||
|
|
26d39bb33a | ||
|
|
2fa8f40086 | ||
|
|
95b53cab0d | ||
|
|
675ae06395 | ||
|
|
470c244d16 | ||
|
|
5865364e6a | ||
|
|
2559fc2c5d | ||
|
|
a184cc069a | ||
|
|
03a9e83481 | ||
|
|
f7e5fc2421 | ||
|
|
3c29b8efdf | ||
|
|
83f5c370fe | ||
|
|
9e2e8d7d59 | ||
|
|
63cb5c11d7 | ||
|
|
1fff72915c | ||
|
|
7e9925f05b | ||
|
|
e332bee93a | ||
|
|
87ce027ca5 | ||
|
|
a669560415 | ||
|
|
8067fea514 | ||
|
|
6d73c19d27 | ||
|
|
d9ef9e3dcd | ||
|
|
549ec79bfa | ||
|
|
8aaf814ff7 | ||
|
|
7e2b893104 | ||
|
|
8ce4861846 | ||
|
|
60abff7a13 | ||
|
|
ae8ec51642 | ||
|
|
318b360212 | ||
|
|
3ff117ecec | ||
|
|
dc54aae844 | ||
|
|
39ad55dde0 | ||
|
|
11830c1c95 | ||
|
|
0139aa65cd | ||
|
|
271514f51b | ||
|
|
b2c8ed2081 | ||
|
|
5b34289212 | ||
|
|
3b4c06047a | ||
|
|
c88cb29142 | ||
|
|
7d4210febe | ||
|
|
9b385e43bb | ||
|
|
8aefabec2e | ||
|
|
64080fa4e4 | ||
|
|
5690613db2 | ||
|
|
6b66a2e3bd | ||
|
|
eae82859f3 | ||
|
|
3fcc001308 | ||
|
|
c519cfe735 | ||
|
|
697a8f54f1 | ||
|
|
686171f73c | ||
|
|
d597f992e4 | ||
|
|
174ec43551 | ||
|
|
90f1aae4bd | ||
|
|
99270e730e | ||
|
|
080ed55860 | ||
|
|
ea0cd59763 | ||
|
|
a8780568d6 | ||
|
|
9b9de32f3c | ||
|
|
288f947730 | ||
|
|
3c65d716b1 | ||
|
|
ebef7ede81 | ||
|
|
be5bb78773 | ||
|
|
db636e894f | ||
|
|
808f0c1b9d | ||
|
|
20af863f4e | ||
|
|
15ddeddf0d | ||
|
|
3eff9a45c6 | ||
|
|
c3fbeb3c4a | ||
|
|
efc3cf6797 | ||
|
|
b78ac16667 | ||
|
|
a492968401 | ||
|
|
b4f220e683 | ||
|
|
b356d80c3e | ||
|
|
049072ea5d | ||
|
|
9c13426781 | ||
|
|
67ec02af0c |
@@ -4,7 +4,7 @@
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
[*.{sh}]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
@@ -17,7 +17,7 @@ charset = utf-8
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
[*.{js,json,xaml,axaml}]
|
||||
[*.{js,json,xaml,axaml,xml,resx,resw,csproj,wapproj,appxmanifest}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
*.sh text eol=lf
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
|
||||
@@ -11,7 +11,8 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
# os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
os: [ windows-latest ]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup .NET 5
|
||||
@@ -21,7 +22,15 @@ jobs:
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.100-preview.4.21255.9
|
||||
dotnet-version: 6.0.100-preview.7.21379.14
|
||||
|
||||
# - name: Install macOS SDK(macOS)
|
||||
# if: matrix.os == 'macOS-latest'
|
||||
# run: sudo dotnet workload install microsoft-macos-sdk-full
|
||||
|
||||
# - name: Install macOS SDK(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install microsoft-macos-sdk-full
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
@@ -37,11 +46,11 @@ jobs:
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Linux.sln
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Linux.sln
|
||||
run: dotnet restore ./SteamToolsV2+.Linux.slnf
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Mac.sln
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.sln
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.slnf
|
||||
|
||||
- name: dotnet AvaloniaApp build
|
||||
run: dotnet build ./src/ST.Client.Desktop.Avalonia.App/ST.Client.Desktop.Avalonia.App.csproj
|
||||
|
||||
@@ -19,3 +19,9 @@
|
||||
[submodule "references/WinAuth"]
|
||||
path = references/WinAuth
|
||||
url = https://github.com/SteamTools-Team/WinAuth
|
||||
[submodule "references/ArchiSteamFarm"]
|
||||
path = references/ArchiSteamFarm
|
||||
url = https://github.com/SteamTools-Team/ArchiSteamFarm.git
|
||||
[submodule "references/sqlite-net"]
|
||||
path = references/sqlite-net
|
||||
url = https://github.com/SteamTools-Team/sqlite-net.git
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<LangVersion>9.0</LangVersion>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<TrimMode>link</TrimMode>
|
||||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\Unicorn.pfx') ">
|
||||
<DefineConstants>SIGN_ASSEMBLY;$(DefineConstants)</DefineConstants>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>..\..\Unicorn.pfx</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)'=='Release' ">
|
||||
<DebugType>none</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\Unicorn.pfx</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -11,11 +11,11 @@
|
||||
[](https://github.com/rmbadmin/SteamTools/network/members)
|
||||

|
||||
[](https://github.com/SteamTools-Team/SteamTools/search?l=c%23)
|
||||
[](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4)
|
||||
[](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9)
|
||||
[](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7)
|
||||
[](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10)
|
||||
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||
[](https://github.com/xamarin/Xamarin.Forms)
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||

|
||||
[](https://github.com/ant-design/ant-design)
|
||||
[](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
|
||||
@@ -28,6 +28,12 @@
|
||||
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
## 🚀 Download channel
|
||||
- [GitHub Releases](https://github.com/SteamTools-Team/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Microsoft Store](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
|
||||
## ✨ Functions
|
||||
1. Local reverse proxy for Steam's community webpage to enable normal access in **the Chinese Mainland, Mainland of China**
|
||||
2. Quickly switch the Steam account that the current PC has remembered to log into
|
||||
@@ -41,34 +47,45 @@ English | [简体中文](./README.md)
|
||||
|
||||
<!--Prerequisites Microsoft Visual C++ 2015-2019 Redistributable [64 bit](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 bit](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
## 🖥 Supported Operating Systems
|
||||
- Desktop(Only 64 bit is supported)
|
||||
- Windows 10 1607+ / Windows Server, version 1909+ / Windows Server 2019 / Windows Server 2016
|
||||
- Desktop(Only X64 and ARM64 are supported)
|
||||
- Windows 10 / Windows Server, Version 20H2
|
||||
- Windows 10 / Windows Server, Version 2004
|
||||
- Windows 10 / Windows Server, Version 1909
|
||||
- Windows 10 / Windows Server, Version 1903
|
||||
- Windows 10, Version 1809
|
||||
- Windows 10, Version 1803
|
||||
- Windows 10, Version 1709
|
||||
- Windows 10, Version 1607
|
||||
- Windows 8.1 / Windows Server 2012 R2
|
||||
- Windows 7 SP1 [ESU](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
|
||||
- Prerequisites
|
||||
- KB3063858 [64 bit](https://www.microsoft.com/download/details.aspx?id=47442) / [32 bit](https://www.microsoft.com/download/details.aspx?id=47409)
|
||||
- macOS 10.13 High Sierra Or Higher
|
||||
- Windows Server 2019
|
||||
- Windows Server 2016
|
||||
- Windows Server 2012 R2
|
||||
- Windows Server 2012
|
||||
- macOS 10.14 Mojave Or Higher
|
||||
- Linux Distribution
|
||||
- Arch Linux
|
||||
- Alpine Linux 3.11+
|
||||
- Alpine Linux 3.13+
|
||||
- CentOS 7+
|
||||
- Debian 9+
|
||||
- Debian 10+
|
||||
- Deepin 20.1 / UOS 20
|
||||
- Fedora 32+
|
||||
- Linux Mint 18+
|
||||
- openSUSE 15+
|
||||
- Red Hat Enterprise Linux 7+
|
||||
- SUSE Enterprise Linux (SLES) 12 SP2+
|
||||
- Ubuntu 20.10, 20.04, 18.04, 16.04
|
||||
- Mobile(Only ARM64 or ARM32 are supported)
|
||||
- Android 5.0+
|
||||
- iOS 10.0+
|
||||
- Ubuntu 16.04, 18.04, 20.04+
|
||||
- Mobile
|
||||
- Android 5.0/API 21+ (Only [arm64-v8a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a) and [armeabiv-v7a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a) are supported)
|
||||
- iOS 10.0+ (ARM64 only)
|
||||
|
||||
## ⛔ Unsupported Operating System
|
||||
- Windows 8
|
||||
- [Due to Microsoft's official support for the product has ended](https://docs.microsoft.com/lifecycle/products/windows-8), so this program cannot run on this operating system, [It is recommended to upgrade to Windows 8.1](https://support.microsoft.com/windows/update-to-windows-8-1-from-windows-8-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2012 / 2008 R2 SP1
|
||||
- Only version 1.X is available, and version 2.X is not supported. It is recommended to upgrade to **Windows Server 2012 R2** or higher
|
||||
- Windows Server 2008 R2 SP1
|
||||
- Only version 1.x is available, 2.x is not supported at first, and it is recommended to upgrade to a higher version
|
||||
- Windows Server / Linux version without desktop GUI
|
||||
|
||||
## 🌏 Roadmap
|
||||
@@ -78,7 +95,7 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
|
||||
[Visual Studio 2019 Version 16.10 Or Higher](https://visualstudio.microsoft.com/vs/) Or [JetBrains Rider](https://www.jetbrains.com/rider/) Or ~~[Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/)~~ Or ~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- Supported Operating Systems
|
||||
- [Windows 10 version 2004 or higher: Home, Professional, Education, and Enterprise (LTSC and S are not supported)](https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements)
|
||||
- [macOS 10.13 High Sierra Or Higher](https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
- [macOS 10.14 Mojave Or Higher](https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
- Workload
|
||||
- Web and Cloud
|
||||
- ASP.NET and Web Development
|
||||
@@ -95,6 +112,9 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[Android Studio 4.2+](https://developer.android.com/studio/)
|
||||
[Xcode 13](https://developer.apple.com/xcode/)
|
||||
|
||||
## 📄 Thanks to the following Open Source Projects
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [MetroRadiance](https://github.com/Grabacr07/MetroRadiance)
|
||||
@@ -125,7 +145,7 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
|
||||
* [Polly](https://github.com/App-vNext/Polly)
|
||||
* [TaskScheduler](https://github.com/dahall/taskscheduler)
|
||||
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
|
||||
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
|
||||
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
|
||||
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
|
||||
* [NLog](https://github.com/nlog/NLog)
|
||||
* [NUnit](https://github.com/nunit/nunit)
|
||||
@@ -135,26 +155,30 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
|
||||
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
|
||||
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
|
||||
* [APNG.NET](https://github.com/jz5/APNG.NET)
|
||||
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
|
||||
* [Moq](https://github.com/moq/moq4)
|
||||
* [NPOI](https://github.com/nissl-lab/npoi)
|
||||
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
|
||||
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
|
||||
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
|
||||
* [CefNet](https://github.com/CefNet/CefNet)
|
||||
* [CefSharp](https://github.com/cefsharp/CefSharp)
|
||||
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
|
||||
* [QRCoder](https://github.com/codebude/QRCoder)
|
||||
* [React](https://github.com/facebook/react)
|
||||
* [Ant Design](https://github.com/ant-design/ant-design)
|
||||
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
|
||||
* [XF.Material Library](https://github.com/Baseflow/XF-Material-Library)
|
||||
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
|
||||
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
|
||||
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
|
||||
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
|
||||
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
|
||||
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
|
||||
* [Picasso](https://github.com/square/picasso)
|
||||
* [OkHttp](https://github.com/square/okhttp)
|
||||
* [Material Components for Android](https://github.com/material-components/material-components-android)
|
||||
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
|
||||
* [Android Jetpack](https://github.com/androidx/androidx)
|
||||
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
|
||||
* [MSAL.NET](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet)
|
||||
* [Entity Framework Core](https://github.com/dotnet/efcore)
|
||||
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
[](https://github.com/rmbadmin/SteamTools/network/members)
|
||||

|
||||
[](https://github.com/SteamTools-Team/SteamTools/search?l=c%23)
|
||||
[](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4)
|
||||
[](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9)
|
||||
[](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7)
|
||||
[](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)
|
||||
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||
[](https://github.com/xamarin/Xamarin.Forms)
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||

|
||||
[](https://github.com/ant-design/ant-design)
|
||||
[](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
|
||||
@@ -29,6 +29,12 @@
|
||||
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
## 🚀 下载渠道
|
||||
- [GitHub Releases](https://github.com/SteamTools-Team/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Microsoft Store](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
|
||||
## ✨ 功能
|
||||
1. 反代 Steam 的社区网页使其能正常访问
|
||||
- 功能类似羽翼城大佬的 [steamcommunity_302](https://www.dogfight360.com/blog/686/)
|
||||
@@ -50,34 +56,45 @@
|
||||
<!--发布配置SelfContained=true时会自动打包VC++相关程序集-->
|
||||
<!--先决条件 Microsoft Visual C++ 2015-2019 Redistributable [64 位](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 位](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
## 🖥 系统要求
|
||||
- 桌面端(仅支持 64 位)
|
||||
- Windows 10 1607+ / Windows Server 版本 1903+ / Windows Server 2019 / Windows Server 2016
|
||||
- Windows 8.1 / Windows Server 2012 R2
|
||||
- 桌面端(仅支持 X64 和 ARM64)
|
||||
- Windows 10/Windows Server 版本 20H2
|
||||
- Windows 10/Windows Server 版本 2004
|
||||
- Windows 10/Windows Server 版本 1909
|
||||
- Windows 10/Windows Server 版本 1903
|
||||
- Windows 10 版本 1809
|
||||
- Windows 10 版本 1803
|
||||
- Windows 10 版本 1709
|
||||
- Windows 10 版本 1607
|
||||
- Windows 8.1
|
||||
- Windows 7 SP1 [ESU](https://docs.microsoft.com/zh-cn/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
|
||||
- 先决条件
|
||||
- KB3063858 [64 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47442) / [32 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47409)
|
||||
- macOS 10.13 High Sierra 或更高版本
|
||||
- Windows Server 2019
|
||||
- Windows Server 2016
|
||||
- Windows Server 2012 R2
|
||||
- Windows Server 2012
|
||||
- macOS 10.14 Mojave 或更高版本
|
||||
- Linux 发行版
|
||||
- Arch Linux
|
||||
- Alpine Linux 3.11+
|
||||
- Alpine Linux 3.13+
|
||||
- CentOS 7+
|
||||
- Debian 9+
|
||||
- Debian 10+
|
||||
- Deepin 20.1 / UOS 20
|
||||
- Fedora 32+
|
||||
- Linux Mint 18+
|
||||
- openSUSE 15+
|
||||
- Red Hat Enterprise Linux 7+
|
||||
- SUSE Enterprise Linux (SLES) 12 SP2+
|
||||
- Ubuntu 20.10, 20.04, 18.04, 16.04
|
||||
- 移动端(仅支持 ARM64 或 ARM32)
|
||||
- Android 5.0+
|
||||
- iOS 10.0+
|
||||
- Ubuntu 16.04, 18.04, 20.04+
|
||||
- 移动端
|
||||
- Android 5.0/API 21+ (仅支持 [arm64-v8a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a) 和 [armeabiv-v7a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a))
|
||||
- iOS 10.0+ (仅支持 ARM64)
|
||||
|
||||
## ⛔ 不受支持的操作系统
|
||||
- Windows 8
|
||||
- [由于微软官方对该产品的支持已结束](https://docs.microsoft.com/zh-cn/lifecycle/products/windows-8),故本程序无法在此操作系统上运行,[建议升级到 Windows 8.1](https://support.microsoft.com/zh-cn/windows/%E4%BB%8E-windows-8-%E6%9B%B4%E6%96%B0%E5%88%B0-windows-8-1-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2012 / 2008 R2 SP1
|
||||
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到 **Windows Server 2012 R2** 或更高版本
|
||||
- Windows Server 2008 R2 SP1
|
||||
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到更高版本
|
||||
- 无桌面 GUI 的 Windows Server / Linux 版本
|
||||
|
||||
## 🌏 路线图
|
||||
@@ -87,7 +104,7 @@
|
||||
[Visual Studio 2019 版本 16.10 或更高版本](https://visualstudio.microsoft.com/zh-hans/vs/) 或 [JetBrains Rider](https://www.jetbrains.com/rider/) 或 ~~[Visual Studio for Mac](https://visualstudio.microsoft.com/zh-hans/vs/mac/)~~ 或 ~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- 系统要求
|
||||
- [Windows 10 版本 2004 或更高版本:家庭版、专业版、教育版和企业版(不支持 LTSC 和 Windows 10 S,在较早的操作系统上可能不受支持)](https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements)
|
||||
- [macOS 10.13 High Sierra 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
- [macOS 10.14 Mojave 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
- 工作负载
|
||||
- Web 和云
|
||||
- ASP.NET 和 Web 开发
|
||||
@@ -104,8 +121,18 @@
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[Android Studio 4.2+](https://developer.android.google.cn/studio/)
|
||||
[Xcode 13](https://developer.apple.com/xcode/)
|
||||
|
||||
## 🏗️ [项目结构](./src/README.md)
|
||||
|
||||
<!--
|
||||
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
|
||||
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
|
||||
* [CefNet](https://github.com/CefNet/CefNet)
|
||||
* [CefSharp](https://github.com/cefsharp/CefSharp)
|
||||
* [ZXing.Net.Mobile](https://github.com/Redth/ZXing.Net.Mobile)
|
||||
-->
|
||||
<!--👇图标如果发生更改,还需更改 Tools.OpenSourceLibraryList(Program.OpenSourceLibraryListEmoji) -->
|
||||
## 📄 感谢以下开源项目
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
@@ -137,7 +164,7 @@
|
||||
* [Polly](https://github.com/App-vNext/Polly)
|
||||
* [TaskScheduler](https://github.com/dahall/taskscheduler)
|
||||
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
|
||||
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
|
||||
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
|
||||
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
|
||||
* [NLog](https://github.com/nlog/NLog)
|
||||
* [NUnit](https://github.com/nunit/nunit)
|
||||
@@ -147,26 +174,30 @@
|
||||
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
|
||||
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
|
||||
* [APNG.NET](https://github.com/jz5/APNG.NET)
|
||||
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
|
||||
* [Moq](https://github.com/moq/moq4)
|
||||
* [NPOI](https://github.com/nissl-lab/npoi)
|
||||
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
|
||||
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
|
||||
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
|
||||
* [CefNet](https://github.com/CefNet/CefNet)
|
||||
* [CefSharp](https://github.com/cefsharp/CefSharp)
|
||||
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
|
||||
* [QRCoder](https://github.com/codebude/QRCoder)
|
||||
* [React](https://github.com/facebook/react)
|
||||
* [Ant Design](https://github.com/ant-design/ant-design)
|
||||
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
|
||||
* [XF.Material Library](https://github.com/Baseflow/XF-Material-Library)
|
||||
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
|
||||
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
|
||||
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
|
||||
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
|
||||
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
|
||||
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
|
||||
* [Picasso](https://github.com/square/picasso)
|
||||
* [OkHttp](https://github.com/square/okhttp)
|
||||
* [Material Components for Android](https://github.com/material-components/material-components-android)
|
||||
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
|
||||
* [Android Jetpack](https://github.com/androidx/androidx)
|
||||
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
|
||||
* [MSAL.NET](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet)
|
||||
* [Entity Framework Core](https://github.com/dotnet/efcore)
|
||||
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"solution": {
|
||||
"path": "SteamToolsV2+.sln",
|
||||
"projects": [
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
|
||||
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
|
||||
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
|
||||
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
|
||||
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
|
||||
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
|
||||
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\Common.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\Common.UnitTest.Droid.App.csproj",
|
||||
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj",
|
||||
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"src\\ST.Client\\ST.Client.csproj",
|
||||
"src\\ST.Client.Desktop\\ST.Client.Desktop.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Desktop.Avalonia.csproj",
|
||||
"src\\ST.Client.Desktop.Linux\\ST.Client.Desktop.Linux.csproj",
|
||||
"src\\ST.Client.Mobile\\ST.Client.Mobile.csproj",
|
||||
"src\\ST.Client.Mobile.Droid\\ST.Client.Mobile.Droid.csproj",
|
||||
"src\\ST.Client.Mobile.iOS\\ST.Client.Mobile.iOS.csproj",
|
||||
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
|
||||
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
|
||||
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
|
||||
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
|
||||
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"solution": {
|
||||
"path": "SteamToolsV2+.sln",
|
||||
"projects": [
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
|
||||
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
|
||||
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
|
||||
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
|
||||
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
|
||||
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
|
||||
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\Common.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\Common.UnitTest.Droid.App.csproj",
|
||||
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj",
|
||||
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"src\\ST.Client\\ST.Client.csproj",
|
||||
"src\\ST.Client.Desktop\\ST.Client.Desktop.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Desktop.Avalonia.csproj",
|
||||
"src\\ST.Client.Desktop.Mac\\ST.Client.Desktop.Mac.csproj",
|
||||
"src\\ST.Client.Mobile\\ST.Client.Mobile.csproj",
|
||||
"src\\ST.Client.Mobile.Droid\\ST.Client.Mobile.Droid.csproj",
|
||||
"src\\ST.Client.Mobile.iOS\\ST.Client.Mobile.iOS.csproj",
|
||||
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
|
||||
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
|
||||
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
|
||||
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
|
||||
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -7,11 +7,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Root", "_Root", "{66839CD8
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
.gitignore = .gitignore
|
||||
packaging\build-osx-app.sh = packaging\build-osx-app.sh
|
||||
Directory.Build.props = Directory.Build.props
|
||||
global.json = global.json
|
||||
nuget.config = nuget.config
|
||||
README.en.md = README.en.md
|
||||
README.md = README.md
|
||||
release-template.md = release-template.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0_Common", "0_Common", "{83186945-EC14-4B3F-8C6F-B205AA184CA4}"
|
||||
@@ -42,8 +44,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Authenticator", "references
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvaloniaGif", "references\AvaloniaGif\AvaloniaGif\AvaloniaGif.csproj", "{86505E07-1D61-450C-96ED-263E80349DE0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CefNet.Avalonia", "references\CefNet\CefNet.Avalonia\CefNet.Avalonia.csproj", "{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibAPNG", "references\AvaloniaGif\LibAPNG\LibAPNG.csproj", "{6AA8CA67-02A5-43C6-BECB-51BE246FA740}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SAM.API", "references\SteamAchievementManager\SAM.API\SAM.API.csproj", "{7A19537B-0D75-4131-A36C-0460B87637CC}"
|
||||
@@ -100,25 +100,29 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Packager.Installer
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Translate", "src\ST.Tools.Translate\ST.Tools.Translate.csproj", "{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Win7Troubleshoot", "src\ST.Tools.Win7Troubleshoot\ST.Tools.Win7Troubleshoot.csproj", "{1A07EEE0-3533-4FD1-8D08-F89129820B1A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App.Bridge", "src\ST.Client.Desktop.Avalonia.App.Bridge\ST.Client.Desktop.Avalonia.App.Bridge.csproj", "{D93B5190-AEFF-4C13-8387-D8EC760400DD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Console.App.Bridge", "src\ST.Client.Desktop.Console.App.Bridge\ST.Client.Desktop.Console.App.Bridge.csproj", "{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App", "src\ST.Client.Desktop.Avalonia.App\ST.Client.Desktop.Avalonia.App.csproj", "{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}"
|
||||
EndProject
|
||||
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "ST.Client.Desktop.Avalonia.App.Bridge.Package", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package\ST.Client.Desktop.Avalonia.App.Bridge.Package.wapproj", "{1F659618-71E2-4AAF-9D86-62700FD4CF02}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.Demo.App", "src\ST.Client.Desktop.Avalonia.Demo.App\ST.Client.Desktop.Avalonia.Demo.App.csproj", "{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Console.App", "src\ST.Client.Desktop.Console.App\ST.Client.Desktop.Console.App.csproj", "{912759CD-FEE9-405C-A668-55CEDB64B156}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Mobile.Droid.App", "src\ST.Client.Mobile.Droid.App\ST.Client.Mobile.Droid.App.csproj", "{B355E372-27D2-4217-A129-D3355573681F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Mobile.iOS.App", "src\ST.Client.Mobile.iOS.App\ST.Client.Mobile.iOS.App.csproj", "{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bin", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package.RefLauncher\Bin\Bin.csproj", "{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.AndroidResourceLink", "src\ST.Tools.AndroidResourceLink\ST.Tools.AndroidResourceLink.csproj", "{9A8D2254-9B2B-4B92-8498-43A73BB9A410}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm.Library", "references\ArchiSteamFarm\ArchiSteamFarm.Library\ArchiSteamFarm.Library.csproj", "{F4D8CD7B-6DF4-445C-AFA9-44466A552922}"
|
||||
EndProject
|
||||
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "ST.Client.Desktop.Avalonia.App.Bridge.Package", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package\ST.Client.Desktop.Avalonia.App.Bridge.Package.wapproj", "{1F659618-71E2-4AAF-9D86-62700FD4CF02}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SQLite-net-std", "references\sqlite-net\nuget\SQLite-net-std\SQLite-net-std.csproj", "{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Launcher", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package.RefLauncher\Launcher\Launcher.csproj", "{F75D6FF7-955D-4355-8895-D9333ED9B39F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App.Bridge", "src\ST.Client.Desktop.Avalonia.App.Bridge\ST.Client.Desktop.Avalonia.App.Bridge.csproj", "{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.DesktopBridgeLink", "src\ST.Tools.DesktopBridgeLink\ST.Tools.DesktopBridgeLink.csproj", "{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Server.Resources", "src\ST.Server.Resources\ST.Server.Resources.csproj", "{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -362,34 +366,6 @@ Global
|
||||
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
@@ -640,8 +616,8 @@ Global
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.Build.0 = Debug|x86
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
@@ -654,8 +630,8 @@ Global
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.ActiveCfg = Release|x86
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.Build.0 = Release|x86
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
@@ -1188,90 +1164,6 @@ Global
|
||||
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
@@ -1300,48 +1192,6 @@ Global
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Build.0 = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Build.0 = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Build.0 = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.ActiveCfg = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Build.0 = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Deploy.0 = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.ActiveCfg = Release|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Build.0 = Release|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Deploy.0 = Release|x86
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
@@ -1370,34 +1220,6 @@ Global
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x86.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x64.Build.0 = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
@@ -1458,34 +1280,244 @@ Global
|
||||
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
|
||||
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|x64.ActiveCfg = Release|iPhoneSimulator
|
||||
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|x86.ActiveCfg = Release|iPhoneSimulator
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Build.0 = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Build.0 = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Build.0 = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.ActiveCfg = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Build.0 = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Deploy.0 = Release|x64
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.ActiveCfg = Release|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Build.0 = Release|x86
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Deploy.0 = Release|x86
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x86.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -1499,7 +1531,6 @@ Global
|
||||
{A203BA92-B3B6-411C-91E1-8F3FF7BF2163} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{FEB554A3-1CAD-4E77-A300-CD8CA520EED6} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{86505E07-1D61-450C-96ED-263E80349DE0} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{6AA8CA67-02A5-43C6-BECB-51BE246FA740} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{7A19537B-0D75-4131-A36C-0460B87637CC} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{8D034553-3218-4B56-8B3D-00B96FCFF29A} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
@@ -1528,10 +1559,14 @@ Global
|
||||
{2BF2DA87-7F0E-4384-AF80-275D495A1972} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{A4E53C27-0195-47D3-9DC7-192061402BB8} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{1A07EEE0-3533-4FD1-8D08-F89129820B1A} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{D93B5190-AEFF-4C13-8387-D8EC760400DD} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{9A8D2254-9B2B-4B92-8498-43A73BB9A410} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{F4D8CD7B-6DF4-445C-AFA9-44466A552922} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{1F659618-71E2-4AAF-9D86-62700FD4CF02} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{F75D6FF7-955D-4355-8895-D9333ED9B39F} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67} = {1B889C56-157A-4493-85F2-76366282B002}
|
||||
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {9313F2B4-10DA-43AA-A481-CAA7571C740C}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"msbuild-sdks": {
|
||||
"MSBuild.Sdk.Extras": "3.0.22"
|
||||
"MSBuild.Sdk.Extras": "3.0.23"
|
||||
},
|
||||
"sdk": {
|
||||
"version": "6.0.100-preview.4.21255.9"
|
||||
"version": "6.0.100-preview.7.21379.14"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?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>CFBundleName</key>
|
||||
<string>Steam++</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.4.9</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.4.9.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.13</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,93 @@
|
||||
create_app_structure() {
|
||||
APPNAME=$1
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
APPICONS="/Users/mossimo/bin/logo.icns"
|
||||
|
||||
if [ ! -d "$APPDIR" ]; then
|
||||
echo "creating app structure $APPDIR"
|
||||
|
||||
mkdir -vp "$APPDIR"/{Resources,Frameworks}
|
||||
cp -v "$APPICONS" "$APPDIR/Resources/$APPNAME.icns"
|
||||
fi
|
||||
}
|
||||
|
||||
emit_plist() {
|
||||
PLIST_APPNAME=$1
|
||||
PLIST_PATH="$2/Info.plist"
|
||||
|
||||
if [ "$3" ]; then
|
||||
LSUIELEMENT="false"
|
||||
else
|
||||
LSUIELEMENT="true"
|
||||
fi
|
||||
|
||||
if [ ! -f "$PLIST_PATH" ]; then
|
||||
echo "emiting $PLIST_PATH"
|
||||
cat <<EOF > "$PLIST_PATH"
|
||||
<?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>CFBundleName</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.4.9</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.4.9.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.13</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>LSUIElement</key>
|
||||
<string>$LSUIELEMENT</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
cd "/Users/mossimo/bin"
|
||||
|
||||
|
||||
BINARYNAME="Steam++"
|
||||
|
||||
echo "Building Avalonia demo..."
|
||||
|
||||
|
||||
APPNAME="$BINARYNAME"
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
|
||||
rm -rf "$APPDIR"
|
||||
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR" true
|
||||
|
||||
cd "$APPDIR/Frameworks"
|
||||
|
||||
APPNAME="$BINARYNAME Helper"
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR"
|
||||
cp -R "../../../steampp/" "../MacOS"
|
||||
ln -s "../../MacOS" "Frameworks/$APPDIR/MacOS"
|
||||
chmod +x "../MacOS/$BINARYNAME"
|
||||
cp "../MacOS/$BINARYNAME" "../MacOS/$APPNAME"
|
||||
chmod +x "../MacOS/$APPNAME"
|
||||
@@ -0,0 +1,45 @@
|
||||
// https://github.com/NLog/NLog/blob/v4.7.10/src/NLog/LogManager.cs
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using System;
|
||||
|
||||
namespace ArchiSteamFarm
|
||||
{
|
||||
public static class LogManager
|
||||
{
|
||||
static readonly LogFactory factory = new();
|
||||
|
||||
[CLSCompliant(false)]
|
||||
public static Logger GetLogger(string name)
|
||||
{
|
||||
return factory.GetLogger(name);
|
||||
}
|
||||
|
||||
public static void Flush()
|
||||
{
|
||||
factory.Flush();
|
||||
}
|
||||
|
||||
public static void ReconfigExistingLoggers()
|
||||
{
|
||||
factory.ReconfigExistingLoggers();
|
||||
}
|
||||
|
||||
public static LoggingConfiguration Configuration
|
||||
{
|
||||
get => factory.Configuration;
|
||||
set => factory.Configuration = value;
|
||||
}
|
||||
|
||||
public static event EventHandler<LoggingConfigurationChangedEventArgs> ConfigurationChanged
|
||||
{
|
||||
add => factory.ConfigurationChanged += value;
|
||||
remove => factory.ConfigurationChanged -= value;
|
||||
}
|
||||
|
||||
public static void Shutdown()
|
||||
{
|
||||
factory.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
|
||||
namespace ArchiSteamFarm
|
||||
{
|
||||
public static class ASFPathHelper
|
||||
{
|
||||
static readonly Lazy<string> _AppDataDirectory = new(() =>
|
||||
{
|
||||
var path = Path.Combine(IOPath.AppDataDirectory, "ASF");
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
});
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// AppData\ASF\config
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// AppData\ASF\plugins
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public static string AppDataDirectory => _AppDataDirectory.Value;
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// Windows:Logs\ASF
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// Windows Desktop Bridge:{CacheDirectory}\Logs\ASF
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
/// <param name="logDirPath"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetLogDirectory([NotNull] string logDirPath)
|
||||
{
|
||||
var path = (logDirPath.EndsWith(Path.DirectorySeparatorChar) ? logDirPath : logDirPath + Path.DirectorySeparatorChar) + "ASF";
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
public static string GetNLogArchiveFileName([NotNull] string logDirectory)
|
||||
{
|
||||
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.ArchivalLogFile;
|
||||
return path;
|
||||
}
|
||||
|
||||
public static string GetNLogFileName([NotNull] string logDirectory)
|
||||
{
|
||||
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.LogFile;
|
||||
return path;
|
||||
}
|
||||
|
||||
static readonly Lazy<string> _WebsiteDirectory = new(() =>
|
||||
{
|
||||
var path = Path.Combine(IOPath.BaseDirectory, "ASF-ui");
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
});
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// Desktop:ASF-ui
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public static string WebsiteDirectory => _WebsiteDirectory.Value;
|
||||
|
||||
#if DEBUG
|
||||
[Obsolete("use AppDataDirectory")]
|
||||
public static string HomeDirectory => AppDataDirectory;
|
||||
#endif
|
||||
|
||||
public const string NLogGeneralLayout = NLog.Logging.GeneralLayout;
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<!--<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>-->
|
||||
<!--<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net461</TargetFrameworks>-->
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<!--<Configurations>Debug;Release;Nuget_Release</Configurations>-->
|
||||
<Description>.NET binding for the Chromium Embedded Framework (Avalonia control)</Description>
|
||||
<PackageTags>CefNet, CEF, browser, chromium, Avalonia, AvaloniaUI</PackageTags>
|
||||
<DefineConstants>AvaloniaBeta;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<DefineConstants>$(DefineConstants);TRACE;AVALONIA</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Internal\CursorInteropHelper.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\CefNet.Windows.Forms\WinApi\DWMWINDOWATTRIBUTE.cs" Link="WinApi\DWMWINDOWATTRIBUTE.cs" />
|
||||
<Compile Include="..\CefNet.Wpf\Events\PdfPrintFinishedRoutedEventArgs.cs" Link="Events\PdfPrintFinishedRoutedEventArgs.cs" />
|
||||
<Compile Include="..\CefNet.Wpf\Events\ScriptDialogOpeningRoutedEventArgs.cs" Link="Events\ScriptDialogOpeningRoutedEventArgs.cs" />
|
||||
<Compile Include="..\CefNet.Wpf\Events\TextFoundRoutedEventArgs.cs" Link="Events\TextFoundRoutedEventArgs.cs" />
|
||||
<Compile Include="..\CefNet\WebView.CommonImplementation.cs" Link="WebView.CommonImplementation.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="0.10.999-cibuild0013694-beta" />
|
||||
<PackageReference Include="CefNet" Version="90.5.21109.1453" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\..\src\Common.CoreLib\Properties\ThisAssembly.Version.cs') ">
|
||||
<Compile Include="..\..\..\src\Common.CoreLib\Properties\AssemblyInfo.Version.cs">
|
||||
<Link>Properties\AssemblyInfo.Version.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\src\Common.CoreLib\Properties\ThisAssembly.Version.cs">
|
||||
<Link>Properties\ThisAssembly.Version.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,167 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Threading;
|
||||
|
||||
namespace CefNet
|
||||
{
|
||||
public class CefNetApplicationLifetime : IClassicDesktopStyleApplicationLifetime, IControlledApplicationLifetime, IApplicationLifetime, IDisposable
|
||||
{
|
||||
private int _exitCode;
|
||||
private CancellationTokenSource _cts;
|
||||
private bool _isShuttingDown;
|
||||
private HashSet<Window> _windows = new HashSet<Window>();
|
||||
private static CefNetApplicationLifetime _activeLifetime;
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public string[] Args { get; internal set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ShutdownMode ShutdownMode { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public Window MainWindow { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyList<Window> Windows
|
||||
{
|
||||
get { return _windows.ToList(); }
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public event EventHandler<ControlledApplicationLifetimeStartupEventArgs> Startup;
|
||||
|
||||
/// <inheritdoc />
|
||||
public event EventHandler<ControlledApplicationLifetimeExitEventArgs> Exit;
|
||||
|
||||
static CefNetApplicationLifetime()
|
||||
{
|
||||
Window.WindowOpenedEvent.AddClassHandler(typeof(Window), new EventHandler<RoutedEventArgs>(OnWindowOpened));
|
||||
Window.WindowClosedEvent.AddClassHandler(typeof(Window), new EventHandler<RoutedEventArgs>(WindowClosedEvent));
|
||||
}
|
||||
|
||||
private static void WindowClosedEvent(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var window = sender as Window;
|
||||
if (window is null)
|
||||
return;
|
||||
_activeLifetime?._windows.Remove(window);
|
||||
_activeLifetime?.HandleWindowClosed(window);
|
||||
}
|
||||
|
||||
private static void OnWindowOpened(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var window = sender as Window;
|
||||
if (window is null)
|
||||
return;
|
||||
_activeLifetime?._windows.Add(window);
|
||||
}
|
||||
|
||||
public CefNetApplicationLifetime()
|
||||
{
|
||||
if (_activeLifetime is null)
|
||||
_activeLifetime = this;
|
||||
else
|
||||
throw new InvalidOperationException($"Can not have multiple active {this.GetType().Name} instances and the previously created one was not disposed.");
|
||||
}
|
||||
|
||||
protected virtual void HandleWindowClosed(Window window)
|
||||
{
|
||||
if (window != null && !_isShuttingDown)
|
||||
{
|
||||
if (ShutdownMode == ShutdownMode.OnLastWindowClose && _windows.Count == 0)
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
else if (ShutdownMode == ShutdownMode.OnMainWindowClose && window == MainWindow)
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Shutdown(int exitCode = 0)
|
||||
{
|
||||
if (_isShuttingDown)
|
||||
throw new InvalidOperationException("Application is already shutting down.");
|
||||
|
||||
_exitCode = exitCode;
|
||||
|
||||
_isShuttingDown = true;
|
||||
try
|
||||
{
|
||||
foreach (Window window in Windows)
|
||||
{
|
||||
window.Close();
|
||||
}
|
||||
CefNetApplication.Instance.SignalForShutdown(ShutdownComplete);
|
||||
}
|
||||
catch
|
||||
{
|
||||
ShutdownComplete();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShutdownComplete()
|
||||
{
|
||||
_cts?.Cancel();
|
||||
_cts = null;
|
||||
_isShuttingDown = false;
|
||||
}
|
||||
|
||||
public int Start(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args));
|
||||
_cts = new CancellationTokenSource();
|
||||
MainWindow?.Show();
|
||||
|
||||
Dispatcher.UIThread.MainLoop(_cts.Token);
|
||||
|
||||
ControlledApplicationLifetimeExitEventArgs e = new ControlledApplicationLifetimeExitEventArgs(_exitCode);
|
||||
this.Exit?.Invoke(this, e);
|
||||
|
||||
Environment.ExitCode = e.ApplicationExitCode;
|
||||
return e.ApplicationExitCode;
|
||||
}
|
||||
finally
|
||||
{
|
||||
CefNetApplication.Instance.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_activeLifetime == this)
|
||||
_activeLifetime = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class CefNetApplicationLifetimeExtensions
|
||||
{
|
||||
public static int StartWithCefNetApplicationLifetime<T>(this T builder, string[] args, ShutdownMode shutdownMode = ShutdownMode.OnLastWindowClose)
|
||||
where T : AppBuilderBase<T>, new()
|
||||
{
|
||||
CefNetApplicationLifetime lifetime = new CefNetApplicationLifetime
|
||||
{
|
||||
Args = args,
|
||||
ShutdownMode = shutdownMode
|
||||
};
|
||||
builder.SetupWithLifetime(lifetime);
|
||||
return lifetime.Start(args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,199 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using CefNet.Input;
|
||||
using CefNet.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Avalonia
|
||||
{
|
||||
public static class CefNetAvaloniaExtensions
|
||||
{
|
||||
#pragma warning disable IDE0060
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static void Invoke<TEventArgs>(this RoutedEvent routedEvent, Interactive sender, TEventArgs e)
|
||||
where TEventArgs : class
|
||||
{
|
||||
sender.RaiseEvent(e as RoutedEventArgs);
|
||||
}
|
||||
#pragma warning restore IDE0060
|
||||
|
||||
/// <summary>
|
||||
/// Converts the specified <see cref="Key"/> into a virtual key.
|
||||
/// </summary>
|
||||
/// <param name="key">The key code.</param>
|
||||
/// <returns>The virtual key code.</returns>
|
||||
public static VirtualKeys ToVirtualKey(this Key key)
|
||||
{
|
||||
if (key >= Key.LeftShift && key <= Key.RightAlt)
|
||||
return (VirtualKeys)((key - Key.LeftShift) >> 1) | VirtualKeys.ShiftKey; // VK_SHIFT, VK_CONTROL, VK_MENU
|
||||
if (key == Key.System)
|
||||
return VirtualKeys.Menu; // VK_MENU
|
||||
return (VirtualKeys)KeyInterop.VirtualKeyFromKey(key);
|
||||
}
|
||||
|
||||
public static Color ToColor(this CefColor color)
|
||||
{
|
||||
return Color.FromArgb(color.A, color.R, color.G, color.B);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a drag drop effects to the CEF dragging operation mask.
|
||||
/// </summary>
|
||||
/// <param name="self">The drag drop effects.</param>
|
||||
/// <returns></returns>
|
||||
public static CefDragOperationsMask ToCefDragOperationsMask(this DragDropEffects self)
|
||||
{
|
||||
CefDragOperationsMask effects = CefDragOperationsMask.None;
|
||||
if (self.HasFlag(DragDropEffects.Copy))
|
||||
effects |= CefDragOperationsMask.Copy;
|
||||
if (self.HasFlag(DragDropEffects.Move))
|
||||
effects |= CefDragOperationsMask.Move;
|
||||
if (self.HasFlag(DragDropEffects.Link))
|
||||
effects |= CefDragOperationsMask.Link;
|
||||
return effects;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the CEF dragging operation mask to drag drop effects.
|
||||
/// </summary>
|
||||
/// <param name="self">The CEF dragging operation mask.</param>
|
||||
/// <returns></returns>
|
||||
public static DragDropEffects ToDragDropEffects(this CefDragOperationsMask self)
|
||||
{
|
||||
DragDropEffects effects = DragDropEffects.None;
|
||||
if (self.HasFlag(CefDragOperationsMask.Every))
|
||||
effects |= DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move;
|
||||
if (self.HasFlag(CefDragOperationsMask.Copy))
|
||||
effects |= DragDropEffects.Copy;
|
||||
if (self.HasFlag(CefDragOperationsMask.Move))
|
||||
effects |= DragDropEffects.Move;
|
||||
if (self.HasFlag(CefDragOperationsMask.Link))
|
||||
effects |= DragDropEffects.Link;
|
||||
return effects;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current state of the SHIFT, CTRL, and ALT keys, as well as the state of the mouse buttons.
|
||||
/// </summary>
|
||||
/// <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
|
||||
/// <returns></returns>
|
||||
public static CefEventFlags GetModifiers(this DragEventArgs e)
|
||||
{
|
||||
#pragma warning disable CS0618 // Obsoleted InputModifiers
|
||||
CefEventFlags flags = CefEventFlags.None;
|
||||
InputModifiers state = e.Modifiers;
|
||||
if (state.HasFlag(InputModifiers.LeftMouseButton))
|
||||
flags |= CefEventFlags.LeftMouseButton;
|
||||
if (state.HasFlag(InputModifiers.RightMouseButton))
|
||||
flags |= CefEventFlags.RightMouseButton;
|
||||
if (state.HasFlag(InputModifiers.Shift))
|
||||
flags |= CefEventFlags.ShiftDown;
|
||||
if (state.HasFlag(InputModifiers.Control))
|
||||
flags |= CefEventFlags.ControlDown;
|
||||
if (state.HasFlag(InputModifiers.MiddleMouseButton))
|
||||
flags |= CefEventFlags.MiddleMouseButton;
|
||||
if (state.HasFlag(InputModifiers.Alt))
|
||||
flags |= CefEventFlags.AltDown;
|
||||
if (state.HasFlag(InputModifiers.Windows))
|
||||
flags |= CefEventFlags.CommandDown;
|
||||
return flags;
|
||||
#pragma warning restore CS0618
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the drag data.
|
||||
/// </summary>
|
||||
/// <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
|
||||
public static CefDragData GetCefDragData(this DragEventArgs e)
|
||||
{
|
||||
CefDragData dragData;
|
||||
if (e.Data.Contains(nameof(CefDragData)))
|
||||
{
|
||||
dragData = (CefDragData)e.Data.Get(nameof(CefDragData));
|
||||
if (dragData != null)
|
||||
{
|
||||
dragData.ResetFileContents();
|
||||
return dragData;
|
||||
}
|
||||
}
|
||||
|
||||
dragData = new CefDragData();
|
||||
|
||||
string[] formats = e.Data.GetDataFormats().ToArray();
|
||||
|
||||
if (TryGetFileDropData(e.Data, out IEnumerable<string> fileNames))
|
||||
{
|
||||
foreach (string filePath in fileNames)
|
||||
{
|
||||
dragData.AddFile(filePath.Replace("\\", "/"), Path.GetFileName(filePath));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool isUrl = false;
|
||||
string s = GetUrlString(e.Data, formats);
|
||||
if (!string.IsNullOrWhiteSpace(s))
|
||||
{
|
||||
isUrl = true;
|
||||
dragData.LinkUrl = s;
|
||||
}
|
||||
|
||||
if (formats.Contains(CefNetDragData.DataFormatUnicodeText))
|
||||
{
|
||||
s = (string)e.Data.Get(CefNetDragData.DataFormatUnicodeText);
|
||||
|
||||
if (!isUrl && Uri.IsWellFormedUriString(s, UriKind.Absolute))
|
||||
dragData.LinkUrl = s;
|
||||
dragData.FragmentText = s;
|
||||
}
|
||||
else if (formats.Contains(DataFormats.Text))
|
||||
{
|
||||
s = (string)e.Data.Get(DataFormats.Text);
|
||||
|
||||
if (!isUrl && Uri.IsWellFormedUriString(s, UriKind.Absolute))
|
||||
dragData.LinkUrl = s;
|
||||
dragData.FragmentText = s;
|
||||
}
|
||||
|
||||
if (formats.Contains(CefNetDragData.DataFormatHtml))
|
||||
{
|
||||
dragData.FragmentHtml = Encoding.UTF8.GetString((byte[])e.Data.Get(CefNetDragData.DataFormatHtml));
|
||||
}
|
||||
else if (formats.Contains(CefNetDragData.DataFormatTextHtml))
|
||||
{
|
||||
dragData.FragmentHtml = Encoding.UTF8.GetString((byte[])e.Data.Get(CefNetDragData.DataFormatTextHtml));
|
||||
}
|
||||
|
||||
return dragData;
|
||||
}
|
||||
|
||||
private static bool TryGetFileDropData(IDataObject data, out IEnumerable<string> fileNames)
|
||||
{
|
||||
if (data.Contains(CefNetDragData.DataFormatFileDrop))
|
||||
fileNames = (IEnumerable<string>)data.Get(CefNetDragData.DataFormatFileDrop);
|
||||
else if (data.Contains(CefNetDragData.DataFormatFileNames))
|
||||
fileNames = (IEnumerable<string>)data.Get(CefNetDragData.DataFormatFileNames);
|
||||
else
|
||||
fileNames = null;
|
||||
return fileNames != null;
|
||||
}
|
||||
|
||||
private static string GetUrlString(IDataObject data, string[] formats)
|
||||
{
|
||||
if (formats.Contains(CefNetDragData.DataFormatUnicodeUrl))
|
||||
return Encoding.Unicode.GetString((byte[])data.Get(CefNetDragData.DataFormatUnicodeUrl));
|
||||
|
||||
if (formats.Contains(CefNetDragData.DataFormatUrl))
|
||||
return Encoding.ASCII.GetString((byte[])data.Get(CefNetDragData.DataFormatUrl));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,138 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Avalonia
|
||||
{
|
||||
public class CefNetDragData : IDataObject
|
||||
{
|
||||
internal const string DataFormatUrl = "UniformResourceLocator";
|
||||
internal const string DataFormatUnicodeUrl = "UniformResourceLocatorW";
|
||||
internal const string DataFormatTextHtml = "text/html";
|
||||
internal const string DataFormatUnicodeText = "UnicodeText";
|
||||
internal const string DataFormatHtml = "HTML Format";
|
||||
internal const string DataFormatFileDrop = "FileDrop";
|
||||
internal const string DataFormatFileNames = "FileNames";
|
||||
|
||||
public const string DataFormatCefNetDragData = nameof(CefNetDragData);
|
||||
public const string DataFormatCefDragData = nameof(CefDragData);
|
||||
|
||||
private WeakReference<WebView> _source;
|
||||
private HashSet<string> _formats;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="CefNetDragData"/> class.
|
||||
/// </summary>
|
||||
/// <param name="source">The source of the drag event.</param>
|
||||
/// <param name="data">The original drag data.</param>
|
||||
public CefNetDragData(WebView source, CefDragData data)
|
||||
{
|
||||
var formats = new HashSet<string>();
|
||||
formats.Add(DataFormatCefNetDragData);
|
||||
formats.Add(DataFormatCefDragData);
|
||||
if (data.IsFile)
|
||||
{
|
||||
formats.Add(DataFormatFileDrop);
|
||||
formats.Add(DataFormatFileNames);
|
||||
}
|
||||
if (data.IsLink)
|
||||
{
|
||||
formats.Add(DataFormatUnicodeUrl);
|
||||
formats.Add(DataFormatUnicodeText);
|
||||
}
|
||||
if (data.IsFragment)
|
||||
{
|
||||
formats.Add(DataFormatUnicodeText);
|
||||
formats.Add(DataFormatHtml);
|
||||
formats.Add(DataFormatTextHtml);
|
||||
}
|
||||
|
||||
_source = new WeakReference<WebView>(source);
|
||||
_formats = formats;
|
||||
this.Data = data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The original drag data.
|
||||
/// </summary>
|
||||
public CefDragData Data { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The source of the drag event.
|
||||
/// </summary>
|
||||
public WebView Source
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_source.TryGetTarget(out WebView source))
|
||||
return source;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Contains(string format)
|
||||
{
|
||||
return _formats.Contains(format);
|
||||
}
|
||||
|
||||
public object Get(string format)
|
||||
{
|
||||
Debug.Print("GetData: " + format);
|
||||
string s;
|
||||
if (DataFormatUnicodeUrl.Equals(format, StringComparison.Ordinal))
|
||||
{
|
||||
s = Data.LinkUrl;
|
||||
return s is null ? null : new MemoryStream(Encoding.Unicode.GetBytes(s));
|
||||
}
|
||||
if (DataFormatUrl.Equals(format, StringComparison.Ordinal))
|
||||
{
|
||||
s = Data.LinkUrl;
|
||||
return s is null ? null : new MemoryStream(Encoding.ASCII.GetBytes(s));
|
||||
}
|
||||
if (DataFormatUnicodeText.Equals(format, StringComparison.Ordinal))
|
||||
{
|
||||
if (Data.IsLink)
|
||||
return Data.LinkUrl;
|
||||
return Data.FragmentText;
|
||||
}
|
||||
if (DataFormatHtml.Equals(format, StringComparison.Ordinal))
|
||||
return Data.FragmentHtml;
|
||||
if (DataFormats.Text.Equals(format, StringComparison.Ordinal))
|
||||
return Data.FragmentText;
|
||||
if (DataFormatTextHtml.Equals(format, StringComparison.Ordinal))
|
||||
return Data.FragmentHtml;
|
||||
if (DataFormatCefDragData.Equals(format, StringComparison.Ordinal))
|
||||
return Data;
|
||||
if (DataFormatCefNetDragData.Equals(format, StringComparison.Ordinal))
|
||||
return this;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetDataFormats()
|
||||
{
|
||||
return _formats;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetFileNames()
|
||||
{
|
||||
using (var list = new CefStringList())
|
||||
{
|
||||
Data.GetFileNames(list);
|
||||
|
||||
foreach (string s in list)
|
||||
yield return s;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetText()
|
||||
{
|
||||
if (Data.IsLink)
|
||||
return Data.LinkUrl;
|
||||
return Data.FragmentText;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace CefNet.Avalonia
|
||||
{
|
||||
public class CursorChangeEventArgs : HandledEventArgs
|
||||
{
|
||||
public CursorChangeEventArgs(Cursor cursor, CefCursorType cursorType)
|
||||
{
|
||||
this.Cursor = cursor;
|
||||
this.CursorType = cursorType;
|
||||
}
|
||||
|
||||
public Cursor Cursor { get; }
|
||||
|
||||
public CefCursorType CursorType { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,140 +0,0 @@
|
||||
#if MODERNFORMS
|
||||
using Modern.Forms;
|
||||
#else
|
||||
using Avalonia;
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
#endif
|
||||
|
||||
using CefNet.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
#if MODERNFORMS
|
||||
namespace CefNet.Modern.Forms
|
||||
#else
|
||||
namespace CefNet.Avalonia
|
||||
#endif
|
||||
{
|
||||
public sealed class CustomCursor
|
||||
{
|
||||
public unsafe static Cursor Create(ref CefCursorInfo cursorInfo)
|
||||
{
|
||||
return Cursor.Default; // Not supported
|
||||
|
||||
/*
|
||||
CefSize size = cursorInfo.Size;
|
||||
|
||||
var bufferSize = size.Width * size.Height * 4;
|
||||
int ICON_HEADER_SIZE = sizeof(ICONDIR);
|
||||
var stream = new MemoryStream(bufferSize);
|
||||
{
|
||||
if (stream.Seek(ICON_HEADER_SIZE, SeekOrigin.Begin) != ICON_HEADER_SIZE)
|
||||
{
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
stream.Write(new byte[ICON_HEADER_SIZE], 0, ICON_HEADER_SIZE);
|
||||
}
|
||||
using (var image = new WriteableBitmap(new PixelSize(size.Width, size.Height), OffscreenGraphics.Dpi, PixelFormat.Bgra8888))
|
||||
{
|
||||
using (ILockedFramebuffer frameBuffer = image.Lock())
|
||||
{
|
||||
System.Runtime.CompilerServices.Unsafe.CopyBlock((void*)frameBuffer.Address, (void*)cursorInfo.Buffer, (uint)bufferSize);
|
||||
}
|
||||
image.Save(stream); // Save in png format!!!
|
||||
}
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
CefPoint hotSpot = cursorInfo.Hotspot;
|
||||
|
||||
var icon = new ICONDIR();
|
||||
icon.IconType = 2;
|
||||
icon.ImagesCount = 1;
|
||||
icon.Width = (byte)size.Width;
|
||||
icon.Height = (byte)size.Height;
|
||||
icon.HotSpotX = (short)hotSpot.X;
|
||||
icon.HotSpotY = (short)hotSpot.Y;
|
||||
icon.BytesInRes = (int)stream.Length - ICON_HEADER_SIZE;
|
||||
icon.ImageOffset = ICON_HEADER_SIZE;
|
||||
|
||||
using (var iconHead = new UnmanagedMemoryStream(icon._data, ICON_HEADER_SIZE))
|
||||
{
|
||||
iconHead.CopyTo(stream);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
return new Cursor(stream);
|
||||
*/
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 22)]
|
||||
unsafe struct ICONDIR
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public fixed byte _data[22];
|
||||
|
||||
/// <summary>
|
||||
/// Reserved. Must always be 0.
|
||||
/// </summary>
|
||||
[FieldOffset(0)]
|
||||
public short IDReserved;
|
||||
/// <summary>
|
||||
/// Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image.
|
||||
/// </summary>
|
||||
[FieldOffset(2)]
|
||||
public short IconType;
|
||||
/// <summary>
|
||||
/// Specifies number of images in the file.
|
||||
/// </summary>
|
||||
[FieldOffset(4)]
|
||||
public short ImagesCount;
|
||||
/// <summary>
|
||||
/// Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.
|
||||
/// </summary>
|
||||
[FieldOffset(6)]
|
||||
public byte Width;
|
||||
/// <summary>
|
||||
/// Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.
|
||||
/// </summary>
|
||||
[FieldOffset(7)]
|
||||
public byte Height;
|
||||
/// <summary>
|
||||
/// Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette.
|
||||
/// </summary>
|
||||
[FieldOffset(8)]
|
||||
public byte ColorCount;
|
||||
/// <summary>
|
||||
/// Reserved. Should be 0.
|
||||
/// </summary>
|
||||
[FieldOffset(9)]
|
||||
public byte IDEReserved;
|
||||
/// <summary>
|
||||
/// Specifies the horizontal coordinates of the hotspot in number of pixels from the left.
|
||||
/// </summary>
|
||||
[FieldOffset(10)]
|
||||
public short HotSpotX;
|
||||
/// <summary>
|
||||
/// Specifies the vertical coordinates of the hotspot in number of pixels from the top.
|
||||
/// </summary>
|
||||
[FieldOffset(12)]
|
||||
public short HotSpotY;
|
||||
/// <summary>
|
||||
/// Specifies the size of the image's data in bytes
|
||||
/// </summary>
|
||||
[FieldOffset(14)]
|
||||
public int BytesInRes;
|
||||
/// <summary>
|
||||
/// Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file
|
||||
/// </summary>
|
||||
[FieldOffset(18)]
|
||||
public int ImageOffset;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using Avalonia.Threading;
|
||||
using CefNet.Avalonia;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
internal sealed class AvaloniaContextMenuRunner
|
||||
{
|
||||
private readonly MenuModel Model;
|
||||
private CefRunContextMenuCallback Callback;
|
||||
private ContextMenu Menu;
|
||||
private TaskCompletionSource<bool> _completionSource;
|
||||
|
||||
public AvaloniaContextMenuRunner(CefMenuModel model, CefRunContextMenuCallback callback)
|
||||
{
|
||||
Model = MenuModel.FromCefMenu(model);
|
||||
Callback = callback;
|
||||
}
|
||||
|
||||
public void Build()
|
||||
{
|
||||
if (Menu != null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
Menu = new ContextMenu();
|
||||
Menu.MenuClosed += Menu_Closed;
|
||||
Build(Model, (AvaloniaList<object>)Menu.Items);
|
||||
}
|
||||
|
||||
private void Menu_Closed(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
|
||||
private void MenuItem_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var clickedItem = sender as MenuItem;
|
||||
object cid = clickedItem?.Tag;
|
||||
if (cid != null)
|
||||
{
|
||||
Callback.Continue((int)cid, CefEventFlags.LeftMouseButton);
|
||||
Callback = null;
|
||||
}
|
||||
}
|
||||
|
||||
public Task CompletionTask
|
||||
{
|
||||
get { return _completionSource?.Task; }
|
||||
}
|
||||
|
||||
private void Build(MenuModel model, AvaloniaList<object> menu)
|
||||
{
|
||||
int count = model.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
bool isSubmenu = false;
|
||||
MenuItem menuItem;
|
||||
switch (model.GetTypeAt(i))
|
||||
{
|
||||
case CefMenuItemType.Separator:
|
||||
menu.Add(new Separator());
|
||||
continue;
|
||||
case CefMenuItemType.Check:
|
||||
menuItem = new MenuItem();
|
||||
menuItem.Icon = new CheckBox() { IsChecked = model.IsCheckedAt(i), Margin = new Thickness(-2, 0, 0, 0), BorderThickness = new Thickness() };
|
||||
break;
|
||||
case CefMenuItemType.Radio:
|
||||
menuItem = new MenuItem();
|
||||
menuItem.Icon = new RadioButton() { IsChecked = model.IsCheckedAt(i), Margin = new Thickness(-2, 0, 0, 0), BorderThickness = new Thickness() };
|
||||
break;
|
||||
case CefMenuItemType.Command:
|
||||
menuItem = new MenuItem();
|
||||
break;
|
||||
case CefMenuItemType.Submenu:
|
||||
isSubmenu = true;
|
||||
menuItem = new MenuItem();
|
||||
if (model.IsEnabledAt(i))
|
||||
{
|
||||
Build(model.GetSubMenuAt(i), (AvaloniaList<object>)menuItem.Items);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
if (!isSubmenu)
|
||||
{
|
||||
menuItem.Click += MenuItem_Click;
|
||||
menuItem.Tag = model.GetCommandIdAt(i);
|
||||
}
|
||||
menuItem.Header = model.GetLabelAt(i).Replace('&', '_');
|
||||
menuItem.IsEnabled = model.IsEnabledAt(i);
|
||||
//menuItem.Foreground = model.GetColorAt(i, CefMenuColorType.Text, out CefColor color) ? new SolidColorBrush(color.ToColor()) : SystemColors.MenuTextBrush;
|
||||
menu.Add(menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
public void RunMenuAt(Control control, Point point)
|
||||
{
|
||||
_completionSource = new TaskCompletionSource<bool>();
|
||||
Dispatcher.UIThread.Post(() =>
|
||||
{
|
||||
Menu.Open(control);
|
||||
_completionSource.TrySetResult(true);
|
||||
});
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
_completionSource?.TrySetResult(false);
|
||||
Callback?.Cancel();
|
||||
Callback = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
using CefNet.Avalonia;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
public class AvaloniaWebViewGlue : WebViewGlue
|
||||
{
|
||||
public AvaloniaWebViewGlue(IAvaloniaWebViewPrivate view)
|
||||
: base(view)
|
||||
{
|
||||
}
|
||||
|
||||
public new IAvaloniaWebViewPrivate WebView
|
||||
{
|
||||
get { return (IAvaloniaWebViewPrivate)base.WebView; }
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnCursorChange(CefBrowser browser, IntPtr cursorHandle, CefCursorType type, CefCursorInfo customCursorInfo)
|
||||
{
|
||||
var ea = new CursorChangeEventArgs(type != CefCursorType.Custom ? CursorInteropHelper.Create(cursorHandle) : CustomCursor.Create(ref customCursorInfo), type);
|
||||
WebView.RaiseCefCursorChange(ea);
|
||||
return ea.Handled;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnTooltip(CefBrowser browser, ref string text)
|
||||
{
|
||||
WebView.CefSetToolTip(text);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnStatusMessage(CefBrowser browser, string message)
|
||||
{
|
||||
WebView.CefSetStatusText(message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the user starts dragging content in the web view. OS APIs that run a system message
|
||||
/// loop may be used within the StartDragging call. Don't call any of CefBrowserHost::DragSource*Ended*
|
||||
/// methods after returning false. Call CefBrowserHost::DragSourceEndedAt and DragSourceSystemDragEnded
|
||||
/// either synchronously or asynchronously to inform the web view that the drag operation has ended.
|
||||
/// </summary>
|
||||
/// <param name="browser"></param>
|
||||
/// <param name="dragData">The contextual information about the dragged content.</param>
|
||||
/// <param name="allowedOps"></param>
|
||||
/// <param name="x">The X-location in screen coordinates.</param>
|
||||
/// <param name="y">The Y-location in screen coordinates.</param>
|
||||
/// <returns>Return false to abort the drag operation or true to handle the drag operation.</returns>
|
||||
protected override bool StartDragging(CefBrowser browser, CefDragData dragData, CefDragOperationsMask allowedOps, int x, int y)
|
||||
{
|
||||
var e = new StartDraggingEventArgs(dragData, allowedOps, x, y);
|
||||
WebView.RaiseStartDragging(e);
|
||||
return e.Handled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the web view wants to update the mouse cursor during a drag & drop operation.
|
||||
/// </summary>
|
||||
/// <param name="browser"></param>
|
||||
/// <param name="operation">Describes the allowed operation (none, move, copy, link).</param>
|
||||
protected override void UpdateDragCursor(CefBrowser browser, CefDragOperationsMask operation)
|
||||
{
|
||||
Cursor cursor;
|
||||
CefCursorType cursorType;
|
||||
switch(operation)
|
||||
{
|
||||
case CefDragOperationsMask.None:
|
||||
cursor = CursorInteropHelper.Create(StandardCursorType.No);
|
||||
cursorType = CefCursorType.Notallowed;
|
||||
break;
|
||||
case CefDragOperationsMask.Move:
|
||||
cursor = CursorInteropHelper.Create(StandardCursorType.DragMove);
|
||||
cursorType = CefCursorType.Move;
|
||||
break;
|
||||
case CefDragOperationsMask.Link:
|
||||
cursor = CursorInteropHelper.Create(StandardCursorType.DragLink);
|
||||
cursorType = CefCursorType.Alias;
|
||||
break;
|
||||
default:
|
||||
cursor = CursorInteropHelper.Create(StandardCursorType.DragCopy);
|
||||
cursorType = CefCursorType.Copy;
|
||||
break;
|
||||
}
|
||||
WebView.RaiseCefCursorChange(new CursorChangeEventArgs(cursor, cursorType));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnFindResult(CefBrowser browser, int identifier, int count, CefRect selectionRect, int activeMatchOrdinal, bool finalUpdate)
|
||||
{
|
||||
WebView.RaiseTextFound(new TextFoundRoutedEventArgs(identifier, count, selectionRect, activeMatchOrdinal, finalUpdate));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnPdfPrintFinished(string path, bool success)
|
||||
{
|
||||
WebView.RaisePdfPrintFinished(new PdfPrintFinishedRoutedEventArgs(path, success));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnJSDialog(CefBrowser browser, string originUrl, CefJSDialogType dialogType, string messageText, string defaultPromptText, CefJSDialogCallback callback, ref int suppressMessage)
|
||||
{
|
||||
ScriptDialogDeferral dialogDeferral = CreateScriptDialogDeferral(callback);
|
||||
var ea = new ScriptDialogOpeningRoutedEventArgs(originUrl, (ScriptDialogKind)dialogType, messageText, defaultPromptText, dialogDeferral);
|
||||
WebView.RaiseScriptDialogOpening(ea);
|
||||
suppressMessage = ea.Suppress ? 1 : 0;
|
||||
if (!ea.Handled) ((IDisposable)dialogDeferral).Dispose();
|
||||
return ea.Handled;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnBeforeUnloadDialog(CefBrowser browser, string messageText, bool isReload, CefJSDialogCallback callback)
|
||||
{
|
||||
ScriptDialogDeferral dialogDeferral = CreateScriptDialogDeferral(callback);
|
||||
var ea = new ScriptDialogOpeningRoutedEventArgs(messageText, isReload, dialogDeferral);
|
||||
WebView.RaiseScriptDialogOpening(ea);
|
||||
if (!ea.Handled) ((IDisposable)dialogDeferral).Dispose();
|
||||
return ea.Handled;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
#if AvaloniaBeta
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Platform;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
public static class CursorInteropHelper
|
||||
{
|
||||
private static readonly Dictionary<IntPtr, Cursor> _Cursors = new Dictionary<IntPtr, Cursor>();
|
||||
private static readonly Dictionary<StandardCursorType, Cursor> _StdCursors = new Dictionary<StandardCursorType, Cursor>();
|
||||
|
||||
private static IntPtr GetPlatformHandle(Cursor cursor)
|
||||
{
|
||||
if (cursor != null)
|
||||
{
|
||||
if (cursor.PlatformImpl is IPlatformHandle i)
|
||||
{
|
||||
return i.Handle;
|
||||
}
|
||||
}
|
||||
return default;
|
||||
}
|
||||
|
||||
static CursorInteropHelper()
|
||||
{
|
||||
foreach (StandardCursorType cursorType in Enum.GetValues(typeof(StandardCursorType)))
|
||||
{
|
||||
var cursor = new Cursor(cursorType);
|
||||
var handle = GetPlatformHandle(cursor);
|
||||
if (handle == default || _Cursors.ContainsKey(handle))
|
||||
continue;
|
||||
|
||||
_Cursors.Add(handle, cursor);
|
||||
_StdCursors.Add(cursorType, cursor);
|
||||
}
|
||||
}
|
||||
|
||||
public static Cursor Create(IntPtr cursorHandle)
|
||||
{
|
||||
if (_Cursors.TryGetValue(cursorHandle, out Cursor cursor))
|
||||
return cursor;
|
||||
return Cursor.Default;
|
||||
}
|
||||
|
||||
public static Cursor Create(StandardCursorType cursorType)
|
||||
{
|
||||
Cursor cursor;
|
||||
lock (_StdCursors)
|
||||
{
|
||||
if (!_StdCursors.TryGetValue(cursorType, out cursor))
|
||||
{
|
||||
cursor = new Cursor(cursorType);
|
||||
_StdCursors[cursorType] = cursor;
|
||||
}
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1,48 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
public static class CursorInteropHelper
|
||||
{
|
||||
private static readonly Dictionary<IntPtr, Cursor> _Cursors = new Dictionary<IntPtr, Cursor>();
|
||||
private static readonly Dictionary<StandardCursorType, Cursor> _StdCursors = new Dictionary<StandardCursorType, Cursor>();
|
||||
|
||||
static CursorInteropHelper()
|
||||
{
|
||||
foreach(StandardCursorType cursorType in Enum.GetValues(typeof(StandardCursorType)))
|
||||
{
|
||||
var cursor = new Cursor(cursorType);
|
||||
if (_Cursors.ContainsKey(cursor.PlatformCursor.Handle))
|
||||
continue;
|
||||
|
||||
_Cursors.Add(cursor.PlatformCursor.Handle, cursor);
|
||||
_StdCursors.Add(cursorType, cursor);
|
||||
}
|
||||
}
|
||||
|
||||
public static Cursor Create(IntPtr cursorHandle)
|
||||
{
|
||||
if (_Cursors.TryGetValue(cursorHandle, out Cursor cursor))
|
||||
return cursor;
|
||||
return Cursor.Default;
|
||||
}
|
||||
|
||||
public static Cursor Create(StandardCursorType cursorType)
|
||||
{
|
||||
Cursor cursor;
|
||||
lock (_StdCursors)
|
||||
{
|
||||
if (!_StdCursors.TryGetValue(cursorType, out cursor))
|
||||
{
|
||||
cursor = new Cursor(cursorType);
|
||||
_StdCursors[cursorType] = cursor;
|
||||
}
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Avalonia;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// Stores DPI information from which a <see cref="Avalonia.Layout.Visual"/> is rendered.
|
||||
/// </summary>
|
||||
///
|
||||
public struct DpiScale
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DpiScale"/> structure.
|
||||
/// </summary>
|
||||
/// <param name="dpiScaleX">The DPI scale on the X axis.</param>
|
||||
/// <param name="dpiScaleY">The DPI scale on the Y axis.</param>
|
||||
public DpiScale(double dpiScaleX, double dpiScaleY)
|
||||
{
|
||||
this.DpiScaleX = dpiScaleX;
|
||||
this.DpiScaleY = dpiScaleY;
|
||||
this.PixelsPerDip = 96.0;
|
||||
this.PixelsPerInchX = dpiScaleX * 96.0;
|
||||
this.PixelsPerInchY = dpiScaleY * 96.0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DPI scale on the X axis.
|
||||
/// </summary>
|
||||
public double DpiScaleX { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DPI scale on the Y axis.
|
||||
/// </summary>
|
||||
public double DpiScaleY { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PixelsPerDip at which the text should be rendered.
|
||||
/// </summary>
|
||||
public double PixelsPerDip { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DPI along X axis.
|
||||
/// </summary>
|
||||
public double PixelsPerInchX { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DPI along Y axis.
|
||||
/// </summary>
|
||||
public double PixelsPerInchY { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DPI.
|
||||
/// </summary>
|
||||
public Vector Dpi
|
||||
{
|
||||
get { return new Vector(PixelsPerInchX, PixelsPerInchY); }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,172 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Interactivity;
|
||||
using System.Runtime.InteropServices;
|
||||
using Avalonia.VisualTree;
|
||||
using CefNet.WinApi;
|
||||
using CefNet.Avalonia;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
sealed class GlobalHooks
|
||||
{
|
||||
private static bool IsInitialized;
|
||||
|
||||
private static Dictionary<IntPtr, GlobalHooks> _HookedWindows = new Dictionary<IntPtr, GlobalHooks>();
|
||||
private static List<WeakReference<WebView>> _Views = new List<WeakReference<WebView>>();
|
||||
|
||||
internal static void Initialize(WebView view)
|
||||
{
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
return;
|
||||
|
||||
lock(_Views)
|
||||
{
|
||||
_Views.Add(new WeakReference<WebView>(view));
|
||||
}
|
||||
|
||||
if (IsInitialized)
|
||||
return;
|
||||
|
||||
IsInitialized = true;
|
||||
|
||||
var lifetime = Application.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
|
||||
if (lifetime is null)
|
||||
return;
|
||||
|
||||
|
||||
Window.WindowOpenedEvent.AddClassHandler(typeof(Window), TryAddGlobalHook, handledEventsToo: true);
|
||||
//EventManager.RegisterClassHandler(typeof(Window), FrameworkElement.SizeChangedEvent, new RoutedEventHandler(TryAddGlobalHook));
|
||||
|
||||
foreach (Window window in lifetime.Windows)
|
||||
{
|
||||
TryAddGlobalHook(window);
|
||||
}
|
||||
}
|
||||
|
||||
private WindowsHwndSource _source;
|
||||
private WeakReference<Window> _windowRef;
|
||||
|
||||
private GlobalHooks(WindowsHwndSource source, Window window)
|
||||
{
|
||||
_source = source;
|
||||
_windowRef = new WeakReference<Window>(window);
|
||||
source.WndProcCallback = WndProc;
|
||||
}
|
||||
|
||||
private unsafe IntPtr WndProc(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled)
|
||||
{
|
||||
const int WM_ENTERMENULOOP = 0x0211;
|
||||
const int WM_EXITMENULOOP = 0x0212;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case 0x0002: // WM_DESTROY
|
||||
_source.WndProcCallback = null;
|
||||
foreach (var tuple in GetViews(hwnd))
|
||||
{
|
||||
tuple.Item1.Close();
|
||||
}
|
||||
lock (_HookedWindows)
|
||||
{
|
||||
_HookedWindows.Remove(_source.Handle);
|
||||
_source.Dispose();
|
||||
}
|
||||
break;
|
||||
case 0x0047: //WM_WINDOWPOSCHANGED
|
||||
WINDOWPOS* windowPos = (WINDOWPOS*)lParam;
|
||||
if ((windowPos->flags & 0x0002) != 0) // SWP_NOMOVE
|
||||
break;
|
||||
foreach (var tuple in GetViews(hwnd))
|
||||
{
|
||||
tuple.Item1.OnUpdateRootBounds();
|
||||
}
|
||||
break;
|
||||
case 0x0231: // WM_ENTERSIZEMOVE
|
||||
foreach (var tuple in GetViews(hwnd))
|
||||
{
|
||||
tuple.Item1.OnRootResizeBegin(EventArgs.Empty);
|
||||
}
|
||||
break;
|
||||
case 0x0232: // WM_EXITSIZEMOVE
|
||||
foreach (var tuple in GetViews(hwnd))
|
||||
{
|
||||
tuple.Item1.OnRootResizeEnd(EventArgs.Empty);
|
||||
}
|
||||
break;
|
||||
case 0x0112: // WM_SYSCOMMAND
|
||||
const int SC_KEYMENU = 0xF100;
|
||||
// Menu loop must not be runned with Alt key
|
||||
if ((int)(wParam.ToInt64() & 0xFFF0) == SC_KEYMENU && lParam == IntPtr.Zero)
|
||||
{
|
||||
handled = true;
|
||||
}
|
||||
break;
|
||||
case WM_ENTERMENULOOP:
|
||||
if (wParam == IntPtr.Zero)
|
||||
CefApi.SetOSModalLoop(true);
|
||||
break;
|
||||
case WM_EXITMENULOOP:
|
||||
if (wParam == IntPtr.Zero)
|
||||
CefApi.SetOSModalLoop(false);
|
||||
break;
|
||||
}
|
||||
return IntPtr.Zero;
|
||||
}
|
||||
|
||||
private IEnumerable<ValueTuple<WebView, Window>> GetViews(IntPtr hwnd)
|
||||
{
|
||||
if (hwnd != _source.Handle)
|
||||
yield break;
|
||||
|
||||
Window window;
|
||||
if (!_windowRef.TryGetTarget(out window))
|
||||
yield break;
|
||||
|
||||
lock (_Views)
|
||||
{
|
||||
for (int i = 0; i < _Views.Count; i++)
|
||||
{
|
||||
WeakReference<WebView> viewRef = _Views[i];
|
||||
if (viewRef.TryGetTarget(out WebView view))
|
||||
{
|
||||
if (view.GetVisualRoot() == window)
|
||||
{
|
||||
yield return new ValueTuple<WebView, Window>(view, window);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_Views.RemoveAt(i--);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void TryAddGlobalHook(object sender, RoutedEventArgs e)
|
||||
{
|
||||
TryAddGlobalHook(e.Source as Window);
|
||||
}
|
||||
|
||||
private static void TryAddGlobalHook(Window window)
|
||||
{
|
||||
if (window == null)
|
||||
return;
|
||||
|
||||
IntPtr hwnd = window.PlatformImpl.Handle.Handle;
|
||||
|
||||
if (_HookedWindows.ContainsKey(hwnd))
|
||||
return;
|
||||
|
||||
WindowsHwndSource source = WindowsHwndSource.FromHwnd(hwnd);
|
||||
if (source == null)
|
||||
return;
|
||||
|
||||
_HookedWindows.Add(hwnd, new GlobalHooks(source, window));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using CefNet.Avalonia;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
public interface IAvaloniaWebViewPrivate : IChromiumWebViewPrivate
|
||||
{
|
||||
void RaiseCefCursorChange(CursorChangeEventArgs e);
|
||||
void CefSetToolTip(string text);
|
||||
void CefSetStatusText(string statusText);
|
||||
void RaiseStartDragging(StartDraggingEventArgs e);
|
||||
}
|
||||
}
|
||||
@@ -1,726 +0,0 @@
|
||||
using Avalonia.Input;
|
||||
|
||||
#pragma warning disable CS0219
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides static methods to convert between Virtual-Keys and the Key enumeration.
|
||||
/// </summary>
|
||||
internal static class KeyInterop
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert Key into a Virtual-Key.
|
||||
/// </summary>
|
||||
public static int VirtualKeyFromKey(Key key)
|
||||
{
|
||||
const int VK_CANCEL = 0x03;
|
||||
const int VK_BACK = 0x08;
|
||||
const int VK_CLEAR = 0x0C;
|
||||
const int VK_RETURN = 0x0D;
|
||||
const int VK_PAUSE = 0x13;
|
||||
const int VK_CAPITAL = 0x14;
|
||||
const int VK_KANA = 0x15;
|
||||
const int VK_HANGEUL = 0x15;
|
||||
const int VK_HANGUL = 0x15;
|
||||
const int VK_JUNJA = 0x17;
|
||||
const int VK_FINAL = 0x18;
|
||||
const int VK_HANJA = 0x19;
|
||||
const int VK_KANJI = 0x19;
|
||||
const int VK_ESCAPE = 0x1B;
|
||||
const int VK_CONVERT = 0x1C;
|
||||
const int VK_NONCONVERT = 0x1D;
|
||||
const int VK_ACCEPT = 0x1E;
|
||||
const int VK_MODECHANGE = 0x1F;
|
||||
const int VK_SPACE = 0x20;
|
||||
const int VK_PRIOR = 0x21;
|
||||
const int VK_NEXT = 0x22;
|
||||
const int VK_END = 0x23;
|
||||
const int VK_HOME = 0x24;
|
||||
const int VK_LEFT = 0x25;
|
||||
const int VK_UP = 0x26;
|
||||
const int VK_RIGHT = 0x27;
|
||||
const int VK_DOWN = 0x28;
|
||||
const int VK_SELECT = 0x29;
|
||||
const int VK_PRINT = 0x2A;
|
||||
const int VK_EXECUTE = 0x2B;
|
||||
const int VK_SNAPSHOT = 0x2C;
|
||||
const int VK_INSERT = 0x2D;
|
||||
const int VK_DELETE = 0x2E;
|
||||
const int VK_HELP = 0x2F;
|
||||
const int VK_0 = 0x30;
|
||||
const int VK_1 = 0x31;
|
||||
const int VK_2 = 0x32;
|
||||
const int VK_3 = 0x33;
|
||||
const int VK_4 = 0x34;
|
||||
const int VK_5 = 0x35;
|
||||
const int VK_6 = 0x36;
|
||||
const int VK_7 = 0x37;
|
||||
const int VK_8 = 0x38;
|
||||
const int VK_9 = 0x39;
|
||||
const int VK_A = 0x41;
|
||||
const int VK_B = 0x42;
|
||||
const int VK_C = 0x43;
|
||||
const int VK_D = 0x44;
|
||||
const int VK_E = 0x45;
|
||||
const int VK_F = 0x46;
|
||||
const int VK_G = 0x47;
|
||||
const int VK_H = 0x48;
|
||||
const int VK_I = 0x49;
|
||||
const int VK_J = 0x4A;
|
||||
const int VK_K = 0x4B;
|
||||
const int VK_L = 0x4C;
|
||||
const int VK_M = 0x4D;
|
||||
const int VK_N = 0x4E;
|
||||
const int VK_O = 0x4F;
|
||||
const int VK_P = 0x50;
|
||||
const int VK_Q = 0x51;
|
||||
const int VK_R = 0x52;
|
||||
const int VK_S = 0x53;
|
||||
const int VK_T = 0x54;
|
||||
const int VK_U = 0x55;
|
||||
const int VK_V = 0x56;
|
||||
const int VK_W = 0x57;
|
||||
const int VK_X = 0x58;
|
||||
const int VK_Y = 0x59;
|
||||
const int VK_Z = 0x5A;
|
||||
const int VK_LWIN = 0x5B;
|
||||
const int VK_RWIN = 0x5C;
|
||||
const int VK_APPS = 0x5D;
|
||||
const int VK_POWER = 0x5E;
|
||||
const int VK_SLEEP = 0x5F;
|
||||
const int VK_NUMPAD0 = 0x60;
|
||||
const int VK_NUMPAD1 = 0x61;
|
||||
const int VK_NUMPAD2 = 0x62;
|
||||
const int VK_NUMPAD3 = 0x63;
|
||||
const int VK_NUMPAD4 = 0x64;
|
||||
const int VK_NUMPAD5 = 0x65;
|
||||
const int VK_NUMPAD6 = 0x66;
|
||||
const int VK_NUMPAD7 = 0x67;
|
||||
const int VK_NUMPAD8 = 0x68;
|
||||
const int VK_NUMPAD9 = 0x69;
|
||||
const int VK_MULTIPLY = 0x6A;
|
||||
const int VK_ADD = 0x6B;
|
||||
const int VK_SEPARATOR = 0x6C;
|
||||
const int VK_SUBTRACT = 0x6D;
|
||||
const int VK_DECIMAL = 0x6E;
|
||||
const int VK_DIVIDE = 0x6F;
|
||||
const int VK_F1 = 0x70;
|
||||
const int VK_F2 = 0x71;
|
||||
const int VK_F3 = 0x72;
|
||||
const int VK_F4 = 0x73;
|
||||
const int VK_F5 = 0x74;
|
||||
const int VK_F6 = 0x75;
|
||||
const int VK_F7 = 0x76;
|
||||
const int VK_F8 = 0x77;
|
||||
const int VK_F9 = 0x78;
|
||||
const int VK_F10 = 0x79;
|
||||
const int VK_F11 = 0x7A;
|
||||
const int VK_F12 = 0x7B;
|
||||
const int VK_F13 = 0x7C;
|
||||
const int VK_F14 = 0x7D;
|
||||
const int VK_F15 = 0x7E;
|
||||
const int VK_F16 = 0x7F;
|
||||
const int VK_F17 = 0x80;
|
||||
const int VK_F18 = 0x81;
|
||||
const int VK_F19 = 0x82;
|
||||
const int VK_F20 = 0x83;
|
||||
const int VK_F21 = 0x84;
|
||||
const int VK_F22 = 0x85;
|
||||
const int VK_F23 = 0x86;
|
||||
const int VK_F24 = 0x87;
|
||||
const int VK_NUMLOCK = 0x90;
|
||||
const int VK_SCROLL = 0x91;
|
||||
const int VK_RSHIFT = 0xA1;
|
||||
const int VK_BROWSER_BACK = 0xA6;
|
||||
const int VK_BROWSER_FORWARD = 0xA7;
|
||||
const int VK_BROWSER_REFRESH = 0xA8;
|
||||
const int VK_BROWSER_STOP = 0xA9;
|
||||
const int VK_BROWSER_SEARCH = 0xAA;
|
||||
const int VK_BROWSER_FAVORITES = 0xAB;
|
||||
const int VK_BROWSER_HOME = 0xAC;
|
||||
const int VK_VOLUME_MUTE = 0xAD;
|
||||
const int VK_VOLUME_DOWN = 0xAE;
|
||||
const int VK_VOLUME_UP = 0xAF;
|
||||
const int VK_MEDIA_NEXT_TRACK = 0xB0;
|
||||
const int VK_MEDIA_PREV_TRACK = 0xB1;
|
||||
const int VK_MEDIA_STOP = 0xB2;
|
||||
const int VK_MEDIA_PLAY_PAUSE = 0xB3;
|
||||
const int VK_LAUNCH_MAIL = 0xB4;
|
||||
const int VK_LAUNCH_MEDIA_SELECT = 0xB5;
|
||||
const int VK_LAUNCH_APP1 = 0xB6;
|
||||
const int VK_LAUNCH_APP2 = 0xB7;
|
||||
const int VK_PROCESSKEY = 0xE5;
|
||||
const int VK_PACKET = 0xE7;
|
||||
const int VK_ATTN = 0xF6;
|
||||
const int VK_CRSEL = 0xF7;
|
||||
const int VK_EXSEL = 0xF8;
|
||||
const int VK_EREOF = 0xF9;
|
||||
const int VK_PLAY = 0xFA;
|
||||
const int VK_ZOOM = 0xFB;
|
||||
const int VK_NONAME = 0xFC;
|
||||
const int VK_PA1 = 0xFD;
|
||||
const int VK_OEM_CLEAR = 0xFE;
|
||||
const int VK_TAB = 0x09;
|
||||
const int VK_SHIFT = 0x10;
|
||||
const int VK_CONTROL = 0x11;
|
||||
const int VK_MENU = 0x12;
|
||||
const int VK_LSHIFT = 0xA0;
|
||||
const int VK_RMENU = 0xA5;
|
||||
const int VK_LMENU = 0xA4;
|
||||
const int VK_LCONTROL = 0xA2;
|
||||
const int VK_RCONTROL = 0xA3;
|
||||
const int VK_LBUTTON = 0x01;
|
||||
const int VK_RBUTTON = 0x02;
|
||||
const int VK_MBUTTON = 0x04;
|
||||
const int VK_XBUTTON1 = 0x05;
|
||||
const int VK_XBUTTON2 = 0x06;
|
||||
const int VK_OEM_1 = 0xBA;
|
||||
const int VK_OEM_PLUS = 0xBB;
|
||||
const int VK_OEM_COMMA = 0xBC;
|
||||
const int VK_OEM_MINUS = 0xBD;
|
||||
const int VK_OEM_PERIOD = 0xBE;
|
||||
const int VK_OEM_2 = 0xBF;
|
||||
const int VK_OEM_3 = 0xC0;
|
||||
const int VK_C1 = 0xC1; // ABNT_C1 (Brazilian)
|
||||
const int VK_C2 = 0xC2; // ABNT_C2 (Brazilian)
|
||||
const int VK_OEM_4 = 0xDB;
|
||||
const int VK_OEM_5 = 0xDC;
|
||||
const int VK_OEM_6 = 0xDD;
|
||||
const int VK_OEM_7 = 0xDE;
|
||||
const int VK_OEM_8 = 0xDF;
|
||||
const int VK_OEM_AX = 0xE1;
|
||||
const int VK_OEM_102 = 0xE2;
|
||||
const int VK_OEM_RESET = 0xE9;
|
||||
const int VK_OEM_JUMP = 0xEA;
|
||||
const int VK_OEM_PA1 = 0xEB;
|
||||
const int VK_OEM_PA2 = 0xEC;
|
||||
const int VK_OEM_PA3 = 0xED;
|
||||
const int VK_OEM_WSCTRL = 0xEE;
|
||||
const int VK_OEM_CUSEL = 0xEF;
|
||||
const int VK_OEM_ATTN = 0xF0;
|
||||
const int VK_OEM_FINISH = 0xF1;
|
||||
const int VK_OEM_COPY = 0xF2;
|
||||
const int VK_OEM_AUTO = 0xF3;
|
||||
const int VK_OEM_ENLW = 0xF4;
|
||||
const int VK_OEM_BACKTAB = 0xF5;
|
||||
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case Key.Cancel:
|
||||
return VK_CANCEL;
|
||||
|
||||
case Key.Back:
|
||||
return VK_BACK;
|
||||
|
||||
case Key.Tab:
|
||||
return VK_TAB;
|
||||
|
||||
case Key.Clear:
|
||||
return VK_CLEAR;
|
||||
|
||||
case Key.Return:
|
||||
return VK_RETURN;
|
||||
|
||||
case Key.Pause:
|
||||
return VK_PAUSE;
|
||||
|
||||
case Key.Capital:
|
||||
return VK_CAPITAL;
|
||||
|
||||
case Key.KanaMode:
|
||||
return VK_KANA;
|
||||
|
||||
case Key.JunjaMode:
|
||||
return VK_JUNJA;
|
||||
|
||||
case Key.FinalMode:
|
||||
return VK_FINAL;
|
||||
|
||||
case Key.KanjiMode:
|
||||
return VK_KANJI;
|
||||
|
||||
case Key.Escape:
|
||||
return VK_ESCAPE;
|
||||
|
||||
case Key.ImeConvert:
|
||||
return VK_CONVERT;
|
||||
|
||||
case Key.ImeNonConvert:
|
||||
return VK_NONCONVERT;
|
||||
|
||||
case Key.ImeAccept:
|
||||
return VK_ACCEPT;
|
||||
|
||||
case Key.ImeModeChange:
|
||||
return VK_MODECHANGE;
|
||||
|
||||
case Key.Space:
|
||||
return VK_SPACE;
|
||||
|
||||
case Key.Prior:
|
||||
return VK_PRIOR;
|
||||
|
||||
case Key.Next:
|
||||
return VK_NEXT;
|
||||
|
||||
case Key.End:
|
||||
return VK_END;
|
||||
|
||||
case Key.Home:
|
||||
return VK_HOME;
|
||||
|
||||
case Key.Left:
|
||||
return VK_LEFT;
|
||||
|
||||
case Key.Up:
|
||||
return VK_UP;
|
||||
|
||||
case Key.Right:
|
||||
return VK_RIGHT;
|
||||
|
||||
case Key.Down:
|
||||
return VK_DOWN;
|
||||
|
||||
case Key.Select:
|
||||
return VK_SELECT;
|
||||
|
||||
case Key.Print:
|
||||
return VK_PRINT;
|
||||
|
||||
case Key.Execute:
|
||||
return VK_EXECUTE;
|
||||
|
||||
case Key.Snapshot:
|
||||
return VK_SNAPSHOT;
|
||||
|
||||
case Key.Insert:
|
||||
return VK_INSERT;
|
||||
|
||||
case Key.Delete:
|
||||
return VK_DELETE;
|
||||
|
||||
case Key.Help:
|
||||
return VK_HELP;
|
||||
|
||||
case Key.D0:
|
||||
return VK_0;
|
||||
|
||||
case Key.D1:
|
||||
return VK_1;
|
||||
|
||||
case Key.D2:
|
||||
return VK_2;
|
||||
|
||||
case Key.D3:
|
||||
return VK_3;
|
||||
|
||||
case Key.D4:
|
||||
return VK_4;
|
||||
|
||||
case Key.D5:
|
||||
return VK_5;
|
||||
|
||||
case Key.D6:
|
||||
return VK_6;
|
||||
|
||||
case Key.D7:
|
||||
return VK_7;
|
||||
|
||||
case Key.D8:
|
||||
return VK_8;
|
||||
|
||||
case Key.D9:
|
||||
return VK_9;
|
||||
|
||||
case Key.A:
|
||||
return VK_A;
|
||||
|
||||
case Key.B:
|
||||
return VK_B;
|
||||
|
||||
case Key.C:
|
||||
return VK_C;
|
||||
|
||||
case Key.D:
|
||||
return VK_D;
|
||||
|
||||
case Key.E:
|
||||
return VK_E;
|
||||
|
||||
case Key.F:
|
||||
return VK_F;
|
||||
|
||||
case Key.G:
|
||||
return VK_G;
|
||||
|
||||
case Key.H:
|
||||
return VK_H;
|
||||
|
||||
case Key.I:
|
||||
return VK_I;
|
||||
|
||||
case Key.J:
|
||||
return VK_J;
|
||||
|
||||
case Key.K:
|
||||
return VK_K;
|
||||
|
||||
case Key.L:
|
||||
return VK_L;
|
||||
|
||||
case Key.M:
|
||||
return VK_M;
|
||||
|
||||
case Key.N:
|
||||
return VK_N;
|
||||
|
||||
case Key.O:
|
||||
return VK_O;
|
||||
|
||||
case Key.P:
|
||||
return VK_P;
|
||||
|
||||
case Key.Q:
|
||||
return VK_Q;
|
||||
|
||||
case Key.R:
|
||||
return VK_R;
|
||||
|
||||
case Key.S:
|
||||
return VK_S;
|
||||
|
||||
case Key.T:
|
||||
return VK_T;
|
||||
|
||||
case Key.U:
|
||||
return VK_U;
|
||||
|
||||
case Key.V:
|
||||
return VK_V;
|
||||
|
||||
case Key.W:
|
||||
return VK_W;
|
||||
|
||||
case Key.X:
|
||||
return VK_X;
|
||||
|
||||
case Key.Y:
|
||||
return VK_Y;
|
||||
|
||||
case Key.Z:
|
||||
return VK_Z;
|
||||
|
||||
case Key.LWin:
|
||||
return VK_LWIN;
|
||||
|
||||
case Key.RWin:
|
||||
return VK_RWIN;
|
||||
|
||||
case Key.Apps:
|
||||
return VK_APPS;
|
||||
|
||||
case Key.Sleep:
|
||||
return VK_SLEEP;
|
||||
|
||||
case Key.NumPad0:
|
||||
return VK_NUMPAD0;
|
||||
|
||||
case Key.NumPad1:
|
||||
return VK_NUMPAD1;
|
||||
|
||||
case Key.NumPad2:
|
||||
return VK_NUMPAD2;
|
||||
|
||||
case Key.NumPad3:
|
||||
return VK_NUMPAD3;
|
||||
|
||||
case Key.NumPad4:
|
||||
return VK_NUMPAD4;
|
||||
|
||||
case Key.NumPad5:
|
||||
return VK_NUMPAD5;
|
||||
|
||||
case Key.NumPad6:
|
||||
return VK_NUMPAD6;
|
||||
|
||||
case Key.NumPad7:
|
||||
return VK_NUMPAD7;
|
||||
|
||||
case Key.NumPad8:
|
||||
return VK_NUMPAD8;
|
||||
|
||||
case Key.NumPad9:
|
||||
return VK_NUMPAD9;
|
||||
|
||||
case Key.Multiply:
|
||||
return VK_MULTIPLY;
|
||||
|
||||
case Key.Add:
|
||||
return VK_ADD;
|
||||
|
||||
case Key.Separator:
|
||||
return VK_SEPARATOR;
|
||||
|
||||
case Key.Subtract:
|
||||
return VK_SUBTRACT;
|
||||
|
||||
case Key.Decimal:
|
||||
return VK_DECIMAL;
|
||||
|
||||
case Key.Divide:
|
||||
return VK_DIVIDE;
|
||||
|
||||
case Key.F1:
|
||||
return VK_F1;
|
||||
|
||||
case Key.F2:
|
||||
return VK_F2;
|
||||
|
||||
case Key.F3:
|
||||
return VK_F3;
|
||||
|
||||
case Key.F4:
|
||||
return VK_F4;
|
||||
|
||||
case Key.F5:
|
||||
return VK_F5;
|
||||
|
||||
case Key.F6:
|
||||
return VK_F6;
|
||||
|
||||
case Key.F7:
|
||||
return VK_F7;
|
||||
|
||||
case Key.F8:
|
||||
return VK_F8;
|
||||
|
||||
case Key.F9:
|
||||
return VK_F9;
|
||||
|
||||
case Key.F10:
|
||||
return VK_F10;
|
||||
|
||||
case Key.F11:
|
||||
return VK_F11;
|
||||
|
||||
case Key.F12:
|
||||
return VK_F12;
|
||||
|
||||
case Key.F13:
|
||||
return VK_F13;
|
||||
|
||||
case Key.F14:
|
||||
return VK_F14;
|
||||
|
||||
case Key.F15:
|
||||
return VK_F15;
|
||||
|
||||
case Key.F16:
|
||||
return VK_F16;
|
||||
|
||||
case Key.F17:
|
||||
return VK_F17;
|
||||
|
||||
case Key.F18:
|
||||
return VK_F18;
|
||||
|
||||
case Key.F19:
|
||||
return VK_F19;
|
||||
|
||||
case Key.F20:
|
||||
return VK_F20;
|
||||
|
||||
case Key.F21:
|
||||
return VK_F21;
|
||||
|
||||
case Key.F22:
|
||||
return VK_F22;
|
||||
|
||||
case Key.F23:
|
||||
return VK_F23;
|
||||
|
||||
case Key.F24:
|
||||
return VK_F24;
|
||||
|
||||
case Key.NumLock:
|
||||
return VK_NUMLOCK;
|
||||
|
||||
case Key.Scroll:
|
||||
return VK_SCROLL;
|
||||
|
||||
case Key.LeftShift:
|
||||
return VK_LSHIFT;
|
||||
|
||||
case Key.RightShift:
|
||||
return VK_RSHIFT;
|
||||
|
||||
case Key.LeftCtrl:
|
||||
return VK_LCONTROL;
|
||||
|
||||
case Key.RightCtrl:
|
||||
return VK_RCONTROL;
|
||||
|
||||
case Key.LeftAlt:
|
||||
return VK_LMENU;
|
||||
|
||||
case Key.RightAlt:
|
||||
return VK_RMENU;
|
||||
|
||||
case Key.BrowserBack:
|
||||
return VK_BROWSER_BACK;
|
||||
|
||||
case Key.BrowserForward:
|
||||
return VK_BROWSER_FORWARD;
|
||||
|
||||
case Key.BrowserRefresh:
|
||||
return VK_BROWSER_REFRESH;
|
||||
|
||||
case Key.BrowserStop:
|
||||
return VK_BROWSER_STOP;
|
||||
|
||||
case Key.BrowserSearch:
|
||||
return VK_BROWSER_SEARCH;
|
||||
|
||||
case Key.BrowserFavorites:
|
||||
return VK_BROWSER_FAVORITES;
|
||||
|
||||
case Key.BrowserHome:
|
||||
return VK_BROWSER_HOME;
|
||||
|
||||
case Key.VolumeMute:
|
||||
return VK_VOLUME_MUTE;
|
||||
|
||||
case Key.VolumeDown:
|
||||
return VK_VOLUME_DOWN;
|
||||
|
||||
case Key.VolumeUp:
|
||||
return VK_VOLUME_UP;
|
||||
|
||||
case Key.MediaNextTrack:
|
||||
return VK_MEDIA_NEXT_TRACK;
|
||||
|
||||
case Key.MediaPreviousTrack:
|
||||
return VK_MEDIA_PREV_TRACK;
|
||||
|
||||
case Key.MediaStop:
|
||||
return VK_MEDIA_STOP;
|
||||
|
||||
case Key.MediaPlayPause:
|
||||
return VK_MEDIA_PLAY_PAUSE;
|
||||
|
||||
case Key.LaunchMail:
|
||||
return VK_LAUNCH_MAIL;
|
||||
|
||||
case Key.SelectMedia:
|
||||
return VK_LAUNCH_MEDIA_SELECT;
|
||||
|
||||
case Key.LaunchApplication1:
|
||||
return VK_LAUNCH_APP1;
|
||||
|
||||
case Key.LaunchApplication2:
|
||||
return VK_LAUNCH_APP2;
|
||||
|
||||
case Key.OemSemicolon:
|
||||
return VK_OEM_1;
|
||||
|
||||
case Key.OemPlus:
|
||||
return VK_OEM_PLUS;
|
||||
|
||||
case Key.OemComma:
|
||||
return VK_OEM_COMMA;
|
||||
|
||||
case Key.OemMinus:
|
||||
return VK_OEM_MINUS;
|
||||
|
||||
case Key.OemPeriod:
|
||||
return VK_OEM_PERIOD;
|
||||
|
||||
case Key.OemQuestion:
|
||||
return VK_OEM_2;
|
||||
|
||||
case Key.OemTilde:
|
||||
return VK_OEM_3;
|
||||
|
||||
case Key.AbntC1:
|
||||
return VK_C1;
|
||||
|
||||
case Key.AbntC2:
|
||||
return VK_C2;
|
||||
|
||||
case Key.OemOpenBrackets:
|
||||
return VK_OEM_4;
|
||||
|
||||
case Key.OemPipe:
|
||||
return VK_OEM_5;
|
||||
|
||||
case Key.OemCloseBrackets:
|
||||
return VK_OEM_6;
|
||||
|
||||
case Key.OemQuotes:
|
||||
return VK_OEM_7;
|
||||
|
||||
case Key.Oem8:
|
||||
return VK_OEM_8;
|
||||
|
||||
case Key.OemBackslash:
|
||||
return VK_OEM_102;
|
||||
|
||||
case Key.ImeProcessed:
|
||||
return VK_PROCESSKEY;
|
||||
|
||||
case Key.OemAttn:
|
||||
return VK_OEM_ATTN; // VK_DBE_ALPHANUMERIC
|
||||
|
||||
case Key.OemFinish:
|
||||
return VK_OEM_FINISH; // VK_DBE_KATAKANA
|
||||
|
||||
case Key.OemCopy:
|
||||
return VK_OEM_COPY; // VK_DBE_HIRAGANA
|
||||
|
||||
case Key.OemAuto:
|
||||
return VK_OEM_AUTO; // VK_DBE_SBCSCHAR
|
||||
|
||||
case Key.OemEnlw:
|
||||
return VK_OEM_ENLW; // VK_DBE_DBCSCHAR
|
||||
|
||||
case Key.OemBackTab:
|
||||
return VK_OEM_BACKTAB; // VK_DBE_ROMAN
|
||||
|
||||
case Key.Attn:
|
||||
return VK_ATTN; // VK_DBE_NOROMAN
|
||||
|
||||
case Key.CrSel:
|
||||
return VK_CRSEL; // VK_DBE_ENTERWORDREGISTERMODE
|
||||
|
||||
case Key.ExSel:
|
||||
return VK_EXSEL; // VK_DBE_ENTERIMECONFIGMODE
|
||||
|
||||
case Key.EraseEof:
|
||||
return VK_EREOF; // VK_DBE_FLUSHSTRING
|
||||
|
||||
case Key.Play:
|
||||
return VK_PLAY; // VK_DBE_CODEINPUT
|
||||
|
||||
case Key.Zoom:
|
||||
return VK_ZOOM; // VK_DBE_NOCODEINPUT
|
||||
|
||||
case Key.NoName:
|
||||
return VK_NONAME; // VK_DBE_DETERMINESTRING
|
||||
|
||||
case Key.Pa1:
|
||||
return VK_PA1; // VK_ENTERDLGCONVERSIONMODE
|
||||
|
||||
case Key.OemClear:
|
||||
return VK_OEM_CLEAR;
|
||||
|
||||
case Key.DeadCharProcessed:
|
||||
return 0; // There is no Win32 VKey for this.
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,209 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
internal sealed class MenuModel
|
||||
{
|
||||
private sealed class MenuModelItem
|
||||
{
|
||||
public int Command;
|
||||
public string Label;
|
||||
public CefMenuItemType Type;
|
||||
public int Group;
|
||||
public bool Visible;
|
||||
public bool Enabled;
|
||||
public bool Checked;
|
||||
public CefColor[] Colors;
|
||||
public Accelerator Accelerator;
|
||||
public MenuModel SubMenu;
|
||||
}
|
||||
|
||||
private sealed class Accelerator
|
||||
{
|
||||
public int KeyCode;
|
||||
public bool Alt;
|
||||
public bool Shift;
|
||||
public bool Ctrl;
|
||||
}
|
||||
|
||||
private MenuModelItem[] _items;
|
||||
|
||||
private MenuModel(MenuModelItem[] items)
|
||||
{
|
||||
_items = items;
|
||||
}
|
||||
|
||||
public static MenuModel FromCefMenu(CefMenuModel model)
|
||||
{
|
||||
var items = new MenuModelItem[model.Count];
|
||||
CopyItems(model, items);
|
||||
return new MenuModel(items);
|
||||
}
|
||||
|
||||
private static void CopyItems(CefMenuModel model, MenuModelItem[] dest)
|
||||
{
|
||||
for (int i = 0; i < dest.Length; i++)
|
||||
{
|
||||
var item = new MenuModelItem
|
||||
{
|
||||
Command = model.GetCommandIdAt(i),
|
||||
Label = model.GetLabelAt(i),
|
||||
Type = model.GetTypeAt(i),
|
||||
Group = model.GetGroupIdAt(i),
|
||||
Visible = model.IsVisibleAt(i),
|
||||
Enabled = model.IsEnabledAt(i),
|
||||
Checked = model.IsCheckedAt(i),
|
||||
};
|
||||
|
||||
CefColor color = default;
|
||||
item.Colors = new CefColor[(int)CefMenuColorType.Count];
|
||||
for (int j = 0; j < item.Colors.Length; j++)
|
||||
{
|
||||
item.Colors[j] = model.GetColorAt(i, (CefMenuColorType)j, ref color) ? color : default;
|
||||
}
|
||||
|
||||
int keycode = 0, alt = 0, ctrl = 0, shift = 0;
|
||||
if (model.GetAcceleratorAt(i, ref keycode, ref shift, ref ctrl, ref alt))
|
||||
{
|
||||
item.Accelerator = new Accelerator { KeyCode = keycode, Alt = alt != 0, Ctrl = ctrl != 0, Shift = shift != 0 };
|
||||
}
|
||||
|
||||
if (item.Type == CefMenuItemType.Submenu)
|
||||
{
|
||||
CefMenuModel submenu = model.GetSubMenuAt(i);
|
||||
var items = new MenuModelItem[submenu.Count];
|
||||
CopyItems(submenu, items);
|
||||
item.SubMenu = new MenuModel(items) { IsSubMenu = true };
|
||||
}
|
||||
dest[i] = item;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if this menu is a submenu.
|
||||
/// </summary>
|
||||
public bool IsSubMenu { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns the number of items in this menu.
|
||||
/// </summary>
|
||||
public int Count
|
||||
{
|
||||
get { return _items.Length; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the command id at the specified |index| or -1 if not found due to
|
||||
/// invalid range or the index being a separator.
|
||||
/// </summary>
|
||||
public int GetCommandIdAt(int index)
|
||||
{
|
||||
return _items[index].Command;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the label at the specified |index| or NULL if not found due to
|
||||
/// invalid range or the index being a separator.
|
||||
/// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
/// </summary>
|
||||
public string GetLabelAt(int index)
|
||||
{
|
||||
return _items[index].Label;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the item type at the specified |index|.
|
||||
/// </summary>
|
||||
public CefMenuItemType GetTypeAt(int index)
|
||||
{
|
||||
return _items[index].Type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the group id at the specified |index| or -1 if invalid.
|
||||
/// </summary>
|
||||
public int GetGroupIdAt(int index)
|
||||
{
|
||||
return _items[index].Group;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the submenu at the specified |index| or NULL if invalid.
|
||||
/// </summary>
|
||||
public MenuModel GetSubMenuAt(int index)
|
||||
{
|
||||
return _items[index].SubMenu;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the specified |index| is visible.
|
||||
/// </summary>
|
||||
public bool IsVisibleAt(int index)
|
||||
{
|
||||
return _items[index].Visible;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the specified |index| is enabled.
|
||||
/// </summary>
|
||||
public bool IsEnabledAt(int index)
|
||||
{
|
||||
return _items[index].Enabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the specified |index| is checked. Only applies to check
|
||||
/// and radio items.
|
||||
/// </summary>
|
||||
public bool IsCheckedAt(int index)
|
||||
{
|
||||
return _items[index].Checked;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the specified |index| has a keyboard accelerator
|
||||
/// assigned.
|
||||
/// </summary>
|
||||
public bool HasAcceleratorAt(int index)
|
||||
{
|
||||
return _items[index].Accelerator != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the keyboard accelerator for the specified |index|. Returns true on success.
|
||||
/// </summary>
|
||||
public bool GetAcceleratorAt(int index, out int keyCode, out bool shift, out bool ctrl, out bool alt)
|
||||
{
|
||||
Accelerator accelerator = _items[index].Accelerator;
|
||||
if (accelerator == null)
|
||||
{
|
||||
keyCode = 0;
|
||||
shift = false;
|
||||
ctrl = false;
|
||||
alt = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
keyCode = accelerator.KeyCode;
|
||||
shift = accelerator.Shift;
|
||||
ctrl = accelerator.Ctrl;
|
||||
alt = accelerator.Alt;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns in |color| the color that was explicitly set for |command_id| and
|
||||
/// |color_type|. Specify an |index| value of -1 to return the default color in
|
||||
/// |color|. If a color was not set then 0 will be returned in |color|. Returns
|
||||
/// true on success.
|
||||
/// </summary>
|
||||
public bool GetColorAt(int index, CefMenuColorType colorType, out CefColor color)
|
||||
{
|
||||
color = _items[index].Colors[(int)colorType];
|
||||
return color != 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,234 +0,0 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using Avalonia;
|
||||
using Avalonia.Media;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
using CefNet.Avalonia;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
public sealed class OffscreenGraphics
|
||||
{
|
||||
private class PixelBuffer : IDisposable
|
||||
{
|
||||
public byte[] DIB;
|
||||
|
||||
private List<CefRect> _dirtyRects = new List<CefRect>();
|
||||
|
||||
public int Width;
|
||||
|
||||
public int Height;
|
||||
|
||||
public WriteableBitmap Surface;
|
||||
|
||||
public PixelBuffer(int width, int height)
|
||||
{
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
this.DIB = ArrayPool<byte>.Shared.Rent(width * height * 4);
|
||||
}
|
||||
|
||||
~PixelBuffer()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
private void Dispose(bool disposing)
|
||||
{
|
||||
byte[] buffer = Interlocked.Exchange(ref DIB, null);
|
||||
if (buffer != null)
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public int Stride
|
||||
{
|
||||
get { return Width * 4; }
|
||||
}
|
||||
|
||||
public int Size
|
||||
{
|
||||
get
|
||||
{
|
||||
return Width * Height * 4;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddDirtyRects(CefRect[] dirtyRects)
|
||||
{
|
||||
_dirtyRects.AddRange(dirtyRects);
|
||||
}
|
||||
|
||||
//public Int32Rect GetDirtyRectangle()
|
||||
//{
|
||||
// if (_dirtyRects.Count == 0)
|
||||
// return new Int32Rect();
|
||||
// CefRect r = _dirtyRects[0];
|
||||
// Int32Rect dirtyRect = new Int32Rect(r.X, r.Y, r.Width, r.Height);
|
||||
// for (int i = 1; i < _dirtyRects.Count; i++)
|
||||
// {
|
||||
// dirtyRect.Union(_dirtyRects[i]);
|
||||
// }
|
||||
// return dirtyRect;
|
||||
//}
|
||||
|
||||
public void ClearDirtyRectangle()
|
||||
{
|
||||
_dirtyRects.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
private PixelBuffer ViewPixels;
|
||||
private PixelBuffer PopupPixels;
|
||||
|
||||
private readonly object _syncRoot;
|
||||
private CefRect _bounds;
|
||||
private CefRect _popupBounds;
|
||||
|
||||
public OffscreenGraphics()
|
||||
{
|
||||
_syncRoot = new object();
|
||||
_bounds = new CefRect(0, 0, 1, 1);
|
||||
}
|
||||
|
||||
public static DpiScale DpiScale { get; set; } = new DpiScale(1, 1);
|
||||
|
||||
public void SetLocation(int x, int y)
|
||||
{
|
||||
_bounds.X = x;
|
||||
_bounds.Y = y;
|
||||
}
|
||||
|
||||
public bool SetSize(int width, int height)
|
||||
{
|
||||
width = Math.Max(width, 1);
|
||||
height = Math.Max(height, 1);
|
||||
_bounds.Width = width;
|
||||
_bounds.Height = height;
|
||||
|
||||
lock (_syncRoot)
|
||||
{
|
||||
return ViewPixels == null || ViewPixels.Width != width || ViewPixels.Height != height;
|
||||
}
|
||||
}
|
||||
|
||||
public CefRect GetBounds()
|
||||
{
|
||||
return _bounds;
|
||||
}
|
||||
|
||||
public void Draw(CefPaintEventArgs e)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
PixelBuffer pixelBuffer;
|
||||
if (e.PaintElementType == CefPaintElementType.View)
|
||||
{
|
||||
if (ViewPixels == null || ViewPixels.Width != e.Width || ViewPixels.Height != e.Height)
|
||||
{
|
||||
if (ViewPixels != null)
|
||||
ViewPixels.Dispose();
|
||||
|
||||
ViewPixels = new PixelBuffer(e.Width, e.Height);
|
||||
}
|
||||
pixelBuffer = ViewPixels;
|
||||
}
|
||||
else if(e.PaintElementType == CefPaintElementType.Popup)
|
||||
{
|
||||
if (PopupPixels == null || PopupPixels.Width != e.Width || PopupPixels.Height != e.Height)
|
||||
{
|
||||
if (PopupPixels != null)
|
||||
PopupPixels.Dispose();
|
||||
PopupPixels = new PixelBuffer(e.Width, e.Height);
|
||||
}
|
||||
pixelBuffer = PopupPixels;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Marshal.Copy(e.Buffer, pixelBuffer.DIB, 0, pixelBuffer.Size);
|
||||
pixelBuffer.AddDirtyRects(e.DirtyRects);
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe void Render(DrawingContext drawingContext)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (ViewPixels != null)
|
||||
{
|
||||
PixelSize pixelSize;
|
||||
WriteableBitmap surface;
|
||||
|
||||
surface = GetSurface(ViewPixels);
|
||||
pixelSize = surface.PixelSize;
|
||||
drawingContext.DrawImage(surface, new Rect(0, 0, pixelSize.Width, pixelSize.Height), new Rect(surface.Size));
|
||||
|
||||
PixelBuffer pixelBuffer = PopupPixels;
|
||||
if (pixelBuffer == null)
|
||||
return;
|
||||
|
||||
surface = GetSurface(pixelBuffer);
|
||||
Size size = surface.Size;
|
||||
pixelSize = surface.PixelSize;
|
||||
drawingContext.DrawImage(surface,
|
||||
new Rect(0, 0, pixelSize.Width, pixelSize.Height),
|
||||
new Rect(_popupBounds.X, _popupBounds.Y, size.Width, size.Height));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private WriteableBitmap GetSurface(PixelBuffer pixelBuffer)
|
||||
{
|
||||
if (!Monitor.IsEntered(_syncRoot))
|
||||
throw new InvalidOperationException();
|
||||
|
||||
WriteableBitmap surface = pixelBuffer.Surface;
|
||||
if (surface is null || surface.PixelSize != new PixelSize(pixelBuffer.Width, pixelBuffer.Height))
|
||||
{
|
||||
surface?.Dispose();
|
||||
surface = new WriteableBitmap(new PixelSize(pixelBuffer.Width, pixelBuffer.Height), OffscreenGraphics.DpiScale.Dpi, PixelFormat.Bgra8888, AlphaFormat.Premul);
|
||||
pixelBuffer.Surface = surface;
|
||||
}
|
||||
|
||||
using (ILockedFramebuffer frameBuffer = surface.Lock())
|
||||
{
|
||||
Marshal.Copy(pixelBuffer.DIB, 0, frameBuffer.Address, pixelBuffer.Size);
|
||||
pixelBuffer.ClearDirtyRectangle();
|
||||
}
|
||||
return surface;
|
||||
}
|
||||
|
||||
public void SetPopup(PopupShowEventArgs e)
|
||||
{
|
||||
if (e.Visible)
|
||||
{
|
||||
_popupBounds = e.Bounds;
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
PopupPixels?.Dispose();
|
||||
PopupPixels = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.ConstrainedExecution;
|
||||
using System.Runtime.InteropServices;
|
||||
using CefNet.WinApi;
|
||||
|
||||
namespace CefNet.Internal
|
||||
{
|
||||
|
||||
internal delegate IntPtr WindowsWindowProcDelegate(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled);
|
||||
|
||||
internal sealed class WindowsHwndSource : CriticalFinalizerObject, IDisposable
|
||||
{
|
||||
private delegate IntPtr WindowProc(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
|
||||
private bool _disposed;
|
||||
private IntPtr hWndProcHook;
|
||||
private readonly WindowProc fnWndProcHook;
|
||||
|
||||
|
||||
public static WindowsHwndSource FromHwnd(IntPtr hwnd)
|
||||
{
|
||||
const int GWLP_WNDPROC = -4;
|
||||
|
||||
uint tid = NativeMethods.GetWindowThreadProcessId(hwnd, IntPtr.Zero);
|
||||
if (tid == 0)
|
||||
throw new Win32Exception(Marshal.GetLastWin32Error());
|
||||
|
||||
var source = new WindowsHwndSource(hwnd);
|
||||
source.hWndProcHook = NativeMethods.SetWindowLong(hwnd, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(source.fnWndProcHook));
|
||||
if (source.hWndProcHook == IntPtr.Zero)
|
||||
throw new Win32Exception(Marshal.GetLastWin32Error());
|
||||
|
||||
return source;
|
||||
}
|
||||
|
||||
private WindowsHwndSource(IntPtr hwnd)
|
||||
{
|
||||
hWndProcHook = IntPtr.Zero;
|
||||
this.Handle = hwnd;
|
||||
fnWndProcHook = new WindowProc(WndProcHook);
|
||||
}
|
||||
|
||||
~WindowsHwndSource()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
private void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposed)
|
||||
return;
|
||||
|
||||
if (hWndProcHook != IntPtr.Zero)
|
||||
{
|
||||
const int GWLP_WNDPROC = -4;
|
||||
NativeMethods.SetWindowLong(this.Handle, GWLP_WNDPROC, hWndProcHook);
|
||||
}
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public IntPtr Handle { get; }
|
||||
|
||||
public WindowsWindowProcDelegate WndProcCallback { get; set; }
|
||||
|
||||
private unsafe IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
IntPtr retval = IntPtr.Zero;
|
||||
WindowsWindowProcDelegate wndproc = this.WndProcCallback;
|
||||
if (wndproc != null)
|
||||
{
|
||||
bool handled = false;
|
||||
retval = wndproc(hwnd, msg, wParam, lParam, ref handled);
|
||||
if (handled)
|
||||
return retval;
|
||||
}
|
||||
return NativeMethods.CallWindowProc(hWndProcHook, hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
using Avalonia.Interactivity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.Avalonia
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides data for the <see cref="WebView.StartDragging"/> event.
|
||||
/// </summary>
|
||||
public class StartDraggingEventArgs : RoutedEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="StartDraggingEventArgs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="source"></param>
|
||||
/// <param name="data">The data associated with this event.</param>
|
||||
/// <param name="allowedOps">Drag-and-drop operations which allowed by the source of the drag event.</param>
|
||||
/// <param name="x">The X-location in screen coordinates.</param>
|
||||
/// <param name="y">The Y-location in screen coordinates.</param>
|
||||
public StartDraggingEventArgs(CefDragData data, CefDragOperationsMask allowedOps, int x, int y)
|
||||
: base(WebView.StartDraggingEvent)
|
||||
{
|
||||
this.Data = data;
|
||||
this.AllowedEffects = allowedOps;
|
||||
this.X = x;
|
||||
this.Y = y;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The contextual information about the dragged content.
|
||||
/// </summary>
|
||||
public CefDragData Data { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets which drag-and-drop operations are allowed by the originator (or source) of the drag event.
|
||||
/// </summary>
|
||||
public CefDragOperationsMask AllowedEffects { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the X-location of the mouse pointer in screen coordinates.
|
||||
/// </summary>
|
||||
public int X { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Y-location of the mouse pointer in screen coordinates.
|
||||
/// </summary>
|
||||
public int Y { get; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CefNet.WinApi
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct CWPSTRUCT
|
||||
{
|
||||
public IntPtr lParam;
|
||||
public IntPtr wParam;
|
||||
public int message;
|
||||
public IntPtr hwnd;
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.WinApi
|
||||
{
|
||||
static class NativeMethods
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
public static extern IntPtr GetKeyboardLayout(uint idThread);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
public static extern IntPtr ActivateKeyboardLayout(IntPtr hkl, int flags);
|
||||
|
||||
[DllImport("user32.dll", EntryPoint = "VkKeyScanW", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
public static extern ushort VkKeyScan(char ch);
|
||||
|
||||
public static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
|
||||
{
|
||||
if (IntPtr.Size == 8)
|
||||
return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
|
||||
else
|
||||
return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32()));
|
||||
}
|
||||
|
||||
[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong);
|
||||
|
||||
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr pPid);
|
||||
|
||||
[DllImport("Dwmapi.dll", CharSet = CharSet.Auto)]
|
||||
public static unsafe extern int DwmGetWindowAttribute(IntPtr hwnd, DWMWINDOWATTRIBUTE attribute, void* value, int size);
|
||||
|
||||
[DllImport("Dwmapi.dll", CharSet = CharSet.Auto, PreserveSig = false)]
|
||||
public static extern bool DwmIsCompositionEnabled();
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace CefNet.WinApi
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct WINDOWPOS
|
||||
{
|
||||
public IntPtr hwnd;
|
||||
public IntPtr hwndInsertAfter;
|
||||
public int x;
|
||||
public int y;
|
||||
public int cx;
|
||||
public int cy;
|
||||
public int flags;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
namespace CefNet.WinApi
|
||||
{
|
||||
internal enum DWMWINDOWATTRIBUTE
|
||||
{
|
||||
NCRenderingEnabled = 1,
|
||||
NCRenderingPolicy,
|
||||
TransitionsForceDisabled,
|
||||
AllowNCPaint,
|
||||
CaptionButtonBounds,
|
||||
NonClientRtlLayout,
|
||||
ForceIconicRepresentation,
|
||||
Flip3DPolicy,
|
||||
ExtendedFrameBounds,
|
||||
HasIconicBitmap,
|
||||
DisallowPeek,
|
||||
ExcludedFromPeek,
|
||||
ExceludedFromPeek,
|
||||
Cloak,
|
||||
Cloaked,
|
||||
FreezeRepresentation
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
#if AVALONIA
|
||||
using Avalonia.Interactivity;
|
||||
#elif WPF
|
||||
using System.Windows;
|
||||
#endif
|
||||
|
||||
#if AVALONIA
|
||||
namespace CefNet.Avalonia
|
||||
#elif WPF
|
||||
namespace CefNet.Wpf
|
||||
#endif
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents PDF printing results.
|
||||
/// </summary>
|
||||
public sealed class PdfPrintFinishedRoutedEventArgs : RoutedEventArgs, IPdfPrintFinishedEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PdfPrintFinishedEventArgs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="path">The path to PDF file.</param>
|
||||
/// <param name="success">A value which indicates that the PDF printing completed successfully.</param>
|
||||
public PdfPrintFinishedRoutedEventArgs(string path, bool success)
|
||||
: base(WebView.PdfPrintFinishedEvent)
|
||||
{
|
||||
this.Path = path;
|
||||
this.Success = success;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to PDF file.
|
||||
/// </summary>
|
||||
public string Path { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value which indicates that the PDF printing completed successfully.
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public bool Success { get; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
#if AVALONIA
|
||||
using Avalonia.Interactivity;
|
||||
#elif WPF
|
||||
using System.Windows;
|
||||
#endif
|
||||
using System;
|
||||
|
||||
#if AVALONIA
|
||||
namespace CefNet.Avalonia
|
||||
#elif WPF
|
||||
namespace CefNet.Wpf
|
||||
#endif
|
||||
{
|
||||
/// <summary>
|
||||
/// Event args for the <see cref="IChromiumWebView.ScriptDialogOpening"/> event.
|
||||
/// </summary>
|
||||
public sealed class ScriptDialogOpeningRoutedEventArgs : RoutedEventArgs, IScriptDialogOpeningEventArgs
|
||||
{
|
||||
private readonly ScriptDialogDeferral _callback;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ScriptDialogOpeningEventArgs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="originUrl">The URI of the page that requested the dialog box.</param>
|
||||
/// <param name="kind">The kind of JavaScript dialog box.</param>
|
||||
/// <param name="message">The message of the dialog box.</param>
|
||||
/// <param name="defaultText">The default value to use for the result of the prompt JavaScript function.</param>
|
||||
/// <param name="callback"></param>
|
||||
public ScriptDialogOpeningRoutedEventArgs(string originUrl, ScriptDialogKind kind, string message, string defaultText, ScriptDialogDeferral callback)
|
||||
: base(WebView.ScriptDialogOpeningEvent)
|
||||
{
|
||||
this.Uri = Uri.TryCreate(originUrl, UriKind.Absolute, out Uri uri) ? uri : null;
|
||||
this.Kind = kind;
|
||||
this.Message = message;
|
||||
this.DefaultText = defaultText;
|
||||
_callback = callback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ScriptDialogOpeningEventArgs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="kind">The kind of JavaScript dialog box.</param>
|
||||
/// <param name="message">The message of the dialog box.</param>
|
||||
/// <param name="reload">Indicates that the event is fired before page reloading.</param>
|
||||
/// <param name="callback"></param>
|
||||
public ScriptDialogOpeningRoutedEventArgs(string message, bool reload, ScriptDialogDeferral callback)
|
||||
: base(WebView.ScriptDialogOpeningEvent)
|
||||
{
|
||||
this.Uri = null;
|
||||
this.Kind = ScriptDialogKind.BeforeUnload;
|
||||
this.Message = message;
|
||||
this.IsReload = reload;
|
||||
_callback = callback;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Uri Uri { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ScriptDialogKind Kind { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string Message { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string DefaultText { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Suppress { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsReload { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ScriptDialogDeferral GetDeferral()
|
||||
{
|
||||
this.Handled = true;
|
||||
return _callback;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
#if AVALONIA
|
||||
using Avalonia.Interactivity;
|
||||
#elif WPF
|
||||
using System.Windows;
|
||||
#endif
|
||||
|
||||
#if AVALONIA
|
||||
namespace CefNet.Avalonia
|
||||
#elif WPF
|
||||
namespace CefNet.Wpf
|
||||
#endif
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents find results.
|
||||
/// </summary>
|
||||
public sealed class TextFoundRoutedEventArgs : RoutedEventArgs, ITextFoundEventArgs
|
||||
{
|
||||
public TextFoundRoutedEventArgs(int identifier, int count, CefRect selectionRect, int index, bool finalUpdate)
|
||||
: base(WebView.TextFoundEvent)
|
||||
{
|
||||
this.ID = identifier;
|
||||
this.Count = count;
|
||||
this.SelectionRect = selectionRect;
|
||||
this.Index = index;
|
||||
this.FinalUpdate = finalUpdate;
|
||||
}
|
||||
|
||||
public int ID { get; }
|
||||
|
||||
public int Index { get; }
|
||||
|
||||
public int Count { get; }
|
||||
|
||||
public CefRect SelectionRect { get; }
|
||||
|
||||
public bool FinalUpdate { get; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 CefNet
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,7 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
using static System.Properties.ThisAssembly;
|
||||
|
||||
[assembly: SuppressIldasm]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Mobile" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Desktop" + PublicKey)]
|
||||
@@ -1,32 +1,90 @@
|
||||
1. 修复 添加令牌时引发的闪退
|
||||
2. CLR 升级至 .NET 6 Preview 4
|
||||
3. 64 位程序支持,从此版本开始不再提供 32 位程序支持
|
||||
4. CEF 升级至 90.6.3
|
||||
5. 改进 程序目录结构,所有相关 dll 将放入 bin 文件夹中
|
||||
6. 新增 全新的托盘菜单
|
||||
7. 改进 隐藏游戏列表与挂机游戏列表实时刷新
|
||||
8. 新增 JumpList 菜单切换账号
|
||||
9. 修复 Win7 中右上角按钮样式错误
|
||||
10. 改进 缓存获取加速项目数据,避免失败时无数据
|
||||
11. 修复 手动检查更新时有概率出现两个新版本窗口
|
||||
12. 改进 未使用社区加速时退出程序不再清理 hosts 文件
|
||||
### 新增内容
|
||||
1. CLR 升级至 .NET 6 Preview 7
|
||||
2. 新增 库存游戏可浏览已安装的游戏文件夹
|
||||
3. 新增 创意工坊划词翻译脚本
|
||||
4. 新增 通用设置-使用硬件加速设置项,也可通过命令行参数禁用硬件加速启动 -clt devtools -disable_gpu
|
||||
5. 新增 账号切换内新增家庭库共享排序功能,该功能可调整当前设备的多个家庭共享账号库存的优先级顺序。
|
||||
6. 新增 QQ 快速登录渠道
|
||||
7. 新增 意大利语支持
|
||||
8. 新增 西班牙语支持
|
||||
9. 新增 通用设置内可支持访问程序的 AppData、Cache、Logs 文件夹和查看缓存及日志占用空间大小情况
|
||||
10. 新增 本地令牌可以查看令牌二维码导入到移动端
|
||||
11. Android/macOS/Linux 版现已开启 Beta/Alpha 测试,可从 GitHub/Gitee 上下载
|
||||
12. 现已通过 Desktop Bridge 转制为 UWP 上架 Microsoft Store
|
||||
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.4.0.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.4.0.exe | SHA256 |
|
||||
| Steam++_win_x64_v2.4.0.msix | SHA256 |
|
||||
| Steam++_win_arm64_v2.4.0.7z | SHA256 |
|
||||
| Steam++_win_arm64_v2.4.0.exe | SHA256 |
|
||||
| Steam++_win_arm64_v2.4.0.msix | SHA256 |
|
||||
| Steam++_linux_x64_v2.4.0.7z | SHA256 |
|
||||
| Steam++_linux_x64_v2.4.0.deb | SHA256 |
|
||||
| Steam++_macos_x64_v2.4.0.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.4.0.dmg | SHA256 |
|
||||
| Steam++_android_v2.4.0.apk | SHA256 |
|
||||
| Steam++_android_arm64_v2.4.0.apk | SHA256 |
|
||||
| Steam++_android_arm_v2.4.0.apk | SHA256 |
|
||||
### 修复问题
|
||||
1. 修复 开机自启动在 2.4.x 中不生效
|
||||
2. 改进 深色和浅色模式的视觉效果
|
||||
3. 改进 社区加速计时逻辑
|
||||
4. 更正 导出令牌窗口标题文本错误
|
||||
5. 改进 添加令牌弹窗可调整窗口大小
|
||||
6. 改进 本地令牌自定义修改名称操作
|
||||
7. 修复 我的面板中出现垂直滚动条
|
||||
8. 改进 解锁成就风险提示弹窗可以设置不再提示
|
||||
9. 修复 任务栏位于顶部时托盘菜单位置不正确
|
||||
10. 修复 挂时长运行中列表移除游戏时引发的闪退
|
||||
11. 改进 自动更新机制
|
||||
12. 改进 开机自启动现仅对当前用户生效
|
||||
13. 改进 第三方账号快速登录,现使用系统浏览器进行快速登录
|
||||
14. 改进 现已编译为 ReadyToRun (R2R) 格式,这将改进应用程序的启动时间和延迟(仅 Windows 版)
|
||||
15. 修复 库存游戏中部分游戏被错误屏蔽没有加载
|
||||
16. 改进 部分语言的翻译文本
|
||||
17. 改进 本地令牌上移下移功能顺序错乱问题
|
||||
18. 修复 程序在加载库存游戏时有概率闪退的问题
|
||||
19. 修复 打开托盘菜单有概率导致程序闪退的问题
|
||||
20. 修复 程序启动时界面不会加载任何内容无法正常使用的问题
|
||||
21. 改进 账号切换功能UI
|
||||
22. 改进 移除了CEF模块,缩减程序体积和运行时内存占用
|
||||
23. 改进 库存游戏支持显示已安装游戏占用空间大小
|
||||
24. 改进 库存游戏封面大小调节可支持滚动调节
|
||||
25. 改进 hosts 文件编码在 Windows 上使用系统的活动代码页(ANSICodePage),例如 GB2312/936,其他操作系统则使用 UTF-8,还原 V1 版本行为
|
||||
26. 改进 开始菜单磁贴背景由黑色更改为透明
|
||||
27. 修复 账号切换修改账号备注重启后被还原
|
||||
|
||||
### 已知问题
|
||||
- macOS
|
||||
- 尚未公证,这会影响 macOS Catalina(版本 10.15)以上
|
||||
- 自动更新不可用
|
||||
- Linux
|
||||
- 托盘不生效,这将影响程序不能正常退出
|
||||
- 窗口弹出位置不正确
|
||||
- 自动更新不可用
|
||||
|
||||
***
|
||||
|
||||
由于程序体积较大,推荐从 [官网 https://steampp.net](https://steampp.net) 中下载
|
||||
<!-- 1. 新增 ASF Plus 本地挂卡
|
||||
3. 改进 新增守护进程,当程序闪退时将自动重启 -->
|
||||
|
||||
| RuntimeIdentifier | Available | Edition |
|
||||
| ---- | ---- | ---- |
|
||||
| win-x64 | ✅ | Stable |
|
||||
| win-x64(DesktopBridge/msix) | ✅ | β |
|
||||
| osx-x64 | ✅ | β |
|
||||
| linux-x64 | ✅ | α |
|
||||
| android-arm64 | ✅ | α |
|
||||
| android-arm | ✅ | α |
|
||||
| win-arm64 | ❌ | |
|
||||
| osx-arm64 | ❌ | |
|
||||
| linux-arm64 | ❌ | |
|
||||
| ios-arm64 | ❌ | |
|
||||
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.4.9.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.4.9.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_arm64_v2.4.9.7z | SHA256 |
|
||||
| Steam++_win_arm64_v2.4.9.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.4.9.7z | SHA256 |
|
||||
| Steam++_linux_x64_v2.4.9.deb | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.4.9.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.4.9.dmg | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_arm64_v8a_v2.4.9.apk | SHA256 |
|
||||
| Steam++_android_armeabi_v7a_v2.4.9.apk | SHA256 |
|
||||
|
||||
<!-- ***
|
||||
|
||||
由于程序体积较大,推荐从 [官网 https://steampp.net](https://steampp.net) 中下载 -->
|
||||
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg id="abee0869-1b5a-43b0-ad2d-68b9c06591d9" data-name="steampp" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 151.22 160.98"><defs><style>.bee71911-c304-409c-b1a3-5c617b033d97{fill:#fff;}.e33bb62c-3cd8-43d8-b337-a8f898048f78{fill:url(#fe73b66f-3888-4385-9976-c891a0dc3db5);}.f52f40e5-9b40-42f3-ad92-92d8d45039d2{fill:url(#f2f22e4f-2cb9-40ee-9151-f69f4c5c4c7f);}</style><linearGradient id="fe73b66f-3888-4385-9976-c891a0dc3db5" x1="53.34" y1="148.33" x2="142.57" y2="59.1" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1890de"/><stop offset="0.07" stop-color="#2195e1"/><stop offset="0.31" stop-color="#3ea3ea"/><stop offset="0.54" stop-color="#53adf1"/><stop offset="0.78" stop-color="#60b3f5"/><stop offset="1" stop-color="#64b5f6"/></linearGradient><linearGradient id="f2f22e4f-2cb9-40ee-9151-f69f4c5c4c7f" x1="162.65" y1="122.92" x2="85.29" y2="45.56" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#81c784"/><stop offset="0.1" stop-color="#6cb46f"/><stop offset="0.21" stop-color="#5ba55f"/><stop offset="0.34" stop-color="#519c55"/><stop offset="0.5" stop-color="#4e9952"/><stop offset="0.66" stop-color="#519c55"/><stop offset="0.79" stop-color="#5ba55f"/><stop offset="0.9" stop-color="#6cb46f"/><stop offset="1" stop-color="#81c784"/></linearGradient></defs>
|
||||
|
||||
<path class="e33bb62c-3cd8-43d8-b337-a8f898048f78" d="M121.28,180.51c-3.4,0-6.79,0-10.19,0a6.18,6.18,0,0,1-5.51-4.24c-1.45-5.21-2.87-10.43-4.4-15.61a2.41,2.41,0,0,0-1.43-1.38,77.05,77.05,0,0,1-15.07-6.87,20.55,20.55,0,0,1-2.74-1.69c-1-.8-1.7-.51-2.51.14-3.13,2.47-6.33,4.85-9.36,7.42A5,5,0,0,1,63,158c-2.76-2.7-5.35-5.57-8-8.39-3.37-3.56-6.74-7.12-10.07-10.72a5.91,5.91,0,0,1-.54-7.46c2.48-3.46,4.71-7.09,7.09-10.63a1.41,1.41,0,0,0,0-1.73,83.14,83.14,0,0,1-8.36-18.84,1.73,1.73,0,0,0-1-1q-6.65-1.92-13.33-3.71A5.63,5.63,0,0,1,24.42,90q0-10.2,0-20.4c0-2.64,1.36-4.09,4-4.2,4-.18,8.06-.3,12.1-.41a1.39,1.39,0,0,0,1.56-1.21,44.26,44.26,0,0,1,5.85-12.88,1.57,1.57,0,0,0-.08-2.12c-2.36-3.15-4.66-6.35-7-9.55a3.3,3.3,0,0,1,.77-4.92c4.07-2.86,8.21-5.65,12.23-8.59a4.94,4.94,0,0,1,5.68.09c3,2.3,6.11,4.49,9.08,6.84a2.64,2.64,0,0,0,2.74.5,47.44,47.44,0,0,1,12.43-2.3c.65,0,.94-.25,1-.89.08-.87.26-1.73.34-2.6.18-1.95.3-3.9.5-5.85a2.12,2.12,0,0,1,2.51-1.85,53.28,53.28,0,0,1,5.29.94c3.74.77,7.48,1.57,11.23,2.35a6.31,6.31,0,0,1,5.06,4.53c.84,2.57,1.74,5.13,2.77,7.63a4.14,4.14,0,0,0,1.72,1.64c1,.58,2.11.94,3.15,1.43a3.09,3.09,0,0,1,.67.59,2.63,2.63,0,0,1-.87.09,43.19,43.19,0,0,0-12-1.43c-8.59.2-16.54,2.49-23.3,8A34.77,34.77,0,0,0,71.26,60.66c-2.73,7.4-2.92,15-2,22.67a54.81,54.81,0,0,0,5.41,17.74c1.55,3.14,3.42,6.12,5.13,9.18.45.81.78.92,1.44.13,1.2-1.44,2.51-2.79,3.79-4.16a3.05,3.05,0,0,0,.89-2.37c-.3-6.14-.32-12.31-.94-18.43a6,6,0,0,1,1.88-5.23c4.11-4.46,8.16-9,12.2-13.48a3.3,3.3,0,0,1,2.57-1.18c5.19-.19,10.37-.49,15.56-.71,1.54-.07,2.25.33,2.46,1.69a3.24,3.24,0,0,1-.65,2.35c-4,4.49-8,8.9-12,13.31a1.39,1.39,0,0,0-.33,1.79c1.46,3.18,2.83,6.4,4.28,9.59a1.75,1.75,0,0,0,.88.84c3.38,1.18,6.79,2.31,10.18,3.47.75.26,1.18-.11,1.63-.62q5.73-6.36,11.48-12.68c.3-.32.55-.79.92-.92a4.94,4.94,0,0,1,2.31-.47,2,2,0,0,1,1.58,2.15c.17,3.23.31,6.46.49,9.69.12,2.11.33,4.22.38,6.33a2.87,2.87,0,0,1-.63,1.82q-7,7.84-14.14,15.58a2.57,2.57,0,0,1-1.21.64,7.13,7.13,0,0,1-1.54.17c-6.5.32-13,.63-19.5,1a2.29,2.29,0,0,0-1.43.66c-1.81,1.9-3.55,3.87-5.34,5.8-.7.75-.56,1.24.24,1.83a66.14,66.14,0,0,0,18.27,9.79,50.54,50.54,0,0,0,16.8,2.79c8.41-.07,16.16-2.26,22.88-7.5a34.86,34.86,0,0,0,11-15.07c.24-.6.56-1.15.85-1.72a8.81,8.81,0,0,1,.12,2c-.46,2.87-1,5.71-1.48,8.58a2,2,0,0,0,.37,1.4c2.55,3.37,5.12,6.73,7.74,10,1.93,2.45,2.53,4.88.8,7.78-2.64,4.4-5.06,8.94-7.63,13.38-1.26,2.17-3.18,2.53-5.25,1q-4.09-3-8.11-6.13c-3.2-2.49-3.16-2.49-6.44-.16a39.15,39.15,0,0,1-10.69,5.22,1.43,1.43,0,0,0-1.19,1.7c.14,4.67.12,9.35.37,14a4.3,4.3,0,0,1-4.55,4.62C127.85,180.37,124.56,180.51,121.28,180.51Z" transform="translate(-24.41 -19.59)"/>
|
||||
|
||||
<path class="f52f40e5-9b40-42f3-ad92-92d8d45039d2" d="M105.9,39.94a52.29,52.29,0,0,1,18.17,3.85,64.5,64.5,0,0,1,17.47,10.47,67.77,67.77,0,0,1,11,11.42,64.77,64.77,0,0,1,10.06,18.26,68.43,68.43,0,0,1,2.78,9.75,47.72,47.72,0,0,1,.23,16.69,35.77,35.77,0,0,1-7.11,16.37A30.1,30.1,0,0,1,143.14,137a42.13,42.13,0,0,1-12.28,1.72c-.16,0-.32,0-.47,0a1.78,1.78,0,0,1,.45-.28c1.95-.66,3.94-1.23,5.87-2A25.79,25.79,0,0,0,149.25,126a31.24,31.24,0,0,0,4.45-11.76,39.49,39.49,0,0,0,.29-11.78,49.28,49.28,0,0,0-3.15-12.35A58.94,58.94,0,0,0,140.6,72.89a61.58,61.58,0,0,0-14-12.39,53,53,0,0,0-15.64-6.79c-9-2.18-17.72-1.64-25.83,3.11a26.22,26.22,0,0,0-11.19,13C73.09,71.84,72.6,74,72,76c0,.17-.14.34-.2.51a1.55,1.55,0,0,1-.23-.6c.07-1.92.07-3.85.28-5.75A36.07,36.07,0,0,1,77,55a29.6,29.6,0,0,1,9.92-9.86A30.76,30.76,0,0,1,98.22,40.9C100.76,40.5,103.34,40.26,105.9,39.94Z" transform="translate(-24.41 -19.59)"/></svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 628 B |
|
After Width: | Height: | Size: 948 B |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -1,8 +1,6 @@
|
||||
<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
<VisualElements
|
||||
ShowNameOnSquare150x150Logo='on'
|
||||
Square150x150Logo='Assets\VisualElements_150.png'
|
||||
Square70x70Logo='Assets\VisualElements_70.png'
|
||||
ForegroundText='light'
|
||||
BackgroundColor='#000000'/>
|
||||
</Application>
|
||||
Square150x150Logo='Assets\SteamPlusPlus.150x150.png'
|
||||
Square70x70Logo='Assets\SteamPlusPlus.70x70.png'/>
|
||||
</Application>
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
using Android.OS;
|
||||
using Android.OS;
|
||||
using Java.Lang;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using StringBuilder = System.Text.StringBuilder;
|
||||
|
||||
namespace System
|
||||
{
|
||||
/// <summary>
|
||||
/// Android ROM 相关函数集
|
||||
/// </summary>
|
||||
[Obsolete("Slow performance")]
|
||||
public static class AndroidROM
|
||||
{
|
||||
/// <summary>
|
||||
@@ -42,6 +44,15 @@ namespace System
|
||||
return Type.ToString();
|
||||
}
|
||||
|
||||
public void ToString(StringBuilder b)
|
||||
{
|
||||
if (HasVersionString)
|
||||
{
|
||||
b.AppendFormat("{0} {1}", Type, VersionString);
|
||||
}
|
||||
if (Type != AndroidROMType.Unknown) b.Append(Type.ToString());
|
||||
}
|
||||
|
||||
public static Info Unknown { get; } = new Info(AndroidROMType.Unknown, null);
|
||||
|
||||
/// <summary>
|
||||
@@ -124,39 +135,53 @@ namespace System
|
||||
/// <summary>
|
||||
/// 获取当前 ROM 信息
|
||||
/// </summary>
|
||||
public static Info Current => mCurrent ?? throw new NullReferenceException("must call AndroidROM.Initialize() before using.");
|
||||
public static Info Current
|
||||
{
|
||||
get
|
||||
{
|
||||
if (mCurrent == null)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
return mCurrent!;
|
||||
}
|
||||
}
|
||||
|
||||
static bool isInit;
|
||||
static readonly object initLock = new();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化 ROM 信息
|
||||
/// </summary>
|
||||
public static void Initialize()
|
||||
static void Initialize()
|
||||
{
|
||||
if (isInit) return;
|
||||
string? version = null;
|
||||
var firstOrDefault = identify_keywords_rule_a
|
||||
.FirstOrDefault(x => SystemProperties.TryGet(x.Key, out version));
|
||||
if (firstOrDefault.Key != null)
|
||||
lock (initLock)
|
||||
{
|
||||
mCurrent = new Info(firstOrDefault.Value, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SystemProperties.TryGet(RO_BUILD_DISPLAY_ID, out var value))
|
||||
if (isInit) return;
|
||||
string? version = null;
|
||||
var firstOrDefault = identify_keywords_rule_a
|
||||
.FirstOrDefault(x => SystemProperties.TryGet(x.Key, out version));
|
||||
if (firstOrDefault.Key != null)
|
||||
{
|
||||
foreach (var item in identify_keywords_rule_b)
|
||||
mCurrent = new Info(firstOrDefault.Value, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SystemProperties.TryGet(RO_BUILD_DISPLAY_ID, out var value))
|
||||
{
|
||||
if (value.Contains(item.Key, StringComparison.OrdinalIgnoreCase))
|
||||
foreach (var item in identify_keywords_rule_b)
|
||||
{
|
||||
mCurrent = new Info(item.Value, value);
|
||||
break;
|
||||
if (value.Contains(item.Key, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
mCurrent = new Info(item.Value, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mCurrent == null) mCurrent = Info.Unknown;
|
||||
isInit = true;
|
||||
}
|
||||
if (mCurrent == null) mCurrent = Info.Unknown;
|
||||
isInit = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
using Android.Content;
|
||||
using Android.Content;
|
||||
using Android.Content.Res;
|
||||
using Android.OS;
|
||||
using AndroidApplication = Android.App.Application;
|
||||
//using Android.OS;
|
||||
//using AndroidApplication = Android.App.Application;
|
||||
|
||||
namespace System.Application
|
||||
{
|
||||
@@ -38,16 +38,16 @@ namespace System.Application
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <returns></returns>
|
||||
static bool IsDarkMode(Context context)
|
||||
public static bool IsDarkMode(Context context)
|
||||
{
|
||||
var isNight = IsNight(context);
|
||||
return isNight.HasValue && isNight.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否正在安卓Q中使用深色主题(Dark)
|
||||
/// </summary>
|
||||
public static bool IsDarkModeQ
|
||||
=> Build.VERSION.SdkInt >= BuildVersionCodes.Q && IsDarkMode(AndroidApplication.Context);
|
||||
///// <summary>
|
||||
///// 是否正在安卓Q中使用深色主题(Dark)
|
||||
///// </summary>
|
||||
//public static bool IsDarkModeQ
|
||||
// => Build.VERSION.SdkInt >= BuildVersionCodes.Q && IsDarkMode(AndroidApplication.Context);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using Android.App;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Provider;
|
||||
using AndroidX.Core.Content;
|
||||
@@ -18,10 +18,23 @@ namespace System.Application
|
||||
/// <param name="context"></param>
|
||||
public static void MockHomePressed(Context context)
|
||||
{
|
||||
var intent = new Intent(Intent.ActionMain);
|
||||
intent.SetFlags(ActivityFlags.NewTask);
|
||||
intent.AddCategory(Intent.CategoryHome);
|
||||
context.StartActivity(intent);
|
||||
try
|
||||
{
|
||||
var intent = new Intent(Intent.ActionMain)
|
||||
.SetFlags(ActivityFlags.NewTask)
|
||||
.AddCategory(Intent.CategoryHome);
|
||||
context.StartActivity(intent);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetAuthority(Context context)
|
||||
{
|
||||
var packageName = context.ApplicationContext!.PackageName;
|
||||
var value = packageName + ".fileProvider";
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -34,9 +47,7 @@ namespace System.Application
|
||||
{
|
||||
file ??= new JFile(Path.GetTempFileName());
|
||||
// https://github.com/xamarin/Essentials/blob/1.5.3.2/Xamarin.Essentials/Types/FileProvider.android.cs
|
||||
var imageUri = FileProvider.GetUriForFile(activity,
|
||||
activity.ApplicationContext().PackageName + ".fileProvider",
|
||||
file);
|
||||
var imageUri = FileProvider.GetUriForFile(activity, GetAuthority(activity), file);
|
||||
#if DEBUG
|
||||
Android.Util.Log.Debug(nameof(Activity), $"StartCameraForResult imageUri: {imageUri}");
|
||||
#endif
|
||||
|
||||
@@ -60,6 +60,15 @@ namespace System.Application.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 此应用不支持在模拟器中运行 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ExitCode_IsEmulator {
|
||||
get {
|
||||
return ResourceManager.GetString("ExitCode_IsEmulator", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 此应用不支持在有ROOT权限的设备中运行 的本地化字符串。
|
||||
/// </summary>
|
||||