Compare commits

..

48 Commits

Author SHA1 Message Date
LillyJadeKatrin
01fc5d6466
Merge 5545a386cf into 1786e34bd3 2025-06-07 18:44:07 -05:00
Jordan Woyak
1786e34bd3
Merge pull request #13665 from jordan-woyak/dark-mode-filter
DolphinQt: Replace widespread SetQWidgetWindowDecorations calls with an event filter.
2025-06-07 18:19:13 -05:00
Jordan Woyak
65f3ba70f5
Merge pull request #13522 from tygyh/Enforce-overriding-destructor-style-Core&UnitTests
Core & UnitTests: Make overriding explicit and remove redundant virtual specifiers on overriding destructors
2025-06-07 17:55:14 -05:00
Jordan Woyak
ec52a74967
Merge pull request #13023 from tygyh/Replace-ties-with-structured-bindings
UnitTests: Replace ties with structured bindings
2025-06-07 17:50:34 -05:00
Jordan Woyak
8b7669550f
Merge pull request #13454 from tygyh/Use-constants-DolphinQt-FifoAnalyzer
DolphinQt/FIFO/FIFOAnalyzer: Make parameters, arguments etc. constant
2025-06-07 17:50:08 -05:00
Jordan Woyak
46e66fe945
Merge pull request #13544 from tygyh/DolphinNoGUI-Replace-deprecated-signal-header
DolphinNoGUI: Apply style-alignment refactorings
2025-06-07 17:47:11 -05:00
Jordan Woyak
056ece6f29
Merge pull request #13697 from tygyh/AudioCommon/Remove-unused-includes
AudioCommon: Remove unused includes
2025-06-07 17:45:50 -05:00
Jordan Woyak
a07a2fe398
Merge pull request #13698 from tygyh/AudioCommon/Remove-unused-qualifiers-and-make-variables-constant
AudioCommon: Remove unused qualifiers and make variables constant
2025-06-07 17:45:33 -05:00
Jordan Woyak
5906512847 DolphinQt: Replace widespread SetQWidgetWindowDecorations calls with an event filter. 2025-06-07 16:15:34 -05:00
JMC47
52fcdde485
Merge pull request #13386 from iwubcode/resource_manager_system
VideoCommon: add resource manager, tracks resources to load assets in optimal way and manage memory
2025-06-07 15:51:34 -04:00
JMC47
5eb61024c6
Merge pull request #13740 from JoshuaVandaele/bsod-fix-i-hope
Host: Clean up device handle in all cases
2025-06-07 12:27:49 -04:00
Admiral H. Curtiss
a27b845514
Merge pull request #13710 from TryTwo/UI_Sliders_Update
Advanced Panel convert QSliders into ConfigSliders
2025-06-07 17:39:40 +02:00
Admiral H. Curtiss
1b1ca019a4
Merge pull request #13724 from SuperSamus/gamelist-properties-noduplicates
GameList: Prevent opening Properties multiple times for the same game
2025-06-07 17:24:50 +02:00
Joshua Vandaële
241834709b
Host: Clean up device handle 2025-06-07 16:55:45 +02:00
iwubcode
c3d3b81533 VideoCommon: remove 'GetByteSizeInMemory()' from custom asset, it is not needed anymore 2025-06-06 23:03:02 -05:00
iwubcode
774a84a953 VideoCommon: avoid race conditions with asset load/unload by moving the lock to the entire function, favor atomics for the memory/time getters 2025-06-06 23:03:02 -05:00
iwubcode
b3f50c969e VideoCommon: rename m_bytes_loaded in asset library to bytes_loaded 2025-06-06 23:03:02 -05:00
iwubcode
3b83907b88 VideoCommon: update CustomAsset's load time to be before the load occurs (this prevents issues where the load time might be incorrectly inflated by long load operations)
Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2025-06-06 23:03:02 -05:00
iwubcode
d940d62cae VideoCommon: watch texture pack folder for texture reloads (from dynamic input textures) 2025-06-06 23:03:02 -05:00
iwubcode
7afa9e6c6f VideoCommon: use CustomResourceManager in the texture cache and hook up to our hires textures 2025-06-06 23:03:02 -05:00
iwubcode
12d178a8df VideoCommon: initialize and shutdown the CustomResourceManager when the video thread initializes and shuts down 2025-06-06 23:03:02 -05:00
iwubcode
f910c1d934 Core: add CustomResourceManager to System 2025-06-06 23:03:02 -05:00
iwubcode
70abcb2030 VideoCommon: add resource manager and new asset loader; the resource manager uses a least recently used cache to determine which assets get priority for loading. Additionally, if the system is low on memory, assets will be purged with the less requested assets being the first to go. The loader is multithreaded now and loads assets as quickly as possible as long as memory is available
Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2025-06-06 23:03:02 -05:00
iwubcode
d8ea31ca46 VideoCommon: rename GameTextureAsset into TextureAsset and make it only contain CustomTextureData. Move validation and load logic to individual functions 2025-06-06 23:03:02 -05:00
iwubcode
2ae43324cb VideoCommon: move AssetMap to a types header file, so it can be pulled in without the DirectFilesystemAssetLibrary dependencies, the header will be expanded later 2025-06-06 23:03:02 -05:00
iwubcode
7d59c2743d Common: Add class 'FilesystemWatcher' that is used to watch paths and receive callbacks about filesystem level events for anything under that path 2025-06-06 23:03:02 -05:00
iwubcode
8113399b68 Externals: add watcher, a library used to watch a filesystem location for changes 2025-06-06 23:03:02 -05:00
iwubcode
bafe78203d VideoCommon: remove 'GetLastAssetWriteTime' and switch to a steady_clock for asset times 2025-06-06 23:03:02 -05:00
iwubcode
15f125ebee VideoCommon: change asset loading to return the number of bytes loaded instead of a pass/fail 2025-06-06 23:03:02 -05:00
iwubcode
316740daed VideoCommon: add 'Unload' functionality to CustomAsset 2025-06-06 23:03:02 -05:00
iwubcode
9ec69b5925 VideoCommon: add a handle to custom asset, this is an id that is only relevant for a particular game session but is slightly faster as a numeric value for lookups than the traditional asset id 2025-06-06 19:20:25 -05:00
iwubcode
d7de49ccf6 Core / VideoCommon: Remove original custom asset loader 2025-06-06 19:20:25 -05:00
Martino Fontana
2de9122b5f GameList: Prevent opening Properties multiple times for the same game 2025-06-04 23:11:09 +02:00
Dr. Dystopia
bae0e5f67a DolphinNoGUI: Make override explicit 2025-06-04 21:49:29 +02:00
Dr. Dystopia
2ae928ca79 DolphinNoGUI: Make parameters constant 2025-06-04 21:49:15 +02:00
Dr. Dystopia
f04f659710 DolphinNoGUI: Replace C-style cast with reinterpret_cast 2025-06-04 21:49:01 +02:00
Dr. Dystopia
ec1d659363 DolphinNoGUI: Make classes final 2025-06-04 21:48:53 +02:00
Dr. Dystopia
c37933932d DolphinNoGUI: Make variables constant 2025-06-04 21:48:40 +02:00
Dr. Dystopia
23af1e025b DolphinNoGUI: Make function static 2025-06-04 21:30:59 +02:00
Dr. Dystopia
135b6840e5 DolphinNoGUI: Remove unused include directives 2025-06-04 21:30:59 +02:00
Dr. Dystopia
e3df00b7f4 DolphinNoGUI: Make variables constexpr 2025-06-04 21:30:59 +02:00
Dr. Dystopia
71da0f2d24 DolphinNoGUI: Replace deprecated signal.h header 2025-06-04 21:30:59 +02:00
Dr. Dystopia
8192d9d2a9 Make parameters, arguments etc. constant 2025-05-31 20:57:54 +02:00
Dr. Dystopia
a6b04f53e0 AudioCommon: Remove unused qualifiers and make variables constant 2025-05-30 21:48:38 +02:00
TryTwo
a6a5e201b6 Qt Advanced Panel: Convert QSliders into ConfigSliders.
Part of the refactor into the config system.
2025-05-26 19:52:30 -07:00
Dr. Dystopia
7c237bbd7c AudioCommon: Remove unused includes 2025-05-25 10:30:41 +02:00
Dr. Dystopia
f240e20e3f Make overriding explicit and remove redundant virtual specifiers on overriding destructors - Core & UnitTests 2025-05-01 15:00:37 +02:00
Dr. Dystopia
096ab8c026 Replace ties with structured bindings - UnitTests 2024-08-20 15:09:44 +02:00
239 changed files with 1805 additions and 1509 deletions

3
.gitmodules vendored
View File

@ -84,6 +84,9 @@
[submodule "Externals/Vulkan-Headers"] [submodule "Externals/Vulkan-Headers"]
path = Externals/Vulkan-Headers path = Externals/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git url = https://github.com/KhronosGroup/Vulkan-Headers.git
[submodule "Externals/watcher/watcher"]
path = Externals/watcher/watcher
url = https://github.com/e-dant/watcher.git
[submodule "Externals/SFML/SFML"] [submodule "Externals/SFML/SFML"]
path = Externals/SFML/SFML path = Externals/SFML/SFML
url = https://github.com/SFML/SFML.git url = https://github.com/SFML/SFML.git

View File

@ -784,6 +784,8 @@ if (USE_RETRO_ACHIEVEMENTS)
add_subdirectory(Externals/rcheevos) add_subdirectory(Externals/rcheevos)
endif() endif()
add_subdirectory(Externals/watcher)
######################################## ########################################
# Pre-build events: Define configuration variables and write SCM info header # Pre-build events: Define configuration variables and write SCM info header
# #

4
Externals/watcher/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,4 @@
add_library(watcher INTERFACE IMPORTED GLOBAL)
set_target_properties(watcher PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/watcher/include
)

1
Externals/watcher/watcher vendored Submodule

@ -0,0 +1 @@
Subproject commit b03bdcfc11549df595b77239cefe2643943a3e2f

View File

@ -3,9 +3,7 @@
#pragma once #pragma once
#include <atomic>
#include <condition_variable> #include <condition_variable>
#include <mutex>
#include <thread> #include <thread>
#if defined(HAVE_ALSA) && HAVE_ALSA #if defined(HAVE_ALSA) && HAVE_ALSA

View File

@ -166,7 +166,8 @@ void UpdateSoundStream(Core::System& system)
if (sound_stream) if (sound_stream)
{ {
int volume = Config::Get(Config::MAIN_AUDIO_MUTED) ? 0 : Config::Get(Config::MAIN_AUDIO_VOLUME); int const volume =
Config::Get(Config::MAIN_AUDIO_MUTED) ? 0 : Config::Get(Config::MAIN_AUDIO_VOLUME);
sound_stream->SetVolume(volume); sound_stream->SetVolume(volume);
} }
} }
@ -192,7 +193,7 @@ void SetSoundStreamRunning(Core::System& system, bool running)
void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_samples) void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_samples)
{ {
SoundStream* sound_stream = system.GetSoundStream(); const SoundStream* const sound_stream = system.GetSoundStream();
if (!sound_stream) if (!sound_stream)
return; return;
@ -212,9 +213,9 @@ void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_s
void StartAudioDump(Core::System& system) void StartAudioDump(Core::System& system)
{ {
SoundStream* sound_stream = system.GetSoundStream(); const SoundStream* const sound_stream = system.GetSoundStream();
std::time_t start_time = std::time(nullptr); std::time_t const start_time = std::time(nullptr);
std::string path_prefix = File::GetUserPath(D_DUMPAUDIO_IDX) + SConfig::GetInstance().GetGameID(); std::string path_prefix = File::GetUserPath(D_DUMPAUDIO_IDX) + SConfig::GetInstance().GetGameID();
@ -232,7 +233,7 @@ void StartAudioDump(Core::System& system)
void StopAudioDump(Core::System& system) void StopAudioDump(Core::System& system)
{ {
SoundStream* sound_stream = system.GetSoundStream(); const SoundStream* const sound_stream = system.GetSoundStream();
if (!sound_stream) if (!sound_stream)
return; return;
@ -265,7 +266,7 @@ void DecreaseVolume(Core::System& system, unsigned short offset)
void ToggleMuteVolume(Core::System& system) void ToggleMuteVolume(Core::System& system)
{ {
bool isMuted = Config::Get(Config::MAIN_AUDIO_MUTED); bool const isMuted = Config::Get(Config::MAIN_AUDIO_MUTED);
Config::SetBaseOrCurrent(Config::MAIN_AUDIO_MUTED, !isMuted); Config::SetBaseOrCurrent(Config::MAIN_AUDIO_MUTED, !isMuted);
UpdateSoundStream(system); UpdateSoundStream(system);
} }

View File

@ -3,7 +3,6 @@
#pragma once #pragma once
#include <memory>
#include <string> #include <string>
#include <string_view> #include <string_view>
#include <vector> #include <vector>

View File

@ -10,7 +10,6 @@
#include "Common/Event.h" #include "Common/Event.h"
#include "Common/Logging/Log.h" #include "Common/Logging/Log.h"
#include "Common/ScopeGuard.h" #include "Common/ScopeGuard.h"
#include "Common/Thread.h"
#include "Core/Config/MainSettings.h" #include "Core/Config/MainSettings.h"
#ifdef _WIN32 #ifdef _WIN32
@ -23,7 +22,7 @@ constexpr u32 BUFFER_SAMPLES = 512;
long CubebStream::DataCallback(cubeb_stream* stream, void* user_data, const void* /*input_buffer*/, long CubebStream::DataCallback(cubeb_stream* stream, void* user_data, const void* /*input_buffer*/,
void* output_buffer, long num_frames) void* output_buffer, long num_frames)
{ {
auto* self = static_cast<CubebStream*>(user_data); const auto* const self = static_cast<CubebStream*>(user_data);
if (self->m_stereo) if (self->m_stereo)
self->m_mixer->Mix(static_cast<short*>(output_buffer), num_frames); self->m_mixer->Mix(static_cast<short*>(output_buffer), num_frames);
@ -44,7 +43,7 @@ CubebStream::CubebStream()
Common::Event sync_event; Common::Event sync_event;
m_work_queue.Push([this, &sync_event] { m_work_queue.Push([this, &sync_event] {
Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); });
auto result = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); auto const result = CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
m_coinit_success = result == S_OK; m_coinit_success = result == S_OK;
m_should_couninit = result == S_OK || result == S_FALSE; m_should_couninit = result == S_OK || result == S_FALSE;
}); });

View File

@ -3,8 +3,6 @@
#pragma once #pragma once
#include <cstddef>
#include <functional>
#include <memory> #include <memory>
#include <vector> #include <vector>

View File

@ -182,7 +182,8 @@ std::size_t Mixer::MixSurround(float* samples, std::size_t num_samples)
memset(samples, 0, num_samples * SURROUND_CHANNELS * sizeof(float)); memset(samples, 0, num_samples * SURROUND_CHANNELS * sizeof(float));
std::size_t needed_frames = m_surround_decoder.QueryFramesNeededForSurroundOutput(num_samples); std::size_t const needed_frames =
m_surround_decoder.QueryFramesNeededForSurroundOutput(num_samples);
constexpr std::size_t max_samples = 0x8000; constexpr std::size_t max_samples = 0x8000;
ASSERT_MSG(AUDIO, needed_frames <= max_samples, ASSERT_MSG(AUDIO, needed_frames <= max_samples,
@ -190,7 +191,7 @@ std::size_t Mixer::MixSurround(float* samples, std::size_t num_samples)
needed_frames, max_samples); needed_frames, max_samples);
std::array<s16, max_samples> buffer; std::array<s16, max_samples> buffer;
std::size_t available_frames = Mix(buffer.data(), static_cast<std::size_t>(needed_frames)); std::size_t const available_frames = Mix(buffer.data(), static_cast<std::size_t>(needed_frames));
if (available_frames != needed_frames) if (available_frames != needed_frames)
{ {
ERROR_LOG_FMT(AUDIO, ERROR_LOG_FMT(AUDIO,
@ -229,7 +230,7 @@ void Mixer::PushSamples(const s16* samples, std::size_t num_samples)
if (m_log_dsp_audio) if (m_log_dsp_audio)
{ {
const s32 sample_rate_divisor = m_dma_mixer.GetInputSampleRateDivisor(); const s32 sample_rate_divisor = m_dma_mixer.GetInputSampleRateDivisor();
auto volume = m_dma_mixer.GetVolume(); auto const volume = m_dma_mixer.GetVolume();
m_wave_writer_dsp.AddStereoSamplesBE(samples, static_cast<u32>(num_samples), m_wave_writer_dsp.AddStereoSamplesBE(samples, static_cast<u32>(num_samples),
sample_rate_divisor, volume.first, volume.second); sample_rate_divisor, volume.first, volume.second);
} }
@ -241,7 +242,7 @@ void Mixer::PushStreamingSamples(const s16* samples, std::size_t num_samples)
if (m_log_dtk_audio) if (m_log_dtk_audio)
{ {
const s32 sample_rate_divisor = m_streaming_mixer.GetInputSampleRateDivisor(); const s32 sample_rate_divisor = m_streaming_mixer.GetInputSampleRateDivisor();
auto volume = m_streaming_mixer.GetVolume(); auto const volume = m_streaming_mixer.GetVolume();
m_wave_writer_dtk.AddStereoSamplesBE(samples, static_cast<u32>(num_samples), m_wave_writer_dtk.AddStereoSamplesBE(samples, static_cast<u32>(num_samples),
sample_rate_divisor, volume.first, volume.second); sample_rate_divisor, volume.first, volume.second);
} }
@ -286,7 +287,8 @@ void Mixer::PushSkylanderPortalSamples(const u8* samples, std::size_t num_sample
{ {
for (std::size_t i = 0; i < num_samples; ++i) for (std::size_t i = 0; i < num_samples; ++i)
{ {
s16 sample = static_cast<u16>(samples[i * 2 + 1]) << 8 | static_cast<u16>(samples[i * 2]); s16 const sample =
static_cast<u16>(samples[i * 2 + 1]) << 8 | static_cast<u16>(samples[i * 2]);
samples_stereo[i * 2] = sample; samples_stereo[i * 2] = sample;
samples_stereo[i * 2 + 1] = sample; samples_stereo[i * 2 + 1] = sample;
} }
@ -335,7 +337,8 @@ void Mixer::StartLogDTKAudio(const std::string& filename)
{ {
if (!m_log_dtk_audio) if (!m_log_dtk_audio)
{ {
bool success = m_wave_writer_dtk.Start(filename, m_streaming_mixer.GetInputSampleRateDivisor()); bool const success =
m_wave_writer_dtk.Start(filename, m_streaming_mixer.GetInputSampleRateDivisor());
if (success) if (success)
{ {
m_log_dtk_audio = true; m_log_dtk_audio = true;
@ -372,7 +375,7 @@ void Mixer::StartLogDSPAudio(const std::string& filename)
{ {
if (!m_log_dsp_audio) if (!m_log_dsp_audio)
{ {
bool success = m_wave_writer_dsp.Start(filename, m_dma_mixer.GetInputSampleRateDivisor()); bool const success = m_wave_writer_dsp.Start(filename, m_dma_mixer.GetInputSampleRateDivisor());
if (success) if (success)
{ {
m_log_dsp_audio = true; m_log_dsp_audio = true;
@ -494,10 +497,10 @@ void Mixer::MixerFifo::Enqueue()
0.0002984010f, 0.0002102045f, 0.0001443499f, 0.0000961509f, 0.0000616906f, 0.0000377350f, 0.0002984010f, 0.0002102045f, 0.0001443499f, 0.0000961509f, 0.0000616906f, 0.0000377350f,
0.0000216492f, 0.0000113187f, 0.0000050749f, 0.0000016272f}; 0.0000216492f, 0.0000113187f, 0.0000050749f, 0.0000016272f};
const std::size_t head = m_queue_head.load(std::memory_order_acquire); std::size_t const head = m_queue_head.load(std::memory_order_acquire);
// Check if we run out of space in the circular queue. (rare) // Check if we run out of space in the circular queue. (rare)
std::size_t next_head = (head + 1) & GRANULE_QUEUE_MASK; std::size_t const next_head = (head + 1) & GRANULE_QUEUE_MASK;
if (next_head == m_queue_tail.load(std::memory_order_acquire)) if (next_head == m_queue_tail.load(std::memory_order_acquire))
{ {
WARN_LOG_FMT(AUDIO, WARN_LOG_FMT(AUDIO,

View File

@ -3,11 +3,9 @@
#pragma once #pragma once
#include <algorithm>
#include <array> #include <array>
#include <atomic> #include <atomic>
#include <bit> #include <bit>
#include <cmath>
#include "AudioCommon/SurroundDecoder.h" #include "AudioCommon/SurroundDecoder.h"
#include "AudioCommon/WaveFile.h" #include "AudioCommon/WaveFile.h"

View File

@ -76,7 +76,7 @@ static bool InitLibrary()
if (!InitFunctions()) if (!InitFunctions())
{ {
::FreeLibrary(s_openal_dll); FreeLibrary(s_openal_dll);
s_openal_dll = nullptr; s_openal_dll = nullptr;
return false; return false;
} }
@ -168,7 +168,7 @@ bool OpenALStream::SetRunning(bool running)
static ALenum CheckALError(const char* desc) static ALenum CheckALError(const char* desc)
{ {
ALenum err = palGetError(); ALenum const err = palGetError();
if (err != AL_NO_ERROR) if (err != AL_NO_ERROR)
{ {
@ -211,16 +211,16 @@ void OpenALStream::SoundLoop()
{ {
Common::SetCurrentThreadName("Audio thread - openal"); Common::SetCurrentThreadName("Audio thread - openal");
bool float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0; bool const float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0;
bool surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi(); bool const surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi();
bool use_surround = Config::ShouldUseDPL2Decoder() && surround_capable; bool use_surround = Config::ShouldUseDPL2Decoder() && surround_capable;
// As there is no extension to check for 32-bit fixed point support // As there is no extension to check for 32-bit fixed point support
// and we know that only a X-Fi with hardware OpenAL supports it, // and we know that only a X-Fi with hardware OpenAL supports it,
// we just check if one is being used. // we just check if one is being used.
bool fixed32_capable = IsCreativeXFi(); bool const fixed32_capable = IsCreativeXFi();
u32 frequency = m_mixer->GetSampleRate(); u32 const frequency = m_mixer->GetSampleRate();
u32 frames_per_buffer; u32 frames_per_buffer;
// Can't have zero samples per buffer // Can't have zero samples per buffer
@ -288,12 +288,12 @@ void OpenALStream::SoundLoop()
num_buffers_queued -= num_buffers_processed; num_buffers_queued -= num_buffers_processed;
} }
unsigned int min_frames = frames_per_buffer; unsigned int const min_frames = frames_per_buffer;
if (use_surround) if (use_surround)
{ {
std::array<float, OAL_MAX_FRAMES * SURROUND_CHANNELS> dpl2; std::array<float, OAL_MAX_FRAMES * SURROUND_CHANNELS> dpl2;
u32 rendered_frames = static_cast<u32>(m_mixer->MixSurround(dpl2.data(), min_frames)); u32 const rendered_frames = static_cast<u32>(m_mixer->MixSurround(dpl2.data(), min_frames));
if (rendered_frames < min_frames) if (rendered_frames < min_frames)
continue; continue;
@ -351,7 +351,8 @@ void OpenALStream::SoundLoop()
} }
else else
{ {
u32 rendered_frames = static_cast<u32>(m_mixer->Mix(m_realtime_buffer.data(), min_frames)); u32 const rendered_frames =
static_cast<u32>(m_mixer->Mix(m_realtime_buffer.data(), min_frames));
if (!rendered_frames) if (!rendered_frames)
continue; continue;

View File

@ -7,9 +7,6 @@
#include "AudioCommon/SoundStream.h" #include "AudioCommon/SoundStream.h"
#include "Common/Event.h" #include "Common/Event.h"
#include "Core/Core.h"
#include "Core/HW/AudioInterface.h"
#include "Core/HW/SystemTimers.h"
#ifdef _WIN32 #ifdef _WIN32
#include <al.h> #include <al.h>

View File

@ -8,7 +8,6 @@
#endif #endif
#include "AudioCommon/SoundStream.h" #include "AudioCommon/SoundStream.h"
#include "Common/CommonTypes.h"
#include "Common/Flag.h" #include "Common/Flag.h"
#include "Common/Thread.h" #include "Common/Thread.h"

View File

@ -32,7 +32,7 @@ size_t SurroundDecoder::QueryFramesNeededForSurroundOutput(const size_t output_f
if (m_decoded_fifo.size() < output_frames * SURROUND_CHANNELS) if (m_decoded_fifo.size() < output_frames * SURROUND_CHANNELS)
{ {
// Output stereo frames needed to have at least the desired number of surround frames // Output stereo frames needed to have at least the desired number of surround frames
size_t frames_needed = output_frames - m_decoded_fifo.size() / SURROUND_CHANNELS; size_t const frames_needed = output_frames - m_decoded_fifo.size() / SURROUND_CHANNELS;
return frames_needed + m_frame_block_size - frames_needed % m_frame_block_size; return frames_needed + m_frame_block_size - frames_needed % m_frame_block_size;
} }

View File

@ -8,7 +8,6 @@
// clang-format off // clang-format off
#include <Audioclient.h> #include <Audioclient.h>
#include <mmdeviceapi.h> #include <mmdeviceapi.h>
#include <devpkey.h>
#include <functiondiscoverykeys_devpkey.h> #include <functiondiscoverykeys_devpkey.h>
#include <wil/resource.h> #include <wil/resource.h>
// clang-format on // clang-format on
@ -159,8 +158,9 @@ ComPtr<IMMDevice> WASAPIStream::GetDeviceByName(std::string_view name)
bool WASAPIStream::Init() bool WASAPIStream::Init()
{ {
ASSERT(m_enumerator == nullptr); ASSERT(m_enumerator == nullptr);
HRESULT result = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_INPROC_SERVER, HRESULT const result =
IID_PPV_ARGS(m_enumerator.GetAddressOf())); CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(m_enumerator.GetAddressOf()));
if (!HandleWinAPI("Failed to create MMDeviceEnumerator", result)) if (!HandleWinAPI("Failed to create MMDeviceEnumerator", result))
return false; return false;

View File

@ -32,7 +32,7 @@ class WASAPIStream final : public SoundStream
#ifdef _WIN32 #ifdef _WIN32
public: public:
explicit WASAPIStream(); explicit WASAPIStream();
~WASAPIStream(); ~WASAPIStream() override;
bool Init() override; bool Init() override;
bool SetRunning(bool running) override; bool SetRunning(bool running) override;

View File

@ -31,7 +31,7 @@ public:
{ {
m_active_block = &m_output_result.blocks.emplace_back(base_addr); m_active_block = &m_output_result.blocks.emplace_back(base_addr);
} }
virtual ~GekkoIRPlugin() = default; ~GekkoIRPlugin() override = default;
void OnDirectivePre(GekkoDirective directive) override; void OnDirectivePre(GekkoDirective directive) override;
void OnDirectivePost(GekkoDirective directive) override; void OnDirectivePost(GekkoDirective directive) override;

View File

@ -64,6 +64,8 @@ add_library(common
FatFsUtil.h FatFsUtil.h
FileSearch.cpp FileSearch.cpp
FileSearch.h FileSearch.h
FilesystemWatcher.cpp
FilesystemWatcher.h
FileUtil.cpp FileUtil.cpp
FileUtil.h FileUtil.h
FixedSizeQueue.h FixedSizeQueue.h
@ -184,6 +186,7 @@ PRIVATE
FatFs FatFs
Iconv::Iconv Iconv::Iconv
spng::spng spng::spng
watcher
${VTUNE_LIBRARIES} ${VTUNE_LIBRARIES}
) )

View File

@ -46,8 +46,7 @@ public:
ASSERT(!mbedtls_aes_setkey_dec(&ctx, key, 128)); ASSERT(!mbedtls_aes_setkey_dec(&ctx, key, 128));
} }
virtual bool Crypt(const u8* iv, u8* iv_out, const u8* buf_in, u8* buf_out, bool Crypt(const u8* iv, u8* iv_out, const u8* buf_in, u8* buf_out, size_t len) const override
size_t len) const override
{ {
std::array<u8, BLOCK_SIZE> iv_tmp{}; std::array<u8, BLOCK_SIZE> iv_tmp{};
if (iv) if (iv)
@ -206,8 +205,7 @@ public:
_mm_storeu_si128(&((__m128i*)buf_out)[d], block[d]); _mm_storeu_si128(&((__m128i*)buf_out)[d], block[d]);
} }
virtual bool Crypt(const u8* iv, u8* iv_out, const u8* buf_in, u8* buf_out, bool Crypt(const u8* iv, u8* iv_out, const u8* buf_in, u8* buf_out, size_t len) const override
size_t len) const override
{ {
if (len % BLOCK_SIZE) if (len % BLOCK_SIZE)
return false; return false;

View File

@ -41,18 +41,18 @@ public:
mbedtls_sha1_init(&ctx); mbedtls_sha1_init(&ctx);
ASSERT(!mbedtls_sha1_starts_ret(&ctx)); ASSERT(!mbedtls_sha1_starts_ret(&ctx));
} }
~ContextMbed() { mbedtls_sha1_free(&ctx); } ~ContextMbed() override { mbedtls_sha1_free(&ctx); }
virtual void Update(const u8* msg, size_t len) override void Update(const u8* msg, size_t len) override
{ {
ASSERT(!mbedtls_sha1_update_ret(&ctx, msg, len)); ASSERT(!mbedtls_sha1_update_ret(&ctx, msg, len));
} }
virtual Digest Finish() override Digest Finish() override
{ {
Digest digest; Digest digest;
ASSERT(!mbedtls_sha1_finish_ret(&ctx, digest.data())); ASSERT(!mbedtls_sha1_finish_ret(&ctx, digest.data()));
return digest; return digest;
} }
virtual bool HwAccelerated() const override { return false; } bool HwAccelerated() const override { return false; }
private: private:
mbedtls_sha1_context ctx{}; mbedtls_sha1_context ctx{};
@ -204,7 +204,7 @@ private:
} }
ATTRIBUTE_TARGET("sha") ATTRIBUTE_TARGET("sha")
virtual void ProcessBlock(const u8* msg) override void ProcessBlock(const u8* msg) override
{ {
// There are 80 rounds with 4 bytes per round, giving 0x140 byte work space, but we can keep // There are 80 rounds with 4 bytes per round, giving 0x140 byte work space, but we can keep
// active state in just 0x40 bytes. // active state in just 0x40 bytes.
@ -248,7 +248,7 @@ private:
// clang-format on // clang-format on
} }
virtual Digest GetDigest() override Digest GetDigest() override
{ {
Digest digest; Digest digest;
_mm_storeu_si128((__m128i*)&digest[0], byterev_16B(state[0])); _mm_storeu_si128((__m128i*)&digest[0], byterev_16B(state[0]));
@ -257,7 +257,7 @@ private:
return digest; return digest;
} }
virtual bool HwAccelerated() const override { return true; } bool HwAccelerated() const override { return true; }
std::array<XmmReg, 2> state{}; std::array<XmmReg, 2> state{};
}; };

View File

@ -0,0 +1,67 @@
// Copyright 2025 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "Common/FilesystemWatcher.h"
#include <wtr/watcher.hpp>
#include "Common/Logging/Log.h"
#include "Common/StringUtil.h"
namespace Common
{
FilesystemWatcher::FilesystemWatcher() = default;
FilesystemWatcher::~FilesystemWatcher() = default;
void FilesystemWatcher::Watch(const std::string& path)
{
const auto [iter, inserted] = m_watched_paths.try_emplace(path, nullptr);
if (inserted)
{
iter->second = std::make_unique<wtr::watch>(path, [this](wtr::event e) {
const auto watched_path = PathToString(e.path_name);
if (e.path_type == wtr::event::path_type::watcher)
{
if (watched_path.starts_with('e'))
ERROR_LOG_FMT(COMMON, "Filesystem watcher: '{}'", watched_path);
else if (watched_path.starts_with('w'))
WARN_LOG_FMT(COMMON, "Filesystem watcher: '{}'", watched_path);
return;
}
if (e.effect_type == wtr::event::effect_type::create)
{
const auto path = WithUnifiedPathSeparators(watched_path);
PathAdded(path);
}
else if (e.effect_type == wtr::event::effect_type::modify)
{
const auto path = WithUnifiedPathSeparators(watched_path);
PathModified(path);
}
else if (e.effect_type == wtr::event::effect_type::rename)
{
if (!e.associated)
{
WARN_LOG_FMT(COMMON, "Rename on path '{}' seen without association!", watched_path);
return;
}
const auto old_path = WithUnifiedPathSeparators(watched_path);
const auto new_path = WithUnifiedPathSeparators(PathToString(e.associated->path_name));
PathRenamed(old_path, new_path);
}
else if (e.effect_type == wtr::event::effect_type::destroy)
{
const auto path = WithUnifiedPathSeparators(watched_path);
PathDeleted(path);
}
});
}
}
void FilesystemWatcher::Unwatch(const std::string& path)
{
m_watched_paths.erase(path);
}
} // namespace Common

View File

@ -0,0 +1,47 @@
// Copyright 2025 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <map>
#include <memory>
#include <string>
#include <string_view>
namespace wtr
{
inline namespace watcher
{
class watch;
}
} // namespace wtr
namespace Common
{
// A class that can watch a path and receive callbacks
// when files or directories underneath that path receive events
class FilesystemWatcher
{
public:
FilesystemWatcher();
virtual ~FilesystemWatcher();
void Watch(const std::string& path);
void Unwatch(const std::string& path);
private:
// A new file or folder was added to one of the watched paths
virtual void PathAdded(std::string_view path) {}
// A file or folder was modified in one of the watched paths
virtual void PathModified(std::string_view path) {}
// A file or folder was renamed in one of the watched paths
virtual void PathRenamed(std::string_view old_path, std::string_view new_path) {}
// A file or folder was deleted in one of the watched paths
virtual void PathDeleted(std::string_view path) {}
std::map<std::string, std::unique_ptr<wtr::watch>> m_watched_paths;
};
} // namespace Common

View File

@ -10,9 +10,9 @@
class GLContextWGL final : public GLContext class GLContextWGL final : public GLContext
{ {
public: public:
~GLContextWGL(); ~GLContextWGL() override;
bool IsHeadless() const; bool IsHeadless() const override;
std::unique_ptr<GLContext> CreateSharedContext() override; std::unique_ptr<GLContext> CreateSharedContext() override;

View File

@ -101,7 +101,7 @@ class HostDisassemblerBochs final : public HostDisassembler
{ {
public: public:
explicit HostDisassemblerBochs(); explicit HostDisassemblerBochs();
~HostDisassemblerBochs() = default; ~HostDisassemblerBochs() override = default;
private: private:
disassembler m_disasm; disassembler m_disasm;

View File

@ -9,7 +9,7 @@ class ConsoleListener : public Common::Log::LogListener
{ {
public: public:
ConsoleListener(); ConsoleListener();
~ConsoleListener(); ~ConsoleListener() override;
void Log(Common::Log::LogLevel level, const char* text) override; void Log(Common::Log::LogLevel level, const char* text) override;

View File

@ -20,7 +20,7 @@ public:
explicit DolReader(const std::string& filename); explicit DolReader(const std::string& filename);
explicit DolReader(File::IOFile file); explicit DolReader(File::IOFile file);
explicit DolReader(std::vector<u8> buffer); explicit DolReader(std::vector<u8> buffer);
~DolReader(); ~DolReader() override;
bool IsValid() const override { return m_is_valid; } bool IsValid() const override { return m_is_valid; }
bool IsWii() const override { return m_is_wii; } bool IsWii() const override { return m_is_wii; }

View File

@ -28,7 +28,7 @@ public:
explicit ElfReader(const std::string& filename); explicit ElfReader(const std::string& filename);
explicit ElfReader(File::IOFile file); explicit ElfReader(File::IOFile file);
explicit ElfReader(std::vector<u8> buffer); explicit ElfReader(std::vector<u8> buffer);
~ElfReader(); ~ElfReader() override;
u32 Read32(int off) const { return base32[off >> 2]; } u32 Read32(int off) const { return base32[off >> 2]; }
// Quick accessors // Quick accessors
ElfType GetType() const { return (ElfType)(header->e_type); } ElfType GetType() const { return (ElfType)(header->e_type); }

View File

@ -82,7 +82,6 @@
#include "InputCommon/ControllerInterface/ControllerInterface.h" #include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/GCAdapter.h" #include "InputCommon/GCAdapter.h"
#include "VideoCommon/Assets/CustomAssetLoader.h"
#include "VideoCommon/AsyncRequests.h" #include "VideoCommon/AsyncRequests.h"
#include "VideoCommon/Fifo.h" #include "VideoCommon/Fifo.h"
#include "VideoCommon/FrameDumper.h" #include "VideoCommon/FrameDumper.h"
@ -528,9 +527,6 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
FreeLook::LoadInputConfig(); FreeLook::LoadInputConfig();
system.GetCustomAssetLoader().Init();
Common::ScopeGuard asset_loader_guard([&system] { system.GetCustomAssetLoader().Shutdown(); });
system.GetMovie().Init(*boot); system.GetMovie().Init(*boot);
Common::ScopeGuard movie_guard([&system] { system.GetMovie().Shutdown(); }); Common::ScopeGuard movie_guard([&system] { system.GetMovie().Shutdown(); });

View File

@ -132,7 +132,7 @@ class OSThreadView : public Common::Debug::ThreadView
{ {
public: public:
explicit OSThreadView(const Core::CPUThreadGuard& guard, u32 addr); explicit OSThreadView(const Core::CPUThreadGuard& guard, u32 addr);
~OSThreadView() = default; ~OSThreadView() override = default;
const OSThread& Data() const; const OSThread& Data() const;

View File

@ -220,7 +220,7 @@ class FifoPlayer::CPUCore final : public CPUCoreBase
public: public:
explicit CPUCore(FifoPlayer* parent) : m_parent(parent) {} explicit CPUCore(FifoPlayer* parent) : m_parent(parent) {}
CPUCore(const CPUCore&) = delete; CPUCore(const CPUCore&) = delete;
~CPUCore() {} ~CPUCore() override {}
CPUCore& operator=(const CPUCore&) = delete; CPUCore& operator=(const CPUCore&) = delete;
void Init() override void Init() override

View File

@ -157,7 +157,7 @@ class VAListStruct : public VAList
{ {
public: public:
explicit VAListStruct(const Core::CPUThreadGuard& guard, u32 address); explicit VAListStruct(const Core::CPUThreadGuard& guard, u32 address);
~VAListStruct() = default; ~VAListStruct() override = default;
private: private:
struct svr4_va_list struct svr4_va_list

View File

@ -28,7 +28,7 @@ public:
DSPHLE(DSPHLE&& other) = delete; DSPHLE(DSPHLE&& other) = delete;
DSPHLE& operator=(const DSPHLE& other) = delete; DSPHLE& operator=(const DSPHLE& other) = delete;
DSPHLE& operator=(DSPHLE&& other) = delete; DSPHLE& operator=(DSPHLE&& other) = delete;
~DSPHLE(); ~DSPHLE() override;
bool Initialize(bool wii, bool dsp_thread) override; bool Initialize(bool wii, bool dsp_thread) override;
void Shutdown() override; void Shutdown() override;

View File

@ -27,7 +27,7 @@ public:
AESndAccelerator(AESndAccelerator&&) = delete; AESndAccelerator(AESndAccelerator&&) = delete;
AESndAccelerator& operator=(const AESndAccelerator&) = delete; AESndAccelerator& operator=(const AESndAccelerator&) = delete;
AESndAccelerator& operator=(AESndAccelerator&&) = delete; AESndAccelerator& operator=(AESndAccelerator&&) = delete;
~AESndAccelerator(); ~AESndAccelerator() override;
protected: protected:
void OnRawReadEndException() override {} void OnRawReadEndException() override {}

View File

@ -129,7 +129,7 @@ public:
HLEAccelerator(HLEAccelerator&&) = delete; HLEAccelerator(HLEAccelerator&&) = delete;
HLEAccelerator& operator=(const HLEAccelerator&) = delete; HLEAccelerator& operator=(const HLEAccelerator&) = delete;
HLEAccelerator& operator=(HLEAccelerator&&) = delete; HLEAccelerator& operator=(HLEAccelerator&&) = delete;
~HLEAccelerator() = default; ~HLEAccelerator() override = default;
PB_TYPE* acc_pb = nullptr; PB_TYPE* acc_pb = nullptr;

View File

@ -20,7 +20,7 @@ class DSPLLE : public DSPEmulator
{ {
public: public:
DSPLLE(); DSPLLE();
~DSPLLE(); ~DSPLLE() override;
bool Initialize(bool wii, bool dsp_thread) override; bool Initialize(bool wii, bool dsp_thread) override;
void Shutdown() override; void Shutdown() override;

View File

@ -18,7 +18,7 @@ class CEXIAgp : public IEXIDevice
{ {
public: public:
CEXIAgp(Core::System& system, const Slot slot); CEXIAgp(Core::System& system, const Slot slot);
virtual ~CEXIAgp() override; ~CEXIAgp() override;
bool IsPresent() const override { return true; } bool IsPresent() const override { return true; }
void ImmWrite(u32 _uData, u32 _uSize) override; void ImmWrite(u32 _uData, u32 _uSize) override;
u32 ImmRead(u32 _uSize) override; u32 ImmRead(u32 _uSize) override;

View File

@ -216,7 +216,7 @@ class CEXIETHERNET : public IEXIDevice
{ {
public: public:
CEXIETHERNET(Core::System& system, BBADeviceType type); CEXIETHERNET(Core::System& system, BBADeviceType type);
virtual ~CEXIETHERNET(); ~CEXIETHERNET() override;
void SetCS(int cs) override; void SetCS(int cs) override;
bool IsPresent() const override; bool IsPresent() const override;
bool IsInterruptSet() override; bool IsInterruptSet() override;

View File

@ -18,7 +18,7 @@ class CEXIMic : public IEXIDevice
{ {
public: public:
CEXIMic(Core::System& system, const int index); CEXIMic(Core::System& system, const int index);
virtual ~CEXIMic(); ~CEXIMic() override;
void SetCS(int cs) override; void SetCS(int cs) override;
bool IsInterruptSet() override; bool IsInterruptSet() override;
bool IsPresent() const override; bool IsPresent() const override;

View File

@ -33,7 +33,7 @@ class CEXIModem : public IEXIDevice
{ {
public: public:
CEXIModem(Core::System& system, ModemDeviceType type); CEXIModem(Core::System& system, ModemDeviceType type);
virtual ~CEXIModem(); ~CEXIModem() override;
void SetCS(int cs) override; void SetCS(int cs) override;
bool IsPresent() const override; bool IsPresent() const override;
bool IsInterruptSet() override; bool IsInterruptSet() override;
@ -136,13 +136,13 @@ private:
TAPServerNetworkInterface(CEXIModem* modem_ref, const std::string& destination); TAPServerNetworkInterface(CEXIModem* modem_ref, const std::string& destination);
public: public:
virtual bool Activate() override; bool Activate() override;
virtual void Deactivate() override; void Deactivate() override;
virtual bool IsActivated() override; bool IsActivated() override;
virtual bool SendAndRemoveAllHDLCFrames(std::string* send_buffer) override; bool SendAndRemoveAllHDLCFrames(std::string* send_buffer) override;
virtual bool RecvInit() override; bool RecvInit() override;
virtual void RecvStart() override; void RecvStart() override;
virtual void RecvStop() override; void RecvStop() override;
private: private:
TAPServerConnection m_tapserver_if; TAPServerConnection m_tapserver_if;

View File

@ -24,7 +24,7 @@ class GCMemcardDirectory : public MemoryCardBase
public: public:
GCMemcardDirectory(const std::string& directory, ExpansionInterface::Slot slot, GCMemcardDirectory(const std::string& directory, ExpansionInterface::Slot slot,
const Memcard::HeaderData& header_data, u32 game_id); const Memcard::HeaderData& header_data, u32 game_id);
~GCMemcardDirectory(); ~GCMemcardDirectory() override;
GCMemcardDirectory(const GCMemcardDirectory&) = delete; GCMemcardDirectory(const GCMemcardDirectory&) = delete;
GCMemcardDirectory& operator=(const GCMemcardDirectory&) = delete; GCMemcardDirectory& operator=(const GCMemcardDirectory&) = delete;

View File

@ -19,7 +19,7 @@ class MemoryCard : public MemoryCardBase
public: public:
MemoryCard(const std::string& filename, ExpansionInterface::Slot card_slot, MemoryCard(const std::string& filename, ExpansionInterface::Slot card_slot,
u16 size_mbits = Memcard::MBIT_SIZE_MEMORY_CARD_2043); u16 size_mbits = Memcard::MBIT_SIZE_MEMORY_CARD_2043);
~MemoryCard(); ~MemoryCard() override;
void FlushThread(); void FlushThread();
void MakeDirty(); void MakeDirty();

View File

@ -39,7 +39,7 @@ class ConstantHandlingMethod : public ReadHandlingMethod<T>
{ {
public: public:
explicit ConstantHandlingMethod(T value) : value_(value) {} explicit ConstantHandlingMethod(T value) : value_(value) {}
virtual ~ConstantHandlingMethod() = default; ~ConstantHandlingMethod() override = default;
void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override
{ {
v.VisitConstant(value_); v.VisitConstant(value_);
@ -62,7 +62,7 @@ class NopHandlingMethod : public WriteHandlingMethod<T>
{ {
public: public:
NopHandlingMethod() {} NopHandlingMethod() {}
virtual ~NopHandlingMethod() = default; ~NopHandlingMethod() override = default;
void AcceptWriteVisitor(WriteHandlingMethodVisitor<T>& v) const override { v.VisitNop(); } void AcceptWriteVisitor(WriteHandlingMethodVisitor<T>& v) const override { v.VisitNop(); }
}; };
template <typename T> template <typename T>
@ -79,7 +79,7 @@ class DirectHandlingMethod : public ReadHandlingMethod<T>, public WriteHandlingM
{ {
public: public:
DirectHandlingMethod(T* addr, u32 mask) : addr_(addr), mask_(mask) {} DirectHandlingMethod(T* addr, u32 mask) : addr_(addr), mask_(mask) {}
virtual ~DirectHandlingMethod() = default; ~DirectHandlingMethod() override = default;
void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override
{ {
v.VisitDirect(addr_, mask_); v.VisitDirect(addr_, mask_);
@ -122,7 +122,7 @@ public:
{ {
} }
virtual ~ComplexHandlingMethod() = default; ~ComplexHandlingMethod() override = default;
void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override void AcceptReadVisitor(ReadHandlingMethodVisitor<T>& v) const override
{ {
v.VisitComplex(&read_lambda_); v.VisitComplex(&read_lambda_);

View File

@ -21,7 +21,7 @@ class CSIDevice_GBAEmu final : public ISIDevice
{ {
public: public:
CSIDevice_GBAEmu(Core::System& system, SIDevices device, int device_number); CSIDevice_GBAEmu(Core::System& system, SIDevices device, int device_number);
~CSIDevice_GBAEmu(); ~CSIDevice_GBAEmu() override;
int RunBuffer(u8* buffer, int request_length) override; int RunBuffer(u8* buffer, int request_length) override;
int TransferInterval() override; int TransferInterval() override;

View File

@ -120,7 +120,7 @@ protected:
using EncryptedExtension::EncryptedExtension; using EncryptedExtension::EncryptedExtension;
private: private:
void UpdateEncryptionKey() final override; void UpdateEncryptionKey() final;
}; };
class Extension3rdParty : public EncryptedExtension class Extension3rdParty : public EncryptedExtension
@ -129,7 +129,7 @@ protected:
using EncryptedExtension::EncryptedExtension; using EncryptedExtension::EncryptedExtension;
private: private:
void UpdateEncryptionKey() final override; void UpdateEncryptionKey() final;
}; };
} // namespace WiimoteEmu } // namespace WiimoteEmu

View File

@ -137,7 +137,7 @@ public:
static constexpr const char* SIDEWAYS_OPTION = "Sideways Wiimote"; static constexpr const char* SIDEWAYS_OPTION = "Sideways Wiimote";
explicit Wiimote(unsigned int index); explicit Wiimote(unsigned int index);
~Wiimote(); ~Wiimote() override;
std::string GetName() const override; std::string GetName() const override;

View File

@ -34,7 +34,7 @@ class WiimoteScannerHidapi final : public WiimoteScannerBackend
{ {
public: public:
WiimoteScannerHidapi(); WiimoteScannerHidapi();
~WiimoteScannerHidapi(); ~WiimoteScannerHidapi() override;
bool IsReady() const override; bool IsReady() const override;
void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override; void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override;
void Update() override {} // not needed for hidapi void Update() override {} // not needed for hidapi

View File

@ -233,7 +233,7 @@ class HotkeyManager : public ControllerEmu::EmulatedController
{ {
public: public:
HotkeyManager(); HotkeyManager();
~HotkeyManager(); ~HotkeyManager() override;
void GetInput(HotkeyStatus* hk, bool ignore_focus); void GetInput(HotkeyStatus* hk, bool ignore_focus);
std::string GetName() const override; std::string GetName() const override;

View File

@ -234,7 +234,7 @@ public:
ESDevice(ESDevice&& other) = delete; ESDevice(ESDevice&& other) = delete;
ESDevice& operator=(const ESDevice& other) = delete; ESDevice& operator=(const ESDevice& other) = delete;
ESDevice& operator=(ESDevice&& other) = delete; ESDevice& operator=(ESDevice&& other) = delete;
~ESDevice(); ~ESDevice() override;
static void InitializeEmulationState(CoreTiming::CoreTimingManager& core_timing); static void InitializeEmulationState(CoreTiming::CoreTimingManager& core_timing);
static void FinalizeEmulationState(); static void FinalizeEmulationState();

View File

@ -117,7 +117,7 @@ class FSDevice final : public EmulationDevice
{ {
public: public:
FSDevice(EmulationKernel& ios, FSCore& core, const std::string& device_name); FSDevice(EmulationKernel& ios, FSCore& core, const std::string& device_name);
~FSDevice(); ~FSDevice() override;
void DoState(PointerWrap& p) override; void DoState(PointerWrap& p) override;

View File

@ -23,7 +23,7 @@ class HostFileSystem final : public FileSystem
{ {
public: public:
HostFileSystem(const std::string& root_path, std::vector<NandRedirect> nand_redirects = {}); HostFileSystem(const std::string& root_path, std::vector<NandRedirect> nand_redirects = {});
~HostFileSystem(); ~HostFileSystem() override;
void DoState(PointerWrap& p) override; void DoState(PointerWrap& p) override;

View File

@ -153,7 +153,7 @@ class EmulationKernel final : public Kernel
{ {
public: public:
EmulationKernel(Core::System& system, u64 ios_title_id); EmulationKernel(Core::System& system, u64 ios_title_id);
~EmulationKernel(); ~EmulationKernel() override;
// Get a resource manager by name. // Get a resource manager by name.
// This only works for devices which are part of the device map. // This only works for devices which are part of the device map.

View File

@ -84,7 +84,7 @@ class NetSSLDevice : public EmulationDevice
public: public:
NetSSLDevice(EmulationKernel& ios, const std::string& device_name); NetSSLDevice(EmulationKernel& ios, const std::string& device_name);
virtual ~NetSSLDevice(); ~NetSSLDevice() override;
std::optional<IPCReply> IOCtl(const IOCtlRequest& request) override; std::optional<IPCReply> IOCtl(const IOCtlRequest& request) override;
std::optional<IPCReply> IOCtlV(const IOCtlVRequest& request) override; std::optional<IPCReply> IOCtlV(const IOCtlVRequest& request) override;

View File

@ -41,7 +41,7 @@ class BluetoothEmuDevice final : public BluetoothBaseDevice
public: public:
BluetoothEmuDevice(EmulationKernel& ios, const std::string& device_name); BluetoothEmuDevice(EmulationKernel& ios, const std::string& device_name);
virtual ~BluetoothEmuDevice(); ~BluetoothEmuDevice() override;
std::optional<IPCReply> Close(u32 fd) override; std::optional<IPCReply> Close(u32 fd) override;
std::optional<IPCReply> IOCtlV(const IOCtlVRequest& request) override; std::optional<IPCReply> IOCtlV(const IOCtlVRequest& request) override;

View File

@ -73,7 +73,7 @@ class SkylanderUSB final : public Device
{ {
public: public:
SkylanderUSB(); SkylanderUSB();
~SkylanderUSB(); ~SkylanderUSB() override;
DeviceDescriptor GetDeviceDescriptor() const override; DeviceDescriptor GetDeviceDescriptor() const override;
std::vector<ConfigDescriptor> GetConfigurations() const override; std::vector<ConfigDescriptor> GetConfigurations() const override;
std::vector<InterfaceDescriptor> GetInterfaces(u8 config) const override; std::vector<InterfaceDescriptor> GetInterfaces(u8 config) const override;

View File

@ -78,8 +78,8 @@ std::string USBHost::GetDeviceNameFromVIDPID(u16 vid, u16 pid)
libusb_get_string_descriptor_ascii(handle, desc.iProduct, buffer, sizeof(buffer)) > 0) libusb_get_string_descriptor_ascii(handle, desc.iProduct, buffer, sizeof(buffer)) > 0)
{ {
device_name = reinterpret_cast<char*>(buffer); device_name = reinterpret_cast<char*>(buffer);
libusb_close(handle);
} }
libusb_close(handle);
} }
return false; return false;
} }

View File

@ -25,7 +25,7 @@ class USBHost : public EmulationDevice
{ {
public: public:
USBHost(EmulationKernel& ios, const std::string& device_name); USBHost(EmulationKernel& ios, const std::string& device_name);
virtual ~USBHost(); ~USBHost() override;
std::optional<IPCReply> Open(const OpenRequest& request) override; std::optional<IPCReply> Open(const OpenRequest& request) override;

View File

@ -27,7 +27,7 @@ class LibusbDevice final : public Device
{ {
public: public:
LibusbDevice(libusb_device* device, const libusb_device_descriptor& device_descriptor); LibusbDevice(libusb_device* device, const libusb_device_descriptor& device_descriptor);
~LibusbDevice(); ~LibusbDevice() override;
DeviceDescriptor GetDeviceDescriptor() const override; DeviceDescriptor GetDeviceDescriptor() const override;
std::vector<ConfigDescriptor> GetConfigurations() const override; std::vector<ConfigDescriptor> GetConfigurations() const override;
std::vector<InterfaceDescriptor> GetInterfaces(u8 config) const override; std::vector<InterfaceDescriptor> GetInterfaces(u8 config) const override;

View File

@ -116,7 +116,7 @@ public:
NetPlayClient(const std::string& address, const u16 port, NetPlayUI* dialog, NetPlayClient(const std::string& address, const u16 port, NetPlayUI* dialog,
const std::string& name, const NetTraversalConfig& traversal_config); const std::string& name, const NetTraversalConfig& traversal_config);
~NetPlayClient(); ~NetPlayClient() override;
std::vector<const Player*> GetPlayers(); std::vector<const Player*> GetPlayers();
const NetSettings& GetNetSettings() const; const NetSettings& GetNetSettings() const;

View File

@ -44,7 +44,7 @@ public:
NetPlayServer(u16 port, bool forward_port, NetPlayUI* dialog, NetPlayServer(u16 port, bool forward_port, NetPlayUI* dialog,
const NetTraversalConfig& traversal_config); const NetTraversalConfig& traversal_config);
~NetPlayServer(); ~NetPlayServer() override;
bool ChangeGame(const SyncIdentifier& sync_identifier, const std::string& netplay_name); bool ChangeGame(const SyncIdentifier& sync_identifier, const std::string& netplay_name);
bool ComputeGameDigest(const SyncIdentifier& sync_identifier); bool ComputeGameDigest(const SyncIdentifier& sync_identifier);

View File

@ -86,7 +86,7 @@ class PCAPSSLCaptureLogger final : public NetworkCaptureLogger
{ {
public: public:
PCAPSSLCaptureLogger(); PCAPSSLCaptureLogger();
~PCAPSSLCaptureLogger(); ~PCAPSSLCaptureLogger() override;
void OnNewSocket(s32 socket) override; void OnNewSocket(s32 socket) override;

View File

@ -31,7 +31,7 @@ public:
CachedInterpreter(CachedInterpreter&&) = delete; CachedInterpreter(CachedInterpreter&&) = delete;
CachedInterpreter& operator=(const CachedInterpreter&) = delete; CachedInterpreter& operator=(const CachedInterpreter&) = delete;
CachedInterpreter& operator=(CachedInterpreter&&) = delete; CachedInterpreter& operator=(CachedInterpreter&&) = delete;
~CachedInterpreter(); ~CachedInterpreter() override;
void Init() override; void Init() override;
void Shutdown() override; void Shutdown() override;

View File

@ -30,7 +30,7 @@ public:
Interpreter(Interpreter&&) = delete; Interpreter(Interpreter&&) = delete;
Interpreter& operator=(const Interpreter&) = delete; Interpreter& operator=(const Interpreter&) = delete;
Interpreter& operator=(Interpreter&&) = delete; Interpreter& operator=(Interpreter&&) = delete;
~Interpreter(); ~Interpreter() override;
void Init() override; void Init() override;
void Shutdown() override; void Shutdown() override;

View File

@ -8,7 +8,7 @@
class CSVSignatureDB final : public HashSignatureDB class CSVSignatureDB final : public HashSignatureDB
{ {
public: public:
~CSVSignatureDB() = default; ~CSVSignatureDB() override = default;
bool Load(const std::string& file_path) override; bool Load(const std::string& file_path) override;
bool Save(const std::string& file_path) const override; bool Save(const std::string& file_path) const override;
}; };

View File

@ -8,7 +8,7 @@
class DSYSignatureDB final : public HashSignatureDB class DSYSignatureDB final : public HashSignatureDB
{ {
public: public:
~DSYSignatureDB() = default; ~DSYSignatureDB() override = default;
bool Load(const std::string& file_path) override; bool Load(const std::string& file_path) override;
bool Save(const std::string& file_path) const override; bool Save(const std::string& file_path) const override;
}; };

View File

@ -33,7 +33,7 @@
#include "IOS/USB/Emulated/Infinity.h" #include "IOS/USB/Emulated/Infinity.h"
#include "IOS/USB/Emulated/Skylanders/Skylander.h" #include "IOS/USB/Emulated/Skylanders/Skylander.h"
#include "IOS/USB/USBScanner.h" #include "IOS/USB/USBScanner.h"
#include "VideoCommon/Assets/CustomAssetLoader.h" #include "VideoCommon/Assets/CustomResourceManager.h"
#include "VideoCommon/CommandProcessor.h" #include "VideoCommon/CommandProcessor.h"
#include "VideoCommon/Fifo.h" #include "VideoCommon/Fifo.h"
#include "VideoCommon/GeometryShaderManager.h" #include "VideoCommon/GeometryShaderManager.h"
@ -96,7 +96,7 @@ struct System::Impl
VideoInterface::VideoInterfaceManager m_video_interface; VideoInterface::VideoInterfaceManager m_video_interface;
Interpreter m_interpreter; Interpreter m_interpreter;
JitInterface m_jit_interface; JitInterface m_jit_interface;
VideoCommon::CustomAssetLoader m_custom_asset_loader; VideoCommon::CustomResourceManager m_custom_resource_manager;
FifoPlayer m_fifo_player; FifoPlayer m_fifo_player;
FifoRecorder m_fifo_recorder; FifoRecorder m_fifo_recorder;
Movie::MovieManager m_movie; Movie::MovieManager m_movie;
@ -335,8 +335,8 @@ VideoInterface::VideoInterfaceManager& System::GetVideoInterface() const
return m_impl->m_video_interface; return m_impl->m_video_interface;
} }
VideoCommon::CustomAssetLoader& System::GetCustomAssetLoader() const VideoCommon::CustomResourceManager& System::GetCustomResourceManager() const
{ {
return m_impl->m_custom_asset_loader; return m_impl->m_custom_resource_manager;
} }
} // namespace Core } // namespace Core

View File

@ -108,8 +108,8 @@ class SystemTimersManager;
} }
namespace VideoCommon namespace VideoCommon
{ {
class CustomAssetLoader; class CustomResourceManager;
} } // namespace VideoCommon
namespace VideoInterface namespace VideoInterface
{ {
class VideoInterfaceManager; class VideoInterfaceManager;
@ -197,7 +197,7 @@ public:
VertexShaderManager& GetVertexShaderManager() const; VertexShaderManager& GetVertexShaderManager() const;
XFStateManager& GetXFStateManager() const; XFStateManager& GetXFStateManager() const;
VideoInterface::VideoInterfaceManager& GetVideoInterface() const; VideoInterface::VideoInterfaceManager& GetVideoInterface() const;
VideoCommon::CustomAssetLoader& GetCustomAssetLoader() const; VideoCommon::CustomResourceManager& GetCustomResourceManager() const;
private: private:
System(); System();

View File

@ -107,7 +107,7 @@ protected:
class SectorReader : public BlobReader class SectorReader : public BlobReader
{ {
public: public:
virtual ~SectorReader() = 0; ~SectorReader() override = 0;
bool Read(u64 offset, u64 size, u8* out_ptr) override; bool Read(u64 offset, u64 size, u8* out_ptr) override;

View File

@ -45,7 +45,7 @@ class CompressedBlobReader final : public SectorReader
public: public:
static std::unique_ptr<CompressedBlobReader> Create(File::IOFile file, static std::unique_ptr<CompressedBlobReader> Create(File::IOFile file,
const std::string& filename); const std::string& filename);
~CompressedBlobReader(); ~CompressedBlobReader() override;
const CompressedBlobHeader& GetHeader() const { return m_header; } const CompressedBlobHeader& GetHeader() const { return m_header; }

View File

@ -29,7 +29,7 @@ class VolumeGC final : public VolumeDisc
{ {
public: public:
VolumeGC(std::unique_ptr<BlobReader> reader); VolumeGC(std::unique_ptr<BlobReader> reader);
~VolumeGC(); ~VolumeGC() override;
bool Read(u64 offset, u64 length, u8* buffer, bool Read(u64 offset, u64 length, u8* buffer,
const Partition& partition = PARTITION_NONE) const override; const Partition& partition = PARTITION_NONE) const override;
const FileSystem* GetFileSystem(const Partition& partition = PARTITION_NONE) const override; const FileSystem* GetFileSystem(const Partition& partition = PARTITION_NONE) const override;

View File

@ -58,7 +58,7 @@ public:
static_assert(sizeof(HashBlock) == BLOCK_HEADER_SIZE); static_assert(sizeof(HashBlock) == BLOCK_HEADER_SIZE);
VolumeWii(std::unique_ptr<BlobReader> reader); VolumeWii(std::unique_ptr<BlobReader> reader);
~VolumeWii(); ~VolumeWii() override;
bool Read(u64 offset, u64 length, u8* buffer, const Partition& partition) const override; bool Read(u64 offset, u64 length, u8* buffer, const Partition& partition) const override;
bool HasWiiHashes() const override; bool HasWiiHashes() const override;
bool HasWiiEncryption() const override; bool HasWiiEncryption() const override;

View File

@ -44,7 +44,7 @@ template <bool RVZ>
class WIARVZFileReader final : public BlobReader class WIARVZFileReader final : public BlobReader
{ {
public: public:
~WIARVZFileReader(); ~WIARVZFileReader() override;
static std::unique_ptr<WIARVZFileReader> Create(File::IOFile file, const std::string& path); static std::unique_ptr<WIARVZFileReader> Create(File::IOFile file, const std::string& path);

View File

@ -75,7 +75,7 @@ private:
class Bzip2Decompressor final : public Decompressor class Bzip2Decompressor final : public Decompressor
{ {
public: public:
~Bzip2Decompressor(); ~Bzip2Decompressor() override;
bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out, bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out,
size_t* in_bytes_read) override; size_t* in_bytes_read) override;
@ -89,7 +89,7 @@ class LZMADecompressor final : public Decompressor
{ {
public: public:
LZMADecompressor(bool lzma2, const u8* filter_options, size_t filter_options_size); LZMADecompressor(bool lzma2, const u8* filter_options, size_t filter_options_size);
~LZMADecompressor(); ~LZMADecompressor() override;
bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out, bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out,
size_t* in_bytes_read) override; size_t* in_bytes_read) override;
@ -106,7 +106,7 @@ class ZstdDecompressor final : public Decompressor
{ {
public: public:
ZstdDecompressor(); ZstdDecompressor();
~ZstdDecompressor(); ~ZstdDecompressor() override;
bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out, bool Decompress(const DecompressionBuffer& in, DecompressionBuffer* out,
size_t* in_bytes_read) override; size_t* in_bytes_read) override;
@ -164,7 +164,7 @@ class PurgeCompressor final : public Compressor
{ {
public: public:
PurgeCompressor(); PurgeCompressor();
~PurgeCompressor(); ~PurgeCompressor() override;
bool Start(std::optional<u64> size) override; bool Start(std::optional<u64> size) override;
bool AddPrecedingDataOnlyForPurgeHashing(const u8* data, size_t size) override; bool AddPrecedingDataOnlyForPurgeHashing(const u8* data, size_t size) override;
@ -184,7 +184,7 @@ class Bzip2Compressor final : public Compressor
{ {
public: public:
Bzip2Compressor(int compression_level); Bzip2Compressor(int compression_level);
~Bzip2Compressor(); ~Bzip2Compressor() override;
bool Start(std::optional<u64> size) override; bool Start(std::optional<u64> size) override;
bool Compress(const u8* data, size_t size) override; bool Compress(const u8* data, size_t size) override;
@ -206,7 +206,7 @@ class LZMACompressor final : public Compressor
public: public:
LZMACompressor(bool lzma2, int compression_level, u8 compressor_data_out[7], LZMACompressor(bool lzma2, int compression_level, u8 compressor_data_out[7],
u8* compressor_data_size_out); u8* compressor_data_size_out);
~LZMACompressor(); ~LZMACompressor() override;
bool Start(std::optional<u64> size) override; bool Start(std::optional<u64> size) override;
bool Compress(const u8* data, size_t size) override; bool Compress(const u8* data, size_t size) override;
@ -229,7 +229,7 @@ class ZstdCompressor final : public Compressor
{ {
public: public:
ZstdCompressor(int compression_level); ZstdCompressor(int compression_level);
~ZstdCompressor(); ~ZstdCompressor() override;
bool Start(std::optional<u64> size) override; bool Start(std::optional<u64> size) override;
bool Compress(const u8* data, size_t size) override; bool Compress(const u8* data, size_t size) override;

View File

@ -18,7 +18,7 @@ static constexpr u32 WBFS_MAGIC = 0x53464257; // "WBFS" (byteswapped to little
class WbfsFileReader final : public BlobReader class WbfsFileReader final : public BlobReader
{ {
public: public:
~WbfsFileReader(); ~WbfsFileReader() override;
static std::unique_ptr<WbfsFileReader> Create(File::IOFile file, const std::string& path); static std::unique_ptr<WbfsFileReader> Create(File::IOFile file, const std::string& path);

View File

@ -59,6 +59,7 @@
<ClInclude Include="Common\Event.h" /> <ClInclude Include="Common\Event.h" />
<ClInclude Include="Common\FatFsUtil.h" /> <ClInclude Include="Common\FatFsUtil.h" />
<ClInclude Include="Common\FileSearch.h" /> <ClInclude Include="Common\FileSearch.h" />
<ClInclude Include="Common\FilesystemWatcher.h" />
<ClInclude Include="Common\FileUtil.h" /> <ClInclude Include="Common\FileUtil.h" />
<ClInclude Include="Common\FixedSizeQueue.h" /> <ClInclude Include="Common\FixedSizeQueue.h" />
<ClInclude Include="Common\Flag.h" /> <ClInclude Include="Common\Flag.h" />
@ -669,12 +670,16 @@
<ClInclude Include="VideoCommon\Assets\CustomAsset.h" /> <ClInclude Include="VideoCommon\Assets\CustomAsset.h" />
<ClInclude Include="VideoCommon\Assets\CustomAssetLibrary.h" /> <ClInclude Include="VideoCommon\Assets\CustomAssetLibrary.h" />
<ClInclude Include="VideoCommon\Assets\CustomAssetLoader.h" /> <ClInclude Include="VideoCommon\Assets\CustomAssetLoader.h" />
<ClInclude Include="VideoCommon\Assets\CustomResourceManager.h" />
<ClInclude Include="VideoCommon\Assets\CustomTextureData.h" /> <ClInclude Include="VideoCommon\Assets\CustomTextureData.h" />
<ClInclude Include="VideoCommon\Assets\DirectFilesystemAssetLibrary.h" /> <ClInclude Include="VideoCommon\Assets\DirectFilesystemAssetLibrary.h" />
<ClInclude Include="VideoCommon\Assets\MaterialAsset.h" /> <ClInclude Include="VideoCommon\Assets\MaterialAsset.h" />
<ClInclude Include="VideoCommon\Assets\MeshAsset.h" /> <ClInclude Include="VideoCommon\Assets\MeshAsset.h" />
<ClInclude Include="VideoCommon\Assets\ShaderAsset.h" /> <ClInclude Include="VideoCommon\Assets\ShaderAsset.h" />
<ClInclude Include="VideoCommon\Assets\TextureAsset.h" /> <ClInclude Include="VideoCommon\Assets\TextureAsset.h" />
<ClInclude Include="VideoCommon\Assets\TextureAssetUtils.h" />
<ClInclude Include="VideoCommon\Assets\Types.h" />
<ClInclude Include="VideoCommon\Assets\WatchableFilesystemAssetLibrary.h" />
<ClInclude Include="VideoCommon\AsyncRequests.h" /> <ClInclude Include="VideoCommon\AsyncRequests.h" />
<ClInclude Include="VideoCommon\AsyncShaderCompiler.h" /> <ClInclude Include="VideoCommon\AsyncShaderCompiler.h" />
<ClInclude Include="VideoCommon\BoundingBox.h" /> <ClInclude Include="VideoCommon\BoundingBox.h" />
@ -814,6 +819,7 @@
<ClCompile Include="Common\ENet.cpp" /> <ClCompile Include="Common\ENet.cpp" />
<ClCompile Include="Common\FatFsUtil.cpp" /> <ClCompile Include="Common\FatFsUtil.cpp" />
<ClCompile Include="Common\FileSearch.cpp" /> <ClCompile Include="Common\FileSearch.cpp" />
<ClCompile Include="Common\FilesystemWatcher.cpp" />
<ClCompile Include="Common\FileUtil.cpp" /> <ClCompile Include="Common\FileUtil.cpp" />
<ClCompile Include="Common\FloatUtils.cpp" /> <ClCompile Include="Common\FloatUtils.cpp" />
<ClCompile Include="Common\GekkoDisassembler.cpp" /> <ClCompile Include="Common\GekkoDisassembler.cpp" />
@ -1320,14 +1326,15 @@
<ClCompile Include="VideoCommon\AbstractStagingTexture.cpp" /> <ClCompile Include="VideoCommon\AbstractStagingTexture.cpp" />
<ClCompile Include="VideoCommon\AbstractTexture.cpp" /> <ClCompile Include="VideoCommon\AbstractTexture.cpp" />
<ClCompile Include="VideoCommon\Assets\CustomAsset.cpp" /> <ClCompile Include="VideoCommon\Assets\CustomAsset.cpp" />
<ClCompile Include="VideoCommon\Assets\CustomAssetLibrary.cpp" />
<ClCompile Include="VideoCommon\Assets\CustomAssetLoader.cpp" /> <ClCompile Include="VideoCommon\Assets\CustomAssetLoader.cpp" />
<ClCompile Include="VideoCommon\Assets\CustomResourceManager.cpp" />
<ClCompile Include="VideoCommon\Assets\CustomTextureData.cpp" /> <ClCompile Include="VideoCommon\Assets\CustomTextureData.cpp" />
<ClCompile Include="VideoCommon\Assets\DirectFilesystemAssetLibrary.cpp" /> <ClCompile Include="VideoCommon\Assets\DirectFilesystemAssetLibrary.cpp" />
<ClCompile Include="VideoCommon\Assets\MaterialAsset.cpp" /> <ClCompile Include="VideoCommon\Assets\MaterialAsset.cpp" />
<ClCompile Include="VideoCommon\Assets\MeshAsset.cpp" /> <ClCompile Include="VideoCommon\Assets\MeshAsset.cpp" />
<ClCompile Include="VideoCommon\Assets\ShaderAsset.cpp" /> <ClCompile Include="VideoCommon\Assets\ShaderAsset.cpp" />
<ClCompile Include="VideoCommon\Assets\TextureAsset.cpp" /> <ClCompile Include="VideoCommon\Assets\TextureAsset.cpp" />
<ClCompile Include="VideoCommon\Assets\TextureAssetUtils.cpp" />
<ClCompile Include="VideoCommon\AsyncRequests.cpp" /> <ClCompile Include="VideoCommon\AsyncRequests.cpp" />
<ClCompile Include="VideoCommon\AsyncShaderCompiler.cpp" /> <ClCompile Include="VideoCommon\AsyncShaderCompiler.cpp" />
<ClCompile Include="VideoCommon\BoundingBox.cpp" /> <ClCompile Include="VideoCommon\BoundingBox.cpp" />

View File

@ -4,10 +4,8 @@
#include "DolphinNoGUI/Platform.h" #include "DolphinNoGUI/Platform.h"
#include <OptionParser.h> #include <OptionParser.h>
#include <cstddef> #include <csignal>
#include <cstdio> #include <cstdio>
#include <cstring>
#include <signal.h>
#include <string> #include <string>
#include <vector> #include <vector>
@ -32,15 +30,13 @@
#endif #endif
#include "UICommon/UICommon.h" #include "UICommon/UICommon.h"
#include "InputCommon/GCAdapter.h"
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
static std::unique_ptr<Platform> s_platform; static std::unique_ptr<Platform> s_platform;
static void signal_handler(int) static void signal_handler(int)
{ {
const char message[] = "A signal was received. A second signal will force Dolphin to stop.\n"; constexpr char message[] = "A signal was received. A second signal will force Dolphin to stop.\n";
#ifdef _WIN32 #ifdef _WIN32
puts(message); puts(message);
#else #else
@ -75,7 +71,7 @@ bool Host_UIBlocksControllerState()
} }
static Common::Event s_update_main_frame_event; static Common::Event s_update_main_frame_event;
void Host_Message(HostMessageID id) void Host_Message(const HostMessageID id)
{ {
if (id == HostMessageID::WMUserStop) if (id == HostMessageID::WMUserStop)
s_platform->Stop(); s_platform->Stop();
@ -201,11 +197,12 @@ static std::unique_ptr<Platform> GetPlatform(const optparse::Values& options)
#define main app_main #define main app_main
#endif #endif
int main(int argc, char* argv[]) int main(const int argc, char* argv[])
{ {
Core::DeclareAsHostThread(); Core::DeclareAsHostThread();
auto parser = CommandLineParse::CreateParser(CommandLineParse::ParserOptions::OmitGUIOptions); const auto parser =
CommandLineParse::CreateParser(CommandLineParse::ParserOptions::OmitGUIOptions);
parser->add_option("-p", "--platform") parser->add_option("-p", "--platform")
.action("store") .action("store")
.help("Window platform to use [%choices]") .help("Window platform to use [%choices]")
@ -301,14 +298,14 @@ int main(int argc, char* argv[])
return 1; return 1;
} }
Core::AddOnStateChangedCallback([](Core::State state) { Core::AddOnStateChangedCallback([](const Core::State state) {
if (state == Core::State::Uninitialized) if (state == Core::State::Uninitialized)
s_platform->Stop(); s_platform->Stop();
}); });
#ifdef _WIN32 #ifdef _WIN32
signal(SIGINT, signal_handler); std::signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler); std::signal(SIGTERM, signal_handler);
#else #else
// Shut down cleanly on SIGINT and SIGTERM // Shut down cleanly on SIGINT and SIGTERM
struct sigaction sa; struct sigaction sa;

View File

@ -6,7 +6,6 @@
#include "Core/HW/ProcessorInterface.h" #include "Core/HW/ProcessorInterface.h"
#include "Core/IOS/IOS.h" #include "Core/IOS/IOS.h"
#include "Core/IOS/STM/STM.h" #include "Core/IOS/STM/STM.h"
#include "Core/State.h"
#include "Core/System.h" #include "Core/System.h"
Platform::~Platform() = default; Platform::~Platform() = default;
@ -24,7 +23,7 @@ void Platform::UpdateRunningFlag()
{ {
if (m_shutdown_requested.TestAndClear()) if (m_shutdown_requested.TestAndClear())
{ {
auto& system = Core::System::GetInstance(); const auto& system = Core::System::GetInstance();
const auto ios = system.GetIOS(); const auto ios = system.GetIOS();
const auto stm = ios ? ios->GetDeviceByName("/dev/stm/eventhook") : nullptr; const auto stm = ios ? ios->GetDeviceByName("/dev/stm/eventhook") : nullptr;
if (!m_tried_graceful_shutdown.IsSet() && stm && if (!m_tried_graceful_shutdown.IsSet() && stm &&

View File

@ -10,7 +10,7 @@
namespace namespace
{ {
class PlatformHeadless : public Platform class PlatformHeadless final : public Platform
{ {
public: public:
void SetTitle(const std::string& title) override; void SetTitle(const std::string& title) override;

View File

@ -3,16 +3,13 @@
#include "DolphinNoGUI/Platform.h" #include "DolphinNoGUI/Platform.h"
#include "Common/MsgHandler.h"
#include "Core/Config/MainSettings.h" #include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
#include "Core/State.h"
#include "Core/System.h" #include "Core/System.h"
#include <Windows.h> #include <Windows.h>
#include <climits> #include <climits>
#include <cstdio>
#include <dwmapi.h> #include <dwmapi.h>
#include "VideoCommon/Present.h" #include "VideoCommon/Present.h"
@ -20,7 +17,7 @@
namespace namespace
{ {
class PlatformWin32 : public Platform class PlatformWin32 final : public Platform
{ {
public: public:
~PlatformWin32() override; ~PlatformWin32() override;
@ -29,14 +26,14 @@ public:
void SetTitle(const std::string& string) override; void SetTitle(const std::string& string) override;
void MainLoop() override; void MainLoop() override;
WindowSystemInfo GetWindowSystemInfo() const; WindowSystemInfo GetWindowSystemInfo() const override;
private: private:
static constexpr TCHAR WINDOW_CLASS_NAME[] = _T("DolphinNoGUI"); static constexpr TCHAR WINDOW_CLASS_NAME[] = _T("DolphinNoGUI");
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
bool RegisterRenderWindowClass(); static bool RegisterRenderWindowClass();
bool CreateRenderWindow(); bool CreateRenderWindow();
void UpdateWindowPosition(); void UpdateWindowPosition();
void ProcessEvents(); void ProcessEvents();
@ -66,7 +63,7 @@ bool PlatformWin32::RegisterRenderWindowClass()
wc.hInstance = GetModuleHandle(nullptr); wc.hInstance = GetModuleHandle(nullptr);
wc.hIcon = LoadIcon(nullptr, IDI_ICON1); wc.hIcon = LoadIcon(nullptr, IDI_ICON1);
wc.hCursor = LoadCursor(nullptr, IDC_ARROW); wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);
wc.lpszMenuName = nullptr; wc.lpszMenuName = nullptr;
wc.lpszClassName = WINDOW_CLASS_NAME; wc.lpszClassName = WINDOW_CLASS_NAME;
wc.hIconSm = LoadIcon(nullptr, IDI_ICON1); wc.hIconSm = LoadIcon(nullptr, IDI_ICON1);
@ -168,7 +165,8 @@ void PlatformWin32::ProcessEvents()
} }
} }
LRESULT PlatformWin32::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) LRESULT PlatformWin32::WndProc(const HWND hwnd, const UINT msg, const WPARAM wParam,
const LPARAM lParam)
{ {
PlatformWin32* platform = reinterpret_cast<PlatformWin32*>(GetWindowLongPtr(hwnd, GWLP_USERDATA)); PlatformWin32* platform = reinterpret_cast<PlatformWin32*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
switch (msg) switch (msg)
@ -185,7 +183,7 @@ LRESULT PlatformWin32::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
if (hwnd) if (hwnd)
{ {
// Remove rounded corners from the render window on Windows 11 // Remove rounded corners from the render window on Windows 11
const DWM_WINDOW_CORNER_PREFERENCE corner_preference = DWMWCP_DONOTROUND; constexpr DWM_WINDOW_CORNER_PREFERENCE corner_preference = DWMWCP_DONOTROUND;
DwmSetWindowAttribute(hwnd, DWMWA_WINDOW_CORNER_PREFERENCE, &corner_preference, DwmSetWindowAttribute(hwnd, DWMWA_WINDOW_CORNER_PREFERENCE, &corner_preference,
sizeof(corner_preference)); sizeof(corner_preference));
} }

View File

@ -34,7 +34,7 @@ class CheatsManager : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit CheatsManager(Core::System& system, QWidget* parent = nullptr); explicit CheatsManager(Core::System& system, QWidget* parent = nullptr);
~CheatsManager(); ~CheatsManager() override;
signals: signals:
void OpenGeneralSettings(); void OpenGeneralSettings();

View File

@ -23,7 +23,6 @@
#include "DolphinQt/Config/CheatWarningWidget.h" #include "DolphinQt/Config/CheatWarningWidget.h"
#include "DolphinQt/Config/HardcoreWarningWidget.h" #include "DolphinQt/Config/HardcoreWarningWidget.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
ARCodeWidget::ARCodeWidget(std::string game_id, u16 game_revision, bool restart_required) ARCodeWidget::ARCodeWidget(std::string game_id, u16 game_revision, bool restart_required)
: m_game_id(std::move(game_id)), m_game_revision(game_revision), : m_game_id(std::move(game_id)), m_game_revision(game_revision),
@ -257,7 +256,6 @@ void ARCodeWidget::OnCodeAddClicked()
ar.enabled = true; ar.enabled = true;
m_cheat_code_editor->SetARCode(&ar); m_cheat_code_editor->SetARCode(&ar);
SetQWidgetWindowDecorations(m_cheat_code_editor);
if (m_cheat_code_editor->exec() == QDialog::Rejected) if (m_cheat_code_editor->exec() == QDialog::Rejected)
return; return;
@ -275,7 +273,6 @@ void ARCodeWidget::OnCodeEditClicked()
const auto* const selected = items[0]; const auto* const selected = items[0];
auto& current_ar = m_ar_codes[m_code_list->row(selected)]; auto& current_ar = m_ar_codes[m_code_list->row(selected)];
SetQWidgetWindowDecorations(m_cheat_code_editor);
if (current_ar.user_defined) if (current_ar.user_defined)
{ {

View File

@ -13,7 +13,6 @@
#include "DolphinQt/Config/ControllerInterface/ControllerInterfaceWindow.h" #include "DolphinQt/Config/ControllerInterface/ControllerInterfaceWindow.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/QtUtils/SignalBlocking.h" #include "DolphinQt/QtUtils/SignalBlocking.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
@ -60,7 +59,6 @@ void CommonControllersWidget::OnControllerInterfaceConfigure()
ControllerInterfaceWindow* window = new ControllerInterfaceWindow(this); ControllerInterfaceWindow* window = new ControllerInterfaceWindow(this);
window->setAttribute(Qt::WA_DeleteOnClose, true); window->setAttribute(Qt::WA_DeleteOnClose, true);
window->setWindowModality(Qt::WindowModality::WindowModal); window->setWindowModality(Qt::WindowModality::WindowModal);
SetQWidgetWindowDecorations(window);
window->show(); window->show();
} }

View File

@ -80,6 +80,36 @@ void ConfigSlider::OnConfigChanged()
} }
} }
ConfigSliderU32::ConfigSliderU32(u32 minimum, u32 maximum, const Config::Info<u32>& setting,
u32 scale)
: ConfigSliderU32(minimum, maximum, setting, nullptr, scale)
{
}
ConfigSliderU32::ConfigSliderU32(u32 minimum, u32 maximum, const Config::Info<u32>& setting,
Config::Layer* layer, u32 scale)
: ConfigControl(Qt::Horizontal, setting.GetLocation(), layer), m_setting(setting),
m_scale(scale)
{
setMinimum(minimum);
setMaximum(maximum);
setValue(ReadValue(setting));
OnConfigChanged();
connect(this, &ConfigSliderU32::valueChanged, this, &ConfigSliderU32::Update);
}
void ConfigSliderU32::Update(u32 value)
{
SaveValue(m_setting, value * m_scale);
}
void ConfigSliderU32::OnConfigChanged()
{
setValue(ReadValue(m_setting) / m_scale);
}
ConfigSliderLabel::ConfigSliderLabel(const QString& text, ConfigSlider* slider) ConfigSliderLabel::ConfigSliderLabel(const QString& text, ConfigSlider* slider)
: QLabel(text), m_slider(QPointer<ConfigSlider>(slider)) : QLabel(text), m_slider(QPointer<ConfigSlider>(slider))
{ {

View File

@ -11,6 +11,7 @@
#include "DolphinQt/Config/ConfigControls/ConfigControl.h" #include "DolphinQt/Config/ConfigControls/ConfigControl.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipSlider.h" #include "DolphinQt/Config/ToolTipControls/ToolTipSlider.h"
#include "Common/CommonTypes.h"
#include "Common/Config/ConfigInfo.h" #include "Common/Config/ConfigInfo.h"
class ConfigSlider final : public ConfigControl<ToolTipSlider> class ConfigSlider final : public ConfigControl<ToolTipSlider>
@ -38,6 +39,25 @@ private:
std::vector<int> m_tick_values; std::vector<int> m_tick_values;
}; };
class ConfigSliderU32 final : public ConfigControl<ToolTipSlider>
{
Q_OBJECT
public:
ConfigSliderU32(u32 minimum, u32 maximum, const Config::Info<u32>& setting, u32 scale = 1);
ConfigSliderU32(u32 minimum, u32 maximum, const Config::Info<u32>& setting, Config ::Layer* layer,
u32 scale = 1);
void Update(u32 value);
protected:
void OnConfigChanged() override;
private:
const Config::Info<u32> m_setting;
u32 m_scale = 1;
};
class ConfigSliderLabel final : public QLabel class ConfigSliderLabel final : public QLabel
{ {
Q_OBJECT Q_OBJECT

View File

@ -14,7 +14,6 @@
#include "Common/Config/Config.h" #include "Common/Config/Config.h"
#include "DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.h" #include "DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h" #include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h"
DualShockUDPClientWidget::DualShockUDPClientWidget() DualShockUDPClientWidget::DualShockUDPClientWidget()
@ -112,7 +111,6 @@ void DualShockUDPClientWidget::OnServerAdded()
DualShockUDPClientAddServerDialog add_server_dialog(this); DualShockUDPClientAddServerDialog add_server_dialog(this);
connect(&add_server_dialog, &DualShockUDPClientAddServerDialog::accepted, this, connect(&add_server_dialog, &DualShockUDPClientAddServerDialog::accepted, this,
&DualShockUDPClientWidget::RefreshServerList); &DualShockUDPClientWidget::RefreshServerList);
SetQWidgetWindowDecorations(&add_server_dialog);
add_server_dialog.exec(); add_server_dialog.exec();
} }

View File

@ -25,7 +25,6 @@
#include "DolphinQt/QtUtils/DolphinFileDialog.h" #include "DolphinQt/QtUtils/DolphinFileDialog.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/ParallelProgressDialog.h" #include "DolphinQt/QtUtils/ParallelProgressDialog.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Resources.h" #include "DolphinQt/Resources.h"
#include "UICommon/UICommon.h" #include "UICommon/UICommon.h"
@ -367,7 +366,6 @@ void FilesystemWidget::ExtractDirectory(const DiscIO::Partition& partition, cons
dialog.Reset(); dialog.Reset();
}); });
SetQWidgetWindowDecorations(dialog.GetRaw());
dialog.GetRaw()->exec(); dialog.GetRaw()->exec();
future.get(); future.get();
} }

View File

@ -19,7 +19,6 @@
#include "DolphinQt/Config/Mapping/MappingWindow.h" #include "DolphinQt/Config/Mapping/MappingWindow.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipCheckBox.h" #include "DolphinQt/Config/ToolTipControls/ToolTipCheckBox.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
FreeLookWidget::FreeLookWidget(QWidget* parent) : QWidget(parent) FreeLookWidget::FreeLookWidget(QWidget* parent) : QWidget(parent)
@ -104,7 +103,6 @@ void FreeLookWidget::OnFreeLookControllerConfigured()
MappingWindow* window = new MappingWindow(this, MappingWindow::Type::MAPPING_FREELOOK, index); MappingWindow* window = new MappingWindow(this, MappingWindow::Type::MAPPING_FREELOOK, index);
window->setAttribute(Qt::WA_DeleteOnClose, true); window->setAttribute(Qt::WA_DeleteOnClose, true);
window->setWindowModality(Qt::WindowModality::WindowModal); window->setWindowModality(Qt::WindowModality::WindowModal);
SetQWidgetWindowDecorations(window);
window->show(); window->show();
} }

View File

@ -17,7 +17,7 @@ class GameConfigHighlighter : public QSyntaxHighlighter
public: public:
explicit GameConfigHighlighter(QTextDocument* parent = nullptr); explicit GameConfigHighlighter(QTextDocument* parent = nullptr);
~GameConfigHighlighter(); ~GameConfigHighlighter() override;
protected: protected:
void highlightBlock(const QString& text) override; void highlightBlock(const QString& text) override;

View File

@ -29,7 +29,7 @@ class GameConfigWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit GameConfigWidget(const UICommon::GameFile& game); explicit GameConfigWidget(const UICommon::GameFile& game);
~GameConfigWidget(); ~GameConfigWidget() override;
private: private:
void CreateWidgets(); void CreateWidgets();

View File

@ -24,7 +24,6 @@
#include "DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h" #include "DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h"
#include "DolphinQt/Config/Mapping/MappingWindow.h" #include "DolphinQt/Config/Mapping/MappingWindow.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/QtUtils/SignalBlocking.h" #include "DolphinQt/QtUtils/SignalBlocking.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
@ -140,7 +139,6 @@ void GamecubeControllersWidget::OnGCPadConfigure(size_t index)
case SerialInterface::SIDEVICE_WIIU_ADAPTER: case SerialInterface::SIDEVICE_WIIU_ADAPTER:
{ {
GCPadWiiUConfigDialog dialog(static_cast<int>(index), this); GCPadWiiUConfigDialog dialog(static_cast<int>(index), this);
SetQWidgetWindowDecorations(&dialog);
dialog.exec(); dialog.exec();
return; return;
} }
@ -166,7 +164,6 @@ void GamecubeControllersWidget::OnGCPadConfigure(size_t index)
MappingWindow* window = new MappingWindow(this, type, static_cast<int>(index)); MappingWindow* window = new MappingWindow(this, type, static_cast<int>(index));
window->setAttribute(Qt::WA_DeleteOnClose, true); window->setAttribute(Qt::WA_DeleteOnClose, true);
window->setWindowModality(Qt::WindowModality::WindowModal); window->setWindowModality(Qt::WindowModality::WindowModal);
SetQWidgetWindowDecorations(window);
window->show(); window->show();
} }

View File

@ -30,7 +30,6 @@
#include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/QtUtils.h" #include "DolphinQt/QtUtils/QtUtils.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/QtUtils/WrapInScrollArea.h" #include "DolphinQt/QtUtils/WrapInScrollArea.h"
GeckoCodeWidget::GeckoCodeWidget(std::string game_id, std::string gametdb_id, u16 game_revision, GeckoCodeWidget::GeckoCodeWidget(std::string game_id, std::string gametdb_id, u16 game_revision,
@ -210,7 +209,6 @@ void GeckoCodeWidget::AddCode()
code.enabled = true; code.enabled = true;
m_cheat_code_editor->SetGeckoCode(&code); m_cheat_code_editor->SetGeckoCode(&code);
SetQWidgetWindowDecorations(m_cheat_code_editor);
if (m_cheat_code_editor->exec() == QDialog::Rejected) if (m_cheat_code_editor->exec() == QDialog::Rejected)
return; return;
@ -228,7 +226,6 @@ void GeckoCodeWidget::EditCode()
const int index = item->data(Qt::UserRole).toInt(); const int index = item->data(Qt::UserRole).toInt();
m_cheat_code_editor->SetGeckoCode(&m_gecko_codes[index]); m_cheat_code_editor->SetGeckoCode(&m_gecko_codes[index]);
SetQWidgetWindowDecorations(m_cheat_code_editor);
if (m_cheat_code_editor->exec() == QDialog::Rejected) if (m_cheat_code_editor->exec() == QDialog::Rejected)
return; return;

View File

@ -25,7 +25,6 @@
#include "DolphinQt/Config/Graphics/PostProcessingConfigWindow.h" #include "DolphinQt/Config/Graphics/PostProcessingConfigWindow.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h" #include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
#include "VideoCommon/PostProcessing.h" #include "VideoCommon/PostProcessing.h"
@ -629,7 +628,6 @@ void EnhancementsWidget::AddDescriptions()
void EnhancementsWidget::ConfigureColorCorrection() void EnhancementsWidget::ConfigureColorCorrection()
{ {
ColorCorrectionConfigWindow dialog(this); ColorCorrectionConfigWindow dialog(this);
SetQWidgetWindowDecorations(&dialog);
dialog.exec(); dialog.exec();
} }
@ -637,6 +635,5 @@ void EnhancementsWidget::ConfigurePostProcessingShader()
{ {
const std::string shader = ReadSetting(Config::GFX_ENHANCE_POST_SHADER); const std::string shader = ReadSetting(Config::GFX_ENHANCE_POST_SHADER);
PostProcessingConfigWindow dialog(this, shader); PostProcessingConfigWindow dialog(this, shader);
SetQWidgetWindowDecorations(&dialog);
dialog.exec(); dialog.exec();
} }

View File

@ -27,7 +27,6 @@
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsWindow.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h" #include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
@ -199,7 +198,6 @@ void GeneralWidget::BackendWarning()
confirm_sw.setWindowTitle(tr("Confirm backend change")); confirm_sw.setWindowTitle(tr("Confirm backend change"));
confirm_sw.setText(tr(warningMessage->c_str())); confirm_sw.setText(tr(warningMessage->c_str()));
SetQWidgetWindowDecorations(&confirm_sw);
if (confirm_sw.exec() != QMessageBox::Yes) if (confirm_sw.exec() != QMessageBox::Yes)
{ {
m_backend_combo->setCurrentIndex(m_previous_backend); m_backend_combo->setCurrentIndex(m_previous_backend);

View File

@ -27,7 +27,7 @@ class PostProcessingConfigWindow final : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit PostProcessingConfigWindow(EnhancementsWidget* parent, const std::string& shader); explicit PostProcessingConfigWindow(EnhancementsWidget* parent, const std::string& shader);
~PostProcessingConfigWindow(); ~PostProcessingConfigWindow() override;
private: private:
class ConfigGroup final class ConfigGroup final

View File

@ -35,7 +35,7 @@ class GraphicsModListWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit GraphicsModListWidget(const UICommon::GameFile& game); explicit GraphicsModListWidget(const UICommon::GameFile& game);
~GraphicsModListWidget(); ~GraphicsModListWidget() override;
void SaveToDisk(); void SaveToDisk();

View File

@ -17,7 +17,7 @@ class LogConfigWidget final : public QDockWidget
Q_OBJECT Q_OBJECT
public: public:
explicit LogConfigWidget(QWidget* parent = nullptr); explicit LogConfigWidget(QWidget* parent = nullptr);
~LogConfigWidget(); ~LogConfigWidget() override;
protected: protected:
void closeEvent(QCloseEvent* event) override; void closeEvent(QCloseEvent* event) override;

View File

@ -23,7 +23,7 @@ class LogWidget final : public QDockWidget
Q_OBJECT Q_OBJECT
public: public:
explicit LogWidget(QWidget* parent = nullptr); explicit LogWidget(QWidget* parent = nullptr);
~LogWidget(); ~LogWidget() override;
protected: protected:
void closeEvent(QCloseEvent*) override; void closeEvent(QCloseEvent*) override;

View File

@ -11,7 +11,6 @@
#include "Core/FreeLookManager.h" #include "Core/FreeLookManager.h"
#include "DolphinQt/Config/ControllerInterface/ControllerInterfaceWindow.h" #include "DolphinQt/Config/ControllerInterface/ControllerInterfaceWindow.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "InputCommon/InputConfig.h" #include "InputCommon/InputConfig.h"
FreeLookRotation::FreeLookRotation(MappingWindow* window) : MappingWidget(window) FreeLookRotation::FreeLookRotation(MappingWindow* window) : MappingWidget(window)
@ -34,7 +33,6 @@ void FreeLookRotation::CreateMainLayout()
ControllerInterfaceWindow* window = new ControllerInterfaceWindow(this); ControllerInterfaceWindow* window = new ControllerInterfaceWindow(this);
window->setAttribute(Qt::WA_DeleteOnClose, true); window->setAttribute(Qt::WA_DeleteOnClose, true);
window->setWindowModality(Qt::WindowModality::WindowModal); window->setWindowModality(Qt::WindowModality::WindowModal);
SetQWidgetWindowDecorations(window);
window->show(); window->show();
}); });
m_main_layout->addLayout(alternate_input_layout, 0, 0, 1, -1); m_main_layout->addLayout(alternate_input_layout, 0, 0, 1, -1);

View File

@ -15,7 +15,7 @@ class GCPadWiiUConfigDialog final : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit GCPadWiiUConfigDialog(int port, QWidget* parent = nullptr); explicit GCPadWiiUConfigDialog(int port, QWidget* parent = nullptr);
~GCPadWiiUConfigDialog(); ~GCPadWiiUConfigDialog() override;
private: private:
void LoadSettings(); void LoadSettings();

View File

@ -28,7 +28,6 @@
#include "DolphinQt/Config/Mapping/MappingWindow.h" #include "DolphinQt/Config/Mapping/MappingWindow.h"
#include "DolphinQt/QtUtils/BlockUserInputFilter.h" #include "DolphinQt/QtUtils/BlockUserInputFilter.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
#include "InputCommon/ControlReference/ControlReference.h" #include "InputCommon/ControlReference/ControlReference.h"
@ -259,8 +258,6 @@ IOWindow::IOWindow(MappingWindow* window, ControllerEmu::EmulatedController* con
: QDialog(window), m_reference(ref), m_original_expression(ref->GetExpression()), : QDialog(window), m_reference(ref), m_original_expression(ref->GetExpression()),
m_controller(controller), m_type(type) m_controller(controller), m_type(type)
{ {
SetQWidgetWindowDecorations(this);
CreateMainLayout(); CreateMainLayout();
connect(window, &MappingWindow::Update, this, &IOWindow::Update); connect(window, &MappingWindow::Update, this, &IOWindow::Update);

Some files were not shown because too many files have changed in this diff Show More