mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-19 19:15:26 +00:00
Merge branch 'master' into RSX
This commit is contained in:
commit
d8b96b9022
17 changed files with 109 additions and 31 deletions
2
.github/workflows/rpcs3.yml
vendored
2
.github/workflows/rpcs3.yml
vendored
|
@ -165,7 +165,7 @@ jobs:
|
|||
|
||||
- name: Compile RPCS3
|
||||
shell: pwsh
|
||||
run: msbuild rpcs3.sln /p:Configuration=Release /v:minimal /p:Platform=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_no_debug_info.targets"
|
||||
run: msbuild rpcs3.sln /p:Configuration=Release /v:minimal /p:Platform=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
|
||||
|
||||
- name: Pack up build artifacts
|
||||
run: |
|
||||
|
|
|
@ -121,7 +121,7 @@ jobs:
|
|||
# maximumCpuCount: true
|
||||
# platform: x64
|
||||
# configuration: 'Release'
|
||||
# msbuildArgs: /p:CLToolPath=$(CCACHE_BIN_DIR) /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="$(Build.SourcesDirectory)\buildfiles\msvc\ci_no_debug_info.targets"
|
||||
# msbuildArgs: /p:CLToolPath=$(CCACHE_BIN_DIR) /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="$(Build.SourcesDirectory)\buildfiles\msvc\ci_only.targets"
|
||||
# displayName: Compile RPCS3
|
||||
|
||||
# - bash: .ci/deploy-windows.sh
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
|
@ -11,12 +11,10 @@
|
|||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PreprocessorDefinitions>LLVM_AVAILABLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WholeProgramOptimization Condition="'$(Configuration)'=='Release'">true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<LinkTimeCodeGeneration Condition="'$(Configuration)'=='Release'">UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)'=='Release'">%(AdditionalLibraryDirectories);$(SolutionDir)build\lib\$(Configuration)-$(Platform)\llvm_build\lib;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\$(Configuration)\lib;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);</AdditionalDependencies>
|
||||
</Link>
|
||||
|
|
|
@ -172,7 +172,7 @@ if (NOT ANDROID)
|
|||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/GuiConfigs
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/git
|
||||
COMMAND "${WINDEPLOYQT_EXECUTABLE}" --no-compiler-runtime --no-opengl-sw --no-patchqt
|
||||
--no-translations --no-system-d3d-compiler --no-quick-import
|
||||
--no-translations --no-system-d3d-compiler --no-system-dxc-compiler --no-ffmpeg --no-quick-import
|
||||
--plugindir "$<IF:$<CXX_COMPILER_ID:MSVC>,$<TARGET_FILE_DIR:rpcs3>/plugins,$<TARGET_FILE_DIR:rpcs3>/share/qt6/plugins>"
|
||||
--verbose 0 "$<TARGET_FILE:rpcs3>")
|
||||
endif()
|
||||
|
|
|
@ -74,6 +74,22 @@ void fmt_class_string<CellMicInErrorDsp>::format(std::string& out, u64 arg)
|
|||
});
|
||||
}
|
||||
|
||||
namespace fmt
|
||||
{
|
||||
struct alc_error
|
||||
{
|
||||
ALCdevice* device{};
|
||||
ALCenum error{};
|
||||
};
|
||||
}
|
||||
|
||||
template <>
|
||||
void fmt_class_string<fmt::alc_error>::format(std::string& out, u64 arg)
|
||||
{
|
||||
const fmt::alc_error& obj = get_object(arg);
|
||||
fmt::append(out, "0x%x='%s'", obj.error, alcGetString(obj.device, obj.error));
|
||||
}
|
||||
|
||||
void mic_context::operator()()
|
||||
{
|
||||
// Timestep in microseconds
|
||||
|
@ -448,7 +464,7 @@ error_code microphone_device::open_microphone(const u8 type, const u32 dsp_r, co
|
|||
|
||||
if (ALCenum err = alcGetError(device); err != ALC_NO_ERROR || !device)
|
||||
{
|
||||
cellMic.error("Error opening capture device %s (error=0x%x, device=*0x%x)", devices[0].name, err, device);
|
||||
cellMic.error("Error opening capture device %s (error=%s, device=*0x%x)", devices[0].name, fmt::alc_error{device, err}, device);
|
||||
#ifdef _WIN32
|
||||
cellMic.error("Make sure microphone use is authorized under \"Microphone privacy settings\" in windows configuration");
|
||||
#endif
|
||||
|
@ -466,7 +482,7 @@ error_code microphone_device::open_microphone(const u8 type, const u32 dsp_r, co
|
|||
if (ALCenum err = alcGetError(device); err != ALC_NO_ERROR || !device)
|
||||
{
|
||||
// Ignore it and move on
|
||||
cellMic.error("Error opening 2nd SingStar capture device %s (error=0x%x, device=*0x%x)", devices[1].name, err, device);
|
||||
cellMic.error("Error opening 2nd SingStar capture device %s (error=%s, device=*0x%x)", devices[1].name, fmt::alc_error{device, err}, device);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -523,7 +539,7 @@ error_code microphone_device::start_microphone()
|
|||
alcCaptureStart(micdevice.device);
|
||||
if (ALCenum err = alcGetError(micdevice.device); err != ALC_NO_ERROR)
|
||||
{
|
||||
cellMic.error("Error starting capture of device %s (error=0x%x)", micdevice.name, err);
|
||||
cellMic.error("Error starting capture of device %s (error=%s)", micdevice.name, fmt::alc_error{micdevice.device, err});
|
||||
stop_microphone();
|
||||
return CELL_MICIN_ERROR_FATAL;
|
||||
}
|
||||
|
@ -542,7 +558,7 @@ error_code microphone_device::stop_microphone()
|
|||
alcCaptureStop(micdevice.device);
|
||||
if (ALCenum err = alcGetError(micdevice.device); err != ALC_NO_ERROR)
|
||||
{
|
||||
cellMic.error("Error stopping capture of device %s (error=0x%x)", micdevice.name, err);
|
||||
cellMic.error("Error stopping capture of device %s (error=%s)", micdevice.name, fmt::alc_error{micdevice.device, err});
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -621,7 +637,7 @@ u32 microphone_device::capture_audio()
|
|||
|
||||
if (ALCenum err = alcGetError(micdevice.device); err != ALC_NO_ERROR)
|
||||
{
|
||||
cellMic.error("Error getting number of captured samples of device %s (error=0x%x)", micdevice.name, err);
|
||||
cellMic.error("Error getting number of captured samples of device %s (error=%s)", micdevice.name, fmt::alc_error{micdevice.device, err});
|
||||
return CELL_MICIN_ERROR_FATAL;
|
||||
}
|
||||
|
||||
|
@ -639,7 +655,7 @@ u32 microphone_device::capture_audio()
|
|||
|
||||
if (ALCenum err = alcGetError(micdevice.device); err != ALC_NO_ERROR)
|
||||
{
|
||||
cellMic.error("Error capturing samples of device %s (error=0x%x)", micdevice.name, err);
|
||||
cellMic.error("Error capturing samples of device %s (error=%s)", micdevice.name, fmt::alc_error{micdevice.device, err});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5870,13 +5870,13 @@ public:
|
|||
{
|
||||
if (perm_only)
|
||||
{
|
||||
set_vr(op.rt4, vperm2b256to128(as, b, c));
|
||||
set_vr(op.rt4, vperm2b(as, b, c));
|
||||
return;
|
||||
}
|
||||
|
||||
const auto m = gf2p8affineqb(c, build<u8[16]>(0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20), 0x7f);
|
||||
const auto mm = select(noncast<s8[16]>(m) >= 0, splat<u8[16]>(0), m);
|
||||
const auto ab = vperm2b256to128(as, b, c);
|
||||
const auto ab = vperm2b(as, b, c);
|
||||
set_vr(op.rt4, select(noncast<s8[16]>(c) >= 0, ab, mm));
|
||||
return;
|
||||
}
|
||||
|
@ -5920,13 +5920,13 @@ public:
|
|||
{
|
||||
if (perm_only)
|
||||
{
|
||||
set_vr(op.rt4, vperm2b256to128(a, b, eval(c ^ 0xf)));
|
||||
set_vr(op.rt4, vperm2b(a, b, eval(c ^ 0xf)));
|
||||
return;
|
||||
}
|
||||
|
||||
const auto m = gf2p8affineqb(c, build<u8[16]>(0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20), 0x7f);
|
||||
const auto mm = select(noncast<s8[16]>(m) >= 0, splat<u8[16]>(0), m);
|
||||
const auto ab = vperm2b256to128(a, b, eval(c ^ 0xf));
|
||||
const auto ab = vperm2b(a, b, eval(c ^ 0xf));
|
||||
set_vr(op.rt4, select(noncast<s8[16]>(c) >= 0, ab, mm));
|
||||
return;
|
||||
}
|
||||
|
@ -5938,13 +5938,13 @@ public:
|
|||
{
|
||||
if (perm_only)
|
||||
{
|
||||
set_vr(op.rt4, vperm2b256to128(b, a, eval(c ^ 0x1f)));
|
||||
set_vr(op.rt4, vperm2b(b, a, eval(c ^ 0x1f)));
|
||||
return;
|
||||
}
|
||||
|
||||
const auto m = gf2p8affineqb(c, build<u8[16]>(0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20), 0x7f);
|
||||
const auto mm = select(noncast<s8[16]>(m) >= 0, splat<u8[16]>(0), m);
|
||||
const auto ab = vperm2b256to128(b, a, eval(c ^ 0x1f));
|
||||
const auto ab = vperm2b(b, a, eval(c ^ 0x1f));
|
||||
set_vr(op.rt4, select(noncast<s8[16]>(c) >= 0, ab, mm));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -858,7 +858,7 @@ namespace np
|
|||
presence_self.pr_data = {};
|
||||
presence_self.advertised = false;
|
||||
|
||||
if (g_cfg.net.psn_status == np_psn_status::psn_rpcn)
|
||||
if (is_connected && is_psn_active && rpcn)
|
||||
{
|
||||
rpcn_log.notice("Setting RPCN state to disconnected!");
|
||||
rpcn->reset_state();
|
||||
|
|
|
@ -453,6 +453,7 @@ namespace rsx
|
|||
std::vector<std::unique_ptr<overlay_element>> entries;
|
||||
std::string selected_user;
|
||||
s32 selected_index = 0;
|
||||
bool rpcn_connected = true;
|
||||
|
||||
// Get selected user name
|
||||
if (m_list && m_current_page == m_last_page)
|
||||
|
@ -516,20 +517,25 @@ namespace rsx
|
|||
{
|
||||
rsx_log.error("Failed to connect to RPCN: %s", rpcn::rpcn_state_to_string(res));
|
||||
status_flags |= status_bits::invalidate_image_cache;
|
||||
m_list.reset();
|
||||
return;
|
||||
rpcn_connected = false;
|
||||
}
|
||||
|
||||
if (auto res = m_rpcn->wait_for_authentified(); res != rpcn::rpcn_state::failure_no_failure)
|
||||
{
|
||||
rsx_log.error("Failed to authentify to RPCN: %s", rpcn::rpcn_state_to_string(res));
|
||||
status_flags |= status_bits::invalidate_image_cache;
|
||||
m_list.reset();
|
||||
return;
|
||||
rpcn_connected = false;
|
||||
}
|
||||
|
||||
// Get friends, setup callback and setup comboboxes
|
||||
m_rpcn->get_friends(m_friend_data);
|
||||
// Get friends
|
||||
if (rpcn_connected)
|
||||
{
|
||||
m_rpcn->get_friends(m_friend_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_friend_data = {};
|
||||
}
|
||||
|
||||
switch (m_current_page)
|
||||
{
|
||||
|
|
|
@ -303,6 +303,12 @@ static void fixup_settings(const psf::registry* _psf)
|
|||
g_cfg.video.resolution.set(new_resolution);
|
||||
}
|
||||
}
|
||||
|
||||
if (g_cfg.net.net_active == np_internet_status::disabled && g_cfg.net.psn_status != np_psn_status::disabled)
|
||||
{
|
||||
sys_log.warning("Net status was set to disconnected so psn status was disabled");
|
||||
g_cfg.net.psn_status.set(np_psn_status::disabled);
|
||||
}
|
||||
}
|
||||
|
||||
extern void dump_executable(std::span<const u8> data, const ppu_module<lv2_obj>* _module, std::string_view title_id)
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>
|
||||
$(QTDIR)\bin\windeployqt --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --release "$(TargetPath)"
|
||||
$(QTDIR)\bin\windeployqt --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-ffmpeg --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --release "$(TargetPath)"
|
||||
xcopy /y /d "..\3rdparty\opencv\opencv\opencv410\build\x64\bin\opencv_world4100.dll" "$(OutDir)"
|
||||
</Command>
|
||||
</PostBuildEvent>
|
||||
|
@ -164,7 +164,7 @@
|
|||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>
|
||||
$(QTDIR)\bin\windeployqt --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --debug "$(TargetPath)"
|
||||
$(QTDIR)\bin\windeployqt --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-ffmpeg --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --debug "$(TargetPath)"
|
||||
xcopy /y /d "..\3rdparty\opencv\opencv\opencv410\build\x64\bin\opencv_world4100.dll" "$(OutDir)"
|
||||
</Command>
|
||||
</PostBuildEvent>
|
||||
|
@ -1099,11 +1099,11 @@
|
|||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent"</Command>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="rpcs3qt\custom_dialog.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
|
|
|
@ -223,6 +223,7 @@ void game_list_frame::LoadSettings()
|
|||
m_category_filters = m_gui_settings->GetGameListCategoryFilters(true);
|
||||
m_grid_category_filters = m_gui_settings->GetGameListCategoryFilters(false);
|
||||
m_draw_compat_status_to_grid = m_gui_settings->GetValue(gui::gl_draw_compat).toBool();
|
||||
m_prefer_game_data_icons = m_gui_settings->GetValue(gui::gl_pref_gd_icon).toBool();
|
||||
m_show_custom_icons = m_gui_settings->GetValue(gui::gl_custom_icon).toBool();
|
||||
m_play_hover_movies = m_gui_settings->GetValue(gui::gl_hover_gifs).toBool();
|
||||
|
||||
|
@ -897,8 +898,8 @@ void game_list_frame::OnRefreshFinished()
|
|||
}
|
||||
}
|
||||
|
||||
// Let's fetch the game data icon if the path was empty for some reason
|
||||
if (entry->info.icon_path.empty())
|
||||
// Let's fetch the game data icon if preferred or if the path was empty for some reason
|
||||
if ((m_prefer_game_data_icons && !entry->has_custom_icon) || entry->info.icon_path.empty())
|
||||
{
|
||||
if (std::string icon_path = other->info.path + "/" + localized_icon; fs::is_file(icon_path))
|
||||
{
|
||||
|
@ -909,6 +910,19 @@ void game_list_frame::OnRefreshFinished()
|
|||
entry->info.icon_path = std::move(icon_path);
|
||||
}
|
||||
}
|
||||
|
||||
// Let's fetch the game data movie if preferred or if the path was empty
|
||||
if (m_prefer_game_data_icons || entry->info.movie_path.empty())
|
||||
{
|
||||
if (std::string movie_path = other->info.path + "/" + localized_movie; fs::is_file(movie_path))
|
||||
{
|
||||
entry->info.movie_path = std::move(movie_path);
|
||||
}
|
||||
else if (std::string movie_path = other->info.path + "/ICON1.PAM"; fs::is_file(movie_path))
|
||||
{
|
||||
entry->info.movie_path = std::move(movie_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3001,6 +3015,16 @@ void game_list_frame::SetShowCompatibilityInGrid(bool show)
|
|||
m_gui_settings->SetValue(gui::gl_draw_compat, show);
|
||||
}
|
||||
|
||||
void game_list_frame::SetPreferGameDataIcons(bool enabled)
|
||||
{
|
||||
if (m_prefer_game_data_icons != enabled)
|
||||
{
|
||||
m_prefer_game_data_icons = enabled;
|
||||
m_gui_settings->SetValue(gui::gl_pref_gd_icon, enabled);
|
||||
Refresh(true);
|
||||
}
|
||||
}
|
||||
|
||||
void game_list_frame::SetShowCustomIcons(bool show)
|
||||
{
|
||||
if (m_show_custom_icons != show)
|
||||
|
|
|
@ -73,6 +73,7 @@ public Q_SLOTS:
|
|||
void SetListMode(const bool& is_list);
|
||||
void SetSearchText(const QString& text);
|
||||
void SetShowCompatibilityInGrid(bool show);
|
||||
void SetPreferGameDataIcons(bool enabled);
|
||||
void SetShowCustomIcons(bool show);
|
||||
void SetPlayHoverGifs(bool play);
|
||||
void FocusAndSelectFirstEntryIfNoneIs();
|
||||
|
@ -212,6 +213,7 @@ private:
|
|||
qreal m_margin_factor;
|
||||
qreal m_text_factor;
|
||||
bool m_draw_compat_status_to_grid = false;
|
||||
bool m_prefer_game_data_icons = false;
|
||||
bool m_show_custom_icons = true;
|
||||
bool m_play_hover_movies = true;
|
||||
std::optional<auto_typemap<game_list_frame>> m_refresh_funcs_manage_type{std::in_place};
|
||||
|
|
|
@ -214,6 +214,7 @@ namespace gui
|
|||
const gui_save gl_show_hidden = gui_save(game_list, "show_hidden", false);
|
||||
const gui_save gl_hidden_list = gui_save(game_list, "hidden_list", QStringList());
|
||||
const gui_save gl_draw_compat = gui_save(game_list, "draw_compat", false);
|
||||
const gui_save gl_pref_gd_icon = gui_save(game_list, "pref_gd_icon", false);
|
||||
const gui_save gl_custom_icon = gui_save(game_list, "custom_icon", true);
|
||||
const gui_save gl_hover_gifs = gui_save(game_list, "hover_gifs", true);
|
||||
|
||||
|
|
|
@ -3380,6 +3380,7 @@ void main_window::CreateConnects()
|
|||
ResizeIcons(index);
|
||||
});
|
||||
|
||||
connect(ui->actionPreferGameDataIcons, &QAction::triggered, m_game_list_frame, &game_list_frame::SetPreferGameDataIcons);
|
||||
connect(ui->showCustomIconsAct, &QAction::triggered, m_game_list_frame, &game_list_frame::SetShowCustomIcons);
|
||||
connect(ui->playHoverGifsAct, &QAction::triggered, m_game_list_frame, &game_list_frame::SetPlayHoverGifs);
|
||||
|
||||
|
@ -3679,6 +3680,7 @@ void main_window::ConfigureGuiFromSettings()
|
|||
m_game_list_frame->SetShowHidden(ui->showHiddenEntriesAct->isChecked()); // prevent GetValue in m_game_list_frame->LoadSettings
|
||||
|
||||
ui->showCompatibilityInGridAct->setChecked(m_gui_settings->GetValue(gui::gl_draw_compat).toBool());
|
||||
ui->actionPreferGameDataIcons->setChecked(m_gui_settings->GetValue(gui::gl_pref_gd_icon).toBool());
|
||||
ui->showCustomIconsAct->setChecked(m_gui_settings->GetValue(gui::gl_custom_icon).toBool());
|
||||
ui->playHoverGifsAct->setChecked(m_gui_settings->GetValue(gui::gl_hover_gifs).toBool());
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dockOptions">
|
||||
<set>QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::GroupedDragging</set>
|
||||
<set>QMainWindow::DockOption::AllowNestedDocks|QMainWindow::DockOption::AllowTabbedDocks|QMainWindow::DockOption::AnimatedDocks|QMainWindow::DockOption::GroupedDragging</set>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<property name="sizePolicy">
|
||||
|
@ -344,6 +344,7 @@
|
|||
<addaction name="setIconSizeMediumAct"/>
|
||||
<addaction name="setIconSizeLargeAct"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionPreferGameDataIcons"/>
|
||||
<addaction name="showCustomIconsAct"/>
|
||||
<addaction name="playHoverGifsAct"/>
|
||||
</widget>
|
||||
|
@ -1415,6 +1416,14 @@
|
|||
<string>Savestates</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionPreferGameDataIcons">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Prefer Game Data Icons</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources>
|
||||
|
|
|
@ -1481,6 +1481,16 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
|
|||
const auto [text, value] = get_data(ui->netStatusBox, index);
|
||||
ui->gb_edit_dns->setEnabled(static_cast<np_internet_status>(value) != np_internet_status::disabled);
|
||||
ui->enable_upnp->setEnabled(static_cast<np_internet_status>(value) != np_internet_status::disabled);
|
||||
|
||||
if (static_cast<np_internet_status>(value) == np_internet_status::disabled)
|
||||
{
|
||||
ui->psnStatusBox->setCurrentIndex(find_item(ui->psnStatusBox, static_cast<int>(g_cfg.net.psn_status.def)));
|
||||
ui->psnStatusBox->setEnabled(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->psnStatusBox->setEnabled(true);
|
||||
}
|
||||
});
|
||||
m_emu_settings->EnhanceComboBox(ui->netStatusBox, emu_settings_type::InternetStatus);
|
||||
SubscribeTooltip(ui->gb_netStatusBox, tooltips.settings.net_status);
|
||||
|
|
Loading…
Add table
Reference in a new issue