diff --git a/macosx/Snes9x/AppDelegate.h b/macosx/Snes9x/AppDelegate.h index ec6ff939..6b6ef36f 100644 --- a/macosx/Snes9x/AppDelegate.h +++ b/macosx/Snes9x/AppDelegate.h @@ -41,6 +41,7 @@ - (BOOL)getValuesFromString:(NSString *)str cookie:(uint32 *)cookie value:(int32 *)value; - (void)setVideoMode:(int)videoMode; +- (void)setMacFrameSkip:(int)_macFrameSkip; - (void)setShowFPS:(BOOL)showFPS; @end diff --git a/macosx/Snes9x/AppDelegate.m b/macosx/Snes9x/AppDelegate.m index e54060f7..7cf43904 100644 --- a/macosx/Snes9x/AppDelegate.m +++ b/macosx/Snes9x/AppDelegate.m @@ -119,7 +119,8 @@ static NSWindowFrameAutosaveName const kMainWindowIdentifier = @"s9xMainWindow"; @(kKeyTC).stringValue : @(kVK_ANSI_Comma) }, kShowFPSPref: @(NO), - kVideoModePref:@(VIDEOMODE_BLOCKY) + kVideoModePref:@(VIDEOMODE_BLOCKY), + kMacFrameSkipPref:@(macFrameSkip) }; [defaults registerDefaults:defaultSettings]; @@ -513,6 +514,13 @@ static NSWindowFrameAutosaveName const kMainWindowIdentifier = @"s9xMainWindow"; [NSUserDefaults.standardUserDefaults synchronize]; } +- (void)setMacFrameSkip:(int)_macFrameSkip +{ + [self.s9xEngine setMacFrameSkip:_macFrameSkip]; + [NSUserDefaults.standardUserDefaults setObject:@(_macFrameSkip) forKey:kMacFrameSkipPref]; + [NSUserDefaults.standardUserDefaults synchronize]; +} + - (void)setShowFPS:(BOOL)showFPS { [self.s9xEngine setShowFPS:showFPS]; diff --git a/macosx/Snes9x/S9xPrefsConstants.h b/macosx/Snes9x/S9xPrefsConstants.h index ad6351d0..adb1bd6e 100644 --- a/macosx/Snes9x/S9xPrefsConstants.h +++ b/macosx/Snes9x/S9xPrefsConstants.h @@ -25,3 +25,4 @@ extern NSString * const kJoypadInputPrefs; extern NSString * const kJoypadPlayerPrefs; extern NSString * const kShowFPSPref; extern NSString * const kVideoModePref; +extern NSString * const kMacFrameSkipPref; diff --git a/macosx/Snes9x/S9xPrefsConstants.m b/macosx/Snes9x/S9xPrefsConstants.m index c4228317..5d6beaab 100644 --- a/macosx/Snes9x/S9xPrefsConstants.m +++ b/macosx/Snes9x/S9xPrefsConstants.m @@ -25,3 +25,4 @@ NSString * const kJoypadInputPrefs = @"JoypadInputs"; NSString * const kJoypadPlayerPrefs = @"JoypadPlayers"; NSString * const kShowFPSPref = @"ShowFPS"; NSString * const kVideoModePref = @"VideoMode"; +NSString * const kMacFrameSkipPref = @"MacFrameSkip"; diff --git a/macosx/Snes9x/S9xPrefsViewController.m b/macosx/Snes9x/S9xPrefsViewController.m index 3f6bb424..7d642004 100644 --- a/macosx/Snes9x/S9xPrefsViewController.m +++ b/macosx/Snes9x/S9xPrefsViewController.m @@ -30,6 +30,7 @@ @property (nonatomic, weak) IBOutlet NSButton *showFPSCheckbox; @property (nonatomic, weak) IBOutlet NSPopUpButton *devicePopUp; @property (nonatomic, weak) IBOutlet NSPopUpButton *playerPopUp; +@property (nonatomic, weak) IBOutlet NSTextField *macFrameSkipTextField; @end @implementation S9xPrefsViewController @@ -103,6 +104,11 @@ { NSUInteger index = MIN([NSUserDefaults.standardUserDefaults integerForKey:kVideoModePref], 1); [self.videoModePopup selectItemAtIndex:index]; + + // set maxFrameSkipTextField to user default + NSInteger macFrameSkipDefault = [NSUserDefaults.standardUserDefaults integerForKey:kMacFrameSkipPref]; + [self.macFrameSkipTextField setIntegerValue:macFrameSkipDefault]; + self.showFPSCheckbox.state = [NSUserDefaults.standardUserDefaults boolForKey:kShowFPSPref]; if (self.devicePopUp.selectedItem.tag < 0) @@ -271,6 +277,13 @@ [appDelegate setVideoMode:(int)sender.selectedTag]; } +- (IBAction)setMacFrameSkip:(NSTextField *)sender +{ + AppDelegate *appDelegate = (AppDelegate *)NSApp.delegate; + [appDelegate setMacFrameSkip:(int)sender.integerValue]; + NSLog(@"setMacFrameSkip %ld", sender.integerValue); +} + - (BOOL)handleInput:(S9xJoypadInput *)input fromJoypad:(S9xJoypad *)joypad { id firstResponder = self.view.window.firstResponder; @@ -293,5 +306,18 @@ return NO; } - +- (IBAction) bumpMacFrameSkip:(id)sender +{ + int bumpValue = [sender intValue]; // 1 or -1 + [self.macFrameSkipTextField setIntegerValue:[self.macFrameSkipTextField integerValue] + bumpValue]; + + // constrain value + if ([self.macFrameSkipTextField integerValue] < -1) + [self.macFrameSkipTextField setIntegerValue: -1]; + if ([self.macFrameSkipTextField integerValue] > 200) + [self.macFrameSkipTextField setIntegerValue: 200]; + + [sender setIntValue:0]; // reset stepper value + [self setMacFrameSkip:self.macFrameSkipTextField]; // execute setter +} @end diff --git a/macosx/Snes9x/S9xPrefsViewController.xib b/macosx/Snes9x/S9xPrefsViewController.xib index 9cbe4160..2f7fe060 100644 --- a/macosx/Snes9x/S9xPrefsViewController.xib +++ b/macosx/Snes9x/S9xPrefsViewController.xib @@ -1,14 +1,15 @@ - + - + + @@ -18,11 +19,11 @@ - + - + @@ -30,10 +31,10 @@ - + - + @@ -49,7 +50,7 @@ - + @@ -212,7 +213,7 @@