Compare commits

...

4 Commits

Author SHA1 Message Date
Stenzek c149d66d4d
System: Add 'Reduce Input Latency' option
i.e. pre-frame sleep.
2024-04-13 19:57:25 +10:00
Stenzek 6258cb9e0e
FullscreenUI: Various minor bug fixes 2024-04-13 19:57:25 +10:00
Stenzek 8ab1623276
CI/Flatpak: Remove unused file 2024-04-13 19:57:25 +10:00
PugsyMAME 7adbedd341
Renamed Mem Scanner Op Text&added Virtual Address (#3172)
* Renamed Mem Scanner Op Text&added Virtual Address

Renamed the Memory Scanner Operator Text for clarity. Replaced '...' with 'Value' and 'Previous' with 'Previous Result'.
Also changed "Any Value" to "Any Value ('New Search' or 'Reset Result Value')", Any Valur should really be at the top of the index and the Previous Results should come before the other Value operators. But that's a job for another time.
The Virtual Address extra will display the virtual address of DuckStation's PSX RAM so it can be easily edited with the likes of HXD or another tool where the location of the virtual memory needs to be known.

* Replaced Mem Scanner Op Text with latest English text

Not touched the translations, just added the updated english text for the Memory Scanner "Operator:" text

* Rearranged  Memory Scanner Operator class

Re-arranged Memory Scanner Operator class into a more logical order - with likely frequency of use moving item up the list.

New Order:-
Better Order:-
Any Value ('New Search' or 'Reset Result Value')         x    Any.
Less Than Previous Result                                x    LessThanLast,
Less or Equal to Previous Result                         x    LessEqualLast,
Greater Than Previous Result                             x    GreaterThanLast,
Greater or Equal to Previous Result                      x    GreaterEqualLast,
Not Equal to Previous Result (Changed Value)             x    NotEqualLast,
Equal to Previous Result (Unchanged Value)               x    EqualLast,
Decreased By Value                                       x    DecreasedBy,
Increased By Value                                       x    IncreasedBy,
Changed By Value                                         x    ChangedBy,
Equal to Value                                           x    Equal,
Not Equal to Value                                       x    NotEqual,
Less Than Value                                          x    LessThan,
Less or Equal to Value	                                 x    LessEqual,
Greater Than Value                                       x    GreaterThan,
Greater or Equal to Value                                x    GreaterEqual

* Rearranged  Memory Scanner Operator class

Changes operator order to:-
Any Value ('New Search' or 'Reset Result Value')        
Less Than Previous Result                               
Less or Equal to Previous Result                        
Greater Than Previous Result                            
Greater or Equal to Previous Result                     
Not Equal to Previous Result (Changed Value)            
Equal to Previous Result (Unchanged Value)              
Decreased By Value                                      
Increased By Value                                      
Changed By Value                                        
Equal to Value                                          
Not Equal to Value                                      
Less Than Value                                         
Less or Equal to Value	                                
Greater Than Value                                      
Greater or Equal to Value

* Memory Scanner line references updates

Updated <location filename="../memoryscannerwindow.ui" line="???"/> line numbers for the Memory Scanner operation re-ordering.
These are currently the only 4 translation files that make reference to memoryscannerwindow.ui, the other 12 still reference cheatmanagerdialog.ui so not replicated for them as this would only partially fix them - so I left them alone as I hope there's some automated tools to handle it.

* Update src/duckstation-qt/memoryscannerwindow.cpp
2024-04-13 19:57:12 +10:00
34 changed files with 756 additions and 498 deletions

View File

@ -24,6 +24,7 @@
"/lib/*.a",
"/lib/*.la",
"/lib/cmake",
"/lib/pkgconfig"
"/lib/pkgconfig",
"/share/aclocal"
]
}

View File

@ -342,7 +342,7 @@ private:
#endif
template<u32 L>
ALWAYS_INLINE SmallStackString<L> SmallStackString<L>::from_sprintf(const char* format, ...)
SmallStackString<L> SmallStackString<L>::from_sprintf(const char* format, ...)
{
std::va_list ap;
va_start(ap, format);

View File

@ -204,22 +204,22 @@ class MemoryScan
public:
enum class Operator
{
Equal,
NotEqual,
GreaterThan,
GreaterEqual,
LessThan,
LessEqual,
IncreasedBy,
DecreasedBy,
ChangedBy,
EqualLast,
NotEqualLast,
GreaterThanLast,
GreaterEqualLast,
Any,
LessThanLast,
LessEqualLast,
Any
GreaterThanLast,
GreaterEqualLast,
NotEqualLast,
EqualLast,
DecreasedBy,
IncreasedBy,
ChangedBy,
Equal,
NotEqual,
LessThan,
LessEqual,
GreaterThan,
GreaterEqual
};
struct Result

View File

@ -1917,8 +1917,8 @@ void FullscreenUI::DrawIntRangeSetting(SettingsInterface* bsi, const char* title
const bool game_settings = IsEditingGameSettings(bsi);
const std::optional<int> value =
bsi->GetOptionalIntValue(section, key, game_settings ? std::nullopt : std::optional<int>(default_value));
const std::string value_text(value.has_value() ? StringUtil::StdStringFromFormat(format, value.value()) :
FSUI_STR("Use Global Setting"));
const SmallString value_text =
value.has_value() ? SmallString::from_sprintf(format, value.value()) : SmallString(FSUI_VSTR("Use Global Setting"));
if (MenuButtonWithValue(title, summary, value_text.c_str(), enabled, height, font, summary_font))
ImGui::OpenPopup(title);
@ -1975,8 +1975,8 @@ void FullscreenUI::DrawFloatRangeSetting(SettingsInterface* bsi, const char* tit
const bool game_settings = IsEditingGameSettings(bsi);
const std::optional<float> value =
bsi->GetOptionalFloatValue(section, key, game_settings ? std::nullopt : std::optional<float>(default_value));
const std::string value_text(value.has_value() ? StringUtil::StdStringFromFormat(format, value.value() * multiplier) :
FSUI_STR("Use Global Setting"));
const SmallString value_text = value.has_value() ? SmallString::from_sprintf(format, value.value() * multiplier) :
SmallString(FSUI_VSTR("Use Global Setting"));
if (MenuButtonWithValue(title, summary, value_text.c_str(), enabled, height, font, summary_font))
ImGui::OpenPopup(title);
@ -2036,8 +2036,8 @@ void FullscreenUI::DrawFloatSpinBoxSetting(SettingsInterface* bsi, const char* t
const bool game_settings = IsEditingGameSettings(bsi);
const std::optional<float> value =
bsi->GetOptionalFloatValue(section, key, game_settings ? std::nullopt : std::optional<float>(default_value));
const std::string value_text(value.has_value() ? StringUtil::StdStringFromFormat(format, value.value() * multiplier) :
FSUI_STR("Use Global Setting"));
const SmallString value_text = value.has_value() ? SmallString::from_sprintf(format, value.value() * multiplier) :
SmallString(FSUI_VSTR("Use Global Setting"));
static bool manual_input = false;
@ -2174,12 +2174,12 @@ void FullscreenUI::DrawIntRectSetting(SettingsInterface* bsi, const char* title,
bsi->GetOptionalIntValue(section, right_key, game_settings ? std::nullopt : std::optional<int>(default_right));
const std::optional<int> bottom_value =
bsi->GetOptionalIntValue(section, bottom_key, game_settings ? std::nullopt : std::optional<int>(default_bottom));
const std::string value_text(fmt::format(
const SmallString value_text = SmallString::from_format(
"{}/{}/{}/{}",
left_value.has_value() ? StringUtil::StdStringFromFormat(format, left_value.value()) : std::string("Default"),
top_value.has_value() ? StringUtil::StdStringFromFormat(format, top_value.value()) : std::string("Default"),
right_value.has_value() ? StringUtil::StdStringFromFormat(format, right_value.value()) : std::string("Default"),
bottom_value.has_value() ? StringUtil::StdStringFromFormat(format, bottom_value.value()) : std::string("Default")));
left_value.has_value() ? TinyString::from_sprintf(format, left_value.value()) : TinyString(FSUI_VSTR("Default")),
top_value.has_value() ? TinyString::from_sprintf(format, top_value.value()) : TinyString(FSUI_VSTR("Default")),
right_value.has_value() ? TinyString::from_sprintf(format, right_value.value()) : TinyString(FSUI_VSTR("Default")),
bottom_value.has_value() ? TinyString::from_sprintf(format, bottom_value.value()) : TinyString(FSUI_VSTR("Default")));
if (MenuButtonWithValue(title, summary, value_text.c_str(), enabled, height, font, summary_font))
ImGui::OpenPopup(title);
@ -3350,32 +3350,62 @@ void FullscreenUI::DrawEmulationSettingsPage()
MenuHeading(FSUI_CSTR("Speed Control"));
DrawFloatListSetting(
bsi, FSUI_CSTR("Emulation Speed"),
bsi, FSUI_ICONSTR(ICON_FA_STOPWATCH, "Emulation Speed"),
FSUI_CSTR("Sets the target emulation speed. It is not guaranteed that this speed will be reached on all systems."),
"Main", "EmulationSpeed", 1.0f, emulation_speed_titles.data(), emulation_speed_values.data(),
emulation_speed_titles.size(), true);
DrawFloatListSetting(
bsi, FSUI_CSTR("Fast Forward Speed"),
bsi, FSUI_ICONSTR(ICON_FA_BOLT, "Fast Forward Speed"),
FSUI_CSTR("Sets the fast forward speed. It is not guaranteed that this speed will be reached on all systems."),
"Main", "FastForwardSpeed", 0.0f, emulation_speed_titles.data(), emulation_speed_values.data(),
emulation_speed_titles.size(), true);
DrawFloatListSetting(
bsi, FSUI_CSTR("Turbo Speed"),
bsi, FSUI_ICONSTR(ICON_FA_BOLT, "Turbo Speed"),
FSUI_CSTR("Sets the turbo speed. It is not guaranteed that this speed will be reached on all systems."), "Main",
"TurboSpeed", 2.0f, emulation_speed_titles.data(), emulation_speed_values.data(), emulation_speed_titles.size(),
true);
MenuHeading(FSUI_CSTR("Latency Control"));
DrawToggleSetting(bsi, FSUI_ICONSTR(ICON_FA_TV, "Vertical Sync (VSync)"),
FSUI_CSTR("Synchronizes presentation of the console's frames to the host. GSync/FreeSync users "
"should enable Optimal Frame Pacing instead."),
"Display", "VSync", false);
DrawToggleSetting(
bsi, FSUI_ICONSTR(ICON_FA_LIGHTBULB, "Sync To Host Refresh Rate"),
FSUI_CSTR("Adjusts the emulation speed so the console's refresh rate matches the host when VSync is enabled."),
"Main", "SyncToHostRefreshRate", false);
DrawToggleSetting(
bsi, FSUI_ICONSTR(ICON_FA_TACHOMETER_ALT, "Optimal Frame Pacing"),
FSUI_CSTR("Ensures every frame generated is displayed for optimal pacing. Enable for variable refresh displays, "
"such as GSync/FreeSync. Disable if you are having speed or sound issues."),
"Display", "OptimalFramePacing", false);
const bool optimal_frame_pacing_active = GetEffectiveBoolSetting(bsi, "Display", "OptimalFramePacing", false);
DrawToggleSetting(
bsi, FSUI_ICONSTR(ICON_FA_STOPWATCH_20, "Reduce Input Latency"),
FSUI_CSTR("Reduces input latency by delaying the start of frame until closer to the presentation time."), "Display",
"PreFrameSleep", false, optimal_frame_pacing_active);
const bool pre_frame_sleep_active =
(optimal_frame_pacing_active && GetEffectiveBoolSetting(bsi, "Display", "PreFrameSleep", false));
DrawFloatRangeSetting(
bsi, FSUI_ICONSTR(ICON_FA_BATTERY_FULL, "Frame Time Buffer"),
FSUI_CSTR("Specifies the amount of buffer time added, which reduces the additional sleep time introduced."),
"Display", "PreFrameSleepBuffer", Settings::DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER, 0.0f, 20.0f, "%.1f", 1.0f,
pre_frame_sleep_active);
MenuHeading(FSUI_CSTR("Runahead/Rewind"));
DrawToggleSetting(bsi, FSUI_CSTR("Enable Rewinding"),
DrawToggleSetting(bsi, FSUI_ICONSTR(ICON_FA_BACKWARD, "Enable Rewinding"),
FSUI_CSTR("Saves state periodically so you can rewind any mistakes while playing."), "Main",
"RewindEnable", false);
DrawFloatRangeSetting(
bsi, FSUI_CSTR("Rewind Save Frequency"),
bsi, FSUI_ICONSTR(ICON_FA_SAVE, "Rewind Save Frequency"),
FSUI_CSTR("How often a rewind state will be created. Higher frequencies have greater system requirements."), "Main",
"RewindFrequency", 10.0f, 0.0f, 3600.0f, FSUI_CSTR("%.2f Seconds"));
DrawIntRangeSetting(
bsi, FSUI_CSTR("Rewind Save Slots"),
bsi, FSUI_ICONSTR(ICON_FA_GLASS_WHISKEY, "Rewind Save Slots"),
FSUI_CSTR("How many saves will be kept for rewinding. Higher values have greater memory requirements."), "Main",
"RewindSaveSlots", 10, 1, 10000, FSUI_CSTR("%d Frames"));
@ -3389,7 +3419,7 @@ void FullscreenUI::DrawEmulationSettingsPage()
FSUI_NSTR("8 Frames"), FSUI_NSTR("9 Frames"), FSUI_NSTR("10 Frames")};
DrawIntListSetting(
bsi, FSUI_CSTR("Runahead"),
bsi, FSUI_ICONSTR(ICON_FA_RUNNING, "Runahead"),
FSUI_CSTR(
"Simulates the system ahead of time and rolls back/replays to reduce input lag. Very high system requirements."),
"Main", "RunaheadFrameCount", 0, runahead_options.data(), runahead_options.size(), true);
@ -3514,12 +3544,16 @@ void FullscreenUI::DoSaveInputProfile()
if (index < 0)
return;
CloseChoiceDialog();
if (index > 0)
{
DoSaveInputProfile(title);
CloseChoiceDialog();
}
else
{
CloseChoiceDialog();
DoSaveNewInputProfile();
}
});
}
@ -4180,23 +4214,6 @@ void FullscreenUI::DrawDisplaySettingsPage()
"GPU", "UseSoftwareRendererForReadbacks", false);
}
DrawToggleSetting(bsi, FSUI_CSTR("VSync"),
FSUI_CSTR("Synchronizes presentation of the console's frames to the host. GSync/FreeSync users "
"should enable Optimal Frame Pacing instead."),
"Display", "VSync", false);
DrawToggleSetting(
bsi, FSUI_CSTR("Sync To Host Refresh Rate"),
FSUI_CSTR("Adjusts the emulation speed so the console's refresh rate matches the host when VSync and Audio "
"Resampling are enabled."),
"Main", "SyncToHostRefreshRate", false);
DrawToggleSetting(
bsi, FSUI_CSTR("Optimal Frame Pacing"),
FSUI_CSTR("Ensures every frame generated is displayed for optimal pacing. Enable for variable refresh displays, "
"such as GSync/FreeSync. Disable if you are having speed or sound issues."),
"Display", "OptimalFramePacing", false);
MenuHeading(FSUI_CSTR("Rendering"));
DrawIntListSetting(
@ -6136,6 +6153,9 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
return;
}
if (!AreAnyDialogsOpen() && WantsToCloseMenu())
ReturnToPreviousWindow();
auto game_list_lock = GameList::GetLock();
const GameList::Entry* selected_entry = nullptr;
PopulateGameListEntryList();
@ -6346,11 +6366,8 @@ void FullscreenUI::DrawGameGrid(const ImVec2& heading_size)
return;
}
if (WantsToCloseMenu())
{
if (ImGui::IsWindowFocused())
if (ImGui::IsWindowFocused() && WantsToCloseMenu())
ReturnToPreviousWindow();
}
ResetFocusHere();
BeginMenuButtons();
@ -6537,14 +6554,11 @@ void FullscreenUI::DrawGameListSettingsWindow()
return;
}
if (WantsToCloseMenu())
{
if (ImGui::IsWindowFocused())
if (ImGui::IsWindowFocused() && WantsToCloseMenu())
{
s_current_main_window = MainWindowType::GameList;
QueueResetFocus();
}
}
auto lock = Host::GetSettingsLock();
SettingsInterface* bsi = GetEditingSettingsInterface(false);
@ -6982,7 +6996,7 @@ TRANSLATE_NOOP("FullscreenUI", "Add Shader");
TRANSLATE_NOOP("FullscreenUI", "Adds a new directory to the game search list.");
TRANSLATE_NOOP("FullscreenUI", "Adds a new shader to the chain.");
TRANSLATE_NOOP("FullscreenUI", "Adds additional precision to PGXP data post-projection. May improve visuals in some games.");
TRANSLATE_NOOP("FullscreenUI", "Adjusts the emulation speed so the console's refresh rate matches the host when VSync and Audio Resampling are enabled.");
TRANSLATE_NOOP("FullscreenUI", "Adjusts the emulation speed so the console's refresh rate matches the host when VSync is enabled.");
TRANSLATE_NOOP("FullscreenUI", "Advanced Settings");
TRANSLATE_NOOP("FullscreenUI", "All Time: {}");
TRANSLATE_NOOP("FullscreenUI", "Allow Booting Without SBI File");
@ -7151,7 +7165,7 @@ TRANSLATE_NOOP("FullscreenUI", "Enables more precise frame pacing at the cost of
TRANSLATE_NOOP("FullscreenUI", "Enables the replacement of background textures in supported games.");
TRANSLATE_NOOP("FullscreenUI", "Encore Mode");
TRANSLATE_NOOP("FullscreenUI", "Enhancements");
TRANSLATE_NOOP("FullscreenUI", "Ensures every frame generated is displayed for optimal pacing. Disable if you are having speed or sound issues.");
TRANSLATE_NOOP("FullscreenUI", "Ensures every frame generated is displayed for optimal pacing. Enable for variable refresh displays, such as GSync/FreeSync. Disable if you are having speed or sound issues.");
TRANSLATE_NOOP("FullscreenUI", "Enter Value");
TRANSLATE_NOOP("FullscreenUI", "Enter the name of the input profile you wish to create.");
TRANSLATE_NOOP("FullscreenUI", "Execution Mode");
@ -7177,6 +7191,7 @@ TRANSLATE_NOOP("FullscreenUI", "Force NTSC Timings");
TRANSLATE_NOOP("FullscreenUI", "Forces PAL games to run at NTSC timings, i.e. 60hz. Some PAL games will run at their \"normal\" speeds, while others will break.");
TRANSLATE_NOOP("FullscreenUI", "Forces a full rescan of all games previously identified.");
TRANSLATE_NOOP("FullscreenUI", "Forcibly mutes both CD-DA and XA audio from the CD-ROM. Can be used to disable background music in some games.");
TRANSLATE_NOOP("FullscreenUI", "Frame Time Buffer");
TRANSLATE_NOOP("FullscreenUI", "From File...");
TRANSLATE_NOOP("FullscreenUI", "Fullscreen Resolution");
TRANSLATE_NOOP("FullscreenUI", "GPU Adapter");
@ -7225,6 +7240,7 @@ TRANSLATE_NOOP("FullscreenUI", "Interface Settings");
TRANSLATE_NOOP("FullscreenUI", "Internal Resolution");
TRANSLATE_NOOP("FullscreenUI", "Last Played");
TRANSLATE_NOOP("FullscreenUI", "Last Played: %s");
TRANSLATE_NOOP("FullscreenUI", "Latency Control");
TRANSLATE_NOOP("FullscreenUI", "Launch Options");
TRANSLATE_NOOP("FullscreenUI", "Launch a game by selecting a file/disc image.");
TRANSLATE_NOOP("FullscreenUI", "Launch a game from a file, disc, or starts the console without any disc inserted.");
@ -7334,8 +7350,10 @@ TRANSLATE_NOOP("FullscreenUI", "RAIntegration is being used instead of the built
TRANSLATE_NOOP("FullscreenUI", "Read Speedup");
TRANSLATE_NOOP("FullscreenUI", "Readahead Sectors");
TRANSLATE_NOOP("FullscreenUI", "Recompiler Fast Memory Access");
TRANSLATE_NOOP("FullscreenUI", "Reduce Input Latency");
TRANSLATE_NOOP("FullscreenUI", "Reduces \"wobbly\" polygons by attempting to preserve the fractional component through memory transfers.");
TRANSLATE_NOOP("FullscreenUI", "Reduces hitches in emulation by reading/decompressing CD data asynchronously on a worker thread.");
TRANSLATE_NOOP("FullscreenUI", "Reduces input latency by delaying the start of frame until closer to the presentation time.");
TRANSLATE_NOOP("FullscreenUI", "Reduces polygon Z-fighting through depth testing. Low compatibility with games.");
TRANSLATE_NOOP("FullscreenUI", "Region");
TRANSLATE_NOOP("FullscreenUI", "Region: ");
@ -7454,6 +7472,7 @@ TRANSLATE_NOOP("FullscreenUI", "Smooths out the blockiness of magnified textures
TRANSLATE_NOOP("FullscreenUI", "Sort By");
TRANSLATE_NOOP("FullscreenUI", "Sort Reversed");
TRANSLATE_NOOP("FullscreenUI", "Sound Effects");
TRANSLATE_NOOP("FullscreenUI", "Specifies the amount of buffer time added, which reduces the additional sleep time introduced.");
TRANSLATE_NOOP("FullscreenUI", "Spectator Mode");
TRANSLATE_NOOP("FullscreenUI", "Speed Control");
TRANSLATE_NOOP("FullscreenUI", "Speeds up CD-ROM reads by the specified factor. May improve loading speeds in some games, and break others.");
@ -7474,7 +7493,7 @@ TRANSLATE_NOOP("FullscreenUI", "Summary");
TRANSLATE_NOOP("FullscreenUI", "Switches back to 4:3 display aspect ratio when displaying 24-bit content, usually FMVs.");
TRANSLATE_NOOP("FullscreenUI", "Switches between full screen and windowed when the window is double-clicked.");
TRANSLATE_NOOP("FullscreenUI", "Sync To Host Refresh Rate");
TRANSLATE_NOOP("FullscreenUI", "Synchronizes presentation of the console's frames to the host. Enable for smoother animations.");
TRANSLATE_NOOP("FullscreenUI", "Synchronizes presentation of the console's frames to the host. GSync/FreeSync users should enable Optimal Frame Pacing instead.");
TRANSLATE_NOOP("FullscreenUI", "Temporarily disables all enhancements, useful when testing.");
TRANSLATE_NOOP("FullscreenUI", "Test Unofficial Achievements");
TRANSLATE_NOOP("FullscreenUI", "Texture Dumping");
@ -7522,8 +7541,8 @@ TRANSLATE_NOOP("FullscreenUI", "Uses game-specific settings for controllers for
TRANSLATE_NOOP("FullscreenUI", "Uses perspective-correct interpolation for colors, which can improve visuals in some games.");
TRANSLATE_NOOP("FullscreenUI", "Uses perspective-correct interpolation for texture coordinates, straightening out warped textures.");
TRANSLATE_NOOP("FullscreenUI", "Uses screen positions to resolve PGXP data. May improve visuals in some games.");
TRANSLATE_NOOP("FullscreenUI", "VSync");
TRANSLATE_NOOP("FullscreenUI", "Value: {} | Default: {} | Minimum: {} | Maximum: {}");
TRANSLATE_NOOP("FullscreenUI", "Vertical Sync (VSync)");
TRANSLATE_NOOP("FullscreenUI", "When enabled and logged in, DuckStation will scan for achievements on startup.");
TRANSLATE_NOOP("FullscreenUI", "When enabled, DuckStation will assume all achievements are locked and not send any unlock notifications to the server.");
TRANSLATE_NOOP("FullscreenUI", "When enabled, DuckStation will list achievements from unofficial sets. These achievements are not tracked by RetroAchievements.");

View File

@ -349,6 +349,12 @@ void ImGuiManager::DrawPerformanceOverlay()
DRAW_LINE(fixed_font, text, IM_COL32(255, 255, 255, 255));
}
if (g_settings.display_show_latency_stats)
{
System::FormatLatencyStats(text);
DRAW_LINE(fixed_font, text, IM_COL32(255, 255, 255, 255));
}
if (g_settings.display_show_cpu_usage)
{
text.format("{:.2f}ms | {:.2f}ms | {:.2f}ms", System::GetMinimumFrameTime(), System::GetAverageFrameTime(),
@ -410,15 +416,6 @@ void ImGuiManager::DrawPerformanceOverlay()
FormatProcessorStat(text, System::GetSWThreadUsage(), System::GetSWThreadAverageTime());
DRAW_LINE(fixed_font, text, IM_COL32(255, 255, 255, 255));
}
#if 0
{
AudioStream* stream = g_spu.GetOutputStream();
const u32 frames = stream->GetBufferedFramesRelaxed();
text.fmt("Audio: {:<4u}f/{:<3u}ms", frames, AudioStream::GetMSForBufferSize(stream->GetSampleRate(), frames));
DRAW_LINE(fixed_font, text, IM_COL32(255, 255, 255, 255));
}
#endif
}
if (g_settings.display_show_gpu_usage && g_gpu_device->IsGPUTimingEnabled())

View File

@ -267,6 +267,9 @@ void Settings::Load(SettingsInterface& si)
display_screenshot_quality = static_cast<u8>(
std::clamp<u32>(si.GetUIntValue("Display", "ScreenshotQuality", DEFAULT_DISPLAY_SCREENSHOT_QUALITY), 1, 100));
display_optimal_frame_pacing = si.GetBoolValue("Display", "OptimalFramePacing", false);
display_pre_frame_sleep = si.GetBoolValue("Display", "PreFrameSleep", false);
display_pre_frame_sleep_buffer =
si.GetFloatValue("Display", "PreFrameSleepBuffer", DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER);
display_vsync = si.GetBoolValue("Display", "VSync", false);
display_force_4_3_for_24bit = si.GetBoolValue("Display", "Force4_3For24Bit", false);
display_active_start_offset = static_cast<s16>(si.GetIntValue("Display", "ActiveStartOffset", 0));
@ -278,6 +281,7 @@ void Settings::Load(SettingsInterface& si)
display_show_speed = si.GetBoolValue("Display", "ShowSpeed", false);
display_show_gpu_stats = si.GetBoolValue("Display", "ShowGPUStatistics", false);
display_show_resolution = si.GetBoolValue("Display", "ShowResolution", false);
display_show_latency_stats = si.GetBoolValue("Display", "ShowLatencyStatistics", false);
display_show_cpu_usage = si.GetBoolValue("Display", "ShowCPU", false);
display_show_gpu_usage = si.GetBoolValue("Display", "ShowGPU", false);
display_show_frame_times = si.GetBoolValue("Display", "ShowFrameTimes", false);
@ -521,6 +525,8 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const
si.SetStringValue("Display", "Alignment", GetDisplayAlignmentName(display_alignment));
si.SetStringValue("Display", "Scaling", GetDisplayScalingName(display_scaling));
si.SetBoolValue("Display", "OptimalFramePacing", display_optimal_frame_pacing);
si.SetBoolValue("Display", "PreFrameSleep", display_pre_frame_sleep);
si.SetFloatValue("Display", "PreFrameSleepBuffer", display_pre_frame_sleep_buffer);
si.SetBoolValue("Display", "VSync", display_vsync);
si.SetStringValue("Display", "ExclusiveFullscreenControl",
GetDisplayExclusiveFullscreenControlName(display_exclusive_fullscreen_control));
@ -535,6 +541,7 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const
si.SetBoolValue("Display", "ShowFPS", display_show_fps);
si.SetBoolValue("Display", "ShowSpeed", display_show_speed);
si.SetBoolValue("Display", "ShowResolution", display_show_resolution);
si.SetBoolValue("Display", "ShowLatencyStatistics", display_show_latency_stats);
si.SetBoolValue("Display", "ShowGPUStatistics", display_show_gpu_stats);
si.SetBoolValue("Display", "ShowCPU", display_show_cpu_usage);
si.SetBoolValue("Display", "ShowGPU", display_show_gpu_usage);

View File

@ -146,6 +146,7 @@ struct Settings
s8 display_line_start_offset = 0;
s8 display_line_end_offset = 0;
bool display_optimal_frame_pacing : 1 = false;
bool display_pre_frame_sleep : 1 = false;
bool display_vsync : 1 = false;
bool display_force_4_3_for_24bit : 1 = false;
bool gpu_24bit_chroma_smoothing : 1 = false;
@ -154,6 +155,7 @@ struct Settings
bool display_show_speed : 1 = false;
bool display_show_gpu_stats : 1 = false;
bool display_show_resolution : 1 = false;
bool display_show_latency_stats : 1 = false;
bool display_show_cpu_usage : 1 = false;
bool display_show_gpu_usage : 1 = false;
bool display_show_frame_times : 1 = false;
@ -161,8 +163,9 @@ struct Settings
bool display_show_inputs : 1 = false;
bool display_show_enhancements : 1 = false;
bool display_stretch_vertically : 1 = false;
float display_osd_scale = 100.0f;
float display_pre_frame_sleep_buffer = DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER;
float display_max_fps = DEFAULT_DISPLAY_MAX_FPS;
float display_osd_scale = 100.0f;
float gpu_pgxp_tolerance = -1.0f;
float gpu_pgxp_depth_clear_threshold = DEFAULT_GPU_PGXP_DEPTH_THRESHOLD / GPU_PGXP_DEPTH_THRESHOLD_SCALE;
@ -498,6 +501,7 @@ struct Settings
static constexpr DisplayScreenshotMode DEFAULT_DISPLAY_SCREENSHOT_MODE = DisplayScreenshotMode::ScreenResolution;
static constexpr DisplayScreenshotFormat DEFAULT_DISPLAY_SCREENSHOT_FORMAT = DisplayScreenshotFormat::PNG;
static constexpr u8 DEFAULT_DISPLAY_SCREENSHOT_QUALITY = 85;
static constexpr float DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER = 2.0f;
static constexpr float DEFAULT_OSD_SCALE = 100.0f;
static constexpr u8 DEFAULT_CDROM_READAHEAD_SECTORS = 8;

View File

@ -45,6 +45,7 @@
#include "util/postprocessing.h"
#include "util/state_wrapper.h"
#include "common/align.h"
#include "common/error.h"
#include "common/file_system.h"
#include "common/log.h"
@ -113,6 +114,9 @@ static void LogUnsafeSettingsToConsole(const std::string& messages);
/// Throttles the system, i.e. sleeps until it's time to execute the next frame.
static void Throttle(Common::Timer::Value current_time);
static void UpdatePerformanceCounters();
static void AccumulatePreFrameSleepTime();
static void UpdatePreFrameSleepTime();
static void SetRewinding(bool enabled);
static bool SaveRewindState();
@ -166,12 +170,6 @@ static const GameDatabase::Entry* s_running_game_entry = nullptr;
static System::GameHash s_running_game_hash;
static bool s_was_fast_booted;
static float s_throttle_frequency = 0.0f;
static float s_target_speed = 0.0f;
static Common::Timer::Value s_frame_period = 0;
static Common::Timer::Value s_next_frame_time = 0;
static bool s_last_frame_skipped = false;
static bool s_system_executing = false;
static bool s_system_interrupted = false;
static bool s_frame_step_request = false;
@ -179,7 +177,20 @@ static bool s_fast_forward_enabled = false;
static bool s_turbo_enabled = false;
static bool s_throttler_enabled = false;
static bool s_optimal_frame_pacing = false;
static bool s_pre_frame_sleep = false;
static bool s_syncing_to_host = false;
static bool s_last_frame_skipped = false;
static float s_throttle_frequency = 0.0f;
static float s_target_speed = 0.0f;
static Common::Timer::Value s_frame_period = 0;
static Common::Timer::Value s_next_frame_time = 0;
static Common::Timer::Value s_frame_start_time = 0;
static Common::Timer::Value s_last_active_frame_time = 0;
static Common::Timer::Value s_pre_frame_sleep_time = 0;
static Common::Timer::Value s_max_active_frame_time = 0;
static float s_average_frame_time_accumulator = 0.0f;
static float s_minimum_frame_time_accumulator = 0.0f;
@ -1861,7 +1872,15 @@ void System::FrameDone()
SaveRunaheadState();
}
const Common::Timer::Value current_time = Common::Timer::GetCurrentValue();
Common::Timer::Value current_time = Common::Timer::GetCurrentValue();
// pre-frame sleep accounting (input lag reduction)
const Common::Timer::Value pre_frame_sleep_until = s_next_frame_time + s_pre_frame_sleep_time;
s_last_active_frame_time = current_time - s_frame_start_time;
if (s_pre_frame_sleep)
AccumulatePreFrameSleepTime();
// explicit present (frame pacing)
if (current_time < s_next_frame_time || s_syncing_to_host || s_optimal_frame_pacing || s_last_frame_skipped)
{
const bool throttle_before_present = (s_optimal_frame_pacing && s_throttler_enabled && !IsExecutionInterrupted());
@ -1890,6 +1909,25 @@ void System::FrameDone()
Throttle(current_time);
}
// pre-frame sleep (input lag reduction)
current_time = Common::Timer::GetCurrentValue();
if (s_pre_frame_sleep)
{
// don't sleep if it's under 1ms, because we're just going to overshoot (or spin).
if (pre_frame_sleep_until > current_time &&
Common::Timer::ConvertValueToMilliseconds(pre_frame_sleep_until - current_time) >= 1)
{
Common::Timer::SleepUntil(pre_frame_sleep_until, true);
current_time = Common::Timer::GetCurrentValue();
}
else
{
Log_WarningPrint("Skipping pre-frame sleep");
}
}
s_frame_start_time = current_time;
// Input poll already done above
if (s_runahead_frames == 0)
{
@ -1940,6 +1978,7 @@ void System::UpdateThrottlePeriod()
void System::ResetThrottler()
{
s_next_frame_time = Common::Timer::GetCurrentValue() + s_frame_period;
s_pre_frame_sleep_time = 0;
}
void System::Throttle(Common::Timer::Value current_time)
@ -2624,6 +2663,9 @@ void System::UpdatePerformanceCounters()
if (g_settings.display_show_gpu_stats)
g_gpu->UpdateStatistics(frames_run);
if (s_pre_frame_sleep)
UpdatePreFrameSleepTime();
Log_VerbosePrintf("FPS: %.2f VPS: %.2f CPU: %.2f GPU: %.2f Average: %.2fms Min: %.2fms Max: %.2f ms", s_fps, s_vps,
s_cpu_thread_usage, s_gpu_usage, s_average_frame_time, s_minimum_frame_time, s_maximum_frame_time);
@ -2649,6 +2691,56 @@ void System::ResetPerformanceCounters()
ResetThrottler();
}
void System::AccumulatePreFrameSleepTime()
{
DebugAssert(s_pre_frame_sleep);
s_max_active_frame_time = std::max(s_max_active_frame_time, s_last_active_frame_time);
// in case one frame runs over, adjust to compensate
const Common::Timer::Value max_sleep_time_for_this_frame =
s_frame_period - std::min(s_last_active_frame_time, s_frame_period);
if (max_sleep_time_for_this_frame < s_pre_frame_sleep_time)
{
s_pre_frame_sleep_time = Common::AlignDown(max_sleep_time_for_this_frame,
static_cast<unsigned int>(Common::Timer::ConvertMillisecondsToValue(1)));
Log_DevFmt("Adjust pre-frame time to {} ms due to overrun of {} ms",
Common::Timer::ConvertValueToMilliseconds(s_pre_frame_sleep_time),
Common::Timer::ConvertValueToMilliseconds(s_last_active_frame_time));
}
}
void System::UpdatePreFrameSleepTime()
{
DebugAssert(s_pre_frame_sleep);
const Common::Timer::Value expected_frame_time =
s_max_active_frame_time + Common::Timer::ConvertMillisecondsToValue(g_settings.display_pre_frame_sleep_buffer);
s_pre_frame_sleep_time = Common::AlignDown(s_frame_period - std::min(expected_frame_time, s_frame_period),
static_cast<unsigned int>(Common::Timer::ConvertMillisecondsToValue(1)));
Log_DevFmt("Set pre-frame time to {} ms (expected frame time of {} ms)",
Common::Timer::ConvertValueToMilliseconds(s_pre_frame_sleep_time),
Common::Timer::ConvertValueToMilliseconds(expected_frame_time));
s_max_active_frame_time = 0;
}
void System::FormatLatencyStats(SmallStringBase& str)
{
AudioStream* audio_stream = SPU::GetOutputStream();
const u32 audio_latency =
AudioStream::GetMSForBufferSize(audio_stream->GetSampleRate(), audio_stream->GetBufferedFramesRelaxed());
const double active_frame_time = std::ceil(Common::Timer::ConvertValueToMilliseconds(s_last_active_frame_time));
const double pre_frame_time = std::ceil(Common::Timer::ConvertValueToMilliseconds(s_pre_frame_sleep_time));
const double input_latency = std::ceil(
Common::Timer::ConvertValueToMilliseconds(s_frame_period - s_pre_frame_sleep_time) -
Common::Timer::ConvertValueToMilliseconds(static_cast<Common::Timer::Value>(s_runahead_frames) * s_frame_period));
str.format("AF: {:.0f}ms | PF: {:.0f}ms | IL: {:.0f}ms | AL: {}ms", active_frame_time, pre_frame_time, input_latency,
audio_latency);
}
void System::UpdateSpeedLimiterState()
{
const float old_target_speed = s_target_speed;
@ -2657,6 +2749,7 @@ void System::UpdateSpeedLimiterState()
(s_fast_forward_enabled ? g_settings.fast_forward_speed : g_settings.emulation_speed);
s_throttler_enabled = (s_target_speed != 0.0f);
s_optimal_frame_pacing = s_throttler_enabled && g_settings.display_optimal_frame_pacing;
s_pre_frame_sleep = s_throttler_enabled && g_settings.display_pre_frame_sleep;
s_syncing_to_host = false;
if (g_settings.sync_to_host_refresh_rate && (g_settings.audio_stretch_mode != AudioStretchMode::Off) &&
@ -3786,6 +3879,8 @@ void System::CheckForSettingsChanges(const Settings& old_settings)
g_settings.fast_forward_speed != old_settings.fast_forward_speed ||
g_settings.display_max_fps != old_settings.display_max_fps ||
g_settings.display_optimal_frame_pacing != old_settings.display_optimal_frame_pacing ||
g_settings.display_pre_frame_sleep != old_settings.display_pre_frame_sleep ||
g_settings.display_pre_frame_sleep_buffer != old_settings.display_pre_frame_sleep_buffer ||
g_settings.display_vsync != old_settings.display_vsync ||
g_settings.sync_to_host_refresh_rate != old_settings.sync_to_host_refresh_rate)
{

View File

@ -2,10 +2,13 @@
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
#pragma once
#include "common/timer.h"
#include "settings.h"
#include "timing_event.h"
#include "types.h"
#include "common/timer.h"
#include <memory>
#include <optional>
#include <string>
@ -13,6 +16,7 @@
class ByteStream;
class CDImage;
class Error;
class SmallStringBase;
class StateWrapper;
class Controller;
@ -230,6 +234,7 @@ float GetGPUUsage();
float GetGPUAverageTime();
const FrameTimeHistory& GetFrameTimeHistory();
u32 GetFrameTimeHistoryPos();
void FormatLatencyStats(SmallStringBase& str);
/// Loads global settings (i.e. EmuConfig).
void LoadSettings(bool display_osd_messages);
@ -282,8 +287,6 @@ void SetThrottleFrequency(float frequency);
/// Updates the throttle period, call when target emulation speed changes.
void UpdateThrottlePeriod();
void ResetThrottler();
void UpdatePerformanceCounters();
void ResetPerformanceCounters();
/// Resets vsync/max present fps state.

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
#include "emulationsettingswidget.h"
@ -19,6 +19,9 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsWindow* dialog, QWidget
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.vsync, "Display", "VSync", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.syncToHostRefreshRate, "Main", "SyncToHostRefreshRate", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.optimalFramePacing, "Display", "OptimalFramePacing", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.preFrameSleep, "Display", "PreFrameSleep", false);
SettingWidgetBinder::BindWidgetToFloatSetting(sif, m_ui.preFrameSleepBuffer, "Display", "PreFrameSleepBuffer",
Settings::DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.rewindEnable, "Main", "RewindEnable", false);
SettingWidgetBinder::BindWidgetToFloatSetting(sif, m_ui.rewindSaveFrequency, "Main", "RewindFrequency", 10.0f);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.rewindSaveSlots, "Main", "RewindSaveSlots", 10);
@ -69,6 +72,9 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsWindow* dialog, QWidget
connect(m_ui.turboSpeed, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&EmulationSettingsWidget::onTurboSpeedIndexChanged);
connect(m_ui.vsync, &QCheckBox::checkStateChanged, this, &EmulationSettingsWidget::onVSyncChanged);
connect(m_ui.optimalFramePacing, &QCheckBox::checkStateChanged, this,
&EmulationSettingsWidget::onOptimalFramePacingChanged);
connect(m_ui.preFrameSleep, &QCheckBox::checkStateChanged, this, &EmulationSettingsWidget::onPreFrameSleepChanged);
connect(m_ui.rewindEnable, &QCheckBox::checkStateChanged, this, &EmulationSettingsWidget::updateRewind);
connect(m_ui.rewindSaveFrequency, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this,
@ -96,16 +102,25 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsWindow* dialog, QWidget
"instead.</strong>"));
dialog->registerWidgetHelp(
m_ui.syncToHostRefreshRate, tr("Sync To Host Refresh Rate"), tr("Unchecked"),
tr("Adjusts the emulation speed so the console's refresh rate matches the host's refresh rate when both VSync and "
"Audio Resampling settings are enabled. This results in the smoothest animations possible, at the cost of "
"potentially increasing the emulation speed by less than 1%. Sync To Host Refresh Rate will not take effect if "
"the console's refresh rate is too far from the host's refresh rate. Users with variable refresh rate displays "
"should disable this option."));
tr(
"Adjusts the emulation speed so the console's refresh rate matches the host's refresh rate when VSync is "
"enabled. This results in the smoothest animations possible, at the cost of potentially increasing the emulation "
"speed by less than 1%. Sync To Host Refresh Rate will not take effect if the console's refresh rate is too far "
"from the host's refresh rate. Users with variable refresh rate displays should disable this option."));
dialog->registerWidgetHelp(
m_ui.optimalFramePacing, tr("Optimal Frame Pacing"), tr("Unchecked"),
tr("Enabling this option will ensure every frame the console renders is displayed to the screen, at a consistent "
"rate, for optimal frame pacing. If you have a GSync/FreeSync display, enable this option. If you are having "
"difficulties maintaining full speed, or are getting audio glitches, try disabling this option."));
dialog->registerWidgetHelp(
m_ui.preFrameSleep, tr("Reduce Input Latency"), tr("Unchecked"),
tr("Reduces input latency by delaying the start of frame until closer to the presentation time. This may cause "
"dropped frames on slower systems with higher frame time variance, if the buffer size is not sufficient."));
dialog->registerWidgetHelp(m_ui.preFrameSleepBuffer, tr("Frame Time Buffer"),
tr("%1 ms").arg(Settings::DEFAULT_DISPLAY_PRE_FRAME_SLEEP_BUFFER),
tr("Specifies the amount of buffer time added, which reduces the additional sleep time "
"introduced. Higher values increase input latency, but decrease the risk of overrun, "
"or missed frames. Lower values require faster hardware."));
dialog->registerWidgetHelp(
m_ui.rewindEnable, tr("Rewinding"), tr("Unchecked"),
tr("<b>Enable Rewinding:</b> Saves state periodically so you can rewind any mistakes while playing.<br> "
@ -119,6 +134,7 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsWindow* dialog, QWidget
"Simulates the system ahead of time and rolls back/replays to reduce input lag. Very high system requirements."));
onVSyncChanged();
onOptimalFramePacingChanged();
updateRewind();
}
@ -190,6 +206,21 @@ void EmulationSettingsWidget::onVSyncChanged()
m_ui.syncToHostRefreshRate->setEnabled(vsync);
}
void EmulationSettingsWidget::onOptimalFramePacingChanged()
{
const bool optimal_frame_pacing_enabled = m_dialog->getEffectiveBoolValue("Display", "OptimalFramePacing", false);
m_ui.preFrameSleep->setEnabled(optimal_frame_pacing_enabled);
onPreFrameSleepChanged();
}
void EmulationSettingsWidget::onPreFrameSleepChanged()
{
const bool pre_frame_sleep_enabled = m_dialog->getEffectiveBoolValue("Display", "PreFrameSleep", false);
const bool show_buffer_size = (m_ui.preFrameSleep->isEnabled() && pre_frame_sleep_enabled);
m_ui.preFrameSleepBuffer->setVisible(show_buffer_size);
m_ui.preFrameSleepBufferLabel->setVisible(show_buffer_size);
}
void EmulationSettingsWidget::updateRewind()
{
const bool rewind_enabled = m_dialog->getEffectiveBoolValue("Main", "RewindEnable", false);

View File

@ -22,6 +22,8 @@ private Q_SLOTS:
void onFastForwardSpeedIndexChanged(int index);
void onTurboSpeedIndexChanged(int index);
void onVSyncChanged();
void onOptimalFramePacingChanged();
void onPreFrameSleepChanged();
void updateRewind();
private:

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>568</width>
<height>369</height>
<width>618</width>
<height>440</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -59,7 +59,14 @@
<item row="2" column="1">
<widget class="QComboBox" name="turboSpeed"/>
</item>
<item row="3" column="0" colspan="2">
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Latency Control</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="vsync">
@ -68,7 +75,7 @@
</property>
</widget>
</item>
<item row="0" column="2">
<item row="0" column="1">
<widget class="QCheckBox" name="syncToHostRefreshRate">
<property name="text">
<string>Sync To Host Refresh Rate</string>
@ -82,6 +89,35 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="preFrameSleep">
<property name="text">
<string>Reduce Input Latency</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="preFrameSleepBufferLayout" stretch="0,1">
<item>
<widget class="QLabel" name="preFrameSleepBufferLabel">
<property name="text">
<string>Frame Time Buffer:</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="preFrameSleepBuffer">
<property name="suffix">
<string> Milliseconds</string>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="singleStep">
<double>0.500000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
</layout>

View File

@ -174,6 +174,8 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showGPU, "Display", "ShowGPU", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showInput, "Display", "ShowInputs", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showGPUStatistics, "Display", "ShowGPUStatistics", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showLatencyStatistics, "Display", "ShowLatencyStatistics",
false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showStatusIndicators, "Display", "ShowStatusIndicators", true);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showFrameTimes, "Display", "ShowFrameTimes", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showSettings, "Display", "ShowEnhancements", false);
@ -426,6 +428,9 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
tr("Shows the host's GPU usage in the top-right corner of the display."));
dialog->registerWidgetHelp(m_ui.showGPUStatistics, tr("Show GPU Statistics"), tr("Unchecked"),
tr("Shows information about the emulated GPU in the top-right corner of the display."));
dialog->registerWidgetHelp(
m_ui.showLatencyStatistics, tr("Show Latency Statistics"), tr("Unchecked"),
tr("Shows information about input and audio latency in the top-right corner of the display."));
dialog->registerWidgetHelp(
m_ui.showFrameTimes, tr("Show Frame Times"), tr("Unchecked"),
tr("Shows the history of frame rendering times as a graph in the top-right corner of the display."));

View File

@ -704,20 +704,6 @@
</item>
<item row="1" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout_3">
<item row="4" column="0">
<widget class="QCheckBox" name="showInput">
<property name="text">
<string>Show Controller Input</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="showStatusIndicators">
<property name="text">
<string>Show Status Indicators</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="showFPS">
<property name="text">
@ -732,20 +718,6 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="showResolution">
<property name="text">
<string>Show Resolution</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="showSettings">
<property name="text">
<string>Show Settings</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="showCPU">
<property name="text">
@ -767,17 +739,52 @@
</property>
</widget>
</item>
<item row="3" column="1">
<item row="2" column="1">
<widget class="QCheckBox" name="showGPU">
<property name="text">
<string>Show GPU Usage</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="showSettings">
<property name="text">
<string>Show Settings</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="showStatusIndicators">
<property name="text">
<string>Show Status Indicators</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="showInput">
<property name="text">
<string>Show Controller Input</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="showFrameTimes">
<property name="text">
<string>Show Frame Times</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="showGPU">
<item row="3" column="1">
<widget class="QCheckBox" name="showResolution">
<property name="text">
<string>Show GPU Usage</string>
<string>Show Resolution</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="showLatencyStatistics">
<property name="text">
<string>Show Latency Statistics</string>
</property>
</widget>
</item>

View File

@ -90,6 +90,8 @@ MemoryScannerWindow::MemoryScannerWindow() : QWidget()
{
m_ui.setupUi(this);
connectUi();
m_ui.cheatEngineAddress->setText(tr("Address of RAM for HxD Usage: 0x%1").arg(reinterpret_cast<qulonglong>(Bus::g_unprotected_ram), 16, 16, QChar('0')));
}
MemoryScannerWindow::~MemoryScannerWindow() = default;

View File

@ -152,82 +152,82 @@
<widget class="QComboBox" name="scanOperator">
<item>
<property name="text">
<string>Equal to...</string>
<string>Any Value ('New Search' or 'Reset Result Value')</string>
</property>
</item>
<item>
<property name="text">
<string>Not Equal to...</string>
<string>Less Than Previous Result</string>
</property>
</item>
<item>
<property name="text">
<string>Greater Than...</string>
<string>Less or Equal to Previous Result</string>
</property>
</item>
<item>
<property name="text">
<string>Greater or Equal...</string>
<string>Greater Than Previous Result</string>
</property>
</item>
<item>
<property name="text">
<string>Less Than...</string>
<string>Greater or Equal to Previous Result</string>
</property>
</item>
<item>
<property name="text">
<string>Less or Equal...</string>
<string>Not Equal to Previous Result (Changed Value)</string>
</property>
</item>
<item>
<property name="text">
<string>Increased By...</string>
<string>Equal to Previous Result (Unchanged Value)</string>
</property>
</item>
<item>
<property name="text">
<string>Decreased By...</string>
<string>Decreased By Value</string>
</property>
</item>
<item>
<property name="text">
<string>Changed By...</string>
<string>Increased By Value</string>
</property>
</item>
<item>
<property name="text">
<string>Equal to Previous (Unchanged Value)</string>
<string>Changed By Value</string>
</property>
</item>
<item>
<property name="text">
<string>Not Equal to Previous (Changed Value)</string>
<string>Equal to Value</string>
</property>
</item>
<item>
<property name="text">
<string>Greater Than Previous</string>
<string>Not Equal to Value</string>
</property>
</item>
<item>
<property name="text">
<string>Greater or Equal to Previous</string>
<string>Less Than Value</string>
</property>
</item>
<item>
<property name="text">
<string>Less Than Previous</string>
<string>Less or Equal to Value</string>
</property>
</item>
<item>
<property name="text">
<string>Less or Equal to Previous</string>
<string>Greater Than Value</string>
</property>
</item>
<item>
<property name="text">
<string>Any Value</string>
<string>Greater or Equal to Value</string>
</property>
</item>
</widget>
@ -446,6 +446,48 @@
</property>
</widget>
</item>
<item>
<widget class="QTextEdit" name="cheatEngineAddress">
<property name="enabled">
<bool>true</bool>
</property>
<property name="maximumSize">
<size>
<width>833</width>
<height>40</height>
</size>
</property>
<property name="inputMethodHints">
<set>Qt::ImhNone</set>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
<property name="acceptRichText">
<bool>false</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextEditable</set>
</property>
<property name="placeholderText">
<string notr="true"/>
</property>
<property name="text">
<string>cheat engine address string</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">

View File

@ -2165,82 +2165,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Gleich...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Ungleich...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Größer als...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Größer gleich...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Kleiner als...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Kleiner gleich...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Erhöht durch...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Verringert durch...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Geändert durch...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Gleich zum Vorherigen (unveränderter Wert)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Ungleich zum Vorherigen (geänderter Wert)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Größer zum Vorherigen</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Größer gleich zum Vorherigen</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Kleiner zum Vorherigen</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Kleiner gleich zum Vorherigen</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Beliebiger Wert</translation>
</message>
<message>

View File

@ -2179,82 +2179,82 @@ Mensajes sin leer: {}</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Igual a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Distinto a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Mayor que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Mayor o igual que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Menor que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Menor o igual que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Incrementado por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Disminuido por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Reemplazado por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Igual a valor anterior (sin cambios)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Distinto a valor anterior (con cambios)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Mayor que valor previo</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Mayor o igual a valor anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Menor que valor anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Menor o igual a valor anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Cualquier valor</translation>
</message>
<message>

View File

@ -2172,82 +2172,82 @@ Mensajes sin leer: {}</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Igual a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Distinto a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Mayor que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Mayor o igual...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Menor que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Menor o igual...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Incrementado por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Decrementado por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Reemplazado por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Igual a valor previo (sin cambios)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Distinto a valor previo (con cambios)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Mayor que valor previo</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Mayor o igual a valor previo</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Menor a valor previo</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Menor o igual a valor previo</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Cualquier valor</translation>
</message>
<message>

View File

@ -2167,82 +2167,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Équivaut à...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>N&apos;équivaut pas à...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Supérieur à...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Supérieur ou égal...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Inférieur à...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Inférieur ou égal...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Augmenté par...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Diminué par...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Changé par...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Équivaut au précédent (valeur inchangée)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Non-équivalent au précédent (valeur changée)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Supérieur au précédent</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Supérieur ou égal au précédent</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Inférieur au précédent</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Inférieur ou égal ou précédent</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Toute valeur</translation>
</message>
<message>

View File

@ -2164,82 +2164,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@ -2167,82 +2167,82 @@ Pesan belum dibaca: {}</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@ -2170,82 +2170,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Uguale a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Non uguale a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Maggiore di...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Maggiore o uguale a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Minore di...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Minore o uguale a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Aumentato di...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Diminuito di...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Cambiato di...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Uguale al precedente (valore non cambiato)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Non uguale al precedente (valore cambiato)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Maggiore del precedente</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Maggiore o uguale al precedente</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Minore del precedente</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Minore o uguale al precedente</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Qualsiasi valore</translation>
</message>
<message>

View File

@ -2164,57 +2164,57 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>&quot;&quot;</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation> ()</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation> ()</translation>
</message>
<message>
@ -2224,27 +2224,27 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation></translation>
</message>
<message>

View File

@ -2178,57 +2178,57 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation> ...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation> ...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation> ...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation> ...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation> ( )</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation> ( )</translation>
</message>
<message>
@ -2238,27 +2238,27 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation> </translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation> </translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation> </translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation> </translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation> </translation>
</message>
<message>

View File

@ -2166,82 +2166,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@ -12474,83 +12474,83 @@ Czy na pewno chcesz kontynuować?</translation>
<translation>Operator:</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Equal to Value</source>
<translation>Jest równy...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Not Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Not Equal to Value</source>
<translation>Nie jest równy...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Greater Than...</source>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Greater Than Value</source>
<translation>Większy niż...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Greater or Equal to Value</source>
<translation>Większy lub równy...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Less Than...</source>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Less Than Value</source>
<translation>Mniejszy niż...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Less or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less or Equal to Value</source>
<translation>Mniejszy lub równy...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Increased By...</source>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Increased By Value</source>
<translation>Zwiększony o...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="190"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Zmniejszony o...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Changed By...</source>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Changed By Value</source>
<translation>Zmieniony o...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Equal to Previous (Unchanged Value)</source>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Równy poprzedniej (niezmieniona wartość)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Not Equal to Previous (Changed Value)</source>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Nie jest równy poprzedniej (zmieniona wartość)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Greater Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater Than Previous Result</source>
<translation>Większy niż poprzedni</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Greater or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Greater or Equal to Previous Result</source>
<translation>Większy lub równy poprzedniemu</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Less Than Previous Result</source>
<translation>Mniejszy niż poprzedni</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Less or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Less or Equal to Previous Result</source>
<translation>Mniejszy lub równy poprzedniemu</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Any Value</source>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Dowolna wartość</translation>
</message>
<message>

View File

@ -12461,83 +12461,83 @@ Tem certeza de que deseja continuar?</translation>
<translation>Operador:</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Equal to Value</source>
<translation>Equivale a...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Not Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Not Equal to Value</source>
<translation>Diferente de...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Greater Than...</source>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Greater Than Value</source>
<translation>Maior que...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Greater or Equal to Value</source>
<translation>Maior ou igual...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Less Than...</source>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Less Than Value</source>
<translation>Menor que...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Less or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less or Equal to Value</source>
<translation>Menor ou igual...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Increased By...</source>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Increased By Value</source>
<translation>Aumentado por...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="190"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Diminuir por...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Changed By...</source>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Changed By Value</source>
<translation>Alterado por...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Equal to Previous (Unchanged Value)</source>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Igual ao anteriror (valor inalterado)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Not Equal to Previous (Changed Value)</source>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Diferente do anterior (valor alterado)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Greater Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater Than Previous Result</source>
<translation>Maior do que o anterior</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Greater or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Greater or Equal to Previous Result</source>
<translation>Maior ou igual ao anterior</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Less Than Previous Result</source>
<translation>Menor que o anterior</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Less or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Less or Equal to Previous Result</source>
<translation>Menor ou igual ao anterior</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Any Value</source>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Qualquer valor</translation>
</message>
<message>

View File

@ -2165,82 +2165,82 @@ Unread messages: {}</source>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Igual a...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Diferente de...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Maior Que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Maior ou Igual...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Menor Que...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Menor ou Igual...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Aumentado Por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Diminuido Por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Mudado Por...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Igual ao Anteriror (Valor Inalterado)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Diferente do Anterior (Valor Alterado)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Maior Que o Anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Maior ou Igual ao Anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Menor que o Anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Menor ou Igual ao Anterior</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Qualquer Valor</translation>
</message>
<message>

View File

@ -12675,83 +12675,83 @@ Are you sure you want to continue?</source>
<translation type="unfinished">Оператор:</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Equal to Value</source>
<translation type="unfinished">Равно...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Not Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Not Equal to Value</source>
<translation type="unfinished">Не равно...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Greater Than...</source>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Greater Than Value</source>
<translation type="unfinished">Больше, чем...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Greater or Equal to Value</source>
<translation type="unfinished">Больше или равно...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Less Than...</source>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Less Than Value</source>
<translation type="unfinished">Меньше, чем...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Less or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less or Equal Value</source>
<translation type="unfinished">Меньше или равно...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Increased By...</source>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Increased By Value</source>
<translation type="unfinished">Увеличилось на...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="190"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation type="unfinished">Уменьшилось на...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Changed By...</source>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Changed By Value</source>
<translation type="unfinished">Изменилось на...</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Equal to Previous (Unchanged Value)</source>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation type="unfinished">Равно предыдущему (неизменное значение)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Not Equal to Previous (Changed Value)</source>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation type="unfinished">Не равно предыдущему (измененное значение)</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Greater Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater Than Previous Result</source>
<translation type="unfinished">Больше, чем предыдущий</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Greater or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Greater or Equal to Previous Result</source>
<translation type="unfinished">Больше или равно предыдущему</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Less Than Previous Result</source>
<translation type="unfinished">Меньше, чем предыдущий</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Less or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Less or Equal to Previous Result</source>
<translation type="unfinished">Меньше или равно предыдущему</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Any Value</source>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation type="unfinished">Любое значение</translation>
</message>
<message>

View File

@ -2178,82 +2178,82 @@ Okunmamış Mesajlar: {}</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="296"/>
<source>Equal to...</source>
<source>Equal to Value</source>
<translation>Eşittir Şuna...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="301"/>
<source>Not Equal to...</source>
<source>Not Equal to Value</source>
<translation>Eşit Değildir Şuna...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="306"/>
<source>Greater Than...</source>
<source>Greater Than Value</source>
<translation>Büyüktür Den...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="311"/>
<source>Greater or Equal...</source>
<source>Greater or Equal to Value</source>
<translation>Büyük yada Eşittir...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="316"/>
<source>Less Than...</source>
<source>Less Than Value</source>
<translation>Azdır...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="321"/>
<source>Less or Equal...</source>
<source>Less or Equal to Value</source>
<translation>Az yada Eşittir...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="326"/>
<source>Increased By...</source>
<source>Increased By Value</source>
<translation>Yükselir Den...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="331"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation>Azalır dan...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="336"/>
<source>Changed By...</source>
<source>Changed By Value</source>
<translation>Değiştirilir den...</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="341"/>
<source>Equal to Previous (Unchanged Value)</source>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation>Öncekine Eşit: (Değişmemiş Veri)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="346"/>
<source>Not Equal to Previous (Changed Value)</source>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation>Öncekine Eşit Değil (Değişmiş Veri)</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="351"/>
<source>Greater Than Previous</source>
<source>Greater Than Previous Result</source>
<translation>Öncekinden Büyük</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="356"/>
<source>Greater or Equal to Previous</source>
<source>Greater or Equal to Previous Result</source>
<translation>Öncekinden Eşit yada Büyük</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="361"/>
<source>Less Than Previous</source>
<source>Less Than Previous Result</source>
<translation>Öncekinden Az</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="366"/>
<source>Less or Equal to Previous</source>
<source>Less or Equal to Previous Result</source>
<translation>Öncekinden Eşit yada Az</translation>
</message>
<message>
<location filename="../cheatmanagerdialog.ui" line="371"/>
<source>Any Value</source>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation>Herhangi Bir Değer</translation>
</message>
<message>

View File

@ -12476,83 +12476,83 @@ The saves will not be recoverable.</source>
<translation>:</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Equal to Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Not Equal to...</source>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Not Equal to Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Greater Than...</source>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Greater Than Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Greater or Equal to Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Less Than...</source>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Less Than Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Less or Equal...</source>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less or Equal to Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Increased By...</source>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Increased By Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="190"/>
<source>Decreased By...</source>
<source>Decreased By Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="195"/>
<source>Changed By...</source>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Changed By Value</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="200"/>
<source>Equal to Previous (Unchanged Value)</source>
<location filename="../memoryscannerwindow.ui" line="185"/>
<source>Equal to Previous Result (Unchanged Value)</source>
<translation> ()</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="205"/>
<source>Not Equal to Previous (Changed Value)</source>
<location filename="../memoryscannerwindow.ui" line="180"/>
<source>Not Equal to Previous Result (Changed Value)</source>
<translation> ()</translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="210"/>
<source>Greater Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="170"/>
<source>Greater Than Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="215"/>
<source>Greater or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="175"/>
<source>Greater or Equal to Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="220"/>
<source>Less Than Previous</source>
<location filename="../memoryscannerwindow.ui" line="160"/>
<source>Less Than Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="225"/>
<source>Less or Equal to Previous</source>
<location filename="../memoryscannerwindow.ui" line="165"/>
<source>Less or Equal to Previous Result</source>
<translation></translation>
</message>
<message>
<location filename="../memoryscannerwindow.ui" line="230"/>
<source>Any Value</source>
<location filename="../memoryscannerwindow.ui" line="155"/>
<source>Any Value ('New Search' or 'Reset Result Value')</source>
<translation></translation>
</message>
<message>

View File

@ -1488,7 +1488,7 @@ bool ImGuiFullscreen::RangeButton(const char* title, const char* summary, s32* v
if (!visible)
return false;
const std::string value_text(StringUtil::StdStringFromFormat(format, *value));
const SmallString value_text = SmallString::from_sprintf(format, *value);
const ImVec2 value_size(ImGui::CalcTextSize(value_text.c_str()));
const float midpoint = bb.Min.y + font->FontSize + LayoutScale(4.0f);
@ -1521,7 +1521,8 @@ bool ImGuiFullscreen::RangeButton(const char* title, const char* summary, s32* v
bool changed = false;
ImGui::SetNextWindowSize(LayoutScale(500.0f, 180.0f));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::PushFont(g_large_font);
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, LayoutScale(10.0f));
@ -1560,7 +1561,7 @@ bool ImGuiFullscreen::RangeButton(const char* title, const char* summary, float*
if (!visible)
return false;
const std::string value_text(StringUtil::StdStringFromFormat(format, *value));
const SmallString value_text = SmallString::from_sprintf(format, *value);
const ImVec2 value_size(ImGui::CalcTextSize(value_text.c_str()));
const float midpoint = bb.Min.y + font->FontSize + LayoutScale(4.0f);
@ -1593,7 +1594,8 @@ bool ImGuiFullscreen::RangeButton(const char* title, const char* summary, float*
bool changed = false;
ImGui::SetNextWindowSize(LayoutScale(500.0f, 180.0f));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::PushFont(g_large_font);
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, LayoutScale(10.0f));
@ -2127,8 +2129,9 @@ void ImGuiFullscreen::DrawFileSelector()
if (!s_file_selector_open)
return;
ImGui::SetNextWindowSize(LayoutScale(1000.0f, 680.0f));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowSize(LayoutScale(1000.0f, 650.0f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::OpenPopup(s_file_selector_title.c_str());
FileSelectorItem* selected = nullptr;
@ -2278,7 +2281,8 @@ void ImGuiFullscreen::DrawChoiceDialog()
title_height + LayoutScale(LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY + (LAYOUT_MENU_BUTTON_Y_PADDING * 2.0f)) *
static_cast<float>(s_choice_dialog_options.size()));
ImGui::SetNextWindowSize(ImVec2(width, height));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::OpenPopup(s_choice_dialog_title.c_str());
bool is_open = !WantsToCloseMenu();
@ -2381,7 +2385,8 @@ void ImGuiFullscreen::DrawInputDialog()
return;
ImGui::SetNextWindowSize(LayoutScale(700.0f, 0.0f));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::OpenPopup(s_input_dialog_title.c_str());
ImGui::PushFont(g_large_font);
@ -2536,7 +2541,8 @@ void ImGuiFullscreen::DrawMessageDialog()
const char* win_id = s_message_dialog_title.empty() ? "##messagedialog" : s_message_dialog_title.c_str();
ImGui::SetNextWindowSize(LayoutScale(700.0f, 0.0f));
ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::SetNextWindowPos((ImGui::GetIO().DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)) * 0.5f,
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGui::OpenPopup(win_id);
ImGui::PushFont(g_large_font);
@ -2557,7 +2563,7 @@ void ImGuiFullscreen::DrawMessageDialog()
if (ImGui::BeginPopupModal(win_id, &is_open, flags))
{
BeginMenuButtons();
QueueResetFocus();
ResetFocusHere();
ImGui::TextWrapped("%s", s_message_dialog_message.c_str());
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(20.0f));

View File

@ -561,19 +561,20 @@ ImFont* ImGuiManager::AddFixedFont(float size)
bool ImGuiManager::AddIconFonts(float size)
{
static constexpr ImWchar range_fa[] = {
0xe086, 0xe086, 0xf002, 0xf002, 0xf005, 0xf005, 0xf007, 0xf007, 0xf00c, 0xf00e, 0xf011, 0xf011, 0xf013, 0xf013,
0xf017, 0xf017, 0xf019, 0xf019, 0xf01c, 0xf01c, 0xf021, 0xf021, 0xf023, 0xf023, 0xf025, 0xf025, 0xf027, 0xf028,
0xf02e, 0xf02e, 0xf030, 0xf030, 0xf03a, 0xf03a, 0xf03d, 0xf03d, 0xf049, 0xf04c, 0xf050, 0xf050, 0xf05e, 0xf05e,
0xf062, 0xf063, 0xf067, 0xf067, 0xf071, 0xf071, 0xf075, 0xf075, 0xf077, 0xf078, 0xf07b, 0xf07c, 0xf084, 0xf085,
0xf091, 0xf091, 0xf0a0, 0xf0a0, 0xf0ac, 0xf0ad, 0xf0c5, 0xf0c5, 0xf0c7, 0xf0c9, 0xf0cb, 0xf0cb, 0xf0d0, 0xf0d0,
0xf0dc, 0xf0dc, 0xf0e2, 0xf0e2, 0xf0e7, 0xf0e7, 0xf0eb, 0xf0eb, 0xf0f1, 0xf0f1, 0xf0f3, 0xf0f3, 0xf0fe, 0xf0fe,
0xf110, 0xf110, 0xf119, 0xf119, 0xf11b, 0xf11c, 0xf140, 0xf140, 0xf14a, 0xf14a, 0xf15b, 0xf15b, 0xf15d, 0xf15d,
0xf191, 0xf192, 0xf1ab, 0xf1ab, 0xf1dd, 0xf1de, 0xf1e6, 0xf1e6, 0xf1eb, 0xf1eb, 0xf1f8, 0xf1f8, 0xf1fc, 0xf1fc,
0xf242, 0xf242, 0xf245, 0xf245, 0xf26c, 0xf26c, 0xf279, 0xf279, 0xf2d0, 0xf2d0, 0xf2db, 0xf2db, 0xf2f2, 0xf2f2,
0xf3c1, 0xf3c1, 0xf3fd, 0xf3fd, 0xf410, 0xf410, 0xf466, 0xf466, 0xf4ce, 0xf4ce, 0xf500, 0xf500, 0xf51f, 0xf51f,
0xf538, 0xf538, 0xf545, 0xf545, 0xf547, 0xf548, 0xf57a, 0xf57a, 0xf5a2, 0xf5a2, 0xf5aa, 0xf5aa, 0xf5e7, 0xf5e7,
0xf65d, 0xf65e, 0xf6a9, 0xf6a9, 0xf6cf, 0xf6cf, 0xf794, 0xf794, 0xf7c2, 0xf7c2, 0xf807, 0xf807, 0xf815, 0xf815,
0xf818, 0xf818, 0xf84c, 0xf84c, 0xf8cc, 0xf8cc, 0x0, 0x0};
0xe06f, 0xe06f, 0xe086, 0xe086, 0xf002, 0xf002, 0xf005, 0xf005, 0xf007, 0xf007, 0xf00c, 0xf00e, 0xf011, 0xf011,
0xf013, 0xf013, 0xf017, 0xf017, 0xf019, 0xf019, 0xf01c, 0xf01c, 0xf021, 0xf021, 0xf023, 0xf023, 0xf025, 0xf025,
0xf027, 0xf028, 0xf02e, 0xf02e, 0xf030, 0xf030, 0xf03a, 0xf03a, 0xf03d, 0xf03d, 0xf049, 0xf04c, 0xf050, 0xf050,
0xf05e, 0xf05e, 0xf062, 0xf063, 0xf067, 0xf067, 0xf071, 0xf071, 0xf075, 0xf075, 0xf077, 0xf078, 0xf07b, 0xf07c,
0xf084, 0xf085, 0xf091, 0xf091, 0xf0a0, 0xf0a0, 0xf0ac, 0xf0ad, 0xf0c5, 0xf0c5, 0xf0c7, 0xf0c9, 0xf0cb, 0xf0cb,
0xf0d0, 0xf0d0, 0xf0dc, 0xf0dc, 0xf0e2, 0xf0e2, 0xf0e7, 0xf0e7, 0xf0eb, 0xf0eb, 0xf0f1, 0xf0f1, 0xf0f3, 0xf0f3,
0xf0fe, 0xf0fe, 0xf110, 0xf110, 0xf119, 0xf119, 0xf11b, 0xf11c, 0xf140, 0xf140, 0xf14a, 0xf14a, 0xf15b, 0xf15b,
0xf15d, 0xf15d, 0xf191, 0xf192, 0xf1ab, 0xf1ab, 0xf1dd, 0xf1de, 0xf1e6, 0xf1e6, 0xf1eb, 0xf1eb, 0xf1f8, 0xf1f8,
0xf1fc, 0xf1fc, 0xf240, 0xf240, 0xf242, 0xf242, 0xf245, 0xf245, 0xf26c, 0xf26c, 0xf279, 0xf279, 0xf2d0, 0xf2d0,
0xf2db, 0xf2db, 0xf2f2, 0xf2f2, 0xf3c1, 0xf3c1, 0xf3fd, 0xf3fd, 0xf410, 0xf410, 0xf466, 0xf466, 0xf4ce, 0xf4ce,
0xf500, 0xf500, 0xf51f, 0xf51f, 0xf538, 0xf538, 0xf545, 0xf545, 0xf547, 0xf548, 0xf57a, 0xf57a, 0xf5a2, 0xf5a2,
0xf5aa, 0xf5aa, 0xf5e7, 0xf5e7, 0xf65d, 0xf65e, 0xf6a9, 0xf6a9, 0xf6cf, 0xf6cf, 0xf70c, 0xf70c, 0xf794, 0xf794,
0xf7a0, 0xf7a0, 0xf7c2, 0xf7c2, 0xf807, 0xf807, 0xf815, 0xf815, 0xf818, 0xf818, 0xf84c, 0xf84c, 0xf8cc, 0xf8cc,
0x0, 0x0};
static constexpr ImWchar range_pf[] = {
0x2196, 0x2199, 0x219e, 0x21a1, 0x21b0, 0x21b3, 0x21ba, 0x21c3, 0x21c7, 0x21ca, 0x21d0, 0x21d4, 0x21dc, 0x21dd,
0x21e0, 0x21e3, 0x21ed, 0x21ee, 0x21f7, 0x21f8, 0x21fa, 0x21fb, 0x227a, 0x227f, 0x2284, 0x2284, 0x235e, 0x235e,