From 520a24fb83acd0bb98f8b364aa5ea1ceae43f76a Mon Sep 17 00:00:00 2001 From: "SND\\MaddTheSane_cp" Date: Thu, 20 Dec 2012 23:04:58 +0000 Subject: Implement fast-forward in the display plug-ins for OS X. git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@81907 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- macosx/English.lproj/Configuration.xib | 424 +++++++++++++++++++++++++++++--- macosx/English.lproj/KeyNames.plist | 2 + macosx/ExtendedKeys.h | 3 +- macosx/HotkeyController.h | 1 + macosx/HotkeyController.m | 1 + macosx/hotkeys.m | 24 +- macosx/plugins/DFXVideo/macsrc/drawgl.m | 25 +- macosx/plugins/PeopsXgl/macsrc/drawgl.m | 25 +- 8 files changed, 464 insertions(+), 41 deletions(-) diff --git a/macosx/English.lproj/Configuration.xib b/macosx/English.lproj/Configuration.xib index 8a9178db..19ee3745 100644 --- a/macosx/English.lproj/Configuration.xib +++ b/macosx/English.lproj/Configuration.xib @@ -1725,7 +1725,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{120, 273}, {310, 22}} - + _NS:9 YES @@ -1750,15 +1750,68 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + + 268 + {{-3, 237}, {121, 32}} + + + + _NS:9 + 101 + YES + + 67108864 + 134217728 + Frame Limit + + _NS:9 + + 100 + -1232977920 + 129 + + + + 200 + 25 + + + + + 268 + {{120, 243}, {310, 22}} + + + + _NS:9 + YES + + -2075131840 + 272634880 + + + None... + _NS:9 + + YES + 1 + + + 1 + MC4xNzQwOTY0ODI5IDAuMzI3ODI0MzQ2NSAwLjY1NzM3NTE2OTgAA + + + 268 - {{-3, 236}, {121, 32}} + {{-3, 205}, {121, 32}} _NS:9 - 101 + 102 YES 67108864 @@ -1780,7 +1833,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{120, 243}, {310, 22}} + {{120, 212}, {310, 22}} @@ -1806,12 +1859,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{-3, 204}, {121, 32}} + {{-3, 173}, {121, 32}} _NS:9 - 102 + 103 YES 67108864 @@ -1833,7 +1886,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{120, 211}, {310, 22}} + {{120, 180}, {310, 22}} @@ -1859,12 +1912,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{-3, 172}, {121, 32}} + {{-3, 141}, {121, 32}} _NS:9 - 103 + 104 YES 67108864 @@ -1886,7 +1939,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{120, 179}, {310, 22}} + {{120, 148}, {310, 22}} @@ -1912,12 +1965,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{-3, 138}, {121, 32}} + {{-3, 109}, {121, 32}} _NS:9 - 104 + 105 YES 67108864 @@ -1939,10 +1992,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 - {{120, 146}, {310, 22}} + {{120, 117}, {310, 22}} - + _NS:9 YES @@ -1962,6 +2015,131 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + + 42 + {{3, 101}, {500, 5}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + Box + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + 3 + 2 + 0 + NO + + + + 268 + {{0, 78}, {113, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + GPU Key Modifier + + _NS:1535 + + + + + + + + 268 + {{117, 72}, {153, 26}} + + + + _NS:9 + YES + + -2076049856 + 2048 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + + Control ⌃ + + 262144 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + + + + Shift ⇧ + + 131072 + 2147483647 + + + _popUpItemAction: + + + + + Alt / Option ⌥ + + 524288 + 2147483647 + + + _popUpItemAction: + + + + + Command ⌘ + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + {{10, 33}, {506, 298}} @@ -2627,6 +2805,22 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 879 + + + hotkeySet: + + + + 900 + + + + FrameLimit + + + + 901 + @@ -3423,6 +3617,11 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + + + + Hotkey View @@ -3557,6 +3756,97 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + 884 + + + + + 885 + + + + + + + + 886 + + + + + 887 + + + + + + + + 888 + + + + + + + + 889 + + + + + + + + + + + 890 + + + + + 891 + + + + + 892 + + + + + 893 + + + + + 896 + + + + + + + + 897 + + + + + + + + 898 + + + + + 899 + + + @@ -3750,12 +4040,36 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Any key pressed at the same time as the GPU Key Modifier will be sent directly to the GPU Plugin. This is useful for plugins with menus. Control (ctrl) is the recommended modifier; command (cmd or apple key) should not be used unless you absolutely want to. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + FrameLimit + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 879 + 901 @@ -3941,6 +4255,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSTextField + NSTextField NSTextField NSTextField NSTextField @@ -3951,6 +4266,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA FastForward NSTextField + + FrameLimit + NSTextField + LoadState NSTextField @@ -3973,45 +4292,78 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA ./Classes/HotkeyController.h + + NamedSlider + NSSlider + + IBProjectSource + ./Classes/NamedSlider.h + + PluginController NSObject - id - id - id + id + id + id - - doAbout: + + cancel: id - - doConfigure: + + ok: id - - selectPlugin: + + reset: id - NSButton - NSButton - NSPopUpButton + NSControl + NamedSlider + NSControl + NSControl + NamedSlider + NamedSlider + NSControl + NSControl - - aboutButton - NSButton + + hiCompBox + NSControl + + + interpolValue + NamedSlider + + + irqWaitBox + NSControl + + + monoSoundBox + NSControl + + + reverbValue + NamedSlider + + + volumeValue + NamedSlider - - configureButton - NSButton + + xaEnableBox + NSControl - - pluginMenu - NSPopUpButton + + xaSpeedBox + NSControl diff --git a/macosx/English.lproj/KeyNames.plist b/macosx/English.lproj/KeyNames.plist index bde23943..275976a8 100644 --- a/macosx/English.lproj/KeyNames.plist +++ b/macosx/English.lproj/KeyNames.plist @@ -142,6 +142,8 @@ / 49 Space + 114 + Insert 115 Home 119 diff --git a/macosx/ExtendedKeys.h b/macosx/ExtendedKeys.h index 24f54912..b4990b20 100644 --- a/macosx/ExtendedKeys.h +++ b/macosx/ExtendedKeys.h @@ -21,7 +21,8 @@ enum { // Fake HotKeys GPU_HOTKEYS = 0x020, - GPU_FAST_FORWARD + GPU_FAST_FORWARD, + GPU_FRAME_LIMIT }; #endif //__EXTENDED_KEYS_H__ diff --git a/macosx/HotkeyController.h b/macosx/HotkeyController.h index 59492c79..baf539d5 100644 --- a/macosx/HotkeyController.h +++ b/macosx/HotkeyController.h @@ -18,6 +18,7 @@ IBOutlet NSTextField *LoadState; IBOutlet NSTextField *NextState; IBOutlet NSTextField *PrevState; + IBOutlet NSTextField *FrameLimit; } @property (assign) NSInteger configInput; diff --git a/macosx/HotkeyController.m b/macosx/HotkeyController.m index 65ec1055..fcb15c4e 100644 --- a/macosx/HotkeyController.m +++ b/macosx/HotkeyController.m @@ -28,6 +28,7 @@ [self mapOutletToIdentifier:LoadState forIdentifier:@"LoadState"]; [self mapOutletToIdentifier:NextState forIdentifier:@"NextState"]; [self mapOutletToIdentifier:PrevState forIdentifier:@"PrevState"]; + [self mapOutletToIdentifier:FrameLimit forIdentifier:@"FrameLimit"]; } - (void)dealloc diff --git a/macosx/hotkeys.m b/macosx/hotkeys.m index 16d92fda..1c917439 100644 --- a/macosx/hotkeys.m +++ b/macosx/hotkeys.m @@ -16,6 +16,7 @@ #define HK_MAX_STATE 10 static id monitor; +static id gpuMonitor; static int currentState = 0; static NSMutableDictionary *hotkeys; enum { @@ -23,7 +24,8 @@ enum { HK_SAVE_STATE, HK_LOAD_STATE, HK_NEXT_STATE, - HK_PREV_STATE + HK_PREV_STATE, + HK_FRAME_LIMIT }; void nextState() { @@ -52,6 +54,12 @@ bool handleHotkey(NSString* keyCode) { GPU_keypressed(GPU_FAST_FORWARD); } break; + case HK_FRAME_LIMIT: + // Ignore FrameLimit requests if paused + if(![EmuThread isPaused]) { + GPU_keypressed(GPU_FRAME_LIMIT); + } + break; case HK_SAVE_STATE: [PcsxrController saveState:currentState]; break; @@ -90,11 +98,13 @@ void setupHotkeys() { setupHotkey(HK_LOAD_STATE, @"LoadState", [bindings objectForKey:@"LoadState"]); setupHotkey(HK_NEXT_STATE, @"NextState", [bindings objectForKey:@"NextState"]); setupHotkey(HK_PREV_STATE, @"PrevState", [bindings objectForKey:@"PrevState"]); + setupHotkey(HK_FRAME_LIMIT, @"FrameLimit", [bindings objectForKey:@"FrameLimit"]); currentState = 0; } void attachHotkeys() { + // Configurable hotkeys NSEvent* (^handler)(NSEvent*) = ^(NSEvent *event) { if(handleHotkey([NSString stringWithFormat:@"%d", [event keyCode]])) { return (NSEvent*)nil; // handled @@ -105,9 +115,19 @@ void attachHotkeys() { }; setupHotkeys(); monitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyUpMask handler:handler]; + + // GPU key presses + NSEvent* (^gpuKeypress)(NSEvent*) = ^(NSEvent *event) { + GPU_keypressed([event keyCode]); + return (NSEvent*)nil; + }; + gpuMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:(NSKeyUpMask | NSControlKeyMask) handler:gpuKeypress]; } void detachHotkeys() { - if(hotkeys)[hotkeys release]; + [hotkeys release]; [NSEvent removeMonitor:monitor]; + [NSEvent removeMonitor:gpuMonitor]; + monitor = nil; + gpuMonitor = nil; } diff --git a/macosx/plugins/DFXVideo/macsrc/drawgl.m b/macosx/plugins/DFXVideo/macsrc/drawgl.m index be679143..eb3850d4 100644 --- a/macosx/plugins/DFXVideo/macsrc/drawgl.m +++ b/macosx/plugins/DFXVideo/macsrc/drawgl.m @@ -175,8 +175,31 @@ void ShowTextGpuPic(void) void HandleKey(int keycode) { switch (keycode) { + case GPU_FRAME_LIMIT: + if(UseFrameLimit) { + UseFrameLimit = 0; + iFrameLimit = 1; + } + else { + UseFrameLimit = 1; + iFrameLimit = 2; + } + SetAutoFrameCap(); + break; case GPU_FAST_FORWARD: - UseFrameLimit ^= 1; + if(UseFrameLimit) { + UseFrameLimit = 0; + iFrameLimit = 1; + UseFrameSkip = 1; + iFastFwd = 0; + } + else { + UseFrameLimit = 1; + iFrameLimit = 2; + UseFrameSkip = 0; + iFastFwd = 0; + } + bSkipNextFrame = FALSE; break; case GPU_FULLSCREEN_KEY: [gameController setFullscreen:![gameController fullscreen]]; diff --git a/macosx/plugins/PeopsXgl/macsrc/drawgl.m b/macosx/plugins/PeopsXgl/macsrc/drawgl.m index 5a75efab..2ad7b985 100644 --- a/macosx/plugins/PeopsXgl/macsrc/drawgl.m +++ b/macosx/plugins/PeopsXgl/macsrc/drawgl.m @@ -233,8 +233,31 @@ void ShowTextGpuPic(void) void HandleKey(int keycode) { switch (keycode) { + case GPU_FRAME_LIMIT: + if(bUseFrameLimit) { + bUseFrameLimit = false; + iFrameLimit = 1; + } + else { + bUseFrameLimit = true; + iFrameLimit = 2; + } + SetAutoFrameCap(); + break; case GPU_FAST_FORWARD: - bUseFrameLimit = !bUseFrameLimit; + if(bUseFrameLimit) { + bUseFrameLimit = false; + iFrameLimit = 1; + bUseFrameSkip = true; + iFastFwd = 0; + } + else { + bUseFrameLimit = true; + iFrameLimit = 2; + bUseFrameSkip = false; + iFastFwd = 0; + } + bSkipNextFrame = FALSE; break; case GPU_FULLSCREEN_KEY: [gameController setFullscreen:![gameController fullscreen]]; -- cgit v1.2.3