2017-04-26 14:48:55 +00:00
// Copyright (c) 2013- PPSSPP Project.
2013-06-08 20:42:31 +00:00
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
2017-02-24 19:50:27 +00:00
# include "ppsspp_config.h"
2014-02-10 11:38:23 +00:00
# include "base/display.h" // Only to check screen aspect ratio with pixel_yres/pixel_xres
2013-10-17 14:15:04 +00:00
# include "base/colorutil.h"
# include "base/timeutil.h"
# include "math/curves.h"
2014-01-20 05:14:21 +00:00
# include "gfx_es2/gpu_features.h"
2013-06-08 20:42:31 +00:00
# include "gfx_es2/draw_buffer.h"
# include "i18n/i18n.h"
2017-02-24 23:25:46 +00:00
# include "util/text/utf8.h"
2013-06-08 20:42:31 +00:00
# include "ui/view.h"
# include "ui/viewgroup.h"
2013-07-17 20:27:05 +00:00
# include "ui/ui_context.h"
2013-06-08 20:42:31 +00:00
# include "UI/EmuScreen.h"
# include "UI/GameSettingsScreen.h"
# include "UI/GameInfoCache.h"
2013-11-29 15:46:47 +00:00
# include "UI/GamepadEmu.h"
2013-07-17 20:27:05 +00:00
# include "UI/MiscScreens.h"
2013-08-16 14:48:43 +00:00
# include "UI/ControlMappingScreen.h"
2013-09-07 11:38:37 +00:00
# include "UI/DevScreens.h"
2015-10-24 12:40:29 +00:00
# include "UI/DisplayLayoutScreen.h"
2016-07-03 17:24:33 +00:00
# include "UI/RemoteISOScreen.h"
2015-06-12 18:37:42 +00:00
# include "UI/SavedataScreen.h"
2013-10-09 20:15:56 +00:00
# include "UI/TouchControlLayoutScreen.h"
2013-10-20 02:40:52 +00:00
# include "UI/TouchControlVisibilityScreen.h"
2013-10-27 17:58:47 +00:00
# include "UI/TiltAnalogSettingsScreen.h"
2013-12-14 12:55:57 +00:00
# include "UI/TiltEventProcessor.h"
2015-06-28 05:34:05 +00:00
# include "UI/ComboKeyMappingScreen.h"
2013-09-07 11:38:37 +00:00
2013-12-29 22:28:31 +00:00
# include "Common/KeyMap.h"
# include "Common/FileUtil.h"
2017-02-14 09:33:42 +00:00
# include "Common/OSVersion.h"
2017-05-30 08:38:17 +00:00
# include "Common/Vulkan/VulkanLoader.h"
2013-06-08 20:42:31 +00:00
# include "Core/Config.h"
2013-09-04 19:00:00 +00:00
# include "Core/Host.h"
2013-08-14 12:44:36 +00:00
# include "Core/System.h"
2013-09-01 19:57:39 +00:00
# include "Core/Reporting.h"
2013-10-17 14:15:04 +00:00
# include "android/jni/TestRunner.h"
# include "GPU/GPUInterface.h"
2017-01-21 21:16:30 +00:00
# include "GPU/GLES/FramebufferManagerGLES.h"
2013-07-30 14:28:34 +00:00
2017-02-24 23:25:46 +00:00
# if defined(_WIN32) && !PPSSPP_PLATFORM(UWP)
2015-09-17 20:02:15 +00:00
# pragma warning(disable:4091) // workaround bug in VS2015 headers
2015-09-19 11:14:05 +00:00
# include "Windows/MainWindow.h"
2014-10-23 14:22:11 +00:00
# include <shlobj.h>
2014-10-27 18:57:40 +00:00
# include "Windows/W32Util/ShellUtil.h"
2017-02-24 19:50:27 +00:00
# endif
2014-10-23 14:22:11 +00:00
2017-02-24 19:50:27 +00:00
# if !PPSSPP_PLATFORM(UWP)
# include "gfx/gl_common.h"
2014-09-14 10:59:27 +00:00
# endif
2013-08-17 21:49:06 +00:00
# ifdef IOS
2013-12-01 19:28:20 +00:00
extern bool iosCanUseJit ;
2015-11-03 17:34:33 +00:00
extern bool targetIsJailbroken ;
2013-08-17 21:49:06 +00:00
# endif
2013-08-04 07:39:49 +00:00
2014-12-14 19:33:20 +00:00
GameSettingsScreen : : GameSettingsScreen ( std : : string gamePath , std : : string gameID , bool editThenRestore )
2016-08-05 17:46:11 +00:00
: UIDialogScreenWithGameBackground ( gamePath ) , gameID_ ( gameID ) , enableReports_ ( false ) , editThenRestore_ ( editThenRestore ) {
2014-07-22 08:37:20 +00:00
lastVertical_ = UseVerticalLayout ( ) ;
}
bool GameSettingsScreen : : UseVerticalLayout ( ) const {
return dp_yres > dp_xres * 1.1f ;
}
2017-01-31 14:29:13 +00:00
// This needs before run CheckGPUFeatures()
// TODO: Remove this if fix the issue
2017-02-25 11:01:56 +00:00
bool CheckSupportInstancedTessellationGLES ( ) {
2017-02-24 19:50:27 +00:00
# if PPSSPP_PLATFORM(UWP)
return true ;
# else
// TODO: Make work with non-GL backends
2017-01-31 14:29:13 +00:00
int maxVertexTextureImageUnits ;
glGetIntegerv ( GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS , & maxVertexTextureImageUnits ) ;
bool vertexTexture = maxVertexTextureImageUnits > = 3 ; // At least 3 for hardware tessellation
2017-03-26 10:00:20 +00:00
bool canUseInstanceID = gl_extensions . EXT_draw_instanced | | gl_extensions . ARB_draw_instanced ;
2017-03-28 10:49:37 +00:00
bool canDefInstanceID = gl_extensions . IsGLES | | gl_extensions . EXT_gpu_shader4 ;
bool instanceRendering = gl_extensions . GLES3 | | ( canUseInstanceID & & canDefInstanceID ) ;
2017-03-26 10:00:20 +00:00
2017-03-12 15:41:28 +00:00
bool textureFloat = gl_extensions . ARB_texture_float | | gl_extensions . OES_texture_float ;
2017-01-31 14:29:13 +00:00
return instanceRendering & & vertexTexture & & textureFloat ;
2017-02-24 19:50:27 +00:00
# endif
2017-01-31 14:29:13 +00:00
}
2017-03-04 13:46:55 +00:00
bool IsBackendSupportHWTess ( ) {
switch ( g_Config . iGPUBackend ) {
case GPU_BACKEND_OPENGL :
return CheckSupportInstancedTessellationGLES ( ) ;
case GPU_BACKEND_VULKAN :
case GPU_BACKEND_DIRECT3D11 :
return true ;
}
return false ;
}
2013-06-08 20:42:31 +00:00
void GameSettingsScreen : : CreateViews ( ) {
2016-08-05 17:46:11 +00:00
if ( editThenRestore_ ) {
2014-12-14 19:33:20 +00:00
g_Config . loadGameConfig ( gameID_ ) ;
}
2013-07-17 23:04:11 +00:00
cap60FPS_ = g_Config . iForceMaxEmulatedFPS = = 60 ;
2013-10-28 15:04:53 +00:00
2014-05-06 03:49:48 +00:00
iAlternateSpeedPercent_ = ( g_Config . iFpsLimit * 100 ) / 60 ;
2014-06-10 21:32:37 +00:00
2014-07-22 08:37:20 +00:00
bool vertical = UseVerticalLayout ( ) ;
2013-06-08 20:42:31 +00:00
// Information in the top left.
// Back button to the bottom left.
// Scrolling action menu to the right.
using namespace UI ;
2015-07-01 21:26:55 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
2015-07-01 21:50:16 +00:00
I18NCategory * gr = GetI18NCategory ( " Graphics " ) ;
2015-07-01 20:31:04 +00:00
I18NCategory * co = GetI18NCategory ( " Controls " ) ;
2013-06-10 20:06:51 +00:00
I18NCategory * a = GetI18NCategory ( " Audio " ) ;
2015-06-21 14:49:21 +00:00
I18NCategory * sa = GetI18NCategory ( " Savedata " ) ;
2015-07-01 23:00:04 +00:00
I18NCategory * sy = GetI18NCategory ( " System " ) ;
2015-01-04 13:52:01 +00:00
I18NCategory * n = GetI18NCategory ( " Networking " ) ;
2013-08-11 15:25:50 +00:00
I18NCategory * ms = GetI18NCategory ( " MainSettings " ) ;
2015-06-30 03:28:31 +00:00
I18NCategory * dev = GetI18NCategory ( " Developer " ) ;
2013-06-08 20:42:31 +00:00
2016-08-14 21:27:36 +00:00
root_ = new AnchorLayout ( new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2013-07-21 16:03:54 +00:00
2014-07-22 08:37:20 +00:00
TabHolder * tabHolder ;
if ( vertical ) {
2016-08-14 21:27:36 +00:00
LinearLayout * verticalLayout = new LinearLayout ( ORIENT_VERTICAL , new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2014-07-22 08:37:20 +00:00
tabHolder = new TabHolder ( ORIENT_HORIZONTAL , 200 , new LinearLayoutParams ( 1.0f ) ) ;
2016-08-14 21:27:36 +00:00
verticalLayout - > Add ( tabHolder ) ;
verticalLayout - > Add ( new Choice ( di - > T ( " Back " ) , " " , false , new LinearLayoutParams ( FILL_PARENT , WRAP_CONTENT , 0.0f , Margins ( 0 ) ) ) ) - > OnClick . Handle < UIScreen > ( this , & UIScreen : : OnBack ) ;
root_ - > Add ( verticalLayout ) ;
2014-07-22 08:37:20 +00:00
} else {
tabHolder = new TabHolder ( ORIENT_VERTICAL , 200 , new AnchorLayoutParams ( 10 , 0 , 10 , 0 , false ) ) ;
root_ - > Add ( tabHolder ) ;
2015-07-04 15:01:32 +00:00
AddStandardBack ( root_ ) ;
2014-07-22 08:37:20 +00:00
}
2016-01-23 06:38:21 +00:00
tabHolder - > SetTag ( " GameSettings " ) ;
2014-03-03 11:56:01 +00:00
root_ - > SetDefaultFocusView ( tabHolder ) ;
2013-06-08 20:42:31 +00:00
2016-08-14 21:27:36 +00:00
float leftSide = 40.0f ;
if ( ! vertical ) {
leftSide + = 200.0f ;
}
settingInfo_ = new SettingInfoMessage ( ALIGN_CENTER | FLAG_WRAP_TEXT , new AnchorLayoutParams ( dp_xres - leftSide - 40.0f , WRAP_CONTENT , leftSide , dp_yres - 80.0f - 40.0f , NONE , NONE ) ) ;
settingInfo_ - > SetBottomCutoff ( dp_yres - 200.0f ) ;
root_ - > Add ( settingInfo_ ) ;
2013-06-08 20:42:31 +00:00
// TODO: These currently point to global settings, not game specific ones.
2013-07-20 14:03:52 +00:00
// Graphics
2013-06-08 20:42:31 +00:00
ViewGroup * graphicsSettingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
graphicsSettingsScroll - > SetTag ( " GameSettingsGraphics " ) ;
2013-08-19 22:49:25 +00:00
LinearLayout * graphicsSettings = new LinearLayout ( ORIENT_VERTICAL ) ;
graphicsSettings - > SetSpacing ( 0 ) ;
2013-06-08 20:42:31 +00:00
graphicsSettingsScroll - > Add ( graphicsSettings ) ;
2013-08-11 15:25:50 +00:00
tabHolder - > AddTab ( ms - > T ( " Graphics " ) , graphicsSettingsScroll ) ;
2013-07-21 20:15:18 +00:00
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Rendering Mode " ) ) ) ;
2017-02-18 01:13:52 +00:00
static const char * renderingBackend [ ] = { " OpenGL " , " Direct3D 9 " , " Direct3D 11 " , " Vulkan (experimental) " } ;
2016-01-06 06:37:28 +00:00
PopupMultiChoice * renderingBackendChoice = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iGPUBackend , gr - > T ( " Backend " ) , renderingBackend , GPU_BACKEND_OPENGL , ARRAY_SIZE ( renderingBackend ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-09-14 10:59:27 +00:00
renderingBackendChoice - > OnChoice . Handle ( this , & GameSettingsScreen : : OnRenderingBackend ) ;
2017-05-30 09:29:39 +00:00
# if !PPSSPP_PLATFORM(WINDOWS)
2016-02-25 14:41:45 +00:00
renderingBackendChoice - > HideChoice ( 1 ) ; // D3D9
renderingBackendChoice - > HideChoice ( 2 ) ; // D3D11
2017-02-14 09:33:42 +00:00
# else
2017-02-23 09:40:55 +00:00
if ( ! DoesVersionMatchWindows ( 6 , 0 , 0 , 0 , true ) ) {
2017-02-23 08:52:45 +00:00
// Hide the D3D11 choice if Windows version is older than Windows Vista.
2017-02-14 09:33:42 +00:00
renderingBackendChoice - > HideChoice ( 2 ) ; // D3D11
}
2016-02-25 14:41:45 +00:00
# endif
2017-05-30 09:29:39 +00:00
bool vulkanAvailable = false ;
# if PPSSPP_PLATFORM(WINDOWS) || PPSSPP_PLATFORM(ANDROID)
vulkanAvailable = VulkanMayBeAvailable ( ) ;
# endif
if ( ! vulkanAvailable ) {
2017-05-30 08:38:17 +00:00
renderingBackendChoice - > HideChoice ( 3 ) ;
}
2013-08-30 09:22:29 +00:00
static const char * renderingMode [ ] = { " Non-Buffered Rendering " , " Buffered Rendering " , " Read Framebuffers To Memory (CPU) " , " Read Framebuffers To Memory (GPU) " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * renderingModeChoice = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iRenderingMode , gr - > T ( " Mode " ) , renderingMode , 0 , ARRAY_SIZE ( renderingMode ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2016-08-17 01:56:04 +00:00
renderingModeChoice - > OnChoice . Add ( [ = ] ( EventParams & e ) {
2016-08-14 22:26:42 +00:00
switch ( g_Config . iRenderingMode ) {
case FB_NON_BUFFERED_MODE :
settingInfo_ - > Show ( gr - > T ( " RenderingMode NonBuffered Tip " , " Faster, but nothing may draw in some games " ) , e . v ) ;
break ;
case FB_BUFFERED_MODE :
break ;
# ifndef USING_GLES2
case FB_READFBOMEMORY_CPU :
# endif
case FB_READFBOMEMORY_GPU :
settingInfo_ - > Show ( gr - > T ( " RenderingMode ReadFromMemory Tip " , " Causes crashes in many games, not recommended " ) , e . v ) ;
break ;
}
return UI : : EVENT_CONTINUE ;
} ) ;
2014-06-10 21:28:13 +00:00
renderingModeChoice - > OnChoice . Handle ( this , & GameSettingsScreen : : OnRenderingMode ) ;
2014-07-09 06:47:27 +00:00
renderingModeChoice - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2017-03-21 13:02:41 +00:00
CheckBox * blockTransfer = graphicsSettings - > Add ( new CheckBox ( & g_Config . bBlockTransferGPU , gr - > T ( " Simulate Block Transfer " , " Simulate Block Transfer " ) ) ) ;
2017-03-21 07:23:31 +00:00
blockTransfer - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-06-03 16:42:34 +00:00
if ( ! g_Config . bBlockTransferGPU )
settingInfo_ - > Show ( gr - > T ( " BlockTransfer Tip " , " Some games require this to be On for correct graphics " ) , e . v ) ;
2017-03-21 07:23:31 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
blockTransfer - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2017-05-24 18:53:00 +00:00
bool showSoftGPU = true ;
2017-05-24 22:31:00 +00:00
# ifdef MOBILE_DEVICE
2017-05-24 18:53:00 +00:00
// On Android, only show the software rendering setting if it's already enabled.
// Can still be turned on through INI file editing.
showSoftGPU = g_Config . bSoftwareRendering ;
# endif
if ( showSoftGPU ) {
CheckBox * softwareGPU = graphicsSettings - > Add ( new CheckBox ( & g_Config . bSoftwareRendering , gr - > T ( " Software Rendering " , " Software Rendering (slow) " ) ) ) ;
softwareGPU - > OnClick . Add ( [ = ] ( EventParams & e ) {
if ( g_Config . bSoftwareRendering )
settingInfo_ - > Show ( gr - > T ( " SoftGPU Tip " , " Currently VERY slow " ) , e . v ) ;
bloomHackEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iInternalResolution ! = 1 ) ;
return UI : : EVENT_CONTINUE ;
} ) ;
softwareGPU - > OnClick . Handle ( this , & GameSettingsScreen : : OnSoftwareRendering ) ;
if ( PSP_IsInited ( ) )
softwareGPU - > SetEnabled ( false ) ;
}
2013-08-18 21:11:47 +00:00
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Frame Rate Control " ) ) ) ;
2014-01-25 16:41:39 +00:00
static const char * frameSkip [ ] = { " Off " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " } ;
2015-09-23 10:43:45 +00:00
graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iFrameSkip , gr - > T ( " Frame Skipping " ) , frameSkip , 0 , ARRAY_SIZE ( frameSkip ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2015-07-01 21:50:16 +00:00
frameSkipAuto_ = graphicsSettings - > Add ( new CheckBox ( & g_Config . bAutoFrameSkip , gr - > T ( " Auto FrameSkip " ) ) ) ;
2014-07-22 07:55:12 +00:00
frameSkipAuto_ - > OnClick . Handle ( this , & GameSettingsScreen : : OnAutoFrameskip ) ;
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new CheckBox ( & cap60FPS_ , gr - > T ( " Force max 60 FPS (helps GoW) " ) ) ) ;
2014-05-03 20:24:46 +00:00
2017-01-28 16:30:40 +00:00
PopupSliderChoice * altSpeed = graphicsSettings - > Add ( new PopupSliderChoice ( & iAlternateSpeedPercent_ , 0 , 1000 , gr - > T ( " Alternative Speed " , " Alternative speed " ) , 5 , screenManager ( ) , gr - > T ( " %, 0:unlimited " ) ) ) ;
2015-12-20 20:58:24 +00:00
altSpeed - > SetFormat ( " %i%% " ) ;
altSpeed - > SetZeroLabel ( gr - > T ( " Unlimited " ) ) ;
2013-09-30 09:57:30 +00:00
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Features " ) ) ) ;
2014-07-21 16:42:52 +00:00
I18NCategory * ps = GetI18NCategory ( " PostShaders " ) ;
2015-09-23 10:43:45 +00:00
postProcChoice_ = graphicsSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sPostShaderName , gr - > T ( " Postprocessing Shader " ) , ps - > GetName ( ) ) ) ;
2013-10-30 10:28:14 +00:00
postProcChoice_ - > OnClick . Handle ( this , & GameSettingsScreen : : OnPostProcShader ) ;
2014-07-09 06:47:27 +00:00
postProcEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
postProcChoice_ - > SetEnabledPtr ( & postProcEnable_ ) ;
2013-10-30 10:28:14 +00:00
2014-04-27 18:24:10 +00:00
# if !defined(MOBILE_DEVICE)
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new CheckBox ( & g_Config . bFullScreen , gr - > T ( " FullScreen " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnFullscreenChange ) ;
2013-10-04 19:31:40 +00:00
# endif
2015-10-24 12:40:29 +00:00
// Display Layout Editor: To avoid overlapping touch controls on large tablets, meet geeky demands for integer zoom/unstretched image etc.
displayEditor_ = graphicsSettings - > Add ( new Choice ( gr - > T ( " Display layout editor " ) ) ) ;
displayEditor_ - > OnClick . Handle ( this , & GameSettingsScreen : : OnDisplayLayoutEditor ) ;
2014-07-20 10:11:50 +00:00
2016-10-12 09:13:16 +00:00
# ifdef __ANDROID__
2014-07-20 10:11:50 +00:00
// Hide Immersive Mode on pre-kitkat Android
if ( System_GetPropertyInt ( SYSPROP_SYSTEMVERSION ) > = 19 ) {
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new CheckBox ( & g_Config . bImmersiveMode , gr - > T ( " Immersive Mode " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnImmersiveModeChange ) ;
2014-07-20 10:11:50 +00:00
}
2014-02-09 22:16:08 +00:00
# endif
2013-10-20 15:33:18 +00:00
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Performance " ) ) ) ;
2014-02-08 18:29:22 +00:00
# ifndef MOBILE_DEVICE
2013-10-20 15:33:18 +00:00
static const char * internalResolutions [ ] = { " Auto (1:1) " , " 1x PSP " , " 2x PSP " , " 3x PSP " , " 4x PSP " , " 5x PSP " , " 6x PSP " , " 7x PSP " , " 8x PSP " , " 9x PSP " , " 10x PSP " } ;
# else
static const char * internalResolutions [ ] = { " Auto (1:1) " , " 1x PSP " , " 2x PSP " , " 3x PSP " , " 4x PSP " , " 5x PSP " } ;
# endif
2015-09-23 10:43:45 +00:00
resolutionChoice_ = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iInternalResolution , gr - > T ( " Rendering Resolution " ) , internalResolutions , 0 , ARRAY_SIZE ( internalResolutions ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-07-18 19:49:54 +00:00
resolutionChoice_ - > OnChoice . Handle ( this , & GameSettingsScreen : : OnResolutionChange ) ;
2014-07-09 06:47:27 +00:00
resolutionEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
resolutionChoice_ - > SetEnabledPtr ( & resolutionEnable_ ) ;
2014-06-10 21:32:37 +00:00
2016-10-12 09:13:16 +00:00
# ifdef __ANDROID__
2014-07-18 22:42:22 +00:00
static const char * deviceResolutions [ ] = { " Native device resolution " , " Auto (same as Rendering) " , " 1x PSP " , " 2x PSP " , " 3x PSP " , " 4x PSP " , " 5x PSP " } ;
2015-01-29 23:28:53 +00:00
int max_res_temp = std : : max ( System_GetPropertyInt ( SYSPROP_DISPLAY_XRES ) , System_GetPropertyInt ( SYSPROP_DISPLAY_YRES ) ) / 480 + 2 ;
2016-03-17 21:22:57 +00:00
if ( max_res_temp = = 3 )
max_res_temp = 4 ; // At least allow 2x
2015-01-29 23:28:53 +00:00
int max_res = std : : min ( max_res_temp , ( int ) ARRAY_SIZE ( deviceResolutions ) ) ;
2015-09-23 10:43:45 +00:00
UI : : PopupMultiChoice * hwscale = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iAndroidHwScale , gr - > T ( " Display Resolution (HW scaler) " ) , deviceResolutions , 0 , max_res , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-07-18 19:49:54 +00:00
hwscale - > OnChoice . Handle ( this , & GameSettingsScreen : : OnHwScaleChange ) ; // To refresh the display mode
# endif
2013-10-27 13:09:46 +00:00
# ifdef _WIN32
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new CheckBox ( & g_Config . bVSync , gr - > T ( " VSync " ) ) ) ;
2013-10-27 13:09:46 +00:00
# endif
2014-06-10 18:00:11 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * hwTransform = graphicsSettings - > Add ( new CheckBox ( & g_Config . bHardwareTransform , gr - > T ( " Hardware Transform " ) ) ) ;
2014-06-10 21:28:13 +00:00
hwTransform - > OnClick . Handle ( this , & GameSettingsScreen : : OnHardwareTransform ) ;
2014-07-09 06:47:27 +00:00
hwTransform - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 18:00:11 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * swSkin = graphicsSettings - > Add ( new CheckBox ( & g_Config . bSoftwareSkinning , gr - > T ( " Software Skinning " ) ) ) ;
2017-03-21 07:23:31 +00:00
swSkin - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-06-03 16:42:34 +00:00
settingInfo_ - > Show ( gr - > T ( " SoftwareSkinning Tip " , " Combine skinned model draws on the CPU, faster in most games " ) , e . v ) ;
2017-03-21 07:23:31 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
swSkin - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 18:00:11 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * vtxCache = graphicsSettings - > Add ( new CheckBox ( & g_Config . bVertexCache , gr - > T ( " Vertex Cache " ) ) ) ;
2016-08-17 01:56:04 +00:00
vtxCache - > OnClick . Add ( [ = ] ( EventParams & e ) {
2016-08-14 22:26:42 +00:00
settingInfo_ - > Show ( gr - > T ( " VertexCache Tip " , " Faster, but may cause temporary flicker " ) , e . v ) ;
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
vtxCacheEnable_ = ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
vtxCache - > SetEnabledPtr ( & vtxCacheEnable_ ) ;
2014-06-10 18:00:11 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * texBackoff = graphicsSettings - > Add ( new CheckBox ( & g_Config . bTextureBackoffCache , gr - > T ( " Lazy texture caching " , " Lazy texture caching (speedup) " ) ) ) ;
2014-07-09 06:47:27 +00:00
texBackoff - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 18:00:11 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * texSecondary_ = graphicsSettings - > Add ( new CheckBox ( & g_Config . bTextureSecondaryCache , gr - > T ( " Retain changed textures " , " Retain changed textures (speedup, mem hog) " ) ) ) ;
2016-08-17 01:56:04 +00:00
texSecondary_ - > OnClick . Add ( [ = ] ( EventParams & e ) {
2016-08-14 22:26:42 +00:00
settingInfo_ - > Show ( gr - > T ( " RetainChangedTextures Tip " , " Makes many games slower, but some games a lot faster " ) , e . v ) ;
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
texSecondary_ - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2013-11-29 13:20:37 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * framebufferSlowEffects = graphicsSettings - > Add ( new CheckBox ( & g_Config . bDisableSlowFramebufEffects , gr - > T ( " Disable slower effects (speedup) " ) ) ) ;
2014-07-09 06:57:43 +00:00
framebufferSlowEffects - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2016-12-15 09:33:54 +00:00
// Seems solid, so we hide the setting.
/*CheckBox *vtxJit = graphicsSettings->Add(new CheckBox(&g_Config.bVertexDecoderJit, gr->T("Vertex Decoder JIT")));
2013-11-29 13:20:37 +00:00
2016-12-14 16:20:37 +00:00
if ( PSP_IsInited ( ) ) {
vtxJit - > SetEnabled ( false ) ;
2016-12-15 09:33:54 +00:00
} */
2013-11-09 17:16:26 +00:00
2014-04-25 12:44:02 +00:00
static const char * quality [ ] = { " Low " , " Medium " , " High " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * beziersChoice = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iSplineBezierQuality , gr - > T ( " LowCurves " , " Spline/Bezier curves quality " ) , quality , 0 , ARRAY_SIZE ( quality ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2016-12-14 16:20:37 +00:00
beziersChoice - > OnChoice . Add ( [ = ] ( EventParams & e ) {
2017-01-17 11:55:48 +00:00
if ( g_Config . iSplineBezierQuality ! = 0 ) {
2017-03-21 14:18:54 +00:00
settingInfo_ - > Show ( gr - > T ( " LowCurves Tip " , " Only used by some games, controls smoothness of curves " ) , e . v ) ;
2016-12-14 16:20:37 +00:00
}
return UI : : EVENT_CONTINUE ;
} ) ;
2017-05-09 04:03:10 +00:00
bezierChoiceDisable_ = g_Config . bHardwareTessellation ;
2017-01-09 10:18:27 +00:00
beziersChoice - > SetDisabledPtr ( & bezierChoiceDisable_ ) ;
2016-08-27 18:38:05 +00:00
2017-03-28 10:51:25 +00:00
CheckBox * tessellationHW = graphicsSettings - > Add ( new CheckBox ( & g_Config . bHardwareTessellation , gr - > T ( " Hardware Tessellation " , " Hardware tessellation (experimental) " ) ) ) ;
2017-01-09 10:18:27 +00:00
tessellationHW - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-05-09 04:03:10 +00:00
bezierChoiceDisable_ = g_Config . bHardwareTessellation ;
2017-03-21 14:18:54 +00:00
settingInfo_ - > Show ( gr - > T ( " HardwareTessellation Tip " , " Uses hardware to make curves, always uses a fixed quality " ) , e . v ) ;
2017-01-09 10:18:27 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2017-03-04 13:46:55 +00:00
tessHWEnable_ = IsBackendSupportHWTess ( ) & & ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
2017-01-31 14:29:13 +00:00
tessellationHW - > SetEnabledPtr ( & tessHWEnable_ ) ;
2017-01-06 15:14:58 +00:00
2013-09-28 06:21:59 +00:00
// In case we're going to add few other antialiasing option like MSAA in the future.
2015-07-01 21:50:16 +00:00
// graphicsSettings->Add(new CheckBox(&g_Config.bFXAA, gr->T("FXAA")));
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Texture Scaling " ) ) ) ;
2014-02-08 18:29:22 +00:00
# ifndef MOBILE_DEVICE
2014-01-20 05:14:21 +00:00
static const char * texScaleLevelsNPOT [ ] = { " Auto " , " Off " , " 2x " , " 3x " , " 4x " , " 5x " } ;
2013-07-26 12:25:11 +00:00
# else
2014-01-20 05:14:21 +00:00
static const char * texScaleLevelsNPOT [ ] = { " Auto " , " Off " , " 2x " , " 3x " } ;
2013-07-26 12:25:11 +00:00
# endif
2014-01-20 05:14:21 +00:00
2016-03-26 21:34:24 +00:00
static const char * * texScaleLevels = texScaleLevelsNPOT ;
static int numTexScaleLevels = ARRAY_SIZE ( texScaleLevelsNPOT ) ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * texScalingChoice = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iTexScalingLevel , gr - > T ( " Upscale Level " ) , texScaleLevels , 0 , numTexScaleLevels , gr - > GetName ( ) , screenManager ( ) ) ) ;
2016-03-26 21:34:24 +00:00
// TODO: Better check? When it won't work, it scales down anyway.
if ( ! gl_extensions . OES_texture_npot & & GetGPUBackend ( ) = = GPUBackend : : OPENGL ) {
texScalingChoice - > HideChoice ( 3 ) ; // 3x
texScalingChoice - > HideChoice ( 5 ) ; // 5x
}
2016-08-17 01:56:04 +00:00
texScalingChoice - > OnChoice . Add ( [ = ] ( EventParams & e ) {
2016-08-14 22:26:42 +00:00
if ( g_Config . iTexScalingLevel ! = 1 ) {
settingInfo_ - > Show ( gr - > T ( " UpscaleLevel Tip " , " CPU heavy - some scaling may be delayed to avoid stutter " ) , e . v ) ;
}
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
texScalingChoice - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 18:00:11 +00:00
2013-07-17 23:04:11 +00:00
static const char * texScaleAlgos [ ] = { " xBRZ " , " Hybrid " , " Bicubic " , " Hybrid + Bicubic " , } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * texScalingType = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iTexScalingType , gr - > T ( " Upscale Type " ) , texScaleAlgos , 0 , ARRAY_SIZE ( texScaleAlgos ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-07-09 06:47:27 +00:00
texScalingType - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 21:28:13 +00:00
2015-07-01 21:50:16 +00:00
CheckBox * deposterize = graphicsSettings - > Add ( new CheckBox ( & g_Config . bTexDeposterize , gr - > T ( " Deposterize " ) ) ) ;
2016-12-14 16:20:37 +00:00
deposterize - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-03-21 07:23:31 +00:00
if ( g_Config . bTexDeposterize = = true ) {
2017-03-21 14:18:54 +00:00
settingInfo_ - > Show ( gr - > T ( " Deposterize Tip " , " Fixes visual banding glitches in upscaled textures " ) , e . v ) ;
2017-03-21 07:23:31 +00:00
}
2016-12-14 16:20:37 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2014-07-09 06:47:27 +00:00
deposterize - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 21:28:13 +00:00
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Texture Filtering " ) ) ) ;
2013-08-16 10:52:16 +00:00
static const char * anisoLevels [ ] = { " Off " , " 2x " , " 4x " , " 8x " , " 16x " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * anisoFiltering = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iAnisotropyLevel , gr - > T ( " Anisotropic Filtering " ) , anisoLevels , 0 , ARRAY_SIZE ( anisoLevels ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-07-09 06:47:27 +00:00
anisoFiltering - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 21:28:13 +00:00
2013-07-26 12:25:11 +00:00
static const char * texFilters [ ] = { " Auto " , " Nearest " , " Linear " , " Linear on FMV " , } ;
2017-05-09 04:03:10 +00:00
graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iTexFiltering , gr - > T ( " Texture Filter " ) , texFilters , 1 , ARRAY_SIZE ( texFilters ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2013-07-17 20:27:05 +00:00
2014-08-08 18:51:15 +00:00
static const char * bufFilters [ ] = { " Linear " , " Nearest " , } ;
2016-01-18 07:47:42 +00:00
graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iBufFilter , gr - > T ( " Screen Scaling Filter " ) , bufFilters , 1 , ARRAY_SIZE ( bufFilters ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-08-08 18:51:15 +00:00
2016-10-12 09:13:16 +00:00
# ifdef __ANDROID__
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Cardboard Settings " , " Cardboard Settings " ) ) ) ;
CheckBox * cardboardMode = graphicsSettings - > Add ( new CheckBox ( & g_Config . bEnableCardboard , gr - > T ( " Enable Cardboard " , " Enable Cardboard " ) ) ) ;
2015-01-24 19:01:09 +00:00
cardboardMode - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2015-12-20 20:58:24 +00:00
PopupSliderChoice * cardboardScreenSize = graphicsSettings - > Add ( new PopupSliderChoice ( & g_Config . iCardboardScreenSize , 30 , 100 , gr - > T ( " Cardboard Screen Size " , " Screen Size (in % of the viewport) " ) , 1 , screenManager ( ) , gr - > T ( " % of viewport " ) ) ) ;
2015-01-24 19:01:09 +00:00
cardboardScreenSize - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2015-12-20 20:58:24 +00:00
PopupSliderChoice * cardboardXShift = graphicsSettings - > Add ( new PopupSliderChoice ( & g_Config . iCardboardXShift , - 100 , 100 , gr - > T ( " Cardboard Screen X Shift " , " X Shift (in % of the void) " ) , 1 , screenManager ( ) , gr - > T ( " % of the void " ) ) ) ;
2015-01-24 19:01:09 +00:00
cardboardXShift - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2015-12-20 20:58:24 +00:00
PopupSliderChoice * cardboardYShift = graphicsSettings - > Add ( new PopupSliderChoice ( & g_Config . iCardboardYShift , - 100 , 100 , gr - > T ( " Cardboard Screen Y Shift " , " Y Shift (in % of the void) " ) , 1 , screenManager ( ) , gr - > T ( " % of the void " ) ) ) ;
2015-01-24 19:01:09 +00:00
cardboardYShift - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
# endif
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Hack Settings " , " Hack Settings (these WILL cause glitches) " ) ) ) ;
2016-12-14 16:20:37 +00:00
CheckBox * timerHack = graphicsSettings - > Add ( new CheckBox ( & g_Config . bTimerHack , gr - > T ( " Timer Hack " ) ) ) ;
timerHack - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-03-21 14:18:54 +00:00
settingInfo_ - > Show ( gr - > T ( " TimerHack Tip " , " Changes game clock based on emu speed, may break games " ) , e . v ) ;
2016-12-14 16:20:37 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2015-07-01 21:50:16 +00:00
CheckBox * stencilTest = graphicsSettings - > Add ( new CheckBox ( & g_Config . bDisableStencilTest , gr - > T ( " Disable Stencil Test " ) ) ) ;
2014-07-09 06:47:27 +00:00
stencilTest - > SetDisabledPtr ( & g_Config . bSoftwareRendering ) ;
2014-06-10 18:00:11 +00:00
2015-01-23 01:08:20 +00:00
static const char * bloomHackOptions [ ] = { " Off " , " Safe " , " Balanced " , " Aggressive " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * bloomHack = graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iBloomHack , gr - > T ( " Lower resolution for effects (reduces artifacts) " ) , bloomHackOptions , 0 , ARRAY_SIZE ( bloomHackOptions ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2015-01-23 01:08:20 +00:00
bloomHackEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iInternalResolution ! = 1 ) ;
bloomHack - > SetEnabledPtr ( & bloomHackEnable_ ) ;
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Overlay Information " ) ) ) ;
2013-11-29 10:36:47 +00:00
static const char * fpsChoices [ ] = {
" None " , " Speed " , " FPS " , " Both "
} ;
2015-09-23 10:43:45 +00:00
graphicsSettings - > Add ( new PopupMultiChoice ( & g_Config . iShowFPSCounter , gr - > T ( " Show FPS Counter " ) , fpsChoices , 0 , ARRAY_SIZE ( fpsChoices ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new CheckBox ( & g_Config . bShowDebugStats , gr - > T ( " Show Debug Statistics " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnJitAffectingSetting ) ;
2013-10-20 15:33:18 +00:00
2013-09-30 17:13:47 +00:00
// Developer tools are not accessible ingame, so it goes here.
2015-07-01 21:50:16 +00:00
graphicsSettings - > Add ( new ItemHeader ( gr - > T ( " Debugging " ) ) ) ;
Choice * dump = graphicsSettings - > Add ( new Choice ( gr - > T ( " Dump next frame to log " ) ) ) ;
2013-08-18 21:11:47 +00:00
dump - > OnClick . Handle ( this , & GameSettingsScreen : : OnDumpNextFrameToLog ) ;
if ( ! PSP_IsInited ( ) )
dump - > SetEnabled ( false ) ;
2013-08-18 17:51:40 +00:00
2013-07-20 14:03:52 +00:00
// Audio
2013-06-08 20:42:31 +00:00
ViewGroup * audioSettingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
audioSettingsScroll - > SetTag ( " GameSettingsAudio " ) ;
2013-08-19 22:49:25 +00:00
LinearLayout * audioSettings = new LinearLayout ( ORIENT_VERTICAL ) ;
audioSettings - > SetSpacing ( 0 ) ;
2013-06-08 20:42:31 +00:00
audioSettingsScroll - > Add ( audioSettings ) ;
2013-08-11 15:25:50 +00:00
tabHolder - > AddTab ( ms - > T ( " Audio " ) , audioSettingsScroll ) ;
2013-08-09 10:57:03 +00:00
2013-08-20 10:28:17 +00:00
audioSettings - > Add ( new ItemHeader ( ms - > T ( " Audio " ) ) ) ;
2013-08-09 10:57:03 +00:00
2013-08-16 17:34:44 +00:00
audioSettings - > Add ( new CheckBox ( & g_Config . bEnableSound , a - > T ( " Enable Sound " ) ) ) ;
2015-01-24 12:50:27 +00:00
2016-01-18 06:47:29 +00:00
PopupSliderChoice * volume = audioSettings - > Add ( new PopupSliderChoice ( & g_Config . iGlobalVolume , VOLUME_OFF , VOLUME_MAX , a - > T ( " Global volume " ) , screenManager ( ) ) ) ;
volume - > SetEnabledPtr ( & g_Config . bEnableSound ) ;
2015-01-24 12:50:27 +00:00
# ifdef _WIN32
2015-02-01 10:56:44 +00:00
if ( IsVistaOrHigher ( ) ) {
2015-02-01 17:04:06 +00:00
static const char * backend [ ] = { " Auto " , " DSound (compatible) " , " WASAPI (fast) " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * audioBackend = audioSettings - > Add ( new PopupMultiChoice ( & g_Config . iAudioBackend , a - > T ( " Audio backend " , " Audio backend (restart req.) " ) , backend , 0 , ARRAY_SIZE ( backend ) , a - > GetName ( ) , screenManager ( ) ) ) ;
2015-02-01 10:56:44 +00:00
audioBackend - > SetEnabledPtr ( & g_Config . bEnableSound ) ;
}
2015-01-24 12:50:27 +00:00
# endif
2014-04-27 14:05:53 +00:00
static const char * latency [ ] = { " Low " , " Medium " , " High " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * lowAudio = audioSettings - > Add ( new PopupMultiChoice ( & g_Config . iAudioLatency , a - > T ( " Audio Latency " ) , latency , 0 , ARRAY_SIZE ( latency ) , gr - > GetName ( ) , screenManager ( ) ) ) ;
2014-01-03 20:03:57 +00:00
lowAudio - > SetEnabledPtr ( & g_Config . bEnableSound ) ;
2016-12-01 20:40:44 +00:00
# if defined(__ANDROID__)
CheckBox * extraAudio = audioSettings - > Add ( new CheckBox ( & g_Config . bExtraAudioBuffering , a - > T ( " AudioBufferingForBluetooth " , " Bluetooth-friendly buffer (slower) " ) ) ) ;
2016-12-01 20:35:32 +00:00
extraAudio - > SetEnabledPtr ( & g_Config . bEnableSound ) ;
2016-12-01 20:40:44 +00:00
# endif
2015-01-31 11:12:01 +00:00
if ( System_GetPropertyInt ( SYSPROP_AUDIO_SAMPLE_RATE ) = = 44100 ) {
2015-02-01 17:04:06 +00:00
CheckBox * resampling = audioSettings - > Add ( new CheckBox ( & g_Config . bAudioResampler , a - > T ( " Audio sync " , " Audio sync (resampling) " ) ) ) ;
2015-01-31 11:12:01 +00:00
resampling - > SetEnabledPtr ( & g_Config . bEnableSound ) ;
}
2013-08-16 17:34:44 +00:00
2014-04-15 21:25:04 +00:00
audioSettings - > Add ( new ItemHeader ( a - > T ( " Audio hacks " ) ) ) ;
2014-04-12 21:16:38 +00:00
audioSettings - > Add ( new CheckBox ( & g_Config . bSoundSpeedHack , a - > T ( " Sound speed hack (DOA etc.) " ) ) ) ;
2014-04-12 15:16:31 +00:00
2013-07-20 14:03:52 +00:00
// Control
2013-06-09 10:41:12 +00:00
ViewGroup * controlsSettingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
controlsSettingsScroll - > SetTag ( " GameSettingsControls " ) ;
2013-08-19 22:49:25 +00:00
LinearLayout * controlsSettings = new LinearLayout ( ORIENT_VERTICAL ) ;
controlsSettings - > SetSpacing ( 0 ) ;
2013-06-09 10:41:12 +00:00
controlsSettingsScroll - > Add ( controlsSettings ) ;
2013-08-11 15:25:50 +00:00
tabHolder - > AddTab ( ms - > T ( " Controls " ) , controlsSettingsScroll ) ;
2013-08-20 10:28:17 +00:00
controlsSettings - > Add ( new ItemHeader ( ms - > T ( " Controls " ) ) ) ;
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new Choice ( co - > T ( " Control Mapping " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnControlMapping ) ;
2013-10-09 20:15:56 +00:00
2015-02-28 22:02:03 +00:00
# if defined(USING_WIN_UI)
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new CheckBox ( & g_Config . bGamepadOnlyFocused , co - > T ( " Ignore gamepads when not focused " ) ) ) ;
2015-02-28 22:02:03 +00:00
# endif
2014-02-08 18:29:22 +00:00
# if defined(MOBILE_DEVICE)
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new CheckBox ( & g_Config . bHapticFeedback , co - > T ( " HapticFeedback " , " Haptic Feedback (vibration) " ) ) ) ;
2015-12-21 07:16:45 +00:00
static const char * tiltTypes [ ] = { " None (Disabled) " , " Analog Stick " , " D-PAD " , " PSP Action Buttons " , " L/R Trigger Buttons " } ;
2015-09-23 11:34:23 +00:00
controlsSettings - > Add ( new PopupMultiChoice ( & g_Config . iTiltInputType , co - > T ( " Tilt Input Type " ) , tiltTypes , 0 , ARRAY_SIZE ( tiltTypes ) , co - > GetName ( ) , screenManager ( ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnTiltTypeChange ) ;
2013-11-11 11:52:04 +00:00
2015-07-01 20:31:04 +00:00
Choice * customizeTilt = controlsSettings - > Add ( new Choice ( co - > T ( " Customize tilt " ) ) ) ;
2015-04-03 09:50:03 +00:00
customizeTilt - > OnClick . Handle ( this , & GameSettingsScreen : : OnTiltCustomize ) ;
2013-12-14 12:55:57 +00:00
customizeTilt - > SetEnabledPtr ( ( bool * ) & g_Config . iTiltInputType ) ; //<- dirty int-to-bool cast
2013-09-29 19:47:15 +00:00
# endif
2015-04-03 09:50:03 +00:00
// TVs don't have touch control, at least not yet.
if ( System_GetPropertyInt ( SYSPROP_DEVICE_TYPE ) ! = DEVICE_TYPE_TV ) {
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new ItemHeader ( co - > T ( " OnScreen " , " On-Screen Touch Controls " ) ) ) ;
controlsSettings - > Add ( new CheckBox ( & g_Config . bShowTouchControls , co - > T ( " OnScreen " , " On-Screen Touch Controls " ) ) ) ;
layoutEditorChoice_ = controlsSettings - > Add ( new Choice ( co - > T ( " Custom layout... " ) ) ) ;
2015-04-03 09:50:03 +00:00
layoutEditorChoice_ - > OnClick . Handle ( this , & GameSettingsScreen : : OnTouchControlLayout ) ;
layoutEditorChoice_ - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
// Re-centers itself to the touch location on touch-down.
2015-07-01 20:31:04 +00:00
CheckBox * floatingAnalog = controlsSettings - > Add ( new CheckBox ( & g_Config . bAutoCenterTouchAnalog , co - > T ( " Auto-centering analog stick " ) ) ) ;
2015-04-03 09:50:03 +00:00
floatingAnalog - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
2015-06-28 05:34:05 +00:00
// Combo key setup
Choice * comboKey = controlsSettings - > Add ( new Choice ( co - > T ( " Combo Key Setup " ) ) ) ;
2017-04-18 03:33:22 +00:00
comboKey - > OnClick . Handle ( this , & GameSettingsScreen : : OnComboKey ) ;
2015-06-28 05:34:05 +00:00
comboKey - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
2016-10-12 10:32:20 +00:00
// On non iOS systems, offer to let the user see this button.
2015-04-03 09:50:03 +00:00
// Some Windows touch devices don't have a back button or other button to call up the menu.
2017-04-30 00:35:12 +00:00
if ( System_GetPropertyBool ( SYSPROP_HAS_BACK_BUTTON ) ) {
2017-04-13 05:02:50 +00:00
CheckBox * enablePauseBtn = controlsSettings - > Add ( new CheckBox ( & g_Config . bShowTouchPause , co - > T ( " Show Touch Pause Menu Button " ) ) ) ;
// Don't allow the user to disable it once in-game, so they can't lock themselves out of the menu.
if ( ! PSP_IsInited ( ) ) {
enablePauseBtn - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
} else {
enablePauseBtn - > SetEnabled ( false ) ;
}
2015-04-03 09:50:03 +00:00
}
2014-02-25 06:39:10 +00:00
2015-07-01 20:31:04 +00:00
CheckBox * disableDiags = controlsSettings - > Add ( new CheckBox ( & g_Config . bDisableDpadDiagonals , co - > T ( " Disable D-Pad diagonals (4-way touch) " ) ) ) ;
2015-04-03 09:50:03 +00:00
disableDiags - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
2015-12-20 20:58:24 +00:00
PopupSliderChoice * opacity = controlsSettings - > Add ( new PopupSliderChoice ( & g_Config . iTouchButtonOpacity , 0 , 100 , co - > T ( " Button Opacity " ) , screenManager ( ) , " % " ) ) ;
2015-04-03 09:50:03 +00:00
opacity - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
2015-12-20 20:58:24 +00:00
opacity - > SetFormat ( " %i%% " ) ;
2015-12-28 00:34:51 +00:00
PopupSliderChoice * autoHide = controlsSettings - > Add ( new PopupSliderChoice ( & g_Config . iTouchButtonHideSeconds , 0 , 300 , co - > T ( " Auto-hide buttons after seconds " ) , screenManager ( ) , co - > T ( " seconds, 0 : off " ) ) ) ;
2015-12-20 20:40:47 +00:00
autoHide - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
2015-12-20 20:58:24 +00:00
autoHide - > SetFormat ( " %is " ) ;
autoHide - > SetZeroLabel ( co - > T ( " Off " ) ) ;
2015-04-03 09:50:03 +00:00
static const char * touchControlStyles [ ] = { " Classic " , " Thin borders " } ;
2015-09-23 10:43:45 +00:00
View * style = controlsSettings - > Add ( new PopupMultiChoice ( & g_Config . iTouchButtonStyle , co - > T ( " Button style " ) , touchControlStyles , 0 , ARRAY_SIZE ( touchControlStyles ) , co - > GetName ( ) , screenManager ( ) ) ) ;
2015-04-03 09:50:03 +00:00
style - > SetEnabledPtr ( & g_Config . bShowTouchControls ) ;
}
2013-10-10 14:44:12 +00:00
2015-03-01 15:38:22 +00:00
# ifdef _WIN32
2015-01-17 16:47:19 +00:00
static const char * inverseDeadzoneModes [ ] = { " Off " , " X " , " Y " , " X + Y " } ;
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new ItemHeader ( co - > T ( " DInput Analog Settings " , " DInput Analog Settings " ) ) ) ;
2015-11-06 07:25:40 +00:00
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fDInputAnalogDeadzone , 0.0f , 1.0f , co - > T ( " Deadzone Radius " ) , 0.01f , screenManager ( ) , " / 1.0 " ) ) ;
2015-09-23 10:43:45 +00:00
controlsSettings - > Add ( new PopupMultiChoice ( & g_Config . iDInputAnalogInverseMode , co - > T ( " Analog Mapper Mode " ) , inverseDeadzoneModes , 0 , ARRAY_SIZE ( inverseDeadzoneModes ) , co - > GetName ( ) , screenManager ( ) ) ) ;
2015-11-06 07:25:40 +00:00
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fDInputAnalogInverseDeadzone , 0.0f , 1.0f , co - > T ( " Analog Mapper Low End " , " Analog Mapper Low End (Inverse Deadzone) " ) , 0.01f , screenManager ( ) , " / 1.0 " ) ) ;
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fDInputAnalogSensitivity , 0.0f , 10.0f , co - > T ( " Analog Mapper High End " , " Analog Mapper High End (Axis Sensitivity) " ) , 0.01f , screenManager ( ) , " x " ) ) ;
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new ItemHeader ( co - > T ( " XInput Analog Settings " , " XInput Analog Settings " ) ) ) ;
2015-11-06 07:25:40 +00:00
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fXInputAnalogDeadzone , 0.0f , 1.0f , co - > T ( " Deadzone Radius " ) , 0.01f , screenManager ( ) , " / 1.0 " ) ) ;
2015-09-23 10:43:45 +00:00
controlsSettings - > Add ( new PopupMultiChoice ( & g_Config . iXInputAnalogInverseMode , co - > T ( " Analog Mapper Mode " ) , inverseDeadzoneModes , 0 , ARRAY_SIZE ( inverseDeadzoneModes ) , co - > GetName ( ) , screenManager ( ) ) ) ;
2015-11-06 07:25:40 +00:00
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fXInputAnalogInverseDeadzone , 0.0f , 1.0f , co - > T ( " Analog Mapper Low End " , " Analog Mapper Low End (Inverse Deadzone) " ) , 0.01f , screenManager ( ) , " / 1.0 " ) ) ;
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fXInputAnalogSensitivity , 0.0f , 10.0f , co - > T ( " Analog Mapper High End " , " Analog Mapper High End (Axis Sensitivity) " ) , 0.01f , screenManager ( ) , " x " ) ) ;
2017-05-10 12:26:35 +00:00
# else
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fXInputAnalogSensitivity , 0.0f , 10.0f , co - > T ( " Analog Axis Sensitivity " , " Analog Axis Sensitivity " ) , 0.01f , screenManager ( ) , " x " ) ) ;
2015-03-01 15:38:22 +00:00
# endif
2015-01-17 16:47:19 +00:00
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new ItemHeader ( co - > T ( " Keyboard " , " Keyboard Control Settings " ) ) ) ;
2014-08-16 19:05:37 +00:00
# if defined(USING_WIN_UI)
2015-07-01 20:31:04 +00:00
controlsSettings - > Add ( new CheckBox ( & g_Config . bIgnoreWindowsKey , co - > T ( " Ignore Windows Key " ) ) ) ;
2014-08-16 19:05:37 +00:00
# endif // #if defined(USING_WIN_UI)
2016-08-14 22:26:42 +00:00
auto analogLimiter = new PopupSliderChoiceFloat ( & g_Config . fAnalogLimiterDeadzone , 0.0f , 1.0f , co - > T ( " Analog Limiter " ) , 0.10f , screenManager ( ) , " / 1.0 " ) ;
controlsSettings - > Add ( analogLimiter ) ;
2016-08-17 01:56:04 +00:00
analogLimiter - > OnChange . Add ( [ = ] ( EventParams & e ) {
settingInfo_ - > Show ( co - > T ( " AnalogLimiter Tip " , " When the analog limiter button is pressed " ) , e . v ) ;
2016-08-14 22:26:42 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2017-04-26 14:48:55 +00:00
# if defined(USING_WIN_UI)
2017-04-29 12:00:39 +00:00
controlsSettings - > Add ( new ItemHeader ( co - > T ( " Mouse " , " Mouse settings " ) ) ) ;
2017-04-27 10:06:39 +00:00
CheckBox * mouseControl = controlsSettings - > Add ( new CheckBox ( & g_Config . bMouseControl , co - > T ( " Use Mouse Control " ) ) ) ;
mouseControl - > OnClick . Add ( [ = ] ( EventParams & e ) {
if ( g_Config . bMouseControl )
settingInfo_ - > Show ( co - > T ( " MouseControl Tip " , " You can now map mouse in control mapping screen by pressing the 'M' icon. " ) , e . v ) ;
return UI : : EVENT_CONTINUE ;
} ) ;
2017-06-03 15:48:35 +00:00
controlsSettings - > Add ( new CheckBox ( & g_Config . bMouseConfine , co - > T ( " Confine Mouse " , " Trap mouse within window/display area " ) ) ) - > SetEnabledPtr ( & g_Config . bMouseControl ) ;
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fMouseSensitivity , 0.01f , 1.0f , co - > T ( " Mouse sensitivity " ) , 0.01f , screenManager ( ) , " x " ) ) - > SetEnabledPtr ( & g_Config . bMouseControl ) ;
controlsSettings - > Add ( new PopupSliderChoiceFloat ( & g_Config . fMouseSmoothing , 0.0f , 0.95f , co - > T ( " Mouse smoothing " ) , 0.05f , screenManager ( ) , " x " ) ) - > SetEnabledPtr ( & g_Config . bMouseControl ) ;
2017-04-26 14:48:55 +00:00
# endif
2014-01-07 20:32:58 +00:00
2015-01-04 10:59:43 +00:00
ViewGroup * networkingSettingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
networkingSettingsScroll - > SetTag ( " GameSettingsNetworking " ) ;
2015-01-04 10:59:43 +00:00
LinearLayout * networkingSettings = new LinearLayout ( ORIENT_VERTICAL ) ;
networkingSettings - > SetSpacing ( 0 ) ;
networkingSettingsScroll - > Add ( networkingSettings ) ;
2015-01-05 00:32:53 +00:00
tabHolder - > AddTab ( ms - > T ( " Networking " ) , networkingSettingsScroll ) ;
networkingSettings - > Add ( new ItemHeader ( ms - > T ( " Networking " ) ) ) ;
2015-01-04 10:59:43 +00:00
2015-01-29 21:47:46 +00:00
networkingSettings - > Add ( new Choice ( n - > T ( " Adhoc Multiplayer forum " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnAdhocGuides ) ;
2015-01-29 21:15:42 +00:00
2015-01-04 10:59:43 +00:00
networkingSettings - > Add ( new CheckBox ( & g_Config . bEnableWlan , n - > T ( " Enable networking " , " Enable networking/wlan (beta) " ) ) ) ;
2017-03-22 20:50:08 +00:00
# if !defined(MOBILE_DEVICE) && !defined(USING_QT_UI)
2015-01-04 10:59:43 +00:00
networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . proAdhocServer , n - > T ( " Change proAdhocServer Address " ) , " " , 255 , screenManager ( ) ) ) ;
2016-10-12 09:13:16 +00:00
# elif defined(__ANDROID__)
2016-02-21 05:12:35 +00:00
networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . proAdhocServer , n - > T ( " Change proAdhocServer Address " ) , nullptr ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeproAdhocServerAddress ) ;
2015-01-04 10:59:43 +00:00
# else
networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . proAdhocServer , n - > T ( " Change proAdhocServer Address " ) , nullptr ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeproAdhocServerAddress ) ;
# endif
networkingSettings - > Add ( new CheckBox ( & g_Config . bEnableAdhocServer , n - > T ( " Enable built-in PRO Adhoc Server " , " Enable built-in PRO Adhoc Server " ) ) ) ;
2015-01-04 13:52:01 +00:00
networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sMACAddress , n - > T ( " Change Mac Address " ) , nullptr ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeMacAddress ) ;
2016-01-24 08:52:39 +00:00
networkingSettings - > Add ( new PopupSliderChoice ( & g_Config . iPortOffset , 0 , 60000 , n - > T ( " Port offset " , " Port offset(0 = PSP compatibility) " ) , 100 , screenManager ( ) ) ) ;
2016-10-21 12:40:11 +00:00
networkingSettings - > Add ( new CheckBox ( & g_Config . bEnableNetworkChat , n - > T ( " Enable network chat " , " Enable network chat " ) ) ) ;
2016-12-05 03:04:31 +00:00
static const char * chatButtonPositions [ ] = { " Bottom Left " , " Bottom Center " , " Bottom Right " , " Top Left " , " Top Center " , " Top Right " , " Center Left " , " Center Right " } ;
networkingSettings - > Add ( new PopupMultiChoice ( & g_Config . iChatButtonPosition , n - > T ( " Chat Button Position " ) , chatButtonPositions , 0 , ARRAY_SIZE ( chatButtonPositions ) , " Chat Button Position " , screenManager ( ) ) ) ;
static const char * chatScreenPositions [ ] = { " Bottom Left " , " Bottom Center " , " Bottom Right " , " Top Left " , " Top Center " , " Top Right " } ;
networkingSettings - > Add ( new PopupMultiChoice ( & g_Config . iChatScreenPosition , n - > T ( " Chat Screen Position " ) , chatScreenPositions , 0 , ARRAY_SIZE ( chatScreenPositions ) , " Chat Screen Position " , screenManager ( ) ) ) ;
2017-07-06 13:43:39 +00:00
networkingSettings - > Add ( new ItemHeader ( co - > T ( " QuickChat " , " Quick Chat " ) ) ) ;
networkingSettings - > Add ( new CheckBox ( & g_Config . bEnableQuickChat , co - > T ( " QuickChat " , " Enable Quick Chat " ) ) ) ;
# if !defined(MOBILE_DEVICE) && !defined(USING_QT_UI) // TODO: Add all platforms where KEY_CHAR support is added
PopupTextInputChoice * qc1 = networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . sQuickChat0 , sy - > T ( " Quick Chat 1 " ) , " " , 32 , screenManager ( ) ) ) ;
qc1 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
PopupTextInputChoice * qc2 = networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . sQuickChat1 , sy - > T ( " Quick Chat 2 " ) , " " , 32 , screenManager ( ) ) ) ;
qc2 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
PopupTextInputChoice * qc3 = networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . sQuickChat2 , sy - > T ( " Quick Chat 3 " ) , " " , 32 , screenManager ( ) ) ) ;
qc3 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
PopupTextInputChoice * qc4 = networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . sQuickChat3 , sy - > T ( " Quick Chat 4 " ) , " " , 32 , screenManager ( ) ) ) ;
qc4 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
PopupTextInputChoice * qc5 = networkingSettings - > Add ( new PopupTextInputChoice ( & g_Config . sQuickChat4 , sy - > T ( " Quick Chat 5 " ) , " " , 32 , screenManager ( ) ) ) ;
qc5 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
# elif defined(USING_QT_UI)
Choice * qc1 = networkingSettings - > Add ( new Choice ( sy - > T ( " Quick Chat 1 " ) ) ) ;
qc1 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
qc1 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat0 ) ;
Choice * qc2 = networkingSettings - > Add ( new Choice ( sy - > T ( " Quick Chat 2 " ) ) ) ;
qc2 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
qc2 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat1 ) ;
Choice * qc3 = networkingSettings - > Add ( new Choice ( sy - > T ( " Quick Chat 3 " ) ) ) ;
qc3 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
qc3 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat2 ) ;
Choice * qc4 = networkingSettings - > Add ( new Choice ( sy - > T ( " Quick Chat 4 " ) ) ) ;
qc4 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
qc4 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat3 ) ;
Choice * qc5 = networkingSettings - > Add ( new Choice ( sy - > T ( " Quick Chat 5 " ) ) ) ;
qc5 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
qc5 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat4 ) ;
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
ChoiceWithValueDisplay * qc1 = networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sQuickChat0 , sy - > T ( " Quick Chat 1 " ) , nullptr ) ) ;
2017-07-06 13:43:39 +00:00
qc1 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat0 ) ;
qc1 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
2017-07-08 10:08:33 +00:00
ChoiceWithValueDisplay * qc2 = networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sQuickChat1 , sy - > T ( " Quick Chat 2 " ) , nullptr ) ) ;
2017-07-06 13:43:39 +00:00
qc2 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat1 ) ;
qc2 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
2017-07-08 10:08:33 +00:00
ChoiceWithValueDisplay * qc3 = networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sQuickChat2 , sy - > T ( " Quick Chat 3 " ) , nullptr ) ) ;
2017-07-06 13:43:39 +00:00
qc3 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat2 ) ;
qc3 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
2017-07-08 10:08:33 +00:00
ChoiceWithValueDisplay * qc4 = networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sQuickChat3 , sy - > T ( " Quick Chat 4 " ) , nullptr ) ) ;
2017-07-06 13:43:39 +00:00
qc4 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat3 ) ;
qc4 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
2017-07-08 10:08:33 +00:00
ChoiceWithValueDisplay * qc5 = networkingSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sQuickChat4 , sy - > T ( " Quick Chat 5 " ) , nullptr ) ) ;
2017-07-06 13:43:39 +00:00
qc5 - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeQuickChat4 ) ;
qc5 - > SetEnabledPtr ( & g_Config . bEnableQuickChat ) ;
# endif
2015-06-12 18:37:42 +00:00
ViewGroup * toolsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
toolsScroll - > SetTag ( " GameSettingsTools " ) ;
2015-06-12 18:37:42 +00:00
LinearLayout * tools = new LinearLayout ( ORIENT_VERTICAL ) ;
tools - > SetSpacing ( 0 ) ;
toolsScroll - > Add ( tools ) ;
tabHolder - > AddTab ( ms - > T ( " Tools " ) , toolsScroll ) ;
tools - > Add ( new ItemHeader ( ms - > T ( " Tools " ) ) ) ;
2015-07-04 20:05:17 +00:00
// These were moved here so use the wrong translation objects, to avoid having to change all inis... This isn't a sustainable situation :P
2015-06-21 14:49:21 +00:00
tools - > Add ( new Choice ( sa - > T ( " Savedata Manager " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnSavedataManager ) ;
2015-06-30 03:28:31 +00:00
tools - > Add ( new Choice ( dev - > T ( " System Information " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnSysInfo ) ;
2015-07-04 20:05:17 +00:00
tools - > Add ( new Choice ( sy - > T ( " Developer Tools " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnDeveloperTools ) ;
2016-07-03 17:24:33 +00:00
tools - > Add ( new Choice ( sy - > T ( " Remote disc streaming " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnRemoteISO ) ;
2015-06-12 18:37:42 +00:00
2013-07-20 14:03:52 +00:00
// System
2013-06-09 10:41:12 +00:00
ViewGroup * systemSettingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-01-23 06:52:13 +00:00
systemSettingsScroll - > SetTag ( " GameSettingsSystem " ) ;
2013-08-19 22:49:25 +00:00
LinearLayout * systemSettings = new LinearLayout ( ORIENT_VERTICAL ) ;
systemSettings - > SetSpacing ( 0 ) ;
2013-06-09 10:41:12 +00:00
systemSettingsScroll - > Add ( systemSettings ) ;
2013-08-11 15:25:50 +00:00
tabHolder - > AddTab ( ms - > T ( " System " ) , systemSettingsScroll ) ;
2013-08-17 21:49:06 +00:00
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " UI Language " ) ) ) ;
2015-06-30 03:28:31 +00:00
systemSettings - > Add ( new Choice ( dev - > T ( " Language " , " Language " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnLanguage ) ;
2013-10-20 15:33:18 +00:00
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " Help the PPSSPP team " ) ) ) ;
2015-01-10 23:09:17 +00:00
enableReports_ = Reporting : : IsEnabled ( ) ;
2015-07-01 23:00:04 +00:00
enableReportsCheckbox_ = new CheckBox ( & enableReports_ , sy - > T ( " Enable Compatibility Server Reports " ) ) ;
2015-01-10 23:09:17 +00:00
enableReportsCheckbox_ - > SetEnabled ( Reporting : : IsSupported ( ) ) ;
systemSettings - > Add ( enableReportsCheckbox_ ) ;
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " Emulation " ) ) ) ;
2015-01-10 23:09:17 +00:00
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bFastMemory , sy - > T ( " Fast Memory " , " Fast Memory (Unstable) " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnJitAffectingSetting ) ;
2013-08-18 17:51:40 +00:00
2016-08-14 22:26:42 +00:00
auto separateCPUThread = new CheckBox ( & g_Config . bSeparateCPUThread , sy - > T ( " Multithreaded (experimental) " ) ) ;
systemSettings - > Add ( separateCPUThread ) ;
2016-08-17 01:56:04 +00:00
separateCPUThread - > OnClick . Add ( [ = ] ( EventParams & e ) {
2017-03-21 14:18:54 +00:00
if ( g_Config . bSeparateCPUThread )
settingInfo_ - > Show ( sy - > T ( " Multithreaded Tip " , " Not always faster, causes glitches/crashing " ) , e . v ) ;
2016-08-14 22:26:42 +00:00
return UI : : EVENT_CONTINUE ;
} ) ;
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bSeparateIOThread , sy - > T ( " I/O on thread (experimental) " ) ) ) - > SetEnabled ( ! PSP_IsInited ( ) ) ;
2014-12-26 09:18:52 +00:00
static const char * ioTimingMethods [ ] = { " Fast (lag on slow storage) " , " Host (bugs, less lag) " , " Simulate UMD delays " } ;
2015-09-23 10:43:45 +00:00
View * ioTimingMethod = systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iIOTimingMethod , sy - > T ( " IO timing method " ) , ioTimingMethods , 0 , ARRAY_SIZE ( ioTimingMethods ) , sy - > GetName ( ) , screenManager ( ) ) ) ;
2014-12-26 03:02:49 +00:00
ioTimingMethod - > SetEnabledPtr ( & g_Config . bSeparateIOThread ) ;
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bForceLagSync , sy - > T ( " Force real clock sync (slower, less lag) " ) ) ) ;
2015-12-28 00:34:51 +00:00
PopupSliderChoice * lockedMhz = systemSettings - > Add ( new PopupSliderChoice ( & g_Config . iLockedCPUSpeed , 0 , 1000 , sy - > T ( " Change CPU Clock " , " Change CPU Clock (unstable) " ) , screenManager ( ) , sy - > T ( " MHz, 0:default " ) ) ) ;
2015-12-20 20:58:24 +00:00
lockedMhz - > SetZeroLabel ( sy - > T ( " Auto " ) ) ;
2015-12-28 00:34:51 +00:00
PopupSliderChoice * rewindFreq = systemSettings - > Add ( new PopupSliderChoice ( & g_Config . iRewindFlipFrequency , 0 , 1800 , sy - > T ( " Rewind Snapshot Frequency " , " Rewind Snapshot Frequency (mem hog) " ) , screenManager ( ) , sy - > T ( " frames, 0:off " ) ) ) ;
2015-12-20 20:58:24 +00:00
rewindFreq - > SetZeroLabel ( sy - > T ( " Off " ) ) ;
2013-08-18 17:51:40 +00:00
2016-08-06 04:27:53 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bMemStickInserted , sy - > T ( " Memory Stick inserted " ) ) ) ;
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " General " ) ) ) ;
2015-01-10 23:09:17 +00:00
2017-06-05 15:32:49 +00:00
# if PPSSPP_PLATFORM(ANDROID)
2015-04-03 09:50:03 +00:00
if ( System_GetPropertyInt ( SYSPROP_DEVICE_TYPE ) = = DEVICE_TYPE_MOBILE ) {
static const char * screenRotation [ ] = { " Auto " , " Landscape " , " Portrait " , " Landscape Reversed " , " Portrait Reversed " } ;
2015-09-23 10:43:45 +00:00
PopupMultiChoice * rot = systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iScreenRotation , co - > T ( " Screen Rotation " ) , screenRotation , 0 , ARRAY_SIZE ( screenRotation ) , co - > GetName ( ) , screenManager ( ) ) ) ;
2015-04-03 09:50:03 +00:00
rot - > OnChoice . Handle ( this , & GameSettingsScreen : : OnScreenRotation ) ;
}
2015-01-10 23:09:17 +00:00
# endif
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bCheckForNewVersion , sy - > T ( " VersionCheck " , " Check for new versions of PPSSPP " ) ) ) ;
2015-01-10 23:09:17 +00:00
if ( g_Config . iMaxRecent > 0 )
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new Choice ( sy - > T ( " Clear Recent Games List " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnClearRecents ) ;
2017-04-02 17:50:09 +00:00
const std : : string bgPng = GetSysDirectory ( DIRECTORY_SYSTEM ) + " background.png " ;
const std : : string bgJpg = GetSysDirectory ( DIRECTORY_SYSTEM ) + " background.jpg " ;
if ( File : : Exists ( bgPng ) | | File : : Exists ( bgJpg ) ) {
backgroundChoice_ = systemSettings - > Add ( new Choice ( sy - > T ( " Clear UI background " ) ) ) ;
2017-04-30 00:35:12 +00:00
} else if ( System_GetPropertyBool ( SYSPROP_HAS_IMAGE_BROWSER ) ) {
2017-04-02 17:50:09 +00:00
backgroundChoice_ = systemSettings - > Add ( new Choice ( sy - > T ( " Set UI background... " ) ) ) ;
} else {
backgroundChoice_ = nullptr ;
}
if ( backgroundChoice_ ! = nullptr ) {
backgroundChoice_ - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeBackground ) ;
}
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new Choice ( sy - > T ( " Restore Default Settings " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnRestoreDefaultSettings ) ;
systemSettings - > Add ( new CheckBox ( & g_Config . bEnableAutoLoad , sy - > T ( " Auto Load Newest Savestate " ) ) ) ;
2015-01-10 23:09:17 +00:00
2014-05-25 01:26:30 +00:00
# if defined(USING_WIN_UI)
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bBypassOSKWithKeyboard , sy - > T ( " Enable Windows native keyboard " , " Enable Windows native keyboard " ) ) ) ;
2014-05-25 01:26:30 +00:00
# endif
2017-02-24 19:50:27 +00:00
# if defined(_WIN32) && !PPSSPP_PLATFORM(UWP)
2015-07-01 23:00:04 +00:00
SavePathInMyDocumentChoice = systemSettings - > Add ( new CheckBox ( & installed_ , sy - > T ( " Save path in My Documents " , " Save path in My Documents " ) ) ) ;
2014-10-26 00:35:11 +00:00
SavePathInMyDocumentChoice - > OnClick . Handle ( this , & GameSettingsScreen : : OnSavePathMydoc ) ;
2015-07-01 23:00:04 +00:00
SavePathInOtherChoice = systemSettings - > Add ( new CheckBox ( & otherinstalled_ , sy - > T ( " Save path in installed.txt " , " Save path in installed.txt " ) ) ) ;
2014-10-23 14:22:11 +00:00
SavePathInOtherChoice - > SetEnabled ( false ) ;
SavePathInOtherChoice - > OnClick . Handle ( this , & GameSettingsScreen : : OnSavePathOther ) ;
wchar_t myDocumentsPath [ MAX_PATH ] ;
const HRESULT result = SHGetFolderPath ( NULL , CSIDL_PERSONAL , NULL , SHGFP_TYPE_CURRENT , myDocumentsPath ) ;
const std : : string PPSSPPpath = File : : GetExeDirectory ( ) ;
const std : : string installedFile = PPSSPPpath + " installed.txt " ;
2014-11-03 00:53:15 +00:00
installed_ = File : : Exists ( installedFile ) ;
otherinstalled_ = false ;
if ( ! installed_ & & result = = S_OK ) {
2014-10-26 01:03:57 +00:00
if ( File : : CreateEmptyFile ( PPSSPPpath + " installedTEMP.txt " ) ) {
2014-10-26 00:35:11 +00:00
// Disable the setting whether cannot create & delete file
if ( ! ( File : : Delete ( PPSSPPpath + " installedTEMP.txt " ) ) )
SavePathInMyDocumentChoice - > SetEnabled ( false ) ;
2014-10-27 10:48:48 +00:00
else
2015-01-10 23:09:17 +00:00
SavePathInOtherChoice - > SetEnabled ( true ) ;
} else
2014-10-23 14:22:11 +00:00
SavePathInMyDocumentChoice - > SetEnabled ( false ) ;
2015-01-10 23:09:17 +00:00
} else {
2014-11-03 00:53:15 +00:00
if ( installed_ & & ( result = = S_OK ) ) {
2014-10-23 14:22:11 +00:00
std : : ifstream inputFile ( ConvertUTF8ToWString ( installedFile ) ) ;
2014-10-24 14:21:49 +00:00
if ( ! inputFile . fail ( ) & & inputFile . is_open ( ) ) {
std : : string tempString ;
std : : getline ( inputFile , tempString ) ;
// Skip UTF-8 encoding bytes if there are any. There are 3 of them.
if ( tempString . substr ( 0 , 3 ) = = " \xEF \xBB \xBF " )
2014-10-26 00:39:44 +00:00
tempString = tempString . substr ( 3 ) ;
2014-10-27 10:48:48 +00:00
SavePathInOtherChoice - > SetEnabled ( true ) ;
2014-10-26 06:50:21 +00:00
if ( ! ( tempString = = " " ) ) {
2014-11-03 00:53:15 +00:00
installed_ = false ;
otherinstalled_ = true ;
2014-10-24 14:21:49 +00:00
}
2014-10-23 14:22:11 +00:00
}
2014-10-24 14:21:49 +00:00
inputFile . close ( ) ;
2015-01-10 23:09:17 +00:00
} else if ( result ! = S_OK )
2014-10-24 14:21:49 +00:00
SavePathInMyDocumentChoice - > SetEnabled ( false ) ;
2015-01-10 23:09:17 +00:00
}
2014-10-23 14:22:11 +00:00
# endif
2013-10-15 06:06:37 +00:00
2014-10-30 23:14:00 +00:00
# if defined(_M_X64)
2015-12-19 23:23:25 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bCacheFullIsoInRam , sy - > T ( " Cache ISO in RAM " , " Cache full ISO in RAM " ) ) ) ;
2014-10-30 23:14:00 +00:00
# endif
2016-10-12 09:13:16 +00:00
//#ifndef __ANDROID__
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " Cheats " , " Cheats (experimental, see forums) " ) ) ) ;
systemSettings - > Add ( new CheckBox ( & g_Config . bEnableCheats , sy - > T ( " Enable Cheats " ) ) ) ;
2013-12-10 22:19:37 +00:00
//#endif
systemSettings - > SetSpacing ( 0 ) ;
2013-08-20 16:03:52 +00:00
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new ItemHeader ( sy - > T ( " PSP Settings " ) ) ) ;
2014-01-13 12:45:28 +00:00
static const char * models [ ] = { " PSP-1000 " , " PSP-2000/3000 " } ;
2015-09-23 10:43:45 +00:00
systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iPSPModel , sy - > T ( " PSP Model " ) , models , 0 , ARRAY_SIZE ( models ) , sy - > GetName ( ) , screenManager ( ) ) ) - > SetEnabled ( ! PSP_IsInited ( ) ) ;
2013-09-28 06:21:59 +00:00
// TODO: Come up with a way to display a keyboard for mobile users,
// so until then, this is Windows/Desktop only.
2017-03-22 20:50:08 +00:00
# if !defined(MOBILE_DEVICE) && !defined(USING_QT_UI) // TODO: Add all platforms where KEY_CHAR support is added
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new PopupTextInputChoice ( & g_Config . sNickName , sy - > T ( " Change Nickname " ) , " " , 32 , screenManager ( ) ) ) ;
2014-07-18 09:04:12 +00:00
# elif defined(USING_QT_UI)
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new Choice ( sy - > T ( " Change Nickname " ) ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeNickname ) ;
2016-10-12 09:13:16 +00:00
# elif defined(__ANDROID__)
2016-02-21 03:23:00 +00:00
systemSettings - > Add ( new ChoiceWithValueDisplay ( & g_Config . sNickName , sy - > T ( " Change Nickname " ) , nullptr ) ) - > OnClick . Handle ( this , & GameSettingsScreen : : OnChangeNickname ) ;
2013-12-08 10:16:18 +00:00
# endif
2014-02-08 18:29:22 +00:00
# if defined(_WIN32) || (defined(USING_QT_UI) && !defined(MOBILE_DEVICE))
2013-12-08 10:16:18 +00:00
// Screenshot functionality is not yet available on non-Windows/non-Qt
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bScreenshotsAsPNG , sy - > T ( " Screenshots as PNG " ) ) ) ;
2016-09-03 22:26:01 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bDumpFrames , sy - > T ( " Record Display " ) ) ) ;
systemSettings - > Add ( new CheckBox ( & g_Config . bUseFFV1 , sy - > T ( " Use Lossless Video Codec (FFV1) " ) ) ) ;
2016-09-04 16:52:14 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bDumpAudio , sy - > T ( " Record Audio " ) ) ) ;
2013-11-29 15:46:47 +00:00
# endif
2015-07-01 23:00:04 +00:00
systemSettings - > Add ( new CheckBox ( & g_Config . bDayLightSavings , sy - > T ( " Day Light Saving " ) ) ) ;
2013-07-21 20:15:18 +00:00
static const char * dateFormat [ ] = { " YYYYMMDD " , " MMDDYYYY " , " DDMMYYYY " } ;
2015-09-23 10:43:45 +00:00
systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iDateFormat , sy - > T ( " Date Format " ) , dateFormat , 1 , 3 , sy - > GetName ( ) , screenManager ( ) ) ) ;
2013-07-21 20:15:18 +00:00
static const char * timeFormat [ ] = { " 12HR " , " 24HR " } ;
2015-09-23 10:43:45 +00:00
systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iTimeFormat , sy - > T ( " Time Format " ) , timeFormat , 1 , 2 , sy - > GetName ( ) , screenManager ( ) ) ) ;
2013-08-21 09:17:55 +00:00
static const char * buttonPref [ ] = { " Use O to confirm " , " Use X to confirm " } ;
2015-09-23 10:43:45 +00:00
systemSettings - > Add ( new PopupMultiChoice ( & g_Config . iButtonPreference , sy - > T ( " Confirmation Button " ) , buttonPref , 0 , 2 , sy - > GetName ( ) , screenManager ( ) ) ) ;
2013-06-08 20:42:31 +00:00
}
2014-07-22 07:55:12 +00:00
UI : : EventReturn GameSettingsScreen : : OnAutoFrameskip ( UI : : EventParams & e ) {
if ( g_Config . bAutoFrameSkip & & g_Config . iFrameSkip = = 0 ) {
g_Config . iFrameSkip = 1 ;
}
2015-02-09 22:10:57 +00:00
if ( g_Config . bAutoFrameSkip & & g_Config . iRenderingMode = = FB_NON_BUFFERED_MODE ) {
g_Config . iRenderingMode = FB_BUFFERED_MODE ;
}
2014-07-22 07:55:12 +00:00
return UI : : EVENT_DONE ;
}
2014-06-10 18:00:11 +00:00
UI : : EventReturn GameSettingsScreen : : OnSoftwareRendering ( UI : : EventParams & e ) {
2014-07-09 06:47:27 +00:00
vtxCacheEnable_ = ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
postProcEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
resolutionEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
2017-05-09 04:03:10 +00:00
bezierChoiceDisable_ = g_Config . bHardwareTessellation ;
2017-03-04 13:46:55 +00:00
tessHWEnable_ = IsBackendSupportHWTess ( ) & & ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
2014-06-10 18:00:11 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnHardwareTransform ( UI : : EventParams & e ) {
2014-07-09 06:47:27 +00:00
vtxCacheEnable_ = ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
2017-03-04 13:46:55 +00:00
tessHWEnable_ = IsBackendSupportHWTess ( ) & & ! g_Config . bSoftwareRendering & & g_Config . bHardwareTransform ;
2014-06-10 18:00:11 +00:00
return UI : : EVENT_DONE ;
}
2014-02-04 11:58:37 +00:00
UI : : EventReturn GameSettingsScreen : : OnScreenRotation ( UI : : EventParams & e ) {
2015-12-13 21:25:58 +00:00
ILOG ( " New display rotation: %d " , g_Config . iScreenRotation ) ;
2016-03-17 18:42:59 +00:00
ILOG ( " Sending rotate " ) ;
2014-02-04 11:58:37 +00:00
System_SendMessage ( " rotate " , " " ) ;
2016-03-17 18:42:59 +00:00
ILOG ( " Got back from rotate " ) ;
2014-02-04 11:58:37 +00:00
return UI : : EVENT_DONE ;
}
2014-07-20 22:35:36 +00:00
static void RecreateActivity ( ) {
const int SYSTEM_JELLYBEAN = 16 ;
if ( System_GetPropertyInt ( SYSPROP_SYSTEMVERSION ) > = SYSTEM_JELLYBEAN ) {
2016-03-17 18:42:59 +00:00
ILOG ( " Sending recreate " ) ;
2014-07-20 22:35:36 +00:00
System_SendMessage ( " recreate " , " " ) ;
2016-03-17 18:42:59 +00:00
ILOG ( " Got back from recreate " ) ;
2014-07-20 22:35:36 +00:00
} else {
2015-07-01 21:50:16 +00:00
I18NCategory * gr = GetI18NCategory ( " Graphics " ) ;
System_SendMessage ( " toast " , gr - > T ( " Must Restart " , " You must restart PPSSPP for this change to take effect " ) ) ;
2014-07-20 22:35:36 +00:00
}
}
2015-01-29 21:15:42 +00:00
UI : : EventReturn GameSettingsScreen : : OnAdhocGuides ( UI : : EventParams & e ) {
LaunchBrowser ( " http://forums.ppsspp.org/forumdisplay.php?fid=34 " ) ;
return UI : : EVENT_DONE ;
}
2014-02-09 22:16:08 +00:00
UI : : EventReturn GameSettingsScreen : : OnImmersiveModeChange ( UI : : EventParams & e ) {
System_SendMessage ( " immersive " , " " ) ;
2014-07-20 22:35:36 +00:00
const int SYSTEM_JELLYBEAN = 16 ;
// recreate doesn't seem reliable on earlier versions.
if ( g_Config . iAndroidHwScale ! = 0 ) {
RecreateActivity ( ) ;
}
2014-02-09 22:16:08 +00:00
return UI : : EVENT_DONE ;
}
2013-10-29 15:22:36 +00:00
UI : : EventReturn GameSettingsScreen : : OnRenderingMode ( UI : : EventParams & e ) {
2013-10-30 10:28:14 +00:00
// We do not want to report when rendering mode is Framebuffer to memory - so many issues
// are caused by that (framebuffer copies overwriting display lists, etc).
2014-02-16 04:34:03 +00:00
Reporting : : UpdateConfig ( ) ;
2013-10-29 15:22:36 +00:00
enableReports_ = Reporting : : IsEnabled ( ) ;
enableReportsCheckbox_ - > SetEnabled ( Reporting : : IsSupported ( ) ) ;
2013-10-30 10:28:14 +00:00
2014-07-09 06:47:27 +00:00
postProcEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
resolutionEnable_ = ! g_Config . bSoftwareRendering & & ( g_Config . iRenderingMode ! = FB_NON_BUFFERED_MODE ) ;
2015-02-09 22:10:57 +00:00
if ( g_Config . iRenderingMode = = FB_NON_BUFFERED_MODE ) {
g_Config . bAutoFrameSkip = false ;
}
2013-10-29 15:22:36 +00:00
return UI : : EVENT_DONE ;
}
2014-05-27 06:39:53 +00:00
UI : : EventReturn GameSettingsScreen : : OnJitAffectingSetting ( UI : : EventParams & e ) {
NativeMessageReceived ( " clear jit " , " " ) ;
return UI : : EVENT_DONE ;
}
2017-02-24 19:50:27 +00:00
# if defined(_WIN32) && !PPSSPP_PLATFORM(UWP)
2014-10-23 14:22:11 +00:00
UI : : EventReturn GameSettingsScreen : : OnSavePathMydoc ( UI : : EventParams & e ) {
const std : : string PPSSPPpath = File : : GetExeDirectory ( ) ;
const std : : string installedFile = PPSSPPpath + " installed.txt " ;
2014-11-03 00:53:15 +00:00
installed_ = File : : Exists ( installedFile ) ;
if ( otherinstalled_ ) {
2014-10-26 06:50:21 +00:00
File : : Delete ( PPSSPPpath + " installed.txt " ) ;
File : : CreateEmptyFile ( PPSSPPpath + " installed.txt " ) ;
2014-11-03 00:53:15 +00:00
otherinstalled_ = false ;
2014-10-26 01:03:57 +00:00
wchar_t myDocumentsPath [ MAX_PATH ] ;
const HRESULT result = SHGetFolderPath ( NULL , CSIDL_PERSONAL , NULL , SHGFP_TYPE_CURRENT , myDocumentsPath ) ;
const std : : string myDocsPath = ConvertWStringToUTF8 ( myDocumentsPath ) + " /PPSSPP/ " ;
g_Config . memStickDirectory = myDocsPath ;
}
2014-11-03 00:53:15 +00:00
else if ( installed_ ) {
2014-10-23 14:22:11 +00:00
File : : Delete ( PPSSPPpath + " installed.txt " ) ;
2014-11-03 00:53:15 +00:00
installed_ = false ;
2014-10-23 14:44:41 +00:00
g_Config . memStickDirectory = PPSSPPpath + " memstick/ " ;
2014-10-23 14:22:11 +00:00
}
else {
2016-05-31 17:40:14 +00:00
std : : ofstream myfile ;
2014-10-23 14:22:11 +00:00
myfile . open ( PPSSPPpath + " installed.txt " ) ;
if ( myfile . is_open ( ) ) {
myfile . close ( ) ;
}
wchar_t myDocumentsPath [ MAX_PATH ] ;
const HRESULT result = SHGetFolderPath ( NULL , CSIDL_PERSONAL , NULL , SHGFP_TYPE_CURRENT , myDocumentsPath ) ;
const std : : string myDocsPath = ConvertWStringToUTF8 ( myDocumentsPath ) + " /PPSSPP/ " ;
g_Config . memStickDirectory = myDocsPath ;
2014-11-03 00:53:15 +00:00
installed_ = true ;
2014-10-23 14:22:11 +00:00
}
2014-10-26 06:50:21 +00:00
return UI : : EVENT_DONE ;
2014-10-23 14:22:11 +00:00
}
UI : : EventReturn GameSettingsScreen : : OnSavePathOther ( UI : : EventParams & e ) {
2016-08-27 18:38:05 +00:00
const std : : string PPSSPPpath = File : : GetExeDirectory ( ) ;
2014-11-03 00:53:15 +00:00
if ( otherinstalled_ ) {
2014-10-27 19:10:21 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
std : : string folder = W32Util : : BrowseForFolder ( MainWindow : : GetHWND ( ) , di - > T ( " Choose PPSSPP save folder " ) ) ;
2014-10-27 18:57:40 +00:00
if ( folder . size ( ) ) {
g_Config . memStickDirectory = folder ;
2015-01-27 22:56:41 +00:00
FILE * f = File : : OpenCFile ( PPSSPPpath + " installed.txt " , " wb " ) ;
if ( f ) {
std : : string utfstring ( " \xEF \xBB \xBF " ) ;
utfstring . append ( folder ) ;
2015-02-04 12:34:53 +00:00
fwrite ( utfstring . c_str ( ) , 1 , utfstring . length ( ) , f ) ;
2015-01-27 22:56:41 +00:00
fclose ( f ) ;
}
2014-11-03 00:53:15 +00:00
installed_ = false ;
2014-10-27 10:48:48 +00:00
}
2014-10-27 11:14:39 +00:00
else
2014-11-03 00:53:15 +00:00
otherinstalled_ = false ;
2014-10-27 10:48:48 +00:00
}
else {
File : : Delete ( PPSSPPpath + " installed.txt " ) ;
SavePathInMyDocumentChoice - > SetEnabled ( true ) ;
2014-11-03 00:53:15 +00:00
otherinstalled_ = false ;
installed_ = false ;
2014-10-27 10:48:48 +00:00
g_Config . memStickDirectory = PPSSPPpath + " memstick/ " ;
}
2014-10-23 14:22:11 +00:00
return UI : : EVENT_DONE ;
}
# endif
2013-08-25 19:36:34 +00:00
UI : : EventReturn GameSettingsScreen : : OnClearRecents ( UI : : EventParams & e ) {
g_Config . recentIsos . clear ( ) ;
2013-09-07 16:44:28 +00:00
OnRecentChanged . Trigger ( e ) ;
2013-08-25 19:36:34 +00:00
return UI : : EVENT_DONE ;
}
2017-04-02 17:50:09 +00:00
UI : : EventReturn GameSettingsScreen : : OnChangeBackground ( UI : : EventParams & e ) {
const std : : string bgPng = GetSysDirectory ( DIRECTORY_SYSTEM ) + " background.png " ;
const std : : string bgJpg = GetSysDirectory ( DIRECTORY_SYSTEM ) + " background.jpg " ;
if ( File : : Exists ( bgPng ) | | File : : Exists ( bgJpg ) ) {
if ( File : : Exists ( bgPng ) ) {
File : : Delete ( bgPng ) ;
}
if ( File : : Exists ( bgJpg ) ) {
File : : Delete ( bgJpg ) ;
}
NativeMessageReceived ( " bgImage_updated " , " " ) ;
} else {
2017-04-30 00:35:12 +00:00
if ( System_GetPropertyBool ( SYSPROP_HAS_IMAGE_BROWSER ) ) {
2017-04-02 17:50:09 +00:00
System_SendMessage ( " bgImage_browse " , " " ) ;
}
}
// Change to a browse or clear button.
RecreateViews ( ) ;
return UI : : EVENT_DONE ;
}
2013-08-18 17:57:50 +00:00
UI : : EventReturn GameSettingsScreen : : OnReloadCheats ( UI : : EventParams & e ) {
// Hmm, strange mechanism.
g_Config . bReloadCheats = true ;
return UI : : EVENT_DONE ;
}
2013-10-13 17:24:49 +00:00
UI : : EventReturn GameSettingsScreen : : OnFullscreenChange ( UI : : EventParams & e ) {
2014-04-27 18:24:10 +00:00
# if defined(USING_WIN_UI) || defined(USING_QT_UI)
2013-10-13 17:24:49 +00:00
host - > GoFullscreen ( g_Config . bFullScreen ) ;
2014-04-27 18:24:10 +00:00
# else
// SDL, basically.
System_SendMessage ( " toggle_fullscreen " , " " ) ;
# endif
2013-10-13 17:24:49 +00:00
return UI : : EVENT_DONE ;
}
2015-10-24 12:40:29 +00:00
UI : : EventReturn GameSettingsScreen : : OnDisplayLayoutEditor ( UI : : EventParams & e ) {
2015-10-31 22:20:48 +00:00
screenManager ( ) - > push ( new DisplayLayoutScreen ( ) ) ;
2015-10-24 12:40:29 +00:00
return UI : : EVENT_DONE ;
} ;
2013-09-10 22:19:34 +00:00
UI : : EventReturn GameSettingsScreen : : OnResolutionChange ( UI : : EventParams & e ) {
2014-07-18 22:42:22 +00:00
if ( g_Config . iAndroidHwScale = = 1 ) {
2014-07-20 22:35:36 +00:00
RecreateActivity ( ) ;
2014-07-18 22:42:22 +00:00
}
2017-03-29 15:57:50 +00:00
bloomHackEnable_ = g_Config . iInternalResolution ! = 1 ;
2014-02-09 22:04:16 +00:00
Reporting : : UpdateConfig ( ) ;
2013-09-10 22:19:34 +00:00
return UI : : EVENT_DONE ;
}
2014-07-18 19:49:54 +00:00
UI : : EventReturn GameSettingsScreen : : OnHwScaleChange ( UI : : EventParams & e ) {
2014-07-20 22:35:36 +00:00
RecreateActivity ( ) ;
2014-07-18 19:49:54 +00:00
return UI : : EVENT_DONE ;
}
2013-10-22 11:00:19 +00:00
UI : : EventReturn GameSettingsScreen : : OnShaderChange ( UI : : EventParams & e ) {
if ( gpu ) {
2013-10-22 12:34:16 +00:00
gpu - > ClearShaderCache ( ) ;
2013-10-22 11:00:19 +00:00
}
return UI : : EVENT_DONE ;
}
2013-08-18 17:51:40 +00:00
UI : : EventReturn GameSettingsScreen : : OnDumpNextFrameToLog ( UI : : EventParams & e ) {
2013-08-18 21:11:47 +00:00
if ( gpu ) {
gpu - > DumpNextFrame ( ) ;
}
2013-08-18 17:51:40 +00:00
return UI : : EVENT_DONE ;
}
2017-03-15 05:01:18 +00:00
void GameSettingsScreen : : update ( ) {
UIScreen : : update ( ) ;
2013-07-17 23:04:11 +00:00
g_Config . iForceMaxEmulatedFPS = cap60FPS_ ? 60 : 0 ;
2014-05-03 20:24:46 +00:00
2014-05-06 03:49:48 +00:00
g_Config . iFpsLimit = ( iAlternateSpeedPercent_ * 60 ) / 100 ;
2014-07-22 08:37:20 +00:00
bool vertical = UseVerticalLayout ( ) ;
if ( vertical ! = lastVertical_ ) {
RecreateViews ( ) ;
lastVertical_ = vertical ;
}
2013-07-17 20:27:05 +00:00
}
2013-09-04 02:06:05 +00:00
void GameSettingsScreen : : sendMessage ( const char * message , const char * value ) {
2013-10-21 20:52:44 +00:00
// Always call the base class method first to handle the most common messages.
UIDialogScreenWithBackground : : sendMessage ( message , value ) ;
2013-09-24 05:03:59 +00:00
if ( ! strcmp ( message , " control mapping " ) ) {
UpdateUIState ( UISTATE_MENU ) ;
screenManager ( ) - > push ( new ControlMappingScreen ( ) ) ;
}
2015-12-21 05:32:05 +00:00
if ( ! strcmp ( message , " display layout editor " ) ) {
UpdateUIState ( UISTATE_MENU ) ;
screenManager ( ) - > push ( new DisplayLayoutScreen ( ) ) ;
}
2013-09-04 02:06:05 +00:00
}
2013-10-25 11:19:08 +00:00
void GameSettingsScreen : : onFinish ( DialogResult result ) {
2013-10-17 14:15:04 +00:00
if ( g_Config . bEnableSound ) {
if ( PSP_IsInited ( ) & & ! IsAudioInitialised ( ) )
2013-08-14 12:55:31 +00:00
Audio_Init ( ) ;
2013-08-14 12:44:36 +00:00
}
2013-10-17 14:15:04 +00:00
2013-09-01 19:57:39 +00:00
Reporting : : Enable ( enableReports_ , " report.ppsspp.org " ) ;
2014-02-16 04:34:03 +00:00
Reporting : : UpdateConfig ( ) ;
2013-08-20 16:03:52 +00:00
g_Config . Save ( ) ;
2016-08-05 17:46:11 +00:00
if ( editThenRestore_ ) {
2014-12-14 19:33:20 +00:00
g_Config . unloadGameConfig ( ) ;
}
2013-08-20 16:03:52 +00:00
2013-09-04 15:21:33 +00:00
host - > UpdateUI ( ) ;
2013-09-08 04:42:15 +00:00
2015-08-28 18:55:32 +00:00
KeyMap : : UpdateNativeMenuKeys ( ) ;
2017-03-17 09:27:49 +00:00
// Wipe some caches after potentially changing settings.
2017-04-28 03:03:50 +00:00
NativeMessageReceived ( " gpu_resized " , " " ) ;
NativeMessageReceived ( " gpu_clearCache " , " " ) ;
2013-10-25 11:19:08 +00:00
}
2013-08-20 16:03:52 +00:00
/*
2013-07-17 20:27:05 +00:00
void GlobalSettingsScreen : : CreateViews ( ) {
using namespace UI ;
root_ = new ScrollView ( ORIENT_VERTICAL ) ;
2013-09-01 19:57:39 +00:00
enableReports_ = Reporting : : IsEnabled ( ) ;
2013-08-20 16:03:52 +00:00
} */
2013-07-18 09:39:54 +00:00
2014-09-14 10:59:27 +00:00
void GameSettingsScreen : : CallbackRenderingBackend ( bool yes ) {
2016-01-06 06:37:28 +00:00
// If the user ends up deciding not to restart, set the config back to the current backend
2014-09-14 10:59:27 +00:00
// so it doesn't get switched by accident.
if ( yes ) {
2017-04-15 23:33:30 +00:00
System_SendMessage ( " graphics_restart " , " " ) ;
2014-09-14 10:59:27 +00:00
} else {
2016-01-06 06:37:28 +00:00
g_Config . iGPUBackend = ( int ) GetGPUBackend ( ) ;
2014-09-14 10:59:27 +00:00
}
}
UI : : EventReturn GameSettingsScreen : : OnRenderingBackend ( UI : : EventParams & e ) {
2015-07-01 21:26:55 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
2014-09-14 10:59:27 +00:00
// It only makes sense to show the restart prompt if the backend was actually changed.
2016-01-06 06:37:28 +00:00
if ( g_Config . iGPUBackend ! = ( int ) GetGPUBackend ( ) ) {
2015-07-01 21:26:55 +00:00
screenManager ( ) - > push ( new PromptScreen ( di - > T ( " ChangingGPUBackends " , " Changing GPU backends requires PPSSPP to restart. Restart now? " ) , di - > T ( " Yes " ) , di - > T ( " No " ) ,
2016-10-12 09:32:24 +00:00
std : : bind ( & GameSettingsScreen : : CallbackRenderingBackend , this , std : : placeholders : : _1 ) ) ) ;
2014-09-14 10:59:27 +00:00
}
return UI : : EVENT_DONE ;
}
2017-07-06 13:43:39 +00:00
UI : : EventReturn GameSettingsScreen : : OnChangeQuickChat0 ( UI : : EventParams & e ) {
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
const size_t chat_len = 64 ;
char chat [ chat_len ] ;
memset ( chat , 0 , sizeof ( chat ) ) ;
if ( System_InputBoxGetString ( " Enter Quick Chat 1 " , g_Config . sQuickChat0 . c_str ( ) , chat , chat_len ) ) {
g_Config . sQuickChat0 = chat ;
}
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
System_SendMessage ( " inputbox " , ( " quickchat0: " + g_Config . sQuickChat0 ) . c_str ( ) ) ;
2017-07-06 13:43:39 +00:00
# endif
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnChangeQuickChat1 ( UI : : EventParams & e ) {
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
const size_t chat_len = 64 ;
char chat [ chat_len ] ;
memset ( chat , 0 , sizeof ( chat ) ) ;
if ( System_InputBoxGetString ( " Enter Quick Chat 2 " , g_Config . sQuickChat1 . c_str ( ) , chat , chat_len ) ) {
g_Config . sQuickChat1 = chat ;
}
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
System_SendMessage ( " inputbox " , ( " quickchat1: " + g_Config . sQuickChat1 ) . c_str ( ) ) ;
2017-07-06 13:43:39 +00:00
# endif
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnChangeQuickChat2 ( UI : : EventParams & e ) {
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
const size_t chat_len = 64 ;
char chat [ chat_len ] ;
memset ( chat , 0 , sizeof ( chat ) ) ;
if ( System_InputBoxGetString ( " Enter Quick Chat 3 " , g_Config . sQuickChat2 . c_str ( ) , chat , chat_len ) ) {
g_Config . sQuickChat2 = chat ;
}
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
System_SendMessage ( " inputbox " , ( " quickchat2: " + g_Config . sQuickChat2 ) . c_str ( ) ) ;
2017-07-06 13:43:39 +00:00
# endif
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnChangeQuickChat3 ( UI : : EventParams & e ) {
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
const size_t chat_len = 64 ;
char chat [ chat_len ] ;
memset ( chat , 0 , sizeof ( chat ) ) ;
if ( System_InputBoxGetString ( " Enter Quick Chat 4 " , g_Config . sQuickChat3 . c_str ( ) , chat , chat_len ) ) {
g_Config . sQuickChat3 = chat ;
}
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
System_SendMessage ( " inputbox " , ( " quickchat3: " + g_Config . sQuickChat3 ) . c_str ( ) ) ;
2017-07-06 13:43:39 +00:00
# endif
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnChangeQuickChat4 ( UI : : EventParams & e ) {
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
const size_t chat_len = 64 ;
char chat [ chat_len ] ;
memset ( chat , 0 , sizeof ( chat ) ) ;
if ( System_InputBoxGetString ( " Enter Quick Chat 5 " , g_Config . sQuickChat4 . c_str ( ) , chat , chat_len ) ) {
g_Config . sQuickChat4 = chat ;
}
# elif defined(__ANDROID__)
2017-07-08 10:08:33 +00:00
System_SendMessage ( " inputbox " , ( " quickchat4: " + g_Config . sQuickChat4 ) . c_str ( ) ) ;
2017-07-06 13:43:39 +00:00
# endif
return UI : : EVENT_DONE ;
}
2013-08-20 16:03:52 +00:00
UI : : EventReturn GameSettingsScreen : : OnChangeNickname ( UI : : EventParams & e ) {
2017-05-31 09:12:11 +00:00
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
2013-08-18 00:03:59 +00:00
const size_t name_len = 256 ;
char name [ name_len ] ;
memset ( name , 0 , sizeof ( name ) ) ;
2013-12-08 10:16:18 +00:00
if ( System_InputBoxGetString ( " Enter a new PSP nickname " , g_Config . sNickName . c_str ( ) , name , name_len ) ) {
2013-08-18 00:03:59 +00:00
g_Config . sNickName = name ;
}
2016-10-12 09:13:16 +00:00
# elif defined(__ANDROID__)
2016-02-21 05:12:35 +00:00
System_SendMessage ( " inputbox " , ( " nickname: " + g_Config . sNickName ) . c_str ( ) ) ;
2013-12-07 18:57:06 +00:00
# endif
2014-05-25 05:19:56 +00:00
return UI : : EVENT_DONE ;
}
2016-08-27 18:38:05 +00:00
UI : : EventReturn GameSettingsScreen : : OnChangeproAdhocServerAddress ( UI : : EventParams & e ) {
2017-05-31 09:12:11 +00:00
# if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI)
2014-06-02 06:15:07 +00:00
if ( ! g_Config . bFullScreen ) {
const size_t name_len = 256 ;
2014-05-25 05:19:56 +00:00
2014-06-02 06:15:07 +00:00
char name [ name_len ] ;
memset ( name , 0 , sizeof ( name ) ) ;
2014-05-25 05:19:56 +00:00
2014-06-02 06:15:07 +00:00
if ( System_InputBoxGetString ( " Enter an IP address " , g_Config . proAdhocServer . c_str ( ) , name , name_len ) ) {
g_Config . proAdhocServer = name ;
}
2014-05-25 05:19:56 +00:00
}
2014-06-02 06:15:07 +00:00
else
screenManager ( ) - > push ( new ProAdhocServerScreen ) ;
2016-10-12 09:13:16 +00:00
# elif defined(__ANDROID__)
2016-02-21 05:12:35 +00:00
System_SendMessage ( " inputbox " , ( " IP: " + g_Config . proAdhocServer ) . c_str ( ) ) ;
2014-06-02 06:15:07 +00:00
# else
screenManager ( ) - > push ( new ProAdhocServerScreen ) ;
2014-05-25 05:19:56 +00:00
# endif
2016-08-27 18:38:05 +00:00
2014-05-25 05:19:56 +00:00
return UI : : EVENT_DONE ;
}
2013-08-21 08:52:40 +00:00
2014-05-25 05:19:56 +00:00
UI : : EventReturn GameSettingsScreen : : OnChangeMacAddress ( UI : : EventParams & e ) {
2017-04-29 19:48:06 +00:00
g_Config . sMACAddress = CreateRandMAC ( ) ;
2014-06-02 06:15:07 +00:00
2013-08-18 00:03:59 +00:00
return UI : : EVENT_DONE ;
}
2017-04-18 03:33:22 +00:00
UI : : EventReturn GameSettingsScreen : : OnComboKey ( UI : : EventParams & e ) {
2015-06-28 05:34:05 +00:00
screenManager ( ) - > push ( new Combo_keyScreen ( & g_Config . iComboMode ) ) ;
return UI : : EVENT_DONE ;
}
2013-08-20 16:03:52 +00:00
UI : : EventReturn GameSettingsScreen : : OnLanguage ( UI : : EventParams & e ) {
2015-06-30 03:28:31 +00:00
I18NCategory * dev = GetI18NCategory ( " Developer " ) ;
auto langScreen = new NewLanguageScreen ( dev - > T ( " Language " ) ) ;
2013-09-01 20:29:23 +00:00
langScreen - > OnChoice . Handle ( this , & GameSettingsScreen : : OnLanguageChange ) ;
2017-03-22 01:27:57 +00:00
if ( e . v )
langScreen - > SetPopupOrigin ( e . v ) ;
2013-09-01 20:29:23 +00:00
screenManager ( ) - > push ( langScreen ) ;
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnLanguageChange ( UI : : EventParams & e ) {
2014-02-17 19:39:58 +00:00
screenManager ( ) - > RecreateAllViews ( ) ;
2013-11-03 00:24:19 +00:00
2013-09-07 16:48:12 +00:00
if ( host ) {
host - > UpdateUI ( ) ;
}
2013-07-17 20:27:05 +00:00
return UI : : EVENT_DONE ;
}
2013-10-12 00:05:55 +00:00
UI : : EventReturn GameSettingsScreen : : OnPostProcShader ( UI : : EventParams & e ) {
2015-07-01 21:50:16 +00:00
I18NCategory * gr = GetI18NCategory ( " Graphics " ) ;
auto procScreen = new PostProcScreen ( gr - > T ( " Postprocessing Shader " ) ) ;
2013-10-12 00:05:55 +00:00
procScreen - > OnChoice . Handle ( this , & GameSettingsScreen : : OnPostProcShaderChange ) ;
2017-03-22 01:27:57 +00:00
if ( e . v )
procScreen - > SetPopupOrigin ( e . v ) ;
2013-10-12 00:05:55 +00:00
screenManager ( ) - > push ( procScreen ) ;
return UI : : EVENT_DONE ;
}
UI : : EventReturn GameSettingsScreen : : OnPostProcShaderChange ( UI : : EventParams & e ) {
2017-04-28 03:03:50 +00:00
NativeMessageReceived ( " gpu_resized " , " " ) ;
2013-10-12 00:05:55 +00:00
return UI : : EVENT_DONE ;
}
2016-07-03 17:24:33 +00:00
2013-08-20 16:03:52 +00:00
UI : : EventReturn GameSettingsScreen : : OnDeveloperTools ( UI : : EventParams & e ) {
2013-07-18 09:39:54 +00:00
screenManager ( ) - > push ( new DeveloperToolsScreen ( ) ) ;
return UI : : EVENT_DONE ;
}
2016-07-03 17:24:33 +00:00
UI : : EventReturn GameSettingsScreen : : OnRemoteISO ( UI : : EventParams & e ) {
screenManager ( ) - > push ( new RemoteISOScreen ( ) ) ;
return UI : : EVENT_DONE ;
}
2013-07-29 00:15:30 +00:00
UI : : EventReturn GameSettingsScreen : : OnControlMapping ( UI : : EventParams & e ) {
2013-08-17 08:34:38 +00:00
screenManager ( ) - > push ( new ControlMappingScreen ( ) ) ;
2013-07-22 22:06:07 +00:00
return UI : : EVENT_DONE ;
}
2013-10-20 02:45:58 +00:00
UI : : EventReturn GameSettingsScreen : : OnTouchControlLayout ( UI : : EventParams & e ) {
2013-10-09 20:15:56 +00:00
screenManager ( ) - > push ( new TouchControlLayoutScreen ( ) ) ;
return UI : : EVENT_DONE ;
2016-07-03 17:24:33 +00:00
}
2013-10-09 20:15:56 +00:00
2013-12-14 12:55:57 +00:00
//when the tilt event type is modified, we need to reset all tilt settings.
//refer to the ResetTiltEvents() function for a detailed explanation.
UI : : EventReturn GameSettingsScreen : : OnTiltTypeChange ( UI : : EventParams & e ) {
TiltEventProcessor : : ResetTiltEvents ( ) ;
return UI : : EVENT_DONE ;
} ;
2015-04-03 09:50:03 +00:00
UI : : EventReturn GameSettingsScreen : : OnTiltCustomize ( UI : : EventParams & e ) {
2013-10-27 17:58:47 +00:00
screenManager ( ) - > push ( new TiltAnalogSettingsScreen ( ) ) ;
return UI : : EVENT_DONE ;
} ;
2015-06-12 18:37:42 +00:00
UI : : EventReturn GameSettingsScreen : : OnSavedataManager ( UI : : EventParams & e ) {
auto saveData = new SavedataScreen ( " " ) ;
screenManager ( ) - > push ( saveData ) ;
return UI : : EVENT_DONE ;
}
2015-06-29 00:56:04 +00:00
UI : : EventReturn GameSettingsScreen : : OnSysInfo ( UI : : EventParams & e ) {
screenManager ( ) - > push ( new SystemInfoScreen ( ) ) ;
return UI : : EVENT_DONE ;
}
2013-07-18 09:39:54 +00:00
void DeveloperToolsScreen : : CreateViews ( ) {
using namespace UI ;
2017-03-22 06:59:59 +00:00
root_ = new LinearLayout ( ORIENT_VERTICAL , new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
ScrollView * settingsScroll = new ScrollView ( ORIENT_VERTICAL , new LinearLayoutParams ( 1.0f ) ) ;
settingsScroll - > SetTag ( " DevToolsSettings " ) ;
root_ - > Add ( settingsScroll ) ;
2013-07-18 09:39:54 +00:00
2015-07-01 21:26:55 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
2015-06-30 03:28:31 +00:00
I18NCategory * dev = GetI18NCategory ( " Developer " ) ;
2015-07-01 21:50:16 +00:00
I18NCategory * gr = GetI18NCategory ( " Graphics " ) ;
2013-07-20 10:06:06 +00:00
I18NCategory * a = GetI18NCategory ( " Audio " ) ;
2015-07-01 23:00:04 +00:00
I18NCategory * sy = GetI18NCategory ( " System " ) ;
2013-07-18 09:39:54 +00:00
2017-03-22 06:59:59 +00:00
AddStandardBack ( root_ ) ;
LinearLayout * list = settingsScroll - > Add ( new LinearLayout ( ORIENT_VERTICAL , new LinearLayoutParams ( 1.0f ) ) ) ;
2013-08-19 22:49:25 +00:00
list - > SetSpacing ( 0 ) ;
2015-07-01 23:00:04 +00:00
list - > Add ( new ItemHeader ( sy - > T ( " General " ) ) ) ;
2013-10-20 15:33:18 +00:00
2014-05-27 06:55:48 +00:00
bool canUseJit = true ;
2016-08-28 17:00:13 +00:00
// iOS can now use JIT on all modes, apparently.
// The bool may come in handy for future non-jit platforms though (UWP XB1?)
2016-05-07 23:43:27 +00:00
2016-05-08 19:56:52 +00:00
static const char * cpuCores [ ] = { " Interpreter " , " Dynarec (JIT) " , " IR Interpreter " } ;
2016-05-07 23:43:27 +00:00
PopupMultiChoice * core = list - > Add ( new PopupMultiChoice ( & g_Config . iCpuCore , gr - > T ( " CPU Core " ) , cpuCores , 0 , ARRAY_SIZE ( cpuCores ) , sy - > GetName ( ) , screenManager ( ) ) ) ;
2016-08-20 19:31:02 +00:00
core - > OnChoice . Handle ( this , & DeveloperToolsScreen : : OnJitAffectingSetting ) ;
2016-05-07 23:43:27 +00:00
if ( ! canUseJit ) {
core - > HideChoice ( 1 ) ;
2014-05-27 07:39:07 +00:00
}
2013-10-20 15:33:18 +00:00
2015-06-30 03:28:31 +00:00
list - > Add ( new CheckBox ( & g_Config . bShowDeveloperMenu , dev - > T ( " Show Developer Menu " ) ) ) ;
list - > Add ( new CheckBox ( & g_Config . bDumpDecryptedEboot , dev - > T ( " Dump Decrypted Eboot " , " Dump Decrypted EBOOT.BIN (If Encrypted) When Booting Game " ) ) ) ;
2013-10-12 19:34:13 +00:00
2017-02-24 23:25:46 +00:00
# if !PPSSPP_PLATFORM(UWP)
2015-06-30 03:28:31 +00:00
Choice * cpuTests = new Choice ( dev - > T ( " Run CPU Tests " ) ) ;
2013-10-12 19:34:13 +00:00
list - > Add ( cpuTests ) - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnRunCPUTests ) ;
2017-02-24 23:25:46 +00:00
2013-10-14 07:53:13 +00:00
# ifdef IOS
const std : : string testDirectory = g_Config . flash0Directory + " ../ " ;
# else
2014-10-19 21:20:51 +00:00
const std : : string testDirectory = g_Config . memStickDirectory ;
2013-10-14 07:53:13 +00:00
# endif
if ( ! File : : Exists ( testDirectory + " pspautotests/tests/ " ) ) {
2013-10-12 19:34:13 +00:00
cpuTests - > SetEnabled ( false ) ;
2013-10-14 07:53:13 +00:00
}
2017-02-24 23:25:46 +00:00
# endif
2013-10-12 19:34:13 +00:00
2015-06-30 03:28:31 +00:00
list - > Add ( new CheckBox ( & g_Config . bEnableLogging , dev - > T ( " Enable Logging " ) ) ) - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnLoggingChanged ) ;
2017-03-24 02:16:17 +00:00
list - > Add ( new CheckBox ( & g_Config . bLogFrameDrops , dev - > T ( " Log Dropped Frame Statistics " ) ) ) ;
2015-06-30 03:28:31 +00:00
list - > Add ( new Choice ( dev - > T ( " Logging Channels " ) ) ) - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnLogConfig ) ;
list - > Add ( new ItemHeader ( dev - > T ( " Language " ) ) ) ;
list - > Add ( new Choice ( dev - > T ( " Load language ini " ) ) ) - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnLoadLanguageIni ) ;
list - > Add ( new Choice ( dev - > T ( " Save language ini " ) ) ) - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnSaveLanguageIni ) ;
2016-06-21 22:33:06 +00:00
list - > Add ( new ItemHeader ( dev - > T ( " Texture Replacement " ) ) ) ;
list - > Add ( new CheckBox ( & g_Config . bSaveNewTextures , dev - > T ( " Save new textures " ) ) ) ;
list - > Add ( new CheckBox ( & g_Config . bReplaceTextures , dev - > T ( " Replace textures " ) ) ) ;
# if !defined(MOBILE_DEVICE)
2017-06-03 15:52:42 +00:00
Choice * createTextureIni = list - > Add ( new Choice ( dev - > T ( " Create/Open textures.ini file for current game " ) ) ) ;
createTextureIni - > OnClick . Handle ( this , & DeveloperToolsScreen : : OnOpenTexturesIniFile ) ;
if ( ! PSP_IsInited ( ) ) {
createTextureIni - > SetEnabled ( false ) ;
}
2016-06-21 22:33:06 +00:00
# endif
2013-07-18 09:39:54 +00:00
}
2013-10-25 11:19:08 +00:00
void DeveloperToolsScreen : : onFinish ( DialogResult result ) {
2013-08-04 08:45:09 +00:00
g_Config . Save ( ) ;
2013-07-18 09:39:54 +00:00
}
2013-09-28 06:21:59 +00:00
void GameSettingsScreen : : CallbackRestoreDefaults ( bool yes ) {
2013-10-25 11:19:08 +00:00
if ( yes )
2013-08-28 20:23:16 +00:00
g_Config . RestoreDefaults ( ) ;
2013-09-29 02:41:47 +00:00
host - > UpdateUI ( ) ;
2013-08-28 20:23:16 +00:00
}
2013-09-28 06:21:59 +00:00
UI : : EventReturn GameSettingsScreen : : OnRestoreDefaultSettings ( UI : : EventParams & e ) {
2015-06-30 03:28:31 +00:00
I18NCategory * dev = GetI18NCategory ( " Developer " ) ;
2015-07-01 21:26:55 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
2014-12-19 16:03:42 +00:00
if ( g_Config . bGameSpecific )
{
screenManager ( ) - > push (
2015-07-01 21:26:55 +00:00
new PromptScreen ( dev - > T ( " RestoreGameDefaultSettings " , " Are you sure you want to restore the game-specific settings back to the ppsspp defaults? \n " ) , di - > T ( " OK " ) , di - > T ( " Cancel " ) ,
2016-10-12 09:32:24 +00:00
std : : bind ( & GameSettingsScreen : : CallbackRestoreDefaults , this , std : : placeholders : : _1 ) ) ) ;
2014-12-19 16:03:42 +00:00
}
else
{
screenManager ( ) - > push (
2015-07-01 21:26:55 +00:00
new PromptScreen ( dev - > T ( " RestoreDefaultSettings " , " Are you sure you want to restore all settings(except control mapping) \n back to their defaults? \n You can't undo this. \n Please restart PPSSPP after restoring settings. " ) , di - > T ( " OK " ) , di - > T ( " Cancel " ) ,
2016-10-12 09:32:24 +00:00
std : : bind ( & GameSettingsScreen : : CallbackRestoreDefaults , this , std : : placeholders : : _1 ) ) ) ;
2014-12-19 16:03:42 +00:00
}
2013-08-28 20:23:16 +00:00
return UI : : EVENT_DONE ;
}
2013-08-17 23:24:34 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnLoggingChanged ( UI : : EventParams & e ) {
2013-10-13 18:25:59 +00:00
host - > ToggleDebugConsoleVisibility ( ) ;
2013-08-17 23:24:34 +00:00
return UI : : EVENT_DONE ;
}
2013-07-18 09:39:54 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnRunCPUTests ( UI : : EventParams & e ) {
2017-02-24 23:25:46 +00:00
# if !PPSSPP_PLATFORM(UWP)
2013-07-18 09:39:54 +00:00
RunTests ( ) ;
2017-02-24 23:25:46 +00:00
# endif
2013-07-18 09:39:54 +00:00
return UI : : EVENT_DONE ;
}
2013-07-20 10:06:06 +00:00
2013-08-18 17:51:40 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnSaveLanguageIni ( UI : : EventParams & e ) {
2013-09-16 23:47:25 +00:00
i18nrepo . SaveIni ( g_Config . sLanguageIni ) ;
2013-08-18 17:51:40 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn DeveloperToolsScreen : : OnLoadLanguageIni ( UI : : EventParams & e ) {
2013-09-16 23:47:25 +00:00
i18nrepo . LoadIni ( g_Config . sLanguageIni ) ;
2013-07-20 10:06:06 +00:00
return UI : : EVENT_DONE ;
}
2013-09-07 11:38:37 +00:00
2016-06-21 22:33:06 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnOpenTexturesIniFile ( UI : : EventParams & e ) {
2017-06-03 03:54:28 +00:00
std : : string gameID = g_paramSFO . GetDiscID ( ) ;
2016-06-21 22:33:06 +00:00
std : : string texturesDirectory = GetSysDirectory ( DIRECTORY_TEXTURES ) + gameID + " / " ;
bool enabled_ = ! gameID . empty ( ) ;
if ( enabled_ ) {
if ( ! File : : Exists ( texturesDirectory ) ) {
File : : CreateFullPath ( texturesDirectory ) ;
}
if ( ! File : : Exists ( texturesDirectory + " textures.ini " ) ) {
FILE * f = File : : OpenCFile ( texturesDirectory + " textures.ini " , " wb " ) ;
if ( f ) {
fwrite ( " \xEF \xBB \xBF " , 0 , 3 , f ) ;
fclose ( f ) ;
2016-06-21 23:56:52 +00:00
// Let's also write some defaults
std : : fstream fs ;
2016-06-22 03:55:45 +00:00
File : : OpenCPPFile ( fs , texturesDirectory + " textures.ini " , std : : ios : : out | std : : ios : : ate ) ;
2016-06-21 23:56:52 +00:00
fs < < " # This file is optional \n " ;
fs < < " # for syntax explanation check: \n " ;
fs < < " # - https://github.com/hrydgard/ppsspp/pull/8715 \n " ;
fs < < " # - https://github.com/hrydgard/ppsspp/pull/8792 \n " ;
fs < < " [options] \n " ;
fs < < " version = 1 \n " ;
fs < < " hash = quick \n " ;
fs < < " \n " ;
fs < < " [hashes] \n " ;
fs < < " \n " ;
fs < < " [hashranges] \n " ;
fs . close ( ) ;
2016-06-21 22:33:06 +00:00
}
}
enabled_ = File : : Exists ( texturesDirectory + " textures.ini " ) ;
}
if ( enabled_ ) {
2016-06-22 03:55:45 +00:00
File : : openIniFile ( texturesDirectory + " textures.ini " ) ;
2016-06-21 22:33:06 +00:00
}
return UI : : EVENT_DONE ;
}
2013-09-07 11:38:37 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnLogConfig ( UI : : EventParams & e ) {
screenManager ( ) - > push ( new LogConfigScreen ( ) ) ;
return UI : : EVENT_DONE ;
}
2014-05-27 06:55:48 +00:00
UI : : EventReturn DeveloperToolsScreen : : OnJitAffectingSetting ( UI : : EventParams & e ) {
NativeMessageReceived ( " clear jit " , " " ) ;
return UI : : EVENT_DONE ;
}
2014-06-02 06:15:07 +00:00
void ProAdhocServerScreen : : CreateViews ( ) {
2016-08-27 18:38:05 +00:00
using namespace UI ;
2015-07-01 23:00:04 +00:00
I18NCategory * sy = GetI18NCategory ( " System " ) ;
2015-07-01 21:26:55 +00:00
I18NCategory * di = GetI18NCategory ( " Dialog " ) ;
2016-08-27 18:38:05 +00:00
2014-06-02 10:28:16 +00:00
tempProAdhocServer = g_Config . proAdhocServer ;
2014-06-02 06:15:07 +00:00
root_ = new AnchorLayout ( new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
LinearLayout * leftColumn = new LinearLayout ( ORIENT_VERTICAL , new LinearLayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
2016-08-27 18:38:05 +00:00
2015-07-01 23:00:04 +00:00
leftColumn - > Add ( new ItemHeader ( sy - > T ( " proAdhocServer Address: " ) ) ) ;
2014-06-02 10:21:34 +00:00
addrView_ = new TextView ( tempProAdhocServer , ALIGN_LEFT , false ) ;
leftColumn - > Add ( addrView_ ) ;
2014-06-02 06:15:07 +00:00
LinearLayout * rightColumn = new LinearLayout ( ORIENT_HORIZONTAL , new AnchorLayoutParams ( 0 , 120 , 10 , NONE , NONE , 10 ) ) ;
rightColumn - > Add ( new Button ( " 0 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On0Click ) ;
rightColumn - > Add ( new Button ( " 1 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On1Click ) ;
rightColumn - > Add ( new Button ( " 2 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On2Click ) ;
rightColumn - > Add ( new Button ( " 3 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On3Click ) ;
rightColumn - > Add ( new Button ( " 4 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On4Click ) ;
rightColumn - > Add ( new Button ( " 5 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On5Click ) ;
rightColumn - > Add ( new Button ( " 6 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On6Click ) ;
rightColumn - > Add ( new Button ( " 7 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On7Click ) ;
rightColumn - > Add ( new Button ( " 8 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On8Click ) ;
rightColumn - > Add ( new Button ( " 9 " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : On9Click ) ;
rightColumn - > Add ( new Button ( " . " ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : OnPointClick ) ;
2015-07-01 21:26:55 +00:00
rightColumn - > Add ( new Button ( di - > T ( " Delete " ) ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : OnDeleteClick ) ;
rightColumn - > Add ( new Button ( di - > T ( " Delete all " ) ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : OnDeleteAllClick ) ;
rightColumn - > Add ( new Button ( di - > T ( " OK " ) ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : OnOKClick ) ;
rightColumn - > Add ( new Button ( di - > T ( " Cancel " ) ) ) - > OnClick . Handle ( this , & ProAdhocServerScreen : : OnCancelClick ) ;
2014-06-02 06:15:07 +00:00
root_ - > Add ( leftColumn ) ;
root_ - > Add ( rightColumn ) ;
}
UI : : EventReturn ProAdhocServerScreen : : On0Click ( UI : : EventParams & e ) {
if ( tempProAdhocServer . length ( ) > 0 )
tempProAdhocServer . append ( " 0 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On1Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 1 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On2Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 2 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On3Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 3 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On4Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 4 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On5Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 5 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On6Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 6 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On7Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 7 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On8Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 8 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : On9Click ( UI : : EventParams & e ) {
tempProAdhocServer . append ( " 9 " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : OnPointClick ( UI : : EventParams & e ) {
if ( tempProAdhocServer . length ( ) > 0 & & tempProAdhocServer . at ( tempProAdhocServer . length ( ) - 1 ) ! = ' . ' )
tempProAdhocServer . append ( " . " ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : OnDeleteClick ( UI : : EventParams & e ) {
if ( tempProAdhocServer . length ( ) > 0 )
tempProAdhocServer . erase ( tempProAdhocServer . length ( ) - 1 , 1 ) ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : OnDeleteAllClick ( UI : : EventParams & e ) {
tempProAdhocServer = " " ;
2014-06-02 10:21:34 +00:00
addrView_ - > SetText ( tempProAdhocServer ) ;
2014-06-02 06:15:07 +00:00
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : OnOKClick ( UI : : EventParams & e ) {
g_Config . proAdhocServer = tempProAdhocServer ;
UIScreen : : OnBack ( e ) ;
return UI : : EVENT_DONE ;
}
UI : : EventReturn ProAdhocServerScreen : : OnCancelClick ( UI : : EventParams & e ) {
tempProAdhocServer = g_Config . proAdhocServer ;
UIScreen : : OnBack ( e ) ;
return UI : : EVENT_DONE ;
}
2016-08-14 21:27:36 +00:00
2017-06-03 16:38:37 +00:00
SettingInfoMessage : : SettingInfoMessage ( int align , UI : : AnchorLayoutParams * lp )
: UI : : LinearLayout ( UI : : ORIENT_HORIZONTAL , lp ) {
using namespace UI ;
SetSpacing ( 0.0f ) ;
Add ( new UI : : Spacer ( 10.0f ) ) ;
text_ = Add ( new UI : : TextView ( " " , align , false , new LinearLayoutParams ( 1.0 , Margins ( 0 , 10 ) ) ) ) ;
text_ - > SetTag ( " TEST? " ) ;
Add ( new UI : : Spacer ( 10.0f ) ) ;
}
2016-08-14 21:27:36 +00:00
void SettingInfoMessage : : Show ( const std : : string & text , UI : : View * refView ) {
if ( refView ) {
Bounds b = refView - > GetBounds ( ) ;
const UI : : AnchorLayoutParams * lp = GetLayoutParams ( ) - > As < UI : : AnchorLayoutParams > ( ) ;
if ( b . y > = cutOffY_ ) {
ReplaceLayoutParams ( new UI : : AnchorLayoutParams ( lp - > width , lp - > height , lp - > left , 80.0f , lp - > right , lp - > bottom , lp - > center ) ) ;
} else {
ReplaceLayoutParams ( new UI : : AnchorLayoutParams ( lp - > width , lp - > height , lp - > left , dp_yres - 80.0f - 40.0f , lp - > right , lp - > bottom , lp - > center ) ) ;
}
}
2017-06-03 16:38:37 +00:00
text_ - > SetText ( text ) ;
2016-08-14 21:27:36 +00:00
timeShown_ = time_now_d ( ) ;
}
void SettingInfoMessage : : Draw ( UIContext & dc ) {
static const double FADE_TIME = 1.0 ;
static const float MAX_ALPHA = 0.9f ;
// Let's show longer messages for more time (guesstimate at reading speed.)
// Note: this will give multibyte characters more time, but they often have shorter words anyway.
2017-06-03 16:38:37 +00:00
double timeToShow = std : : max ( 1.5 , text_ - > GetText ( ) . size ( ) * 0.05 ) ;
2016-08-14 21:27:36 +00:00
double sinceShow = time_now_d ( ) - timeShown_ ;
float alpha = MAX_ALPHA ;
if ( timeShown_ = = 0.0 | | sinceShow > timeToShow + FADE_TIME ) {
alpha = 0.0f ;
} else if ( sinceShow > timeToShow ) {
alpha = MAX_ALPHA - MAX_ALPHA * ( float ) ( ( sinceShow - timeToShow ) / FADE_TIME ) ;
}
if ( alpha > = 0.1f ) {
UI : : Style style = dc . theme - > popupTitle ;
style . background . color = colorAlpha ( style . background . color , alpha - 0.1f ) ;
dc . FillRect ( style . background , bounds_ ) ;
}
2017-06-03 16:38:37 +00:00
text_ - > SetTextColor ( whiteAlpha ( alpha ) ) ;
ViewGroup : : Draw ( dc ) ;
2016-08-14 21:27:36 +00:00
}