2012-04-21 23:13:50 +02:00
/* RetroArch - A frontend for libretro.
2012-01-22 01:43:54 +01:00
* Copyright ( C ) 2010 - 2012 - Hans - Kristian Arntzen
* Copyright ( C ) 2011 - 2012 - Daniel De Matteis
*
2012-04-21 23:13:50 +02:00
* RetroArch is free software : you can redistribute it and / or modify it under the terms
2012-01-22 01:43:54 +01:00
* of the GNU General Public License as published by the Free Software Found -
* ation , either version 3 of the License , or ( at your option ) any later version .
*
2012-04-21 23:13:50 +02:00
* RetroArch is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ;
2012-01-22 01:43:54 +01:00
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE . See the GNU General Public License for more details .
*
2012-04-21 23:31:57 +02:00
* You should have received a copy of the GNU General Public License along with RetroArch .
2012-01-22 01:43:54 +01:00
* If not , see < http : //www.gnu.org/licenses/>.
*/
2012-01-23 22:22:54 +01:00
# include <stdint.h>
2012-01-24 01:06:12 +01:00
# include <crtdefs.h>
# include <tchar.h>
2012-01-22 01:43:54 +01:00
# include <xtl.h>
2012-06-22 07:38:53 +02:00
# include "../../console/fileio/file_browser.h"
2012-07-28 16:10:31 +02:00
2012-07-28 15:54:35 +02:00
# include "../../console/rarch_console.h"
2012-07-28 16:10:31 +02:00
# include "../../console/rarch_console_settings.h"
# include "../../console/rarch_console_video.h"
2012-09-30 18:29:32 +02:00
# include "../../console/rmenu/rmenu.h"
# include "../../gfx/gfx_context.h"
2012-10-01 03:35:38 +02:00
# include "../../xdk/xdk_d3d.h"
2012-01-22 02:05:09 +01:00
# include "menu.h"
2012-06-22 07:38:53 +02:00
# include "../../message.h"
2012-01-22 01:43:54 +01:00
2012-06-22 07:38:53 +02:00
# include "../../general.h"
2012-01-24 01:06:12 +01:00
2012-05-29 15:25:39 +02:00
CRetroArch app ;
2012-05-22 03:10:56 +02:00
HXUIOBJ hCur ;
2012-11-10 15:39:39 +01:00
filebrowser_t browser ;
filebrowser_t tmp_browser ;
2012-05-21 18:01:51 +02:00
uint32_t set_shader = 0 ;
2012-07-28 22:36:49 +02:00
2012-05-29 19:51:35 +02:00
wchar_t strw_buffer [ PATH_MAX ] ;
2012-07-28 22:51:33 +02:00
char str_buffer [ PATH_MAX ] ;
2012-01-22 21:47:34 +01:00
2012-08-22 03:56:57 +02:00
enum
{
RMENU_DEVICE_NAV_UP = 0 ,
RMENU_DEVICE_NAV_DOWN ,
RMENU_DEVICE_NAV_LEFT ,
RMENU_DEVICE_NAV_RIGHT ,
RMENU_DEVICE_NAV_UP_ANALOG_L ,
RMENU_DEVICE_NAV_DOWN_ANALOG_L ,
RMENU_DEVICE_NAV_LEFT_ANALOG_L ,
RMENU_DEVICE_NAV_RIGHT_ANALOG_L ,
RMENU_DEVICE_NAV_UP_ANALOG_R ,
RMENU_DEVICE_NAV_DOWN_ANALOG_R ,
RMENU_DEVICE_NAV_LEFT_ANALOG_R ,
RMENU_DEVICE_NAV_RIGHT_ANALOG_R ,
RMENU_DEVICE_NAV_B ,
RMENU_DEVICE_NAV_A ,
RMENU_DEVICE_NAV_X ,
RMENU_DEVICE_NAV_Y ,
RMENU_DEVICE_NAV_START ,
RMENU_DEVICE_NAV_SELECT ,
RMENU_DEVICE_NAV_L1 ,
RMENU_DEVICE_NAV_R1 ,
RMENU_DEVICE_NAV_L2 ,
RMENU_DEVICE_NAV_R2 ,
RMENU_DEVICE_NAV_L3 ,
RMENU_DEVICE_NAV_R3 ,
RMENU_DEVICE_NAV_LAST
} ;
2012-01-22 01:43:54 +01:00
/* Register custom classes */
2012-04-21 23:48:05 +02:00
HRESULT CRetroArch : : RegisterXuiClasses ( void )
2012-01-22 01:43:54 +01:00
{
2012-04-22 00:11:48 +02:00
CRetroArchMain : : Register ( ) ;
CRetroArchFileBrowser : : Register ( ) ;
CRetroArchCoreBrowser : : Register ( ) ;
2012-05-21 18:01:51 +02:00
CRetroArchShaderBrowser : : Register ( ) ;
2012-04-22 00:11:48 +02:00
CRetroArchQuickMenu : : Register ( ) ;
2012-05-23 08:37:31 +02:00
CRetroArchControls : : Register ( ) ;
2012-04-22 00:11:48 +02:00
CRetroArchSettings : : Register ( ) ;
2012-04-10 21:23:42 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-01-22 01:43:54 +01:00
}
/* Unregister custom classes */
2012-04-21 23:48:05 +02:00
HRESULT CRetroArch : : UnregisterXuiClasses ( void )
2012-01-22 01:43:54 +01:00
{
2012-04-22 00:11:48 +02:00
CRetroArchMain : : Unregister ( ) ;
CRetroArchCoreBrowser : : Unregister ( ) ;
2012-05-21 18:01:51 +02:00
CRetroArchShaderBrowser : : Unregister ( ) ;
2012-04-22 00:11:48 +02:00
CRetroArchFileBrowser : : Unregister ( ) ;
CRetroArchQuickMenu : : Register ( ) ;
2012-05-23 08:37:31 +02:00
CRetroArchControls : : Register ( ) ;
2012-04-22 00:11:48 +02:00
CRetroArchSettings : : Unregister ( ) ;
2012-04-10 21:23:42 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-01-22 01:43:54 +01:00
}
2012-08-22 03:56:57 +02:00
static void browser_update ( filebrowser_t * b , uint64_t input , const char * extensions )
{
bool ret = true ;
filebrowser_action_t action = FILEBROWSER_ACTION_NOOP ;
if ( input & ( 1 < < RMENU_DEVICE_NAV_DOWN ) )
action = FILEBROWSER_ACTION_DOWN ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_UP ) )
action = FILEBROWSER_ACTION_UP ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_RIGHT ) )
action = FILEBROWSER_ACTION_RIGHT ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_LEFT ) )
action = FILEBROWSER_ACTION_LEFT ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_R2 ) )
action = FILEBROWSER_ACTION_SCROLL_DOWN ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_L2 ) )
action = FILEBROWSER_ACTION_SCROLL_UP ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_A ) )
action = FILEBROWSER_ACTION_CANCEL ;
else if ( input & ( 1 < < RMENU_DEVICE_NAV_START ) )
{
action = FILEBROWSER_ACTION_RESET ;
filebrowser_set_root ( b , default_paths . filesystem_root_dir ) ;
strlcpy ( b - > extensions , extensions , sizeof ( b - > extensions ) ) ;
}
if ( action ! = FILEBROWSER_ACTION_NOOP )
ret = filebrowser_iterate ( b , action ) ;
if ( ! ret )
rarch_settings_msg ( S_MSG_DIR_LOADING_ERROR , S_DELAY_180 ) ;
}
static void filebrowser_fetch_directory_entries ( filebrowser_t * browser , uint64_t action , CXuiList * romlist , CXuiTextElement * rompath_title )
2012-02-04 20:33:51 +01:00
{
2012-11-18 02:57:42 +01:00
browser_update ( browser , action , browser - > extensions ) ;
2012-04-10 21:23:42 +02:00
2012-08-22 03:56:57 +02:00
convert_char_to_wchar ( strw_buffer , filebrowser_get_current_dir ( browser ) , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
rompath_title - > SetText ( strw_buffer ) ;
2012-04-10 21:23:42 +02:00
romlist - > DeleteItems ( 0 , romlist - > GetItemCount ( ) ) ;
2012-06-23 19:58:30 +02:00
romlist - > InsertItems ( 0 , browser - > current_dir . list - > size ) ;
2012-06-30 13:37:18 +02:00
2012-06-23 19:58:30 +02:00
for ( unsigned i = 0 ; i < browser - > current_dir . list - > size ; i + + )
2012-04-10 21:23:42 +02:00
{
2012-06-18 06:12:37 +02:00
char fname_tmp [ 256 ] ;
2012-08-19 22:53:01 +02:00
fill_pathname_base ( fname_tmp , browser - > current_dir . list - > elems [ i ] . data , sizeof ( fname_tmp ) ) ;
2012-07-28 22:36:49 +02:00
convert_char_to_wchar ( strw_buffer , fname_tmp , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
romlist - > SetText ( i , strw_buffer ) ;
2012-04-10 21:23:42 +02:00
}
2012-02-08 15:23:12 +01:00
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchFileBrowser : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
2012-02-08 15:23:12 +01:00
{
2012-04-10 21:23:42 +02:00
GetChildById ( L " XuiRomList " , & m_romlist ) ;
GetChildById ( L " XuiBackButton1 " , & m_back ) ;
GetChildById ( L " XuiTxtRomPath " , & m_rompathtitle ) ;
GetChildById ( L " XuiBtnGameDir " , & m_dir_game ) ;
GetChildById ( L " XuiBtnCacheDir " , & m_dir_cache ) ;
2012-02-08 15:23:12 +01:00
2012-11-10 15:39:39 +01:00
filebrowser_set_root_and_ext ( & browser , rarch_console_get_rom_ext ( ) , g_extern . console . main_wrap . paths . default_rom_startup_dir ) ;
2012-08-22 03:56:57 +02:00
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & browser , action , & m_romlist , & m_rompathtitle ) ;
2012-03-05 13:06:24 +01:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-03-05 13:06:24 +01:00
}
2012-08-22 03:56:57 +02:00
HRESULT CRetroArchFileBrowser : : OnNotifyPress ( HXUIOBJ hObjPressed , BOOL & bHandled )
2012-03-05 13:06:24 +01:00
{
2012-08-22 03:56:57 +02:00
char path [ PATH_MAX ] ;
2012-02-08 15:23:12 +01:00
2012-08-22 03:56:57 +02:00
if ( hObjPressed = = m_romlist )
{
int index = m_romlist . GetCurSel ( ) ;
convert_wchar_to_char ( str_buffer , ( const wchar_t * ) m_romlist . GetText ( index ) , sizeof ( str_buffer ) ) ;
2012-11-10 15:39:39 +01:00
if ( path_file_exists ( browser . current_dir . list - > elems [ index ] . data ) )
2012-08-22 03:56:57 +02:00
{
2012-11-10 15:39:39 +01:00
snprintf ( path , sizeof ( path ) , " %s \\ %s " , filebrowser_get_current_dir ( & browser ) , str_buffer ) ;
2012-10-15 07:22:20 +02:00
rarch_console_load_game_wrap ( path , g_extern . file_state . zip_extract_mode , S_DELAY_45 ) ;
2012-08-22 03:56:57 +02:00
}
2012-11-10 15:39:39 +01:00
else if ( browser . current_dir . list - > elems [ index ] . attr . b )
2012-08-22 03:56:57 +02:00
{
2012-11-10 15:39:39 +01:00
snprintf ( path , sizeof ( path ) , " %s \\ %s " , filebrowser_get_current_dir ( & browser ) , str_buffer ) ;
2012-11-18 02:57:42 +01:00
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
filebrowser_set_root_and_ext ( & browser , rarch_console_get_rom_ext ( ) , path ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & browser , action , & m_romlist , & m_rompathtitle ) ;
2012-08-22 03:56:57 +02:00
}
}
else if ( hObjPressed = = m_dir_game )
{
2012-11-18 02:57:42 +01:00
filebrowser_set_root_and_ext ( & browser , rarch_console_get_rom_ext ( ) , g_extern . console . main_wrap . paths . default_rom_startup_dir ) ;
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
filebrowser_fetch_directory_entries ( & browser , action , & m_romlist , & m_rompathtitle ) ;
2012-08-22 03:56:57 +02:00
}
# ifdef HAVE_HDD_CACHE_PARTITION
else if ( hObjPressed = = m_dir_cache )
{
2012-11-18 02:57:42 +01:00
filebrowser_set_root_and_ext ( & browser , rarch_console_get_rom_ext ( ) , " cache: " ) ;
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
filebrowser_fetch_directory_entries ( & browser , action , & m_romlist , & m_rompathtitle ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-08-22 03:56:57 +02:00
rarch_settings_msg ( S_MSG_CACHE_PARTITION , S_DELAY_180 ) ;
}
# endif
2012-05-21 18:01:51 +02:00
2012-08-22 03:56:57 +02:00
bHandled = TRUE ;
2012-05-21 18:01:51 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-05-21 18:01:51 +02:00
}
2012-05-23 08:37:31 +02:00
HRESULT CRetroArchControls : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
{
unsigned i ;
int controlno ;
char buttons [ RARCH_FIRST_META_KEY ] [ 128 ] ;
GetChildById ( L " XuiControlsList " , & m_controlslist ) ;
GetChildById ( L " XuiBackButton " , & m_back ) ;
GetChildById ( L " XuiControlNoSlider " , & m_controlnoslider ) ;
m_controlnoslider . SetValue ( g_settings . input . currently_selected_controller_no ) ;
m_controlnoslider . GetValue ( & controlno ) ;
for ( i = 0 ; i < RARCH_FIRST_META_KEY ; i + + )
{
2012-06-30 13:37:18 +02:00
snprintf ( buttons [ i ] , sizeof ( buttons [ i ] ) , " %s #%d: %s " ,
2012-11-18 02:57:42 +01:00
rarch_input_get_default_keybind_name ( i ) , controlno ,
rarch_input_find_platform_key_label ( g_settings . input . binds [ controlno ] [ i ] . joykey ) ) ;
2012-07-28 22:36:49 +02:00
convert_char_to_wchar ( strw_buffer , buttons [ i ] , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_controlslist . SetText ( i , strw_buffer ) ;
2012-05-23 08:37:31 +02:00
}
2012-08-21 21:31:15 +02:00
2012-08-22 13:44:02 +02:00
snprintf ( buttons [ 0 ] , sizeof ( buttons [ 0 ] ) , " D-Pad Emulation: %s " , rarch_dpad_emulation_name_lut [ g_settings . input . dpad_emulation [ controlno ] ] ) ;
convert_char_to_wchar ( strw_buffer , buttons [ 0 ] , sizeof ( strw_buffer ) ) ;
m_controlslist . SetText ( SETTING_CONTROLS_DPAD_EMULATION , strw_buffer ) ;
2012-08-21 21:31:15 +02:00
m_controlslist . SetText ( SETTING_CONTROLS_DEFAULT_ALL , L " Reset all buttons to default " ) ;
2012-11-18 02:57:42 +01:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-05-23 08:37:31 +02:00
}
2012-06-30 13:37:18 +02:00
HRESULT CRetroArchControls : : OnControlNavigate (
2012-11-18 02:57:42 +01:00
XUIMessageControlNavigate * pControlNavigateData , BOOL & bHandled )
2012-05-23 08:37:31 +02:00
{
char button [ 128 ] ;
char buttons [ RARCH_FIRST_META_KEY ] [ 128 ] ;
int controlno , i , current_index ;
2012-11-18 02:57:42 +01:00
2012-05-23 08:37:31 +02:00
current_index = m_controlslist . GetCurSel ( ) ;
m_controlnoslider . GetValue ( & controlno ) ;
for ( i = 0 ; i < RARCH_FIRST_META_KEY ; i + + )
{
2012-06-30 13:37:18 +02:00
snprintf ( buttons [ i ] , sizeof ( buttons [ i ] ) , " %s #%d: %s " ,
2012-11-18 02:57:42 +01:00
rarch_input_get_default_keybind_name ( i ) , controlno ,
rarch_input_find_platform_key_label ( g_settings . input . binds [ controlno ] [ i ] . joykey ) ) ;
2012-07-28 22:36:49 +02:00
convert_char_to_wchar ( strw_buffer , buttons [ i ] , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_controlslist . SetText ( i , strw_buffer ) ;
2012-05-23 08:37:31 +02:00
}
2012-05-29 15:25:39 +02:00
switch ( pControlNavigateData - > nControlNavigate )
{
case XUI_CONTROL_NAVIGATE_LEFT :
2012-11-18 02:57:42 +01:00
switch ( current_index )
{
case SETTING_CONTROLS_DPAD_EMULATION :
switch ( g_settings . input . dpad_emulation [ controlno ] )
{
case DPAD_EMULATION_NONE :
break ;
case DPAD_EMULATION_LSTICK :
input_xinput . set_analog_dpad_mapping ( 0 , DPAD_EMULATION_NONE , controlno ) ;
break ;
case DPAD_EMULATION_RSTICK :
input_xinput . set_analog_dpad_mapping ( 0 , DPAD_EMULATION_LSTICK , controlno ) ;
break ;
}
break ;
case SETTING_CONTROLS_DEFAULT_ALL :
break ;
default :
rarch_input_set_keybind ( controlno , KEYBIND_DECREMENT , current_index ) ;
snprintf ( button , sizeof ( button ) , " %s #%d: %s " , rarch_input_get_default_keybind_name ( current_index ) , controlno , rarch_input_find_platform_key_label ( g_settings . input . binds [ controlno ] [ current_index ] . joykey ) ) ;
convert_char_to_wchar ( strw_buffer , button , sizeof ( strw_buffer ) ) ;
m_controlslist . SetText ( current_index , strw_buffer ) ;
break ;
}
2012-05-29 19:51:35 +02:00
break ;
2012-05-29 15:25:39 +02:00
case XUI_CONTROL_NAVIGATE_RIGHT :
2012-11-18 02:57:42 +01:00
switch ( current_index )
{
case SETTING_CONTROLS_DPAD_EMULATION :
switch ( g_settings . input . dpad_emulation [ controlno ] )
{
case DPAD_EMULATION_NONE :
input_xinput . set_analog_dpad_mapping ( 0 , DPAD_EMULATION_LSTICK , controlno ) ;
break ;
case DPAD_EMULATION_LSTICK :
input_xinput . set_analog_dpad_mapping ( 0 , DPAD_EMULATION_RSTICK , controlno ) ;
break ;
case DPAD_EMULATION_RSTICK :
break ;
}
break ;
case SETTING_CONTROLS_DEFAULT_ALL :
break ;
default :
rarch_input_set_keybind ( controlno , KEYBIND_INCREMENT , current_index ) ;
snprintf ( button , sizeof ( button ) , " %s #%d: %s " , rarch_input_get_default_keybind_name ( current_index ) , controlno , rarch_input_find_platform_key_label ( g_settings . input . binds [ controlno ] [ current_index ] . joykey ) ) ;
convert_char_to_wchar ( strw_buffer , button , sizeof ( strw_buffer ) ) ;
m_controlslist . SetText ( current_index , strw_buffer ) ;
break ;
}
2012-05-29 19:51:35 +02:00
break ;
2012-05-29 15:25:39 +02:00
case XUI_CONTROL_NAVIGATE_UP :
case XUI_CONTROL_NAVIGATE_DOWN :
2012-05-29 19:51:35 +02:00
break ;
2012-05-29 15:25:39 +02:00
}
2012-05-23 08:37:31 +02:00
2012-08-22 13:44:02 +02:00
snprintf ( button , sizeof ( button ) , " D-Pad Emulation: %s " , rarch_dpad_emulation_name_lut [ g_settings . input . dpad_emulation [ controlno ] ] ) ;
convert_char_to_wchar ( strw_buffer , button , sizeof ( strw_buffer ) ) ;
m_controlslist . SetText ( SETTING_CONTROLS_DPAD_EMULATION , strw_buffer ) ;
2012-08-21 21:31:15 +02:00
m_controlslist . SetText ( SETTING_CONTROLS_DEFAULT_ALL , L " Reset all buttons to default " ) ;
2012-11-18 02:57:42 +01:00
return 0 ;
2012-05-23 08:37:31 +02:00
}
HRESULT CRetroArchControls : : OnNotifyPress ( HXUIOBJ hObjPressed , int & bHandled )
{
int current_index , i , controlno ;
char buttons [ RARCH_FIRST_META_KEY ] [ 128 ] ;
m_controlnoslider . GetValue ( & controlno ) ;
if ( hObjPressed = = m_controlslist )
{
current_index = m_controlslist . GetCurSel ( ) ;
switch ( current_index )
{
2012-11-18 02:57:42 +01:00
case SETTING_CONTROLS_DPAD_EMULATION :
break ;
2012-05-23 08:37:31 +02:00
case SETTING_CONTROLS_DEFAULT_ALL :
rarch_input_set_default_keybinds ( 0 ) ;
for ( i = 0 ; i < RARCH_FIRST_META_KEY ; i + + )
{
2012-06-30 13:37:18 +02:00
snprintf ( buttons [ i ] , sizeof ( buttons [ i ] ) , " %s #%d: %s " ,
2012-11-18 02:57:42 +01:00
rarch_input_get_default_keybind_name ( i ) , controlno ,
rarch_input_find_platform_key_label (
g_settings . input . binds [ controlno ] [ i ] . joykey ) ) ;
2012-07-28 22:36:49 +02:00
convert_char_to_wchar ( strw_buffer , buttons [ i ] , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_controlslist . SetText ( i , strw_buffer ) ;
2012-05-23 08:37:31 +02:00
}
break ;
default :
rarch_input_set_keybind ( controlno , KEYBIND_DEFAULT , current_index ) ;
2012-06-22 07:20:58 +02:00
snprintf ( buttons [ current_index ] , sizeof ( buttons [ current_index ] ) , " %s #%d: %s " , rarch_input_get_default_keybind_name ( current_index ) , controlno , rarch_input_find_platform_key_label ( g_settings . input . binds [ controlno ] [ current_index ] . joykey ) ) ;
2012-07-28 22:36:49 +02:00
convert_char_to_wchar ( strw_buffer , buttons [ current_index ] , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_controlslist . SetText ( current_index , strw_buffer ) ;
2012-05-23 08:37:31 +02:00
break ;
}
}
2012-08-22 13:44:02 +02:00
snprintf ( buttons [ current_index ] , sizeof ( buttons [ current_index ] ) , " D-Pad Emulation: %s " , rarch_dpad_emulation_name_lut [ g_settings . input . dpad_emulation [ controlno ] ] ) ;
convert_char_to_wchar ( strw_buffer , buttons [ current_index ] , sizeof ( strw_buffer ) ) ;
m_controlslist . SetText ( SETTING_CONTROLS_DPAD_EMULATION , strw_buffer ) ;
2012-08-21 21:31:15 +02:00
m_controlslist . SetText ( SETTING_CONTROLS_DEFAULT_ALL , L " Reset all buttons to default " ) ;
2012-05-23 08:37:31 +02:00
bHandled = TRUE ;
2012-05-29 04:39:54 +02:00
return 0 ;
2012-05-23 08:37:31 +02:00
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchSettings : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
2012-01-24 06:55:27 +01:00
{
2012-04-10 21:23:42 +02:00
GetChildById ( L " XuiSettingsList " , & m_settingslist ) ;
GetChildById ( L " XuiBackButton " , & m_back ) ;
2012-02-09 03:10:20 +01:00
2012-04-10 21:23:42 +02:00
m_settingslist . SetText ( SETTING_EMU_REWIND_ENABLED , g_settings . rewind_enable ? L " Rewind: ON " : L " Rewind: OFF " ) ;
2012-10-15 06:24:39 +02:00
m_settingslist . SetText ( SETTING_EMU_SHOW_INFO_MSG , g_extern . console . rmenu . state . msg_info . enable ? L " Info messages: ON " : L " Info messages: OFF " ) ;
2012-11-22 05:32:58 +01:00
m_settingslist . SetText ( SETTING_EMU_SHOW_DEBUG_INFO_MSG , g_extern . console . rmenu . state . msg_fps . enable ? L " Debug Info messages: ON " : L " Debug Info messages: OFF " ) ;
2012-10-15 07:22:20 +02:00
m_settingslist . SetText ( SETTING_EMU_MENUS , g_extern . console . rmenu . state . rmenu_hd . enable ? L " Menus: HD " : L " Menus: SD " ) ;
2012-10-15 06:24:39 +02:00
m_settingslist . SetText ( SETTING_GAMMA_CORRECTION_ENABLED , g_extern . console . screen . gamma_correction ? L " Gamma correction: ON " : L " Gamma correction: OFF " ) ;
2012-05-08 04:22:53 +02:00
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER , g_settings . video . smooth ? L " Hardware filtering shader #1: Linear interpolation " : L " Hardware filtering shader #1: Point filtering " ) ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER_2 , g_settings . video . second_pass_smooth ? L " Hardware filtering shader #2: Linear interpolation " : L " Hardware filtering shader #2: Point filtering " ) ;
2012-11-19 04:46:48 +01:00
m_settingslist . SetText ( SETTING_SCALE_ENABLED , g_settings . video . render_to_texture ? L " Custom Scaling/Dual Shaders: ON " : L " Custom Scaling/Dual Shaders: OFF " ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SHADER , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_settingslist . SetText ( SETTING_SHADER , strw_buffer ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SHADER_2 , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_settingslist . SetText ( SETTING_SHADER_2 , strw_buffer ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SCALE_FACTOR , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_settingslist . SetText ( SETTING_SCALE_FACTOR , strw_buffer ) ;
2012-08-19 22:53:01 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ZIP_EXTRACT , sizeof ( strw_buffer ) ) ;
m_settingslist . SetText ( SETTING_ZIP_EXTRACT , strw_buffer ) ;
2012-04-10 21:23:42 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-01-24 06:55:27 +01:00
}
2012-08-22 03:56:57 +02:00
HRESULT CRetroArchSettings : : OnNotifyPress ( HXUIOBJ hObjPressed , int & bHandled )
{
2012-11-19 04:46:48 +01:00
xdk_d3d_video_t * device_ptr = ( xdk_d3d_video_t * ) driver . video_data ;
2012-08-22 03:56:57 +02:00
int current_index ;
HRESULT hr ;
if ( hObjPressed = = m_settingslist )
{
current_index = m_settingslist . GetCurSel ( ) ;
switch ( current_index )
{
case SETTING_EMU_REWIND_ENABLED :
rarch_settings_change ( S_REWIND ) ;
m_settingslist . SetText ( SETTING_EMU_REWIND_ENABLED , g_settings . rewind_enable ? L " Rewind: ON " : L " Rewind: OFF " ) ;
2012-11-18 02:57:42 +01:00
if ( g_extern . console . rmenu . state . msg_info . enable )
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
break ;
case SETTING_EMU_SHOW_INFO_MSG :
g_extern . console . rmenu . state . msg_info . enable = ! g_extern . console . rmenu . state . msg_info . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_INFO_MSG , g_extern . console . rmenu . state . msg_info . enable ? L " Info messages: ON " : L " Info messages: OFF " ) ;
2012-08-22 03:56:57 +02:00
break ;
2012-11-22 05:32:58 +01:00
case SETTING_EMU_SHOW_DEBUG_INFO_MSG :
g_extern . console . rmenu . state . msg_fps . enable = ! g_extern . console . rmenu . state . msg_fps . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_DEBUG_INFO_MSG , g_extern . console . rmenu . state . msg_fps . enable ? L " Debug Info messages: ON " : L " Debug Info messages: OFF " ) ;
break ;
2012-11-18 02:57:42 +01:00
case SETTING_EMU_MENUS :
g_extern . console . rmenu . state . rmenu_hd . enable = ! g_extern . console . rmenu . state . rmenu_hd . enable ;
m_settingslist . SetText ( SETTING_EMU_MENUS , g_extern . console . rmenu . state . rmenu_hd . enable ? L " Menus: HD " : L " Menus: SD " ) ;
break ;
case SETTING_GAMMA_CORRECTION_ENABLED :
g_extern . console . screen . gamma_correction = g_extern . console . screen . gamma_correction ? 0 : 1 ;
m_settingslist . SetText ( SETTING_GAMMA_CORRECTION_ENABLED , g_extern . console . screen . gamma_correction ? L " Gamma correction: ON " : L " Gamma correction: OFF " ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-10-15 06:24:39 +02:00
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
2012-11-18 02:57:42 +01:00
break ;
case SETTING_SHADER :
set_shader = 1 ;
hr = XuiSceneCreate ( g_extern . console . rmenu . state . rmenu_hd . enable ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_shader_browser.xur " , NULL , & app . hShaderBrowser ) ;
if ( hr < 0 )
2012-08-22 03:56:57 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-11-18 02:57:42 +01:00
hCur = app . hShaderBrowser ;
2012-08-22 03:56:57 +02:00
2012-11-18 02:57:42 +01:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-08-22 03:56:57 +02:00
rarch_settings_msg ( S_MSG_SELECT_SHADER , S_DELAY_180 ) ;
2012-11-18 02:57:42 +01:00
NavigateForward ( app . hShaderBrowser ) ;
break ;
case SETTING_SHADER_2 :
set_shader = 2 ;
hr = XuiSceneCreate ( g_extern . console . rmenu . state . rmenu_hd . enable ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_shader_browser.xur " , NULL , & app . hShaderBrowser ) ;
if ( hr < 0 )
2012-08-22 03:56:57 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-11-18 02:57:42 +01:00
hCur = app . hShaderBrowser ;
2012-08-22 03:56:57 +02:00
2012-11-18 02:57:42 +01:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-08-22 03:56:57 +02:00
rarch_settings_msg ( S_MSG_SELECT_SHADER , S_DELAY_180 ) ;
2012-11-18 02:57:42 +01:00
NavigateForward ( app . hShaderBrowser ) ;
break ;
case SETTING_HW_TEXTURE_FILTER :
g_settings . video . smooth = ! g_settings . video . smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER , g_settings . video . smooth ? L " Hardware filtering shader #1: Linear interpolation " : L " Hardware filtering shader #1: Point filtering " ) ;
break ;
case SETTING_HW_TEXTURE_FILTER_2 :
g_settings . video . second_pass_smooth = ! g_settings . video . second_pass_smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER_2 , g_settings . video . second_pass_smooth ? L " Hardware filtering shader #2: Linear interpolation " : L " Hardware filtering shader #2: Point filtering " ) ;
break ;
case SETTING_SCALE_ENABLED :
2012-11-19 04:46:48 +01:00
g_settings . video . render_to_texture = ! g_settings . video . render_to_texture ;
m_settingslist . SetText ( SETTING_SCALE_ENABLED , g_settings . video . render_to_texture ? L " Custom Scaling/Dual Shaders: ON " : L " Custom Scaling/Dual Shaders: OFF " ) ;
2012-11-20 15:44:44 +01:00
if ( g_settings . video . render_to_texture )
device_ptr - > ctx_driver - > set_fbo ( FBO_INIT ) ;
else
device_ptr - > ctx_driver - > set_fbo ( FBO_DEINIT ) ;
2012-11-18 02:57:42 +01:00
break ;
2012-08-22 03:56:57 +02:00
case SETTING_ZIP_EXTRACT :
2012-11-18 02:57:42 +01:00
if ( g_extern . file_state . zip_extract_mode < ZIP_EXTRACT_TO_CACHE_DIR )
2012-10-15 07:22:20 +02:00
g_extern . file_state . zip_extract_mode + + ;
2012-11-18 02:57:42 +01:00
else
2012-10-15 07:22:20 +02:00
g_extern . file_state . zip_extract_mode = 0 ;
2012-11-18 02:57:42 +01:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ZIP_EXTRACT , sizeof ( strw_buffer ) ) ;
m_settingslist . SetText ( SETTING_ZIP_EXTRACT , strw_buffer ) ;
break ;
2012-08-22 03:56:57 +02:00
}
}
bHandled = TRUE ;
return 0 ;
}
2012-05-24 11:34:10 +02:00
HRESULT CRetroArchSettings : : OnControlNavigate ( XUIMessageControlNavigate * pControlNavigateData , BOOL & bHandled )
{
int current_index ;
2012-11-19 04:46:48 +01:00
xdk_d3d_video_t * device_ptr = ( xdk_d3d_video_t * ) driver . video_data ;
2012-11-18 02:57:42 +01:00
2012-05-24 11:34:10 +02:00
current_index = m_settingslist . GetCurSel ( ) ;
2012-05-29 15:25:39 +02:00
switch ( pControlNavigateData - > nControlNavigate )
{
case XUI_CONTROL_NAVIGATE_LEFT :
switch ( current_index )
2012-05-29 19:51:35 +02:00
{
2012-11-18 02:57:42 +01:00
case SETTING_EMU_REWIND_ENABLED :
rarch_settings_change ( S_REWIND ) ;
m_settingslist . SetText ( SETTING_EMU_REWIND_ENABLED , g_settings . rewind_enable ? L " Rewind: ON " : L " Rewind: OFF " ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
break ;
case SETTING_EMU_SHOW_INFO_MSG :
g_extern . console . rmenu . state . msg_info . enable = ! g_extern . console . rmenu . state . msg_info . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_INFO_MSG , g_extern . console . rmenu . state . msg_info . enable ? L " Info messages: ON " : L " Info messages: OFF " ) ;
break ;
2012-11-22 05:32:58 +01:00
case SETTING_EMU_SHOW_DEBUG_INFO_MSG :
g_extern . console . rmenu . state . msg_fps . enable = ! g_extern . console . rmenu . state . msg_fps . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_DEBUG_INFO_MSG , g_extern . console . rmenu . state . msg_fps . enable ? L " Debug Info messages: ON " : L " Debug Info messages: OFF " ) ;
break ;
2012-11-18 02:57:42 +01:00
case SETTING_EMU_MENUS :
g_extern . console . rmenu . state . rmenu_hd . enable = ! g_extern . console . rmenu . state . rmenu_hd . enable ;
m_settingslist . SetText ( SETTING_EMU_MENUS , g_extern . console . rmenu . state . rmenu_hd . enable ? L " Menus: HD " : L " Menus: SD " ) ;
break ;
case SETTING_GAMMA_CORRECTION_ENABLED :
g_extern . console . screen . gamma_correction = g_extern . console . screen . gamma_correction ? 0 : 1 ;
m_settingslist . SetText ( SETTING_GAMMA_CORRECTION_ENABLED , g_extern . console . screen . gamma_correction ? L " Gamma correction: ON " : L " Gamma correction: OFF " ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
break ;
2012-05-29 15:25:39 +02:00
case SETTING_SCALE_FACTOR :
2012-11-19 04:46:48 +01:00
if ( device_ptr - > fbo_inited )
2012-05-29 19:51:35 +02:00
{
2012-10-15 07:22:20 +02:00
if ( ( g_settings . video . fbo . scale_x > MIN_SCALING_FACTOR ) )
2012-05-29 19:51:35 +02:00
{
2012-05-29 15:25:39 +02:00
rarch_settings_change ( S_SCALE_FACTOR_DECREMENT ) ;
2012-11-20 15:44:44 +01:00
device_ptr - > ctx_driver - > set_fbo ( FBO_REINIT ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SCALE_FACTOR , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_settingslist . SetText ( SETTING_SCALE_FACTOR , strw_buffer ) ;
}
}
2012-08-21 21:31:15 +02:00
break ;
2012-11-18 02:57:42 +01:00
case SETTING_ZIP_EXTRACT :
if ( g_extern . file_state . zip_extract_mode )
g_extern . file_state . zip_extract_mode - - ;
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ZIP_EXTRACT , sizeof ( strw_buffer ) ) ;
m_settingslist . SetText ( SETTING_ZIP_EXTRACT , strw_buffer ) ;
break ;
case SETTING_HW_TEXTURE_FILTER :
g_settings . video . smooth = ! g_settings . video . smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER , g_settings . video . smooth ? L " Hardware filtering shader #1: Linear interpolation " : L " Hardware filtering shader #1: Point filtering " ) ;
break ;
case SETTING_HW_TEXTURE_FILTER_2 :
g_settings . video . second_pass_smooth = ! g_settings . video . second_pass_smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER_2 , g_settings . video . second_pass_smooth ? L " Hardware filtering shader #2: Linear interpolation " : L " Hardware filtering shader #2: Point filtering " ) ;
break ;
case SETTING_SCALE_ENABLED :
2012-11-19 04:46:48 +01:00
g_settings . video . render_to_texture = ! g_settings . video . render_to_texture ;
m_settingslist . SetText ( SETTING_SCALE_ENABLED , g_settings . video . render_to_texture ? L " Custom Scaling/Dual Shaders: ON " : L " Custom Scaling/Dual Shaders: OFF " ) ;
2012-11-20 15:44:44 +01:00
if ( g_settings . video . render_to_texture )
device_ptr - > ctx_driver - > set_fbo ( FBO_INIT ) ;
else
device_ptr - > ctx_driver - > set_fbo ( FBO_DEINIT ) ;
2012-11-18 02:57:42 +01:00
break ;
2012-05-29 19:51:35 +02:00
default :
break ;
}
break ;
2012-11-18 02:57:42 +01:00
case XUI_CONTROL_NAVIGATE_RIGHT :
switch ( current_index )
{
case SETTING_EMU_SHOW_INFO_MSG :
g_extern . console . rmenu . state . msg_info . enable = ! g_extern . console . rmenu . state . msg_info . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_INFO_MSG , g_extern . console . rmenu . state . msg_info . enable ? L " Info messages: ON " : L " Info messages: OFF " ) ;
break ;
2012-11-22 05:32:58 +01:00
case SETTING_EMU_SHOW_DEBUG_INFO_MSG :
g_extern . console . rmenu . state . msg_fps . enable = ! g_extern . console . rmenu . state . msg_fps . enable ;
m_settingslist . SetText ( SETTING_EMU_SHOW_DEBUG_INFO_MSG , g_extern . console . rmenu . state . msg_fps . enable ? L " Debug Info messages: ON " : L " Debug Info messages: OFF " ) ;
break ;
2012-11-18 02:57:42 +01:00
case SETTING_EMU_MENUS :
g_extern . console . rmenu . state . rmenu_hd . enable = ! g_extern . console . rmenu . state . rmenu_hd . enable ;
m_settingslist . SetText ( SETTING_EMU_MENUS , g_extern . console . rmenu . state . rmenu_hd . enable ? L " Menus: HD " : L " Menus: SD " ) ;
break ;
case SETTING_GAMMA_CORRECTION_ENABLED :
g_extern . console . screen . gamma_correction = g_extern . console . screen . gamma_correction ? 0 : 1 ;
m_settingslist . SetText ( SETTING_GAMMA_CORRECTION_ENABLED , g_extern . console . screen . gamma_correction ? L " Gamma correction: ON " : L " Gamma correction: OFF " ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
break ;
case SETTING_EMU_REWIND_ENABLED :
rarch_settings_change ( S_REWIND ) ;
m_settingslist . SetText ( SETTING_EMU_REWIND_ENABLED , g_settings . rewind_enable ? L " Rewind: ON " : L " Rewind: OFF " ) ;
if ( g_extern . console . rmenu . state . msg_info . enable )
rarch_settings_msg ( S_MSG_RESTART_RARCH , S_DELAY_180 ) ;
break ;
case SETTING_SCALE_FACTOR :
2012-11-19 04:46:48 +01:00
if ( device_ptr - > fbo_inited )
2012-11-18 02:57:42 +01:00
{
if ( ( g_settings . video . fbo . scale_x < MAX_SCALING_FACTOR ) )
{
rarch_settings_change ( S_SCALE_FACTOR_INCREMENT ) ;
2012-11-20 15:44:44 +01:00
device_ptr - > ctx_driver - > set_fbo ( FBO_REINIT ) ;
2012-11-18 02:57:42 +01:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SCALE_FACTOR , sizeof ( strw_buffer ) ) ;
m_settingslist . SetText ( SETTING_SCALE_FACTOR , strw_buffer ) ;
}
}
break ;
case SETTING_ZIP_EXTRACT :
if ( g_extern . file_state . zip_extract_mode < ZIP_EXTRACT_TO_CACHE_DIR )
g_extern . file_state . zip_extract_mode + + ;
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ZIP_EXTRACT , sizeof ( strw_buffer ) ) ;
m_settingslist . SetText ( SETTING_ZIP_EXTRACT , strw_buffer ) ;
break ;
case SETTING_HW_TEXTURE_FILTER :
g_settings . video . smooth = ! g_settings . video . smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER , g_settings . video . smooth ? L " Hardware filtering shader #1: Linear interpolation " : L " Hardware filtering shader #1: Point filtering " ) ;
break ;
case SETTING_HW_TEXTURE_FILTER_2 :
g_settings . video . second_pass_smooth = ! g_settings . video . second_pass_smooth ;
m_settingslist . SetText ( SETTING_HW_TEXTURE_FILTER_2 , g_settings . video . second_pass_smooth ? L " Hardware filtering shader #2: Linear interpolation " : L " Hardware filtering shader #2: Point filtering " ) ;
break ;
case SETTING_SCALE_ENABLED :
2012-11-19 04:46:48 +01:00
g_settings . video . render_to_texture = ! g_settings . video . render_to_texture ;
m_settingslist . SetText ( SETTING_SCALE_ENABLED , g_settings . video . render_to_texture ? L " Custom Scaling/Dual Shaders: ON " : L " Custom Scaling/Dual Shaders: OFF " ) ;
2012-11-20 15:44:44 +01:00
if ( g_settings . video . render_to_texture )
device_ptr - > ctx_driver - > set_fbo ( FBO_INIT ) ;
else
device_ptr - > ctx_driver - > set_fbo ( FBO_DEINIT ) ;
2012-11-18 02:57:42 +01:00
break ;
default :
break ;
}
break ;
case XUI_CONTROL_NAVIGATE_UP :
case XUI_CONTROL_NAVIGATE_DOWN :
break ;
2012-05-29 15:25:39 +02:00
}
2012-05-24 11:34:10 +02:00
2012-06-30 13:37:18 +02:00
bHandled = TRUE ;
2012-11-18 02:57:42 +01:00
2012-06-30 13:37:18 +02:00
switch ( pControlNavigateData - > nControlNavigate )
{
case XUI_CONTROL_NAVIGATE_LEFT :
case XUI_CONTROL_NAVIGATE_RIGHT :
case XUI_CONTROL_NAVIGATE_UP :
case XUI_CONTROL_NAVIGATE_DOWN :
pControlNavigateData - > hObjDest = pControlNavigateData - > hObjSource ;
break ;
default :
break ;
2012-11-18 02:57:42 +01:00
}
2012-05-29 19:00:13 +02:00
2012-11-18 02:57:42 +01:00
return 0 ;
2012-05-24 11:34:10 +02:00
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchQuickMenu : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
2012-02-14 02:41:35 +01:00
{
2012-04-10 21:23:42 +02:00
GetChildById ( L " XuiQuickMenuList " , & m_quickmenulist ) ;
GetChildById ( L " XuiBackButton " , & m_back ) ;
2012-05-29 15:25:39 +02:00
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ROTATION , sizeof ( strw_buffer ) ) ;
2012-05-29 21:29:32 +02:00
m_quickmenulist . SetText ( MENU_ITEM_ORIENTATION , strw_buffer ) ;
2012-05-29 15:25:39 +02:00
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ASPECT_RATIO , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_quickmenulist . SetText ( MENU_ITEM_KEEP_ASPECT_RATIO , strw_buffer ) ;
2012-11-18 02:57:42 +01:00
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_LOAD_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_LOAD_STATE , strw_buffer ) ;
2012-05-29 22:12:28 +02:00
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SAVE_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_SAVE_STATE , strw_buffer ) ;
2012-04-10 21:23:42 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-02-14 02:41:35 +01:00
}
2012-05-29 19:00:13 +02:00
HRESULT CRetroArchQuickMenu : : OnControlNavigate ( XUIMessageControlNavigate * pControlNavigateData , BOOL & bHandled )
{
bool aspectratio_changed = false ;
int current_index ;
2012-07-07 20:15:06 +03:00
xdk_d3d_video_t * d3d = ( xdk_d3d_video_t * ) driver . video_data ;
2012-11-18 02:57:42 +01:00
2012-05-29 19:00:13 +02:00
current_index = m_quickmenulist . GetCurSel ( ) ;
switch ( pControlNavigateData - > nControlNavigate )
{
case XUI_CONTROL_NAVIGATE_LEFT :
switch ( current_index )
{
2012-05-29 21:40:45 +02:00
case MENU_ITEM_LOAD_STATE :
2012-06-30 13:37:18 +02:00
case MENU_ITEM_SAVE_STATE :
2012-05-29 21:40:45 +02:00
rarch_state_slot_decrease ( ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_LOAD_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_LOAD_STATE , strw_buffer ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SAVE_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_SAVE_STATE , strw_buffer ) ;
break ;
2012-05-29 19:00:13 +02:00
case MENU_ITEM_KEEP_ASPECT_RATIO :
rarch_settings_change ( S_ASPECT_RATIO_DECREMENT ) ;
aspectratio_changed = true ;
break ;
2012-05-29 21:29:32 +02:00
case MENU_ITEM_ORIENTATION :
rarch_settings_change ( S_ROTATION_DECREMENT ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ROTATION , sizeof ( strw_buffer ) ) ;
2012-05-29 21:29:32 +02:00
m_quickmenulist . SetText ( MENU_ITEM_ORIENTATION , strw_buffer ) ;
2012-10-15 06:24:39 +02:00
video_xdk_d3d . set_rotation ( driver . video_data , g_extern . console . screen . orientation ) ;
2012-05-29 21:29:32 +02:00
break ;
2012-05-29 19:00:13 +02:00
default :
break ;
}
break ;
case XUI_CONTROL_NAVIGATE_RIGHT :
switch ( current_index )
{
2012-05-29 21:40:45 +02:00
case MENU_ITEM_LOAD_STATE :
2012-06-30 13:37:18 +02:00
case MENU_ITEM_SAVE_STATE :
2012-05-29 21:40:45 +02:00
rarch_state_slot_increase ( ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_LOAD_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_LOAD_STATE , strw_buffer ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_SAVE_STATE_SLOT , sizeof ( strw_buffer ) ) ;
2012-05-29 21:40:45 +02:00
m_quickmenulist . SetText ( MENU_ITEM_SAVE_STATE , strw_buffer ) ;
break ;
2012-05-29 19:00:13 +02:00
case MENU_ITEM_KEEP_ASPECT_RATIO :
rarch_settings_change ( S_ASPECT_RATIO_INCREMENT ) ;
2012-06-30 13:37:18 +02:00
aspectratio_changed = true ;
2012-05-29 19:00:13 +02:00
break ;
2012-05-29 21:29:32 +02:00
case MENU_ITEM_ORIENTATION :
rarch_settings_change ( S_ROTATION_INCREMENT ) ;
2012-06-23 22:55:46 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ROTATION , sizeof ( strw_buffer ) ) ;
2012-05-29 21:29:32 +02:00
m_quickmenulist . SetText ( MENU_ITEM_ORIENTATION , strw_buffer ) ;
2012-10-15 06:24:39 +02:00
video_xdk_d3d . set_rotation ( driver . video_data , g_extern . console . screen . orientation ) ;
2012-05-29 21:29:32 +02:00
break ;
2012-05-29 19:00:13 +02:00
default :
break ;
}
break ;
case XUI_CONTROL_NAVIGATE_UP :
case XUI_CONTROL_NAVIGATE_DOWN :
break ;
}
if ( aspectratio_changed )
{
2012-11-19 04:46:48 +01:00
driver . video - > set_aspect_ratio ( driver . video_data , g_settings . video . aspect_ratio_idx ) ;
2012-06-30 13:37:18 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ASPECT_RATIO , sizeof ( strw_buffer ) ) ;
2012-05-29 19:51:35 +02:00
m_quickmenulist . SetText ( MENU_ITEM_KEEP_ASPECT_RATIO , strw_buffer ) ;
2012-05-29 19:00:13 +02:00
}
bHandled = TRUE ;
2012-06-30 13:37:18 +02:00
switch ( pControlNavigateData - > nControlNavigate )
{
case XUI_CONTROL_NAVIGATE_LEFT :
case XUI_CONTROL_NAVIGATE_RIGHT :
case XUI_CONTROL_NAVIGATE_UP :
case XUI_CONTROL_NAVIGATE_DOWN :
pControlNavigateData - > hObjDest = pControlNavigateData - > hObjSource ;
2012-11-18 02:57:42 +01:00
break ;
2012-06-30 13:37:18 +02:00
default :
break ;
2012-11-18 02:57:42 +01:00
}
2012-05-29 19:00:13 +02:00
return 0 ;
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchQuickMenu : : OnNotifyPress ( HXUIOBJ hObjPressed , int & bHandled )
2012-02-14 02:41:35 +01:00
{
2012-11-19 04:46:48 +01:00
xdk_d3d_video_t * device_ptr = ( xdk_d3d_video_t * ) driver . video_data ;
2012-04-10 21:23:42 +02:00
int current_index ;
if ( hObjPressed = = m_quickmenulist )
{
current_index = m_quickmenulist . GetCurSel ( ) ;
switch ( current_index )
{
case MENU_ITEM_LOAD_STATE :
2012-10-15 06:24:39 +02:00
if ( g_extern . console . emulator_initialized )
2012-05-29 02:05:23 +02:00
{
2012-04-21 23:25:32 +02:00
rarch_load_state ( ) ;
2012-05-29 02:05:23 +02:00
rarch_settings_change ( S_RETURN_TO_GAME ) ;
}
break ;
2012-11-18 02:57:42 +01:00
case MENU_ITEM_SAVE_STATE :
2012-10-15 06:24:39 +02:00
if ( g_extern . console . emulator_initialized )
2012-06-30 13:37:18 +02:00
{
rarch_save_state ( ) ;
rarch_settings_change ( S_RETURN_TO_GAME ) ;
}
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_KEEP_ASPECT_RATIO :
2012-06-30 13:37:18 +02:00
rarch_settings_default ( S_DEF_ASPECT_RATIO ) ;
2012-11-19 04:46:48 +01:00
driver . video - > set_aspect_ratio ( driver . video_data , g_settings . video . aspect_ratio_idx ) ;
2012-06-30 13:37:18 +02:00
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ASPECT_RATIO , sizeof ( strw_buffer ) ) ;
m_quickmenulist . SetText ( MENU_ITEM_KEEP_ASPECT_RATIO , strw_buffer ) ;
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_OVERSCAN_AMOUNT :
2012-10-15 06:24:39 +02:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-06-30 13:37:18 +02:00
rarch_settings_msg ( S_MSG_NOT_IMPLEMENTED , S_DELAY_180 ) ;
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_ORIENTATION :
2012-06-30 13:37:18 +02:00
rarch_settings_default ( S_DEF_ROTATION ) ;
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_ROTATION , sizeof ( strw_buffer ) ) ;
m_quickmenulist . SetText ( MENU_ITEM_ORIENTATION , strw_buffer ) ;
2012-11-18 02:57:42 +01:00
video_xdk_d3d . set_rotation ( driver . video_data , g_extern . console . screen . orientation ) ;
break ;
case MENU_ITEM_RESIZE_MODE :
g_extern . console . rmenu . input_loop = INPUT_LOOP_RESIZE_MODE ;
2012-06-30 13:37:18 +02:00
2012-10-15 06:24:39 +02:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-06-30 13:37:18 +02:00
rarch_settings_msg ( S_MSG_RESIZE_SCREEN , S_DELAY_270 ) ;
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_FRAME_ADVANCE :
if ( g_extern . console . emulator_initialized )
2012-12-15 02:13:58 +01:00
{
g_extern . lifecycle_state | = ( 1ULL < < RARCH_FRAMEADVANCE ) ;
2012-05-29 15:25:39 +02:00
rarch_settings_change ( S_FRAME_ADVANCE ) ;
2012-12-15 02:13:58 +01:00
}
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_SCREENSHOT_MODE :
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-11-19 04:46:48 +01:00
device_ptr - > ctx_driver - > rmenu_screenshot_dump ( NULL ) ;
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_RESET :
2012-10-15 06:24:39 +02:00
if ( g_extern . console . emulator_initialized )
2012-06-30 13:37:18 +02:00
{
rarch_settings_change ( S_RETURN_TO_GAME ) ;
rarch_game_reset ( ) ;
}
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_RETURN_TO_GAME :
if ( g_extern . console . emulator_initialized )
2012-05-29 15:25:39 +02:00
rarch_settings_change ( S_RETURN_TO_GAME ) ;
2012-11-18 02:57:42 +01:00
break ;
case MENU_ITEM_QUIT_RARCH :
rarch_settings_change ( S_QUIT_RARCH ) ;
break ;
2012-04-10 21:23:42 +02:00
}
}
bHandled = TRUE ;
2012-02-14 02:41:35 +01:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-02-14 02:41:35 +01:00
}
2012-08-22 03:56:57 +02:00
HRESULT CRetroArchShaderBrowser : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
2012-02-04 20:33:51 +01:00
{
2012-08-22 03:56:57 +02:00
GetChildById ( L " XuiRomList " , & m_shaderlist ) ;
GetChildById ( L " XuiBackButton1 " , & m_back ) ;
GetChildById ( L " XuiTxtRomPath " , & m_shaderpathtitle ) ;
2012-04-10 21:23:42 +02:00
2012-11-10 15:39:39 +01:00
filebrowser_set_root_and_ext ( & tmp_browser , " cg|CG " , " game: \\ media \\ shaders " ) ;
2012-08-22 03:56:57 +02:00
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & tmp_browser , action , & m_shaderlist , & m_shaderpathtitle ) ;
2012-04-10 21:23:42 +02:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-03-05 13:06:24 +01:00
}
2012-05-21 18:01:51 +02:00
HRESULT CRetroArchShaderBrowser : : OnNotifyPress ( HXUIOBJ hObjPressed , BOOL & bHandled )
{
2012-05-28 17:34:58 +02:00
char path [ PATH_MAX ] ;
2012-05-21 18:01:51 +02:00
if ( hObjPressed = = m_shaderlist )
{
int index = m_shaderlist . GetCurSel ( ) ;
2012-11-10 15:39:39 +01:00
if ( path_file_exists ( tmp_browser . current_dir . list - > elems [ index ] . data ) )
2012-05-21 18:01:51 +02:00
{
2012-07-28 22:36:49 +02:00
convert_wchar_to_char ( str_buffer , ( const wchar_t * ) m_shaderlist . GetText ( index ) , sizeof ( str_buffer ) ) ;
2012-11-18 02:57:42 +01:00
2012-05-29 02:32:34 +02:00
switch ( set_shader )
{
2012-05-28 22:43:08 +02:00
case 1 :
2012-11-10 15:39:39 +01:00
snprintf ( g_settings . video . cg_shader_path , sizeof ( g_settings . video . cg_shader_path ) , " %s \\ %s " , filebrowser_get_current_dir ( & tmp_browser ) , str_buffer ) ;
2012-06-28 17:35:20 +02:00
rarch_load_shader ( set_shader , g_settings . video . cg_shader_path ) ;
2012-05-29 02:32:34 +02:00
break ;
case 2 :
2012-11-10 15:39:39 +01:00
snprintf ( g_settings . video . second_pass_shader , sizeof ( g_settings . video . second_pass_shader ) , " %s \\ %s " , filebrowser_get_current_dir ( & tmp_browser ) , str_buffer ) ;
2012-06-28 17:35:20 +02:00
rarch_load_shader ( set_shader , g_settings . video . second_pass_shader ) ;
2012-05-29 02:32:34 +02:00
break ;
default :
break ;
}
2012-05-21 18:01:51 +02:00
}
2012-11-10 15:39:39 +01:00
else if ( tmp_browser . current_dir . list - > elems [ index ] . attr . b )
2012-05-21 18:01:51 +02:00
{
2012-07-28 22:36:49 +02:00
convert_wchar_to_char ( str_buffer , ( const wchar_t * ) m_shaderlist . GetText ( index ) , sizeof ( str_buffer ) ) ;
2012-11-10 15:39:39 +01:00
snprintf ( path , sizeof ( path ) , " %s \\ %s " , filebrowser_get_current_dir ( & tmp_browser ) , str_buffer ) ;
2012-11-18 02:57:42 +01:00
filebrowser_set_root_and_ext ( & tmp_browser , " cg|CG " , path ) ;
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & tmp_browser , action , & m_shaderlist , & m_shaderpathtitle ) ;
2012-05-21 18:01:51 +02:00
}
}
bHandled = TRUE ;
2012-05-29 04:39:54 +02:00
return 0 ;
2012-05-21 18:01:51 +02:00
}
2012-08-22 03:56:57 +02:00
HRESULT CRetroArchCoreBrowser : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
{
GetChildById ( L " XuiRomList " , & m_romlist ) ;
GetChildById ( L " XuiBackButton1 " , & m_back ) ;
GetChildById ( L " XuiTxtRomPath " , & m_rompathtitle ) ;
2012-11-10 15:39:39 +01:00
filebrowser_set_root_and_ext ( & tmp_browser , " xex|XEX " , " game: " ) ;
2012-08-22 03:56:57 +02:00
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & tmp_browser , action , & m_romlist , & m_rompathtitle ) ;
2012-08-22 03:56:57 +02:00
return 0 ;
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchCoreBrowser : : OnNotifyPress ( HXUIOBJ hObjPressed , BOOL & bHandled )
2012-03-05 13:06:24 +01:00
{
2012-05-28 17:34:58 +02:00
char path [ PATH_MAX ] ;
2012-04-10 21:23:42 +02:00
if ( hObjPressed = = m_romlist )
{
int index = m_romlist . GetCurSel ( ) ;
2012-08-21 21:31:15 +02:00
convert_wchar_to_char ( str_buffer , ( const wchar_t * ) m_romlist . GetText ( index ) , sizeof ( str_buffer ) ) ;
2012-11-10 15:39:39 +01:00
if ( path_file_exists ( tmp_browser . current_dir . list - > elems [ index ] . data ) )
2012-04-10 21:23:42 +02:00
{
2012-11-10 15:39:39 +01:00
snprintf ( g_extern . console . external_launch . launch_app , sizeof ( g_extern . console . external_launch . launch_app ) , " %s \\ %s " , filebrowser_get_current_dir ( & tmp_browser ) , str_buffer ) ;
2012-05-29 20:01:29 +02:00
rarch_settings_change ( S_RETURN_TO_LAUNCHER ) ;
2012-04-10 21:23:42 +02:00
}
2012-11-10 15:39:39 +01:00
else if ( tmp_browser . current_dir . list - > elems [ index ] . attr . b )
2012-04-10 21:23:42 +02:00
{
2012-11-10 15:39:39 +01:00
snprintf ( path , sizeof ( path ) , " %s \\ %s " , filebrowser_get_current_dir ( & tmp_browser ) , str_buffer ) ;
2012-11-18 02:57:42 +01:00
filebrowser_set_root_and_ext ( & tmp_browser , " xex|XEX " , path ) ;
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_B ) ;
2012-11-10 15:39:39 +01:00
filebrowser_fetch_directory_entries ( & tmp_browser , action , & m_romlist , & m_rompathtitle ) ;
2012-04-10 21:23:42 +02:00
}
}
bHandled = TRUE ;
2012-05-29 04:39:54 +02:00
return 0 ;
2012-02-04 20:33:51 +01:00
}
2012-08-22 03:56:57 +02:00
HRESULT CRetroArchMain : : OnInit ( XUIMessageInit * pInitData , BOOL & bHandled )
2012-01-24 06:55:27 +01:00
{
2012-08-22 03:56:57 +02:00
struct retro_system_info info ;
retro_get_system_info ( & info ) ;
const char * id = info . library_name ? info . library_name : " Unknown " ;
2012-06-30 13:37:18 +02:00
2012-08-22 03:56:57 +02:00
GetChildById ( L " XuiLogo " , & m_logoimage ) ;
GetChildById ( L " XuiBtnRomBrowser " , & m_filebrowser ) ;
GetChildById ( L " XuiBtnSettings " , & m_settings ) ;
GetChildById ( L " XuiBtnQuickMenu " , & m_quick_menu ) ;
GetChildById ( L " XuiBtnControls " , & m_controls ) ;
GetChildById ( L " XuiBtnQuit " , & m_quit ) ;
GetChildById ( L " XuiTxtTitle " , & m_title ) ;
GetChildById ( L " XuiTxtCoreText " , & m_core ) ;
GetChildById ( L " XuiBtnLibretroCore " , & m_change_libretro_core ) ;
2012-06-30 13:37:18 +02:00
2012-08-22 03:56:57 +02:00
char core_text [ 256 ] ;
snprintf ( core_text , sizeof ( core_text ) , " %s %s " , id , info . library_version ) ;
2012-06-30 13:37:18 +02:00
2012-08-22 03:56:57 +02:00
convert_char_to_wchar ( strw_buffer , core_text , sizeof ( strw_buffer ) ) ;
m_core . SetText ( strw_buffer ) ;
rarch_settings_create_menu_item_label_w ( strw_buffer , S_LBL_RARCH_VERSION , sizeof ( strw_buffer ) ) ;
m_title . SetText ( strw_buffer ) ;
2012-06-30 13:37:18 +02:00
2012-10-15 07:22:20 +02:00
g_extern . console . rmenu . input_loop = INPUT_LOOP_NONE ;
2012-02-14 02:41:35 +01:00
2012-05-29 04:39:54 +02:00
return 0 ;
2012-01-24 06:55:27 +01:00
}
2012-04-22 00:11:48 +02:00
HRESULT CRetroArchMain : : OnNotifyPress ( HXUIOBJ hObjPressed , int & bHandled )
2012-01-24 00:02:02 +01:00
{
2012-07-07 20:15:06 +03:00
xdk_d3d_video_t * vid = ( xdk_d3d_video_t * ) driver . video_data ;
2012-04-10 21:23:42 +02:00
2012-10-15 07:22:20 +02:00
bool hdmenus_allowed = g_extern . console . rmenu . state . rmenu_hd . enable ;
2012-04-10 21:23:42 +02:00
HRESULT hr ;
if ( hObjPressed = = m_filebrowser )
{
2012-10-15 06:24:39 +02:00
g_extern . console . rmenu . input_loop = INPUT_LOOP_FILEBROWSER ;
2012-04-21 23:25:32 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_filebrowser.xur " , NULL , & app . hFileBrowser ) ;
2012-04-10 21:23:42 +02:00
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-05-28 22:43:08 +02:00
hCur = app . hFileBrowser ;
2012-04-10 21:23:42 +02:00
NavigateForward ( app . hFileBrowser ) ;
}
else if ( hObjPressed = = m_quick_menu )
{
2012-04-21 23:25:32 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_quickmenu.xur " , NULL , & app . hQuickMenu ) ;
2012-04-10 21:23:42 +02:00
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-06-30 13:37:18 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-06-30 13:37:18 +02:00
}
2012-05-28 22:43:08 +02:00
hCur = app . hQuickMenu ;
2012-04-10 21:23:42 +02:00
NavigateForward ( app . hQuickMenu ) ;
}
2012-05-22 04:52:12 +02:00
else if ( hObjPressed = = m_controls )
{
2012-05-23 08:37:31 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_controls.xur " , NULL , & app . hControlsMenu ) ;
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-06-30 13:37:18 +02:00
{
2012-05-23 08:37:31 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-06-30 13:37:18 +02:00
}
2012-05-28 22:43:08 +02:00
hCur = app . hControlsMenu ;
2012-06-30 13:37:18 +02:00
2012-10-15 06:24:39 +02:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-05-29 16:45:37 +02:00
rarch_settings_msg ( S_MSG_CHANGE_CONTROLS , S_DELAY_180 ) ;
2012-06-30 13:37:18 +02:00
2012-05-23 08:37:31 +02:00
NavigateForward ( app . hControlsMenu ) ;
2012-05-22 04:52:12 +02:00
}
2012-04-22 00:34:33 +02:00
else if ( hObjPressed = = m_change_libretro_core )
2012-04-10 21:23:42 +02:00
{
2012-04-22 00:34:33 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_libretrocore_browser.xur " , NULL , & app . hCoreBrowser ) ;
2012-04-10 21:23:42 +02:00
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-10 21:23:42 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-04-10 21:23:42 +02:00
}
2012-05-28 22:43:08 +02:00
hCur = app . hCoreBrowser ;
2012-05-29 02:32:34 +02:00
2012-10-15 06:24:39 +02:00
if ( g_extern . console . rmenu . state . msg_info . enable )
2012-05-29 16:45:37 +02:00
rarch_settings_msg ( S_MSG_SELECT_LIBRETRO_CORE , S_DELAY_180 ) ;
2012-06-30 13:37:18 +02:00
2012-04-10 21:23:42 +02:00
NavigateForward ( app . hCoreBrowser ) ;
}
else if ( hObjPressed = = m_settings )
{
2012-04-22 00:11:48 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_settings.xur " , NULL , & app . hRetroArchSettings ) ;
2012-04-10 21:23:42 +02:00
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to load scene. \n " ) ;
2012-05-28 22:43:08 +02:00
hCur = app . hRetroArchSettings ;
2012-04-22 00:11:48 +02:00
NavigateForward ( app . hRetroArchSettings ) ;
2012-04-10 21:23:42 +02:00
}
else if ( hObjPressed = = m_quit )
2012-08-22 21:27:21 +02:00
rarch_settings_change ( S_QUIT_RARCH ) ;
2012-04-10 21:23:42 +02:00
bHandled = TRUE ;
2012-05-28 14:05:28 +02:00
return 0 ;
2012-01-24 00:02:02 +01:00
}
2012-08-03 18:27:38 +02:00
void menu_init ( void )
2012-01-22 21:47:34 +01:00
{
2012-04-10 21:23:42 +02:00
HRESULT hr ;
2012-01-22 21:47:34 +01:00
2012-11-19 04:46:48 +01:00
xdk_d3d_video_t * device_ptr = ( xdk_d3d_video_t * ) driver . video_data ;
2012-04-10 21:23:42 +02:00
2012-10-15 07:22:20 +02:00
bool hdmenus_allowed = g_extern . console . rmenu . state . rmenu_hd . enable ;
2012-06-05 21:01:25 +02:00
2012-11-20 01:40:52 +01:00
D3DPRESENT_PARAMETERS d3dpp ;
2012-11-20 02:51:00 +01:00
video_info_t video_info = { 0 } ;
video_info . vsync = g_settings . video . vsync ;
video_info . force_aspect = false ;
video_info . smooth = g_settings . video . smooth ;
video_info . input_scale = 2 ;
video_info . fullscreen = true ;
2012-11-20 23:54:35 +01:00
video_info . rgb32 = false ;
2012-11-20 02:51:00 +01:00
xdk_d3d_generate_pp ( & d3dpp , & video_info ) ;
2012-11-20 01:40:52 +01:00
hr = app . InitShared ( device_ptr - > d3d_render_device , & d3dpp , XuiPNGTextureLoader ) ;
2012-04-10 21:23:42 +02:00
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-10 21:23:42 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed initializing XUI application. \n " ) ;
2012-08-03 18:27:38 +02:00
return ;
2012-04-10 21:23:42 +02:00
}
/* Register font */
2012-04-21 23:53:43 +02:00
hr = app . RegisterDefaultTypeface ( L " Arial Unicode MS " , L " file://game:/media/rarch.ttf " ) ;
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-10 21:23:42 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to register default typeface. \n " ) ;
2012-08-03 18:27:38 +02:00
return ;
2012-04-10 21:23:42 +02:00
}
2012-04-21 23:25:32 +02:00
hr = app . LoadSkin ( L " file://game:/media/rarch_scene_skin.xur " ) ;
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-10 21:23:42 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to load skin. \n " ) ;
2012-08-03 18:27:38 +02:00
return ;
2012-04-10 21:23:42 +02:00
}
2012-06-05 21:01:25 +02:00
hr = XuiSceneCreate ( hdmenus_allowed ? L " file://game:/media/hd/ " : L " file://game:/media/sd/ " , L " rarch_main.xur " , NULL , & app . hMainScene ) ;
2012-05-28 14:05:28 +02:00
if ( hr < 0 )
2012-04-10 21:23:42 +02:00
{
2012-04-21 23:25:32 +02:00
RARCH_ERR ( " Failed to create scene 'rarch_main.xur'. \n " ) ;
2012-08-03 18:27:38 +02:00
return ;
2012-04-10 21:23:42 +02:00
}
2012-05-22 03:10:56 +02:00
hCur = app . hMainScene ;
2012-04-10 21:23:42 +02:00
XuiSceneNavigateFirst ( app . GetRootObj ( ) , app . hMainScene , XUSER_INDEX_FOCUS ) ;
2012-11-10 15:39:39 +01:00
filebrowser_new ( & browser , g_extern . console . main_wrap . paths . default_rom_startup_dir , rarch_console_get_rom_ext ( ) ) ;
2012-01-22 22:45:32 +01:00
}
2012-06-18 06:22:26 +02:00
void menu_free ( void )
2012-04-17 05:35:25 +02:00
{
2012-11-10 15:39:39 +01:00
filebrowser_free ( & browser ) ;
filebrowser_free ( & tmp_browser ) ;
2012-05-29 15:25:39 +02:00
app . Uninit ( ) ;
2012-04-17 05:35:25 +02:00
}
2012-06-28 18:53:35 +02:00
static void ingame_menu_resize ( void )
{
2012-06-30 13:37:18 +02:00
XINPUT_STATE state ;
XInputGetState ( 0 , & state ) ;
if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_LEFT | | state . Gamepad . sThumbLX < - DEADZONE )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . x - = 1 ;
2012-06-30 13:37:18 +02:00
else if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_RIGHT | | state . Gamepad . sThumbLX > DEADZONE )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . x + = 1 ;
2012-06-30 13:37:18 +02:00
if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_UP | | state . Gamepad . sThumbLY > DEADZONE )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . y + = 1 ;
2012-06-30 13:37:18 +02:00
else if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_DOWN | | state . Gamepad . sThumbLY < - DEADZONE )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . y - = 1 ;
2012-06-30 13:37:18 +02:00
if ( state . Gamepad . sThumbRX < - DEADZONE | | state . Gamepad . wButtons & XINPUT_GAMEPAD_LEFT_THUMB )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . width - = 1 ;
2012-06-30 13:37:18 +02:00
else if ( state . Gamepad . sThumbRX > DEADZONE | | state . Gamepad . wButtons & XINPUT_GAMEPAD_RIGHT_THUMB )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . width + = 1 ;
2012-06-30 13:37:18 +02:00
if ( state . Gamepad . sThumbRY > DEADZONE | | state . Gamepad . wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . height + = 1 ;
2012-06-30 13:37:18 +02:00
else if ( state . Gamepad . sThumbRY < - DEADZONE | | state . Gamepad . wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER )
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . height - = 1 ;
2012-06-30 13:37:18 +02:00
if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_Y )
{
2012-10-15 06:24:39 +02:00
g_extern . console . screen . viewports . custom_vp . x = 0 ;
g_extern . console . screen . viewports . custom_vp . y = 0 ;
g_extern . console . screen . viewports . custom_vp . width = 1280 ; //FIXME: hardcoded
g_extern . console . screen . viewports . custom_vp . height = 720 ; //FIXME: hardcoded
2012-06-30 13:37:18 +02:00
}
if ( state . Gamepad . wButtons & XINPUT_GAMEPAD_B )
2012-10-15 06:24:39 +02:00
g_extern . console . rmenu . input_loop = INPUT_LOOP_MENU ;
2012-06-28 18:53:35 +02:00
}
2012-12-15 16:39:30 +01:00
bool rmenu_iterate ( void )
2012-01-22 22:45:32 +01:00
{
2012-12-15 16:39:30 +01:00
static bool preinit = true ;
2012-04-10 21:23:42 +02:00
HRESULT hr ;
2012-11-19 04:46:48 +01:00
xdk_d3d_video_t * device_ptr = ( xdk_d3d_video_t * ) driver . video_data ;
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
if ( preinit )
{
device_ptr - > block_swap = true ;
g_extern . console . rmenu . input_loop = INPUT_LOOP_MENU ;
g_extern . draw_menu = true ;
preinit = false ;
}
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
g_extern . frame_count + + ;
2012-05-22 02:19:40 +02:00
2012-12-15 16:39:30 +01:00
if ( g_extern . console . emulator_initialized )
rarch_render_cached_frame ( ) ;
else
2012-04-10 21:23:42 +02:00
{
2012-12-15 16:39:30 +01:00
device_ptr - > ctx_driver - > clear ( ) ;
g_extern . frame_count + + ;
}
2012-12-15 04:36:19 +01:00
2012-12-15 16:39:30 +01:00
XINPUT_STATE state ;
XInputGetState ( 0 , & state ) ;
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
bool rmenu_enable = ! ( ( state . Gamepad . wButtons & XINPUT_GAMEPAD_LEFT_THUMB )
& & ( state . Gamepad . wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ) & & ( g_extern . console . emulator_initialized )
& & IS_TIMER_EXPIRED ( 0 ) ) ;
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
g_extern . console . rmenu . mode = rmenu_enable ? MODE_MENU : MODE_EMULATION ;
2012-05-29 15:25:39 +02:00
2012-12-15 16:39:30 +01:00
if ( g_extern . console . rmenu . mode = = MODE_EMULATION | | g_extern . console . rmenu . mode = = MODE_EXIT )
goto deinit ;
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
switch ( g_extern . console . rmenu . input_loop )
{
case INPUT_LOOP_FILEBROWSER :
/*
if ( ( ( state . Gamepad . wButtons & XINPUT_GAMEPAD_Y ) & & hCur ! = app . hMainScene ) )
{
uint64_t action = ( 1 < < RMENU_DEVICE_NAV_A ) ;
browser_update ( browser , action , rarch_console_get_rom_ext ( ) ) ;
SET_TIMER_EXPIRATION ( d3d , 0 , 15 ) ;
}
*/
case INPUT_LOOP_MENU :
app . RunFrame ( ) ; /* Update XUI */
if ( ( state . Gamepad . wButtons & XINPUT_GAMEPAD_B ) & & hCur ! = app . hMainScene )
XuiSceneNavigateBack ( hCur , app . hMainScene , XUSER_INDEX_ANY ) ;
break ;
case INPUT_LOOP_RESIZE_MODE :
ingame_menu_resize ( ) ;
break ;
default :
break ;
}
2012-05-22 02:19:40 +02:00
2012-12-15 16:39:30 +01:00
hr = app . Render ( ) ; /* Render XUI */
hr = XuiTimersRun ( ) ; /* Update XUI timers */
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
const char * message = msg_queue_pull ( g_extern . msg_queue ) ;
2012-05-22 15:21:45 +02:00
2012-12-15 16:39:30 +01:00
if ( message )
{
device_ptr - > font_ctx - > render_msg ( device_ptr , message ) ;
}
2012-05-22 15:21:45 +02:00
2012-12-15 16:39:30 +01:00
device_ptr - > ctx_driver - > swap_buffers ( ) ;
2012-04-10 21:23:42 +02:00
2012-12-15 16:39:30 +01:00
return true ;
2012-02-13 22:45:28 +01:00
2012-12-15 16:39:30 +01:00
deinit :
if ( ! ( g_extern . lifecycle_state & ( 1ULL < < RARCH_FRAMEADVANCE ) ) )
{
// set a timer delay so that we don't instantly switch back to the menu when
// press and holding L3 + R3 in the emulation loop (lasts for 30 frame ticks)
SET_TIMER_EXPIRATION ( 0 , 30 ) ;
}
device_ptr - > block_swap = false ;
2012-10-15 06:24:39 +02:00
g_extern . console . rmenu . state . ingame_menu . enable = false ;
2012-12-15 16:39:30 +01:00
g_extern . draw_menu = false ;
preinit = true ;
return false ;
2012-01-24 00:02:02 +01:00
}