diff --git a/radiant/camwindow.cpp b/radiant/camwindow.cpp index b4dd3ae0..75fdab42 100644 --- a/radiant/camwindow.cpp +++ b/radiant/camwindow.cpp @@ -138,12 +138,13 @@ struct MotionDeltaValues { enum camera_draw_mode { - cd_wire, - cd_solid, - cd_texture, - cd_texture_plus_wire, - cd_lighting + cd_wire = 0, + cd_solid = 1, + cd_texture = 2, + cd_texture_plus_wire = 3, + cd_lighting = 4 }; +const int camera_draw_mode_count = 5; struct camera_t { @@ -2332,6 +2333,9 @@ void CamWnd_registerShortcuts(){ command_connect_accelerator( "TogglePreview" ); } + command_connect_accelerator( "CameraModeNext" ); + command_connect_accelerator( "CameraModePrev" ); + command_connect_accelerator( "CameraSpeedInc" ); command_connect_accelerator( "CameraSpeedDec" ); } @@ -2412,51 +2416,24 @@ void GlobalCamera_LookThroughCamera(){ void RenderModeImport( int value ){ - switch ( value ) - { - case 0: - CamWnd_SetMode( cd_wire ); - break; - case 1: - CamWnd_SetMode( cd_solid ); - break; - case 2: - CamWnd_SetMode( cd_texture ); - break; - case 3: - CamWnd_SetMode( cd_texture_plus_wire ); - break; - case 4: - CamWnd_SetMode( cd_lighting ); - break; - default: - CamWnd_SetMode( cd_texture ); - } + CamWnd_SetMode( static_cast( ( value < 0 || value >= camera_draw_mode_count)? 2 : value ) ); } typedef FreeCaller1 RenderModeImportCaller; void RenderModeExport( const IntImportCallback& importer ){ - switch ( CamWnd_GetMode() ) - { - case cd_wire: - importer( 0 ); - break; - case cd_solid: - importer( 1 ); - break; - case cd_texture: - importer( 2 ); - break; - case cd_texture_plus_wire: - importer( 3 ); - break; - case cd_lighting: - importer( 4 ); - break; - } + importer( CamWnd_GetMode() ); } typedef FreeCaller1 RenderModeExportCaller; +void CameraModeNext(){ + const int count = camera_draw_mode_count - ( g_pGameDescription->mGameType == "doom3"? 0 : 1 ); + CamWnd_SetMode( static_cast( ( CamWnd_GetMode() + 1 ) % count ) ); +} +void CameraModePrev(){ + const int count = camera_draw_mode_count - ( g_pGameDescription->mGameType == "doom3"? 0 : 1 ); + CamWnd_SetMode( static_cast( ( CamWnd_GetMode() + count - 1 ) % count ) ); +} + void CamMSAAImport( int value ){ g_camwindow_globals_private.m_MSAA = value ? 1 << value : value; if ( g_camwnd != 0 ) { @@ -2516,27 +2493,13 @@ void Camera_constructPreferences( PreferencesPage& page ){ BoolExportCaller( g_camwindow_globals_private.m_bFaceWire ) ); - if ( g_pGameDescription->mGameType == "doom3" ) { - const char* render_mode[] = { "Wireframe", "Flatshade", "Textured", "Textured+Wire", "Lighting" }; - - page.appendCombo( - "Render Mode", - STRING_ARRAY_RANGE( render_mode ), - IntImportCallback( RenderModeImportCaller() ), - IntExportCallback( RenderModeExportCaller() ) - ); - } - else - { - const char* render_mode[] = { "Wireframe", "Flatshade", "Textured", "Textured+Wire" }; - - page.appendCombo( - "Render Mode", - STRING_ARRAY_RANGE( render_mode ), - IntImportCallback( RenderModeImportCaller() ), - IntExportCallback( RenderModeExportCaller() ) - ); - } + const char* render_modes[]{ "Wireframe", "Flatshade", "Textured", "Textured+Wire", "Lighting" }; + page.appendCombo( + "Render Mode", + StringArrayRange( render_modes, render_modes + ARRAY_SIZE( render_modes ) - ( g_pGameDescription->mGameType == "doom3"? 0 : 1 ) ), + IntImportCallback( RenderModeImportCaller() ), + IntExportCallback( RenderModeExportCaller() ) + ); if( GlobalOpenGL().support_ARB_framebuffer_object ){ const char* samples[] = { "0", "2", "4", "8", "16", "32" }; @@ -2608,6 +2571,9 @@ void CamWnd_Construct(){ GlobalCommands_insert( "TogglePreview", FreeCaller(), Accelerator( GDK_F3 ) ); } + GlobalCommands_insert( "CameraModeNext", FreeCaller(), Accelerator( '}', (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalCommands_insert( "CameraModePrev", FreeCaller(), Accelerator( '{', (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalCommands_insert( "CameraSpeedInc", FreeCaller(), Accelerator( GDK_KP_Add, (GdkModifierType)GDK_SHIFT_MASK ) ); GlobalCommands_insert( "CameraSpeedDec", FreeCaller(), Accelerator( GDK_KP_Subtract, (GdkModifierType)GDK_SHIFT_MASK ) );