mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
Merge pull request #1799 from DGP-Studio/develop
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||
using Snap.Hutao.Win32.Foundation;
|
||||
using Windows.Graphics;
|
||||
|
||||
|
||||
22
src/Snap.Hutao/Snap.Hutao/Core/Threading/VolatileWrite.cs
Normal file
22
src/Snap.Hutao/Snap.Hutao/Core/Threading/VolatileWrite.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
namespace Snap.Hutao.Core.Threading;
|
||||
|
||||
internal readonly ref struct VolatileWrite
|
||||
{
|
||||
private readonly ref bool reference;
|
||||
private readonly bool initialState;
|
||||
|
||||
public VolatileWrite(ref bool reference, bool initialState)
|
||||
{
|
||||
this.reference = ref reference;
|
||||
this.initialState = initialState;
|
||||
Volatile.Write(ref this.reference, initialState);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Volatile.Write(ref reference, !initialState);
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
<Identity
|
||||
Name="60568DGPStudio.SnapHutao"
|
||||
Publisher="CN=35C8E923-85DF-49A7-9172-B39DC6312C52"
|
||||
Version="1.10.5.0" />
|
||||
Version="1.10.6.0" />
|
||||
|
||||
<Properties>
|
||||
<DisplayName>Snap Hutao</DisplayName>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<Identity
|
||||
Name="60568DGPStudio.SnapHutaoDev"
|
||||
Publisher="CN=35C8E923-85DF-49A7-9172-B39DC6312C52"
|
||||
Version="1.10.5.0" />
|
||||
Version="1.10.6.0" />
|
||||
|
||||
<Properties>
|
||||
<DisplayName>Snap Hutao Dev</DisplayName>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>No results found</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>Select All</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Invalid Uri</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>List</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>Select All</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>Database is corrupted: {0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>Waiting for the game process to close…</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>Unlocks the module inject the game process, which is dangerous, but easy to succeed</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>Injection</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>Classic process memory operations are more dangerous but easy to fail.</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>Classic</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>Select game executable</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>Unlock Frame Rate Limit</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>Change how to unlock framerate</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>Unlock Method</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>Disabled</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} mins</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>Daily Commissions are not Completed</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>Aucun résultat trouvé</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>删除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Uri invalide</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>Liste</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>删除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>La base de donnée est corrompue : {0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>等待游戏进程退出</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>选择游戏本体</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>解锁帧率限制</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>禁用</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>今日完成委托数量不足</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>未找到结果</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Hapus</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Invalid Url</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>Daftar</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Hapus</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>Database mengalami kerusakan: {0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>Menunggu proses game tertutup...</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>Pilih exe game</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>Membuka limit Frame Rate</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>Nonaktifkan</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} menit</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>Komisi Harian Belum Selesai</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>検索結果なし</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>削除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>すべて選択</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>無効なURL</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>リスト</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>削除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>すべて選択</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>データベースが破損しています:{0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>プロセスが終了するまで待機中</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>モジュールをロック解除する際に非常に危険で賭けます。モジュールが成功することは容易です。</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>インジェクション</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>標準的な手続きによる外メモリ操作、危険です、そして失敗することが容易です</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>クラシック</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>ゲーム本体を選択する</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>フレームレート上限解除</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>ロック解除フレームレート変更方法の変更</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>ロック解除モード</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>無効</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>すべての依頼を完了していません</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>未找到结果</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>삭제</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>잘못된 Uri</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>목록</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>삭제</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>数据库已损坏:{0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>等待游戏进程退出</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>게임 파일 선택</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>프레임 속도 제한 해제</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>비활성화</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0}분</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>今日完成委托数量不足</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>Nenhum resultado</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Excluir</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Uri inválido</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>Lista</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Excluir</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>O banco de dados está corrompido: {0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>Aguardando o encerramento do processo do jogo…</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>Selecione o executável do jogo</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>Desbloquear limite de taxa de quadros</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>Desativado</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} mins</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>Missões diárias incompletas</value>
|
||||
</data>
|
||||
|
||||
@@ -3125,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>今日完成委托数量不足</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>Результаты не найдены</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Удалить</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Ошибка ссылки</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>Список</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>Удалить</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>База данных повреждена: {0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>Ожидание закрытия процесса игры</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>Выберите исполняемый файл игры</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>Разблокировать ограничение частоты кадров</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>Отключено</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} минут</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>Incomplete Daily Commissions</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>Không tìm thấy kết quả</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>删除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>Uri không hợp lệ</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>Danh sách</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>删除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>数据库已损坏:{0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>Đang đợi tiến trình trò chơi đóng...</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>选择游戏本体</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>解锁帧率限制</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>禁用</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>今日完成委托数量不足</value>
|
||||
</data>
|
||||
|
||||
@@ -147,6 +147,12 @@
|
||||
<data name="ControlAutoSuggestBoxNotFoundValue" xml:space="preserve">
|
||||
<value>未找到結果</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>刪除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="ControlImageCachedImageInvalidResourceUri" xml:space="preserve">
|
||||
<value>無效的 URI</value>
|
||||
</data>
|
||||
@@ -162,12 +168,6 @@
|
||||
<data name="ControlPanelPanelSelectorDropdownListName" xml:space="preserve">
|
||||
<value>清單</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxRemoveMenuItem" xml:space="preserve">
|
||||
<value>刪除</value>
|
||||
</data>
|
||||
<data name="ControlAutoSuggestTokenBoxSelectAllMenuItem" xml:space="preserve">
|
||||
<value>选择全部</value>
|
||||
</data>
|
||||
<data name="CoreExceptionServiceDatabaseCorruptedMessage" xml:space="preserve">
|
||||
<value>數據庫已損壞:{0}</value>
|
||||
</data>
|
||||
@@ -977,6 +977,18 @@
|
||||
<data name="ServiceGameLaunchPhaseWaitingProcessExit" xml:space="preserve">
|
||||
<value>等待遊戲進程退出</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandDescription" xml:space="preserve">
|
||||
<value>解锁模块注入游戏进程,非常危险,但容易成功</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindIslandName" xml:space="preserve">
|
||||
<value>注入</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyDescription" xml:space="preserve">
|
||||
<value>经典的进程外内存操作,较为危险,但容易失败</value>
|
||||
</data>
|
||||
<data name="ServiceGameLaunchUnlockerKindLegacyName" xml:space="preserve">
|
||||
<value>经典</value>
|
||||
</data>
|
||||
<data name="ServiceGameLocatorFileOpenPickerCommitText" xml:space="preserve">
|
||||
<value>請選擇遊戲本體</value>
|
||||
</data>
|
||||
@@ -2435,6 +2447,12 @@
|
||||
<data name="ViewPageLaunchGameUnlockFpsHeader" xml:space="preserve">
|
||||
<value>解鎖 FPS 限制</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindDescription" xml:space="preserve">
|
||||
<value>更改解锁帧率的工作方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsKindHeader" xml:space="preserve">
|
||||
<value>解锁方式</value>
|
||||
</data>
|
||||
<data name="ViewPageLaunchGameUnlockFpsOff" xml:space="preserve">
|
||||
<value>停用</value>
|
||||
</data>
|
||||
@@ -3107,6 +3125,9 @@
|
||||
<data name="WebDailyNoteExpeditionRemainMinutesFormat" xml:space="preserve">
|
||||
<value>{0} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExpeditionRemainTime" xml:space="preserve">
|
||||
<value>{0} 时 {1} 分</value>
|
||||
</data>
|
||||
<data name="WebDailyNoteExtraTaskRewardNotAllowed" xml:space="preserve">
|
||||
<value>今日完成委託數量不足</value>
|
||||
</data>
|
||||
|
||||
@@ -7,7 +7,6 @@ using Snap.Hutao.Core.ExceptionService;
|
||||
using Snap.Hutao.Model.Entity;
|
||||
using Snap.Hutao.Model.InterChange.Achievement;
|
||||
using Snap.Hutao.Model.Primitive;
|
||||
using Snap.Hutao.UI.Xaml.Data;
|
||||
using Snap.Hutao.ViewModel.Achievement;
|
||||
using System.Collections.ObjectModel;
|
||||
using EntityAchievement = Snap.Hutao.Model.Entity.Achievement;
|
||||
|
||||
@@ -109,6 +109,7 @@ internal sealed partial class GachaLogService : IGachaLogService
|
||||
|
||||
if (target is not null && Archives is not null)
|
||||
{
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
Archives.CurrentItem = target;
|
||||
}
|
||||
|
||||
|
||||
@@ -83,6 +83,8 @@ internal sealed partial class UIGFImportService : IUIGFImportService
|
||||
}
|
||||
|
||||
gachaLogDbService.AddGachaItemRange(fullItems);
|
||||
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
archives.MoveCurrentTo(archive);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,10 +88,13 @@ internal sealed partial class GameAccountService : IGameAccountService
|
||||
return RegistryInterop.Set(account);
|
||||
}
|
||||
|
||||
public void AttachGameAccountToUid(GameAccount gameAccount, string uid)
|
||||
public async ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid)
|
||||
{
|
||||
gameAccount.UpdateAttachUid(uid);
|
||||
await taskContext.SwitchToBackgroundAsync();
|
||||
gameDbService.UpdateGameAccount(gameAccount);
|
||||
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
gameAccount.UpdateAttachUid(uid);
|
||||
}
|
||||
|
||||
public async ValueTask ModifyGameAccountAsync(GameAccount gameAccount)
|
||||
|
||||
@@ -11,7 +11,7 @@ internal interface IGameAccountService
|
||||
{
|
||||
ObservableReorderableDbCollection<GameAccount> GameAccountCollection { get; }
|
||||
|
||||
void AttachGameAccountToUid(GameAccount gameAccount, string uid);
|
||||
ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid);
|
||||
|
||||
GameAccount? DetectCurrentGameAccount(SchemeType schemeType);
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ internal struct GameScreenCaptureContext : IDisposable
|
||||
return clientBox.right <= width && clientBox.bottom <= height;
|
||||
}
|
||||
|
||||
public unsafe readonly void AttachPreview(GameScreenCaptureDebugPreviewWindow? window)
|
||||
public readonly unsafe void AttachPreview(GameScreenCaptureDebugPreviewWindow? window)
|
||||
{
|
||||
if (PreviewEnabled && window is not null)
|
||||
{
|
||||
@@ -156,7 +156,7 @@ internal struct GameScreenCaptureContext : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe readonly void UpdatePreview(GameScreenCaptureDebugPreviewWindow? window, IDirect3DSurface surface)
|
||||
public readonly unsafe void UpdatePreview(GameScreenCaptureDebugPreviewWindow? window, IDirect3DSurface surface)
|
||||
{
|
||||
if (PreviewEnabled && window is not null)
|
||||
{
|
||||
@@ -164,7 +164,7 @@ internal struct GameScreenCaptureContext : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe readonly void DetachPreview(GameScreenCaptureDebugPreviewWindow? window)
|
||||
public readonly unsafe void DetachPreview(GameScreenCaptureDebugPreviewWindow? window)
|
||||
{
|
||||
if (PreviewEnabled && window is not null)
|
||||
{
|
||||
@@ -173,7 +173,7 @@ internal struct GameScreenCaptureContext : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe readonly void Dispose()
|
||||
public readonly unsafe void Dispose()
|
||||
{
|
||||
IUnknownMarshal.Release(factory);
|
||||
IUnknownMarshal.Release(swapChain);
|
||||
|
||||
@@ -26,9 +26,20 @@ internal sealed partial class GameConfigurationFileService : IGameConfigurationF
|
||||
{
|
||||
string serverCacheFolder = runtimeOptions.GetDataFolderServerCacheFolder();
|
||||
string source = Path.Combine(serverCacheFolder, ConfigurationFileName);
|
||||
if (File.Exists(source))
|
||||
|
||||
if (!File.Exists(source))
|
||||
{
|
||||
File.Copy(source, destination, true);
|
||||
return;
|
||||
}
|
||||
|
||||
// If target directory does not exist, do not copy the file
|
||||
// This often means user has moved the game folder away.
|
||||
string? directory = Path.GetDirectoryName(destination);
|
||||
if (string.IsNullOrEmpty(directory) || !Directory.Exists(directory))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
File.Copy(source, destination, true);
|
||||
}
|
||||
}
|
||||
@@ -54,9 +54,9 @@ internal sealed partial class GameServiceFacade : IGameServiceFacade
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void AttachGameAccountToUid(GameAccount gameAccount, string uid)
|
||||
public ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid)
|
||||
{
|
||||
gameAccountService.AttachGameAccountToUid(gameAccount, uid);
|
||||
return gameAccountService.AttachGameAccountToUidAsync(gameAccount, uid);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -25,7 +25,7 @@ internal interface IGameServiceFacade
|
||||
/// </summary>
|
||||
/// <param name="gameAccount">游戏内账号</param>
|
||||
/// <param name="uid">uid</param>
|
||||
void AttachGameAccountToUid(GameAccount gameAccount, string uid);
|
||||
ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid);
|
||||
|
||||
ValueTask<GameAccount?> DetectGameAccountAsync(SchemeType scheme);
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ using Snap.Hutao.UI.Xaml.Media.Backdrop;
|
||||
using Snap.Hutao.Win32.Foundation;
|
||||
using Snap.Hutao.Win32.Graphics.Dwm;
|
||||
using Snap.Hutao.Win32.UI.WindowsAndMessaging;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using Windows.Foundation;
|
||||
using Windows.Graphics;
|
||||
|
||||
@@ -45,15 +45,30 @@ internal sealed class InterspersedObservableCollection : IList, IEnumerable<obje
|
||||
|
||||
public IList ItemsSource { get; private set; }
|
||||
|
||||
public bool IsFixedSize => false;
|
||||
public bool IsFixedSize
|
||||
{
|
||||
get => false;
|
||||
}
|
||||
|
||||
public bool IsReadOnly => false;
|
||||
public bool IsReadOnly
|
||||
{
|
||||
get => false;
|
||||
}
|
||||
|
||||
public int Count => ItemsSource.Count + interspersedObjects.Count;
|
||||
public int Count
|
||||
{
|
||||
get => ItemsSource.Count + interspersedObjects.Count;
|
||||
}
|
||||
|
||||
public bool IsSynchronized => false;
|
||||
public bool IsSynchronized
|
||||
{
|
||||
get => false;
|
||||
}
|
||||
|
||||
public object SyncRoot => new();
|
||||
public object SyncRoot
|
||||
{
|
||||
get => new();
|
||||
}
|
||||
|
||||
public object? this[int index]
|
||||
{
|
||||
|
||||
@@ -14,7 +14,6 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Runtime.InteropServices;
|
||||
using Windows.Foundation;
|
||||
|
||||
namespace Snap.Hutao.UI.Xaml.Control.Image;
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
Command="{Binding NavigateCommand}"
|
||||
Content="{StaticResource FontIconContentSetting}"
|
||||
FontFamily="{StaticResource SymbolThemeFontFamily}"
|
||||
Style="{ThemeResource ButtonRevealStyle}"
|
||||
ToolTipService.ToolTip="{shuxm:ResourceString Name=ViewPageHomeLaunchGameSettingAction}"/>
|
||||
<StackPanel
|
||||
Grid.Row="2"
|
||||
|
||||
@@ -66,7 +66,7 @@ internal sealed partial class AnnouncementWebView2ContentProvider : DependencyOb
|
||||
}
|
||||
}
|
||||
|
||||
public RectInt32 InitializePosition(RectInt32 parentRect)
|
||||
public RectInt32 InitializePosition(RectInt32 parentRect, double parentDpi)
|
||||
{
|
||||
// Parent Window can never be so small
|
||||
// if (parentRect.Width < 96 || parentRect.Height < 96)
|
||||
|
||||
@@ -15,7 +15,7 @@ internal interface IWebView2ContentProvider
|
||||
|
||||
ValueTask InitializeAsync(IServiceProvider serviceProvider, CancellationToken token);
|
||||
|
||||
RectInt32 InitializePosition(RectInt32 parentRect);
|
||||
RectInt32 InitializePosition(RectInt32 parentRect, double parentDpi);
|
||||
|
||||
void Unload();
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
using Microsoft.UI.Windowing;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using Snap.Hutao.Core.Graphics;
|
||||
using Snap.Hutao.Service.Notification;
|
||||
@@ -70,11 +69,11 @@ internal sealed partial class MiHoYoJSBridgeWebView2ContentProvider : Dependency
|
||||
jsBridge?.Detach();
|
||||
}
|
||||
|
||||
public RectInt32 InitializePosition(RectInt32 parentRect)
|
||||
public RectInt32 InitializePosition(RectInt32 parentRect, double parentDpi)
|
||||
{
|
||||
PointInt32 center = parentRect.GetPointInt32(PointInt32Kind.Center);
|
||||
RectInt32 target = new(center.X - 240, center.Y - 400, 450, 800);
|
||||
|
||||
SizeInt32 size = new SizeInt32(480, 800).Scale(parentDpi);
|
||||
RectInt32 target = RectInt32Convert.RectInt32(new(center.X - (size.Width / 2), center.Y - (size.Height / 2)), size);
|
||||
RectInt32 workArea = DisplayArea.GetFromRect(parentRect, DisplayAreaFallback.None).WorkArea;
|
||||
RectInt32 workAreaShrink = new(workArea.X + 48, workArea.Y + 48, workArea.Width - 96, workArea.Height - 96);
|
||||
|
||||
|
||||
@@ -60,7 +60,8 @@ internal sealed partial class WebView2Window : Microsoft.UI.Xaml.Window, IXamlWi
|
||||
EnableWindow(parentHWND, false);
|
||||
base.Activate();
|
||||
|
||||
AppWindow.MoveThenResize(contentProvider.InitializePosition(parentAppWindow.GetRect()));
|
||||
double dpi = Math.Round(GetDpiForWindow(parentHWND) / 96D, 2, MidpointRounding.AwayFromZero);
|
||||
AppWindow.MoveThenResize(contentProvider.InitializePosition(parentAppWindow.GetRect(), dpi));
|
||||
}
|
||||
|
||||
public void OnWindowClosed()
|
||||
|
||||
@@ -2,12 +2,9 @@
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Media.Imaging;
|
||||
using Snap.Hutao.Core.DataTransfer;
|
||||
using Snap.Hutao.Core.ExceptionService;
|
||||
using Snap.Hutao.Core.Graphics.Imaging;
|
||||
using Snap.Hutao.Factory.ContentDialog;
|
||||
using Snap.Hutao.Model.Calculable;
|
||||
using Snap.Hutao.Model.Entity.Primitive;
|
||||
@@ -15,15 +12,11 @@ using Snap.Hutao.Service.AvatarInfo;
|
||||
using Snap.Hutao.Service.Cultivation;
|
||||
using Snap.Hutao.Service.Notification;
|
||||
using Snap.Hutao.Service.User;
|
||||
using Snap.Hutao.UI;
|
||||
using Snap.Hutao.UI.Xaml.Control;
|
||||
using Snap.Hutao.UI.Xaml.View.Dialog;
|
||||
using Snap.Hutao.ViewModel.User;
|
||||
using Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate;
|
||||
using Snap.Hutao.Web.Response;
|
||||
using Windows.Graphics.Imaging;
|
||||
using Windows.Storage.Streams;
|
||||
using Windows.UI;
|
||||
using CalculatorAvatarPromotionDelta = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.AvatarPromotionDelta;
|
||||
using CalculatorBatchConsumption = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.BatchConsumption;
|
||||
using CalculatorClient = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.CalculateClient;
|
||||
|
||||
@@ -15,8 +15,6 @@ using Snap.Hutao.Service.User;
|
||||
using Snap.Hutao.UI.Xaml.Control;
|
||||
using Snap.Hutao.UI.Xaml.View.Dialog;
|
||||
using Snap.Hutao.UI.Xaml.View.Window.WebView2;
|
||||
using Snap.Hutao.ViewModel.User;
|
||||
using Snap.Hutao.Web.Hoyolab.Takumi.Binding;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Snap.Hutao.ViewModel.DailyNote;
|
||||
|
||||
@@ -39,6 +39,7 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
||||
private AdvancedDbCollectionView<GachaArchive>? archives;
|
||||
private GachaStatistics? statistics;
|
||||
private bool isAggressiveRefresh;
|
||||
private bool suppressCurrentItemChangedHandling;
|
||||
|
||||
public AdvancedDbCollectionView<GachaArchive>? Archives
|
||||
{
|
||||
@@ -119,25 +120,30 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
||||
|
||||
private void OnCurrentArchiveChanged(object? sender, object? e)
|
||||
{
|
||||
if (suppressCurrentItemChangedHandling)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateStatisticsAsync(Archives?.CurrentItem).SafeForget(logger);
|
||||
}
|
||||
|
||||
[Command("RefreshByWebCacheCommand")]
|
||||
private Task RefreshByWebCacheAsync()
|
||||
private async Task RefreshByWebCacheAsync()
|
||||
{
|
||||
return RefreshCoreAsync(RefreshOption.WebCache).AsTask();
|
||||
await RefreshCoreAsync(RefreshOption.WebCache).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Command("RefreshBySTokenCommand")]
|
||||
private Task RefreshBySTokenAsync()
|
||||
private async Task RefreshBySTokenAsync()
|
||||
{
|
||||
return RefreshCoreAsync(RefreshOption.SToken).AsTask();
|
||||
await RefreshCoreAsync(RefreshOption.SToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Command("RefreshByManualInputCommand")]
|
||||
private Task RefreshByManualInputAsync()
|
||||
private async Task RefreshByManualInputAsync()
|
||||
{
|
||||
return RefreshCoreAsync(RefreshOption.ManualInput).AsTask();
|
||||
await RefreshCoreAsync(RefreshOption.ManualInput).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async ValueTask RefreshCoreAsync(RefreshOption option)
|
||||
@@ -184,7 +190,16 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
||||
{
|
||||
try
|
||||
{
|
||||
authkeyValid = await gachaLogService.RefreshGachaLogAsync(query, strategy, progress, CancellationToken).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
suppressCurrentItemChangedHandling = true;
|
||||
authkeyValid = await gachaLogService.RefreshGachaLogAsync(query, strategy, progress, CancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
suppressCurrentItemChangedHandling = false;
|
||||
await UpdateStatisticsAsync(Archives?.CurrentItem).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
catch (HutaoException ex)
|
||||
{
|
||||
@@ -339,7 +354,7 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
||||
|
||||
private async ValueTask<bool> TryImportUIGFInternalAsync(UIGF uigf)
|
||||
{
|
||||
if (!uigf.IsCurrentVersionSupported(out UIGFVersion version))
|
||||
if (!uigf.IsCurrentVersionSupported(out _))
|
||||
{
|
||||
infoBarService.Warning(SH.ViewModelGachaLogImportWarningTitle, SH.ViewModelGachaLogImportWarningMessage);
|
||||
return false;
|
||||
@@ -357,7 +372,16 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
||||
{
|
||||
using (await dialog.BlockAsync(taskContext).ConfigureAwait(false))
|
||||
{
|
||||
await gachaLogService.ImportFromUIGFAsync(uigf).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
suppressCurrentItemChangedHandling = true;
|
||||
await gachaLogService.ImportFromUIGFAsync(uigf).ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
suppressCurrentItemChangedHandling = false;
|
||||
await UpdateStatisticsAsync(Archives?.CurrentItem).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
|
||||
@@ -249,7 +249,7 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel, IView
|
||||
|
||||
if (await userService.GetCurrentUidAsync().ConfigureAwait(false) is { } uid)
|
||||
{
|
||||
gameService.AttachGameAccountToUid(gameAccount, uid);
|
||||
await gameService.AttachGameAccountToUidAsync(gameAccount, uid).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -80,9 +80,7 @@ internal sealed class Expedition
|
||||
}
|
||||
|
||||
TimeSpan ts = new(0, 0, RemainedTime);
|
||||
return ts.Hours > 0
|
||||
? SH.FormatWebDailyNoteExpeditionRemainHoursFormat(ts.Hours)
|
||||
: SH.FormatWebDailyNoteExpeditionRemainMinutesFormat(ts.Minutes);
|
||||
return SH.FormatWebDailyNoteExpeditionRemainTime(ts.Hours, ts.Minutes);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Snap.Hutao.Model.Intrinsic;
|
||||
using Snap.Hutao.Model.Primitive;
|
||||
|
||||
namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.RoleCombat;
|
||||
|
||||
internal sealed class RoleCombatBuff
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Snap.Hutao.Model.Intrinsic;
|
||||
using Snap.Hutao.Model.Primitive;
|
||||
|
||||
namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.RoleCombat;
|
||||
|
||||
internal sealed class RoleCombatData
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Snap.Hutao.Model.Intrinsic;
|
||||
using Snap.Hutao.Model.Primitive;
|
||||
|
||||
namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.RoleCombat;
|
||||
|
||||
internal sealed class RoleCombatDetail
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.RoleCombat;
|
||||
|
||||
internal sealed class RoleCombatLinks
|
||||
|
||||
@@ -15,7 +15,7 @@ internal static class AdvApi32
|
||||
{
|
||||
[DllImport("ADVAPI32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows5.1.2600")]
|
||||
public static unsafe extern BOOL ConvertSidToStringSidW(PSID Sid, PWSTR* StringSid);
|
||||
public static extern unsafe BOOL ConvertSidToStringSidW(PSID Sid, PWSTR* StringSid);
|
||||
|
||||
public static unsafe BOOL ConvertSidToStringSidW(PSID Sid, out PWSTR StringSid)
|
||||
{
|
||||
@@ -27,7 +27,7 @@ internal static class AdvApi32
|
||||
|
||||
[DllImport("ADVAPI32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows5.1.2600")]
|
||||
public static unsafe extern BOOL ConvertStringSidToSidW(PCWSTR StringSid, PSID* Sid);
|
||||
public static extern unsafe BOOL ConvertStringSidToSidW(PCWSTR StringSid, PSID* Sid);
|
||||
|
||||
public static unsafe BOOL ConvertStringSidToSidW(ReadOnlySpan<char> StringSid, out PSID Sid)
|
||||
{
|
||||
@@ -54,7 +54,7 @@ internal static class AdvApi32
|
||||
|
||||
[DllImport("ADVAPI32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows5.0")]
|
||||
public static unsafe extern WIN32_ERROR RegOpenKeyExW(HKEY hKey, [AllowNull] PCWSTR lpSubKey, [AllowNull] uint ulOptions, REG_SAM_FLAGS samDesired, HKEY* phkResult);
|
||||
public static extern unsafe WIN32_ERROR RegOpenKeyExW(HKEY hKey, [AllowNull] PCWSTR lpSubKey, [AllowNull] uint ulOptions, REG_SAM_FLAGS samDesired, HKEY* phkResult);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe WIN32_ERROR RegOpenKeyExW(HKEY hKey, ReadOnlySpan<char> subKey, uint ulOptions, REG_SAM_FLAGS samDesired, out HKEY hkResult)
|
||||
|
||||
@@ -22,5 +22,5 @@ internal static class ComCtl32
|
||||
|
||||
[DllImport("COMCTL32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows5.1.2600")]
|
||||
public static unsafe extern BOOL SetWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, nuint uIdSubclass, nuint dwRefData);
|
||||
public static extern unsafe BOOL SetWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, nuint uIdSubclass, nuint dwRefData);
|
||||
}
|
||||
@@ -16,7 +16,7 @@ namespace Snap.Hutao.Win32;
|
||||
internal static class D3d11
|
||||
{
|
||||
[DllImport("d3d11.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
public static unsafe extern HRESULT CreateDirect3D11DeviceFromDXGIDevice(IDXGIDevice* dxgiDevice, IInspectable** graphicsDevice);
|
||||
public static extern unsafe HRESULT CreateDirect3D11DeviceFromDXGIDevice(IDXGIDevice* dxgiDevice, IInspectable** graphicsDevice);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe HRESULT CreateDirect3D11DeviceFromDXGIDevice(IDXGIDevice* dxgiDevice, out IInspectable* graphicsDevice)
|
||||
@@ -28,7 +28,7 @@ internal static class D3d11
|
||||
}
|
||||
|
||||
[DllImport("d3d11.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
public static unsafe extern HRESULT D3D11CreateDevice([AllowNull] IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, [AllowNull] D3D_FEATURE_LEVEL* pFeatureLevels, uint FeatureLevels, uint SDKVersion, [MaybeNull] ID3D11Device** ppDevice, [MaybeNull] D3D_FEATURE_LEVEL* pFeatureLevel, [MaybeNull] ID3D11DeviceContext** ppImmediateContext);
|
||||
public static extern unsafe HRESULT D3D11CreateDevice([AllowNull] IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, [AllowNull] D3D_FEATURE_LEVEL* pFeatureLevels, uint FeatureLevels, uint SDKVersion, [MaybeNull] ID3D11Device** ppDevice, [MaybeNull] D3D_FEATURE_LEVEL* pFeatureLevel, [MaybeNull] ID3D11DeviceContext** ppImmediateContext);
|
||||
|
||||
public static unsafe HRESULT D3D11CreateDevice([AllowNull] IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, [AllowNull] ReadOnlySpan<D3D_FEATURE_LEVEL> featureLevels, uint SDKVersion, out ID3D11Device* pDevice, out D3D_FEATURE_LEVEL featureLevel, out ID3D11DeviceContext* pImmediateContext)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ internal static class DwmApi
|
||||
{
|
||||
[DllImport("dwmapi.dll", ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows6.0.6000")]
|
||||
public static unsafe extern HRESULT DwmGetWindowAttribute(HWND hwnd, uint dwAttribute, void* pvAttribute, uint cbAttribute);
|
||||
public static extern unsafe HRESULT DwmGetWindowAttribute(HWND hwnd, uint dwAttribute, void* pvAttribute, uint cbAttribute);
|
||||
|
||||
public static unsafe HRESULT DwmGetWindowAttribute<T>(HWND hwnd, DWMWINDOWATTRIBUTE dwAttribute, out T attribute)
|
||||
where T : unmanaged
|
||||
@@ -27,7 +27,7 @@ internal static class DwmApi
|
||||
|
||||
[DllImport("dwmapi.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows6.0.6000")]
|
||||
public static unsafe extern HRESULT DwmSetWindowAttribute(HWND hwnd, uint dwAttribute, void* pvAttribute, uint cbAttribute);
|
||||
public static extern unsafe HRESULT DwmSetWindowAttribute(HWND hwnd, uint dwAttribute, void* pvAttribute, uint cbAttribute);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe HRESULT DwmSetWindowAttribute<T>(HWND hwnd, DWMWINDOWATTRIBUTE dwAttribute, ref readonly T attribute)
|
||||
|
||||
@@ -13,7 +13,7 @@ internal static class Dxgi
|
||||
{
|
||||
[DllImport("dxgi.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows8.1")]
|
||||
public static unsafe extern HRESULT CreateDXGIFactory2(uint Flags, Guid* riid, void** ppFactory);
|
||||
public static extern unsafe HRESULT CreateDXGIFactory2(uint Flags, Guid* riid, void** ppFactory);
|
||||
|
||||
public static unsafe HRESULT CreateDXGIFactory2<T>(uint Flags, ref readonly Guid iid, out T* pFactory)
|
||||
where T : unmanaged
|
||||
|
||||
@@ -16,7 +16,7 @@ internal static class FirewallApi
|
||||
{
|
||||
[DllImport("api-ms-win-net-isolation-l1-1-0.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows8.0")]
|
||||
public static unsafe extern uint NetworkIsolationEnumAppContainers(uint Flags, uint* pdwNumPublicAppCs, INET_FIREWALL_APP_CONTAINER** ppPublicAppCs);
|
||||
public static extern unsafe uint NetworkIsolationEnumAppContainers(uint Flags, uint* pdwNumPublicAppCs, INET_FIREWALL_APP_CONTAINER** ppPublicAppCs);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe WIN32_ERROR NetworkIsolationEnumAppContainers(NETISO_FLAG Flags, out uint dwNumPublicAppCs, out INET_FIREWALL_APP_CONTAINER* pPublicAppCs)
|
||||
@@ -33,7 +33,7 @@ internal static class FirewallApi
|
||||
|
||||
[DllImport("api-ms-win-net-isolation-l1-1-0.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows8.0")]
|
||||
public static unsafe extern uint NetworkIsolationFreeAppContainers(INET_FIREWALL_APP_CONTAINER* pPublicAppCs);
|
||||
public static extern unsafe uint NetworkIsolationFreeAppContainers(INET_FIREWALL_APP_CONTAINER* pPublicAppCs);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe WIN32_ERROR NetworkIsolationFreeAppContainers(ref readonly INET_FIREWALL_APP_CONTAINER publicAppCs)
|
||||
@@ -47,7 +47,7 @@ internal static class FirewallApi
|
||||
|
||||
[DllImport("api-ms-win-net-isolation-l1-1-0.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows8.0")]
|
||||
public static unsafe extern uint NetworkIsolationGetAppContainerConfig(uint* pdwNumPublicAppCs, SID_AND_ATTRIBUTES** appContainerSids);
|
||||
public static extern unsafe uint NetworkIsolationGetAppContainerConfig(uint* pdwNumPublicAppCs, SID_AND_ATTRIBUTES** appContainerSids);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe WIN32_ERROR NetworkIsolationGetAppContainerConfig(out uint dwNumPublicAppCs, out SID_AND_ATTRIBUTES* appContainerSids)
|
||||
@@ -64,7 +64,7 @@ internal static class FirewallApi
|
||||
|
||||
[DllImport("api-ms-win-net-isolation-l1-1-0.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
|
||||
[SupportedOSPlatform("windows8.0")]
|
||||
public static unsafe extern uint NetworkIsolationSetAppContainerConfig(uint dwNumPublicAppCs, SID_AND_ATTRIBUTES* appContainerSids);
|
||||
public static extern unsafe uint NetworkIsolationSetAppContainerConfig(uint dwNumPublicAppCs, SID_AND_ATTRIBUTES* appContainerSids);
|
||||
|
||||
[DebuggerStepThrough]
|
||||
public static unsafe WIN32_ERROR NetworkIsolationSetAppContainerConfig(ReadOnlySpan<SID_AND_ATTRIBUTES> appContainerSids)
|
||||
|
||||
@@ -9,13 +9,28 @@ internal readonly struct BOOL
|
||||
|
||||
public readonly int Value;
|
||||
|
||||
public BOOL(bool value) => Value = value ? 1 : 0;
|
||||
public BOOL(bool value)
|
||||
{
|
||||
Value = value ? 1 : 0;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator int(BOOL value) => *(int*)&value;
|
||||
public static unsafe implicit operator int(BOOL value)
|
||||
{
|
||||
return *(int*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator BOOL(int value) => *(BOOL*)&value;
|
||||
public static unsafe implicit operator BOOL(int value)
|
||||
{
|
||||
return *(BOOL*)&value;
|
||||
}
|
||||
|
||||
public static implicit operator BOOL(bool value) => new(value);
|
||||
public static implicit operator BOOL(bool value)
|
||||
{
|
||||
return new(value);
|
||||
}
|
||||
|
||||
public static implicit operator bool(BOOL value) => value != 0;
|
||||
public static implicit operator bool(BOOL value)
|
||||
{
|
||||
return value != 0;
|
||||
}
|
||||
}
|
||||
@@ -9,9 +9,18 @@ internal readonly struct HANDLE
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator HANDLE(nint value) => *(HANDLE*)&value;
|
||||
public static unsafe implicit operator HANDLE(nint value)
|
||||
{
|
||||
return *(HANDLE*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator nint(HANDLE handle) => *(nint*)&handle;
|
||||
public static unsafe implicit operator nint(HANDLE handle)
|
||||
{
|
||||
return *(nint*)&handle;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator HANDLE(BOOL value) => *(int*)&value;
|
||||
public static unsafe implicit operator HANDLE(BOOL value)
|
||||
{
|
||||
return *(int*)&value;
|
||||
}
|
||||
}
|
||||
@@ -9,5 +9,8 @@ internal readonly struct HINSTANCE
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator HINSTANCE(HANDLE value) => *(HINSTANCE*)&value;
|
||||
public static unsafe implicit operator HINSTANCE(HANDLE value)
|
||||
{
|
||||
return *(HINSTANCE*)&value;
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,13 @@ internal readonly struct HMODULE
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator HMODULE(nint value) => *(HMODULE*)&value;
|
||||
public static unsafe implicit operator HMODULE(nint value)
|
||||
{
|
||||
return *(HMODULE*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator nint(HMODULE module) => *(nint*)&module;
|
||||
public static unsafe implicit operator nint(HMODULE module)
|
||||
{
|
||||
return *(nint*)&module;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ namespace Snap.Hutao.Win32.Foundation;
|
||||
[SuppressMessage("", "SA1310")]
|
||||
internal readonly partial struct HRESULT
|
||||
{
|
||||
public static readonly HRESULT S_OK = unchecked((int)0x00000000);
|
||||
public static readonly HRESULT S_OK = unchecked(0x00000000);
|
||||
public static readonly HRESULT E_ASYNC_OPERATION_NOT_STARTED = unchecked((int)0x80000019);
|
||||
public static readonly HRESULT E_FAIL = unchecked((int)0x80004005);
|
||||
public static readonly HRESULT DXGI_ERROR_NOT_FOUND = unchecked((int)0x887A0002);
|
||||
@@ -17,9 +17,15 @@ internal readonly partial struct HRESULT
|
||||
|
||||
public readonly int Value;
|
||||
|
||||
public static unsafe implicit operator int(HRESULT value) => *(int*)&value;
|
||||
public static unsafe implicit operator int(HRESULT value)
|
||||
{
|
||||
return *(int*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator HRESULT(int value) => *(HRESULT*)&value;
|
||||
public static unsafe implicit operator HRESULT(int value)
|
||||
{
|
||||
return *(HRESULT*)&value;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
|
||||
@@ -7,7 +7,13 @@ internal readonly struct HWND
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator HWND(nint value) => *(HWND*)&value;
|
||||
public static unsafe implicit operator HWND(nint value)
|
||||
{
|
||||
return *(HWND*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator nint(HWND value) => *(nint*)&value;
|
||||
public static unsafe implicit operator nint(HWND value)
|
||||
{
|
||||
return *(nint*)&value;
|
||||
}
|
||||
}
|
||||
@@ -7,5 +7,8 @@ internal readonly struct LPARAM
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator void*(LPARAM value) => *(void**)&value;
|
||||
public static unsafe implicit operator void*(LPARAM value)
|
||||
{
|
||||
return *(void**)&value;
|
||||
}
|
||||
}
|
||||
@@ -7,5 +7,8 @@ internal readonly struct LRESULT
|
||||
{
|
||||
public readonly nint Value;
|
||||
|
||||
public static unsafe implicit operator LRESULT(nint value) => *(LRESULT*)&value;
|
||||
public static unsafe implicit operator LRESULT(nint value)
|
||||
{
|
||||
return *(LRESULT*)&value;
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,13 @@ internal readonly struct PCSTR
|
||||
{
|
||||
public readonly unsafe byte* Value;
|
||||
|
||||
public static unsafe implicit operator PCSTR(byte* value) => *(PCSTR*)&value;
|
||||
public static unsafe implicit operator PCSTR(byte* value)
|
||||
{
|
||||
return *(PCSTR*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator byte*(PCSTR value) => *(byte**)&value;
|
||||
public static unsafe implicit operator byte*(PCSTR value)
|
||||
{
|
||||
return *(byte**)&value;
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,13 @@ internal readonly struct PCWSTR
|
||||
{
|
||||
public readonly unsafe char* Value;
|
||||
|
||||
public static unsafe implicit operator PCWSTR(char* value) => *(PCWSTR*)&value;
|
||||
public static unsafe implicit operator PCWSTR(char* value)
|
||||
{
|
||||
return *(PCWSTR*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator char*(PCWSTR value) => *(char**)&value;
|
||||
public static unsafe implicit operator char*(PCWSTR value)
|
||||
{
|
||||
return *(char**)&value;
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,13 @@ internal struct PSID
|
||||
{
|
||||
public unsafe void* Value;
|
||||
|
||||
public static unsafe implicit operator PSID(SID* value) => *(PSID*)&value;
|
||||
public static unsafe implicit operator PSID(SID* value)
|
||||
{
|
||||
return *(PSID*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator void*(PSID value) => *(void**)&value;
|
||||
public static unsafe implicit operator void*(PSID value)
|
||||
{
|
||||
return *(void**)&value;
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,13 @@ internal readonly struct PWSTR
|
||||
{
|
||||
public readonly unsafe char* Value;
|
||||
|
||||
public static unsafe implicit operator PWSTR(char* value) => *(PWSTR*)&value;
|
||||
public static unsafe implicit operator PWSTR(char* value)
|
||||
{
|
||||
return *(PWSTR*)&value;
|
||||
}
|
||||
|
||||
public static unsafe implicit operator char*(PWSTR value) => *(char**)&value;
|
||||
public static unsafe implicit operator char*(PWSTR value)
|
||||
{
|
||||
return *(char**)&value;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Asynchronous
|
||||
internal readonly unsafe struct ID3D11Asynchronous
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11BlendState
|
||||
internal readonly unsafe struct ID3D11BlendState
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Buffer
|
||||
internal readonly unsafe struct ID3D11Buffer
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11ClassInstance
|
||||
internal readonly unsafe struct ID3D11ClassInstance
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11ClassLinkage
|
||||
internal readonly unsafe struct ID3D11ClassLinkage
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11CommandList
|
||||
internal readonly unsafe struct ID3D11CommandList
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11ComputeShader
|
||||
internal readonly unsafe struct ID3D11ComputeShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Counter
|
||||
internal readonly unsafe struct ID3D11Counter
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11DepthStencilState
|
||||
internal readonly unsafe struct ID3D11DepthStencilState
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11DepthStencilView
|
||||
internal readonly unsafe struct ID3D11DepthStencilView
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11DeviceChild
|
||||
internal readonly unsafe struct ID3D11DeviceChild
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11DomainShader
|
||||
internal readonly unsafe struct ID3D11DomainShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11GeometryShader
|
||||
internal readonly unsafe struct ID3D11GeometryShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11HullShader
|
||||
internal readonly unsafe struct ID3D11HullShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11InputLayout
|
||||
internal readonly unsafe struct ID3D11InputLayout
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11PixelShader
|
||||
internal readonly unsafe struct ID3D11PixelShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Predicate
|
||||
internal readonly unsafe struct ID3D11Predicate
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Query
|
||||
internal readonly unsafe struct ID3D11Query
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11RasterizerState
|
||||
internal readonly unsafe struct ID3D11RasterizerState
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11RenderTargetView
|
||||
internal readonly unsafe struct ID3D11RenderTargetView
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Resource
|
||||
internal readonly unsafe struct ID3D11Resource
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11SamplerState
|
||||
internal readonly unsafe struct ID3D11SamplerState
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11ShaderResourceView
|
||||
internal readonly unsafe struct ID3D11ShaderResourceView
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Texture1D
|
||||
internal readonly unsafe struct ID3D11Texture1D
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Texture2D
|
||||
internal readonly unsafe struct ID3D11Texture2D
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11Texture3D
|
||||
internal readonly unsafe struct ID3D11Texture3D
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11UnorderedAccessView
|
||||
internal readonly unsafe struct ID3D11UnorderedAccessView
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11VertexShader
|
||||
internal readonly unsafe struct ID3D11VertexShader
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Direct3D11;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct ID3D11View
|
||||
internal readonly unsafe struct ID3D11View
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIAdapter
|
||||
internal readonly unsafe struct IDXGIAdapter
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIAdapter1
|
||||
internal readonly unsafe struct IDXGIAdapter1
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIDevice
|
||||
internal readonly unsafe struct IDXGIDevice
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIDeviceSubObject
|
||||
internal readonly unsafe struct IDXGIDeviceSubObject
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIFactory
|
||||
internal readonly unsafe struct IDXGIFactory
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
[SupportedOSPlatform("windows6.1")]
|
||||
internal unsafe readonly struct IDXGIFactory1
|
||||
internal readonly unsafe struct IDXGIFactory1
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
[SupportedOSPlatform("windows8.0")]
|
||||
internal unsafe readonly struct IDXGIFactory2
|
||||
internal readonly unsafe struct IDXGIFactory2
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.Versioning;
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
[SupportedOSPlatform("windows8.1")]
|
||||
internal unsafe readonly struct IDXGIFactory3
|
||||
internal readonly unsafe struct IDXGIFactory3
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIFactory4
|
||||
internal readonly unsafe struct IDXGIFactory4
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIFactory5
|
||||
internal readonly unsafe struct IDXGIFactory5
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIObject
|
||||
internal readonly unsafe struct IDXGIObject
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGIOutput
|
||||
internal readonly unsafe struct IDXGIOutput
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace Snap.Hutao.Win32.Graphics.Dxgi;
|
||||
|
||||
internal unsafe readonly struct IDXGISwapChain
|
||||
internal readonly unsafe struct IDXGISwapChain
|
||||
{
|
||||
public readonly Vftbl* ThisPtr;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user