From 22b4cc622262000c11e3b46bda69725bb96af434 Mon Sep 17 00:00:00 2001 From: TrueZhuangjia Date: Thu, 12 Sep 2024 23:43:32 +0800 Subject: [PATCH] - add option to reverse physical mouse wheel direction - add slider widget to adjust the size of tap exclusion area for on-screen buttons --- Limelight/Base.lproj/iPad.storyboard | 71 +++++++++--- Limelight/Base.lproj/iPhone.storyboard | 72 ++++++++---- Limelight/Database/DataManager.h | 4 +- Limelight/Database/DataManager.m | 6 +- Limelight/Database/TemporarySettings.h | 2 + Limelight/Database/TemporarySettings.m | 2 + Limelight/Input/OnScreenControls.m | 61 +++++----- Limelight/Input/StreamView.m | 3 +- .../Moonlight v1.10.xcdatamodel/contents | 2 + Limelight/Localization/Localizable.xcstrings | 23 ++++ .../ViewControllers/SettingsViewController.h | 4 + .../ViewControllers/SettingsViewController.m | 22 +++- Limelight/mul.lproj/iPad.xcstrings | 108 ++++++++++++++++++ Limelight/mul.lproj/iPhone.xcstrings | 102 +++++++++++++++++ 14 files changed, 409 insertions(+), 73 deletions(-) diff --git a/Limelight/Base.lproj/iPad.storyboard b/Limelight/Base.lproj/iPad.storyboard index f648055a..85c41021 100644 --- a/Limelight/Base.lproj/iPad.storyboard +++ b/Limelight/Base.lproj/iPad.storyboard @@ -236,14 +236,14 @@ - + @@ -327,21 +327,21 @@ ICAgICAgICAgICAgICA - + @@ -351,14 +351,14 @@ ICAgICAgICAgICAgICA - + @@ -370,14 +370,14 @@ ICAgICAgICAgICAgICA - + @@ -387,14 +387,14 @@ ICAgICAgICAgICAgICA - + @@ -404,14 +404,31 @@ ICAgICAgICAgICAgICA - + + + + + + + + + + + + @@ -421,14 +438,14 @@ ICAgICAgICAgICAgICA - + @@ -438,14 +455,14 @@ ICAgICAgICAgICAgICA - + @@ -455,7 +472,7 @@ ICAgICAgICAgICAgICA - + @@ -517,6 +534,19 @@ ICAgICAgICAgICAgICA + + + + + + @@ -543,10 +573,13 @@ ICAgICAgICAgICAgICA + + + @@ -907,7 +940,7 @@ ICAgICAgICAgICAgICA - + diff --git a/Limelight/Base.lproj/iPhone.storyboard b/Limelight/Base.lproj/iPhone.storyboard index 0e7e10f5..db950dff 100644 --- a/Limelight/Base.lproj/iPhone.storyboard +++ b/Limelight/Base.lproj/iPhone.storyboard @@ -83,7 +83,7 @@ - + - + @@ -560,10 +589,13 @@ ICAgICAgICAgICAgIA + + + @@ -580,7 +612,7 @@ ICAgICAgICAgICAgIA - + @@ -909,7 +941,7 @@ ICAgICAgICAgICAgIA - + diff --git a/Limelight/Database/DataManager.h b/Limelight/Database/DataManager.h index d1a5d226..c6e00979 100644 --- a/Limelight/Database/DataManager.h +++ b/Limelight/Database/DataManager.h @@ -26,7 +26,9 @@ pointerVelocityModeDivider:(CGFloat)pointerVelocityModeDivider touchPointerVelocityFactor:(CGFloat)touchPointerVelocityFactor mousePointerVelocityFactor:(CGFloat)mousePointerVelocityFactor - largerStickLR1:(BOOL)largerStickLR1 + oscTapExlusionAreaSize:(CGFloat)oscTapExlusionAreaSize + reverseMouseWheelDirection:(BOOL)reverseMouseWheelDirection + largerStickLR1:(BOOL)largerStickLR1 liftStreamViewForKeyboard:(BOOL)liftStreamViewForKeyboard showKeyboardToolbar:(BOOL)showKeyboardToolbar optimizeGames:(BOOL)optimizeGames diff --git a/Limelight/Database/DataManager.m b/Limelight/Database/DataManager.m index 09f78c5b..407194e9 100644 --- a/Limelight/Database/DataManager.m +++ b/Limelight/Database/DataManager.m @@ -65,7 +65,9 @@ pointerVelocityModeDivider:(CGFloat)pointerVelocityModeDivider touchPointerVelocityFactor:(CGFloat)touchPointerVelocityFactor mousePointerVelocityFactor:(CGFloat)mousePointerVelocityFactor - largerStickLR1:(BOOL)largerStickLR1 + oscTapExlusionAreaSize:(CGFloat)oscTapExlusionAreaSize + reverseMouseWheelDirection:(BOOL)reverseMouseWheelDirection + largerStickLR1:(BOOL)largerStickLR1 liftStreamViewForKeyboard:(BOOL)liftStreamViewForKeyboard showKeyboardToolbar:(BOOL)showKeyboardToolbar optimizeGames:(BOOL)optimizeGames @@ -96,6 +98,8 @@ settingsToSave.pointerVelocityModeDivider = [NSNumber numberWithFloat:pointerVelocityModeDivider]; settingsToSave.touchPointerVelocityFactor = [NSNumber numberWithFloat:touchPointerVelocityFactor]; settingsToSave.mousePointerVelocityFactor = [NSNumber numberWithFloat:mousePointerVelocityFactor]; + settingsToSave.oscTapExlusionAreaSize = [NSNumber numberWithFloat:oscTapExlusionAreaSize]; + settingsToSave.reverseMouseWheelDirection = reverseMouseWheelDirection; settingsToSave.largerStickLR1 = largerStickLR1; settingsToSave.liftStreamViewForKeyboard = liftStreamViewForKeyboard; settingsToSave.showKeyboardToolbar = showKeyboardToolbar; diff --git a/Limelight/Database/TemporarySettings.h b/Limelight/Database/TemporarySettings.h index c9fed339..7e58f722 100644 --- a/Limelight/Database/TemporarySettings.h +++ b/Limelight/Database/TemporarySettings.h @@ -28,6 +28,7 @@ @property (nonatomic, retain) NSNumber * oscLayoutToolFingers; @property (nonatomic, retain) NSNumber * slideToSettingsScreenEdge; @property (nonatomic, retain) NSNumber * slideToSettingsDistance; +@property (nonatomic, retain) NSNumber * oscTapExlusionAreaSize; @property (nonatomic, retain) NSNumber * touchPointerVelocityFactor; @property (nonatomic, retain) NSNumber * mousePointerVelocityFactor; @property (nonatomic, retain) NSNumber * pointerVelocityModeDivider; @@ -38,6 +39,7 @@ CODEC_PREF_HEVC, CODEC_PREF_AV1, } preferredCodec; +@property (nonatomic) BOOL reverseMouseWheelDirection; @property (nonatomic) BOOL largerStickLR1; @property (nonatomic) BOOL useFramePacing; @property (nonatomic) BOOL multiController; diff --git a/Limelight/Database/TemporarySettings.m b/Limelight/Database/TemporarySettings.m index b96825a1..75d66e23 100644 --- a/Limelight/Database/TemporarySettings.m +++ b/Limelight/Database/TemporarySettings.m @@ -82,6 +82,7 @@ self.multiController = settings.multiController; self.swapABXYButtons = settings.swapABXYButtons; self.onscreenControls = settings.onscreenControls; + self.reverseMouseWheelDirection = settings.reverseMouseWheelDirection; self.largerStickLR1 = settings.largerStickLR1; self.btMouseSupport = settings.btMouseSupport; // self.absoluteTouchMode = settings.absoluteTouchMode; @@ -93,6 +94,7 @@ self.slideToSettingsDistance = settings.slideToSettingsDistance; self.liftStreamViewForKeyboard = settings.liftStreamViewForKeyboard; self.showKeyboardToolbar = settings.showKeyboardToolbar; + self.oscTapExlusionAreaSize = settings.oscTapExlusionAreaSize; self.touchPointerVelocityFactor = settings.touchPointerVelocityFactor; self.mousePointerVelocityFactor = settings.mousePointerVelocityFactor; self.pointerVelocityModeDivider = settings.pointerVelocityModeDivider; diff --git a/Limelight/Input/OnScreenControls.m b/Limelight/Input/OnScreenControls.m index db370382..d5da66b0 100644 --- a/Limelight/Input/OnScreenControls.m +++ b/Limelight/Input/OnScreenControls.m @@ -58,6 +58,7 @@ static NSMutableSet* touchAddrsCapturedByOnScreenControls; NSMutableArray* _deadTouches; BOOL _swapABXY; BOOL _largerStickLR1; + CGFloat _oscTapExlusionAreaSizeFactor; OSCProfilesManager *profilesManager; NSMutableDictionary *_activeCustomOscButtonPositionDict; } @@ -152,7 +153,7 @@ static float L3_Y; DataManager* dataMan = [[DataManager alloc] init]; Settings* settings = [dataMan retrieveSettings]; _largerStickLR1 = settings.largerStickLR1; - + _oscTapExlusionAreaSizeFactor = settings.oscTapExlusionAreaSize.floatValue; _iPad = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad); _controlArea = CGRectMake(0, 0, _view.frame.size.width, _view.frame.size.height); @@ -1230,51 +1231,51 @@ static float L3_Y; CGFloat dzHalfWidth; CGFloat dzHalfHeight; - CGFloat dzSizeFactor = 3.0; // the factor to resize the DZ - - + // CGFloat _oscTapExlusionAreaSizeFactor; // the factor to resize the DZ + // NSLog(@"_AreaSize: %f", _oscTapExlusionAreaSizeFactor); + if ([key isEqualToString:@"l2Button"]) { - dzHalfWidth = _l2Button.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _l2Button.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _l2Button.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _l2Button.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"l1Button"]) { // set the same DZ size as other buttons - dzHalfWidth = _l2Button.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _l2Button.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _l2Button.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _l2Button.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"dPad"]) { dzHalfWidth = _leftButton.bounds.size.width * 2; // dPad specially handled dzHalfHeight = _upButton.bounds.size.height * 2; } else if ([key isEqualToString:@"selectButton"]) { - dzHalfWidth = _selectButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _selectButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _selectButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _selectButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"leftStickBackground"]) { - dzHalfWidth = _leftStickBackground.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _leftStickBackground.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _l2Button.bounds.size.width * 0.7 * _oscTapExlusionAreaSizeFactor; // stick backgound size is too big to be the base line + dzHalfHeight = _l2Button.bounds.size.height * 0.7 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"rightStickBackground"]) { - dzHalfWidth = _rightStickBackground.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _rightStickBackground.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _l2Button.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _l2Button.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"r2Button"]) { - dzHalfWidth = _r2Button.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _r2Button.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _r2Button.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _r2Button.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"r1Button"]) { // set the same DZ size as other buttons - dzHalfWidth = _l2Button.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _l2Button.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _l2Button.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _l2Button.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"aButton"]) { - dzHalfWidth = _aButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _aButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _aButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _aButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"bButton"]) { - dzHalfWidth = _bButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _bButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _bButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _bButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"xButton"]) { - dzHalfWidth = _xButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _xButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _xButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _xButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"yButton"]) { - dzHalfWidth = _yButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _yButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _yButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _yButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else if ([key isEqualToString:@"startButton"]) { - dzHalfWidth = _startButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _startButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _startButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _startButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } else { - dzHalfWidth = _aButton.bounds.size.width * 0.5 * dzSizeFactor; - dzHalfHeight = _aButton.bounds.size.height * 0.5 * dzSizeFactor; + dzHalfWidth = _aButton.bounds.size.width * 0.5 * _oscTapExlusionAreaSizeFactor; + dzHalfHeight = _aButton.bounds.size.height * 0.5 * _oscTapExlusionAreaSizeFactor; } if (xOffset < dzHalfWidth && yOffset < dzHalfHeight) { diff --git a/Limelight/Input/StreamView.m b/Limelight/Input/StreamView.m index 52c0ca35..5ac2bbf1 100644 --- a/Limelight/Input/StreamView.m +++ b/Limelight/Input/StreamView.m @@ -904,6 +904,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; { short translationDeltaY = ((currentScrollTranslation.y - lastScrollTranslation.y) / self.bounds.size.height) * translationMultiplier; + if(settings.reverseMouseWheelDirection) translationDeltaY = - translationDeltaY; if (translationDeltaY != 0) { LiSendHighResScrollEvent(translationDeltaY); lastScrollTranslation = currentScrollTranslation; @@ -939,7 +940,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; { short translationDeltaY = currentScrollTranslation.y - lastScrollTranslation.y; - translationDeltaY = -translationDeltaY; + if(settings.reverseMouseWheelDirection) translationDeltaY = - translationDeltaY; if (translationDeltaY != 0) { LiSendScrollEvent(translationDeltaY > 0 ? 1 : -1); } diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents index 7712b0b8..1203873a 100644 --- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents +++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents @@ -37,9 +37,11 @@ + + diff --git a/Limelight/Localization/Localizable.xcstrings b/Limelight/Localization/Localizable.xcstrings index f1559a14..4e2b453e 100644 --- a/Limelight/Localization/Localizable.xcstrings +++ b/Limelight/Localization/Localizable.xcstrings @@ -2257,6 +2257,29 @@ } } }, + "Tap Exclusion Area Size for Custom OSC: %d%%" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义屏显手柄触控无响应区面积: %d%%" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义屏显手柄触控无响应区面积: %d%%" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义屏显手柄触控无响应区面积: %d%%" + } + } + } + }, "Test Network" : { "extractionState" : "manual", "localizations" : { diff --git a/Limelight/ViewControllers/SettingsViewController.h b/Limelight/ViewControllers/SettingsViewController.h index dce7860c..d7c22125 100644 --- a/Limelight/ViewControllers/SettingsViewController.h +++ b/Limelight/ViewControllers/SettingsViewController.h @@ -31,6 +31,7 @@ @property (strong, nonatomic) IBOutlet UISegmentedControl *hdrSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *framePacingSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *btMouseSelector; +@property (strong, nonatomic) IBOutlet UISegmentedControl *reverseMouseWheelDirectionSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *statsOverlaySelector; @property (strong, nonatomic) IBOutlet UIScrollView *scrollView; @property (strong, nonatomic) IBOutlet UILabel *keyboardToggleFingerNumLabel; @@ -38,6 +39,9 @@ @property (strong, nonatomic) IBOutlet UISegmentedControl *liftStreamViewForKeyboardSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *showKeyboardToolbarSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *slideToSettingsScreenEdgeSelector; + +@property (strong, nonatomic) IBOutlet UILabel *oscTapExlusionAreaSizeLabel; +@property (strong, nonatomic) IBOutlet UISlider *oscTapExlusionAreaSizeSlider; @property (strong, nonatomic) IBOutlet UILabel *slideToSettingsScreenEdgeUILabel; @property (strong, nonatomic) IBOutlet UISegmentedControl *cmdToolScreenEdgeSelector; @property (strong, nonatomic) IBOutlet UILabel *slideToSettingsDistanceUILabel; diff --git a/Limelight/ViewControllers/SettingsViewController.m b/Limelight/ViewControllers/SettingsViewController.m index 13aabfc3..9529ae88 100644 --- a/Limelight/ViewControllers/SettingsViewController.m +++ b/Limelight/ViewControllers/SettingsViewController.m @@ -451,6 +451,9 @@ BOOL isCustomResolution(CGSize res) { // showkeyboard toolbar setting [self.showKeyboardToolbarSelector setSelectedSegmentIndex:currentSettings.showKeyboardToolbar ? 1 : 0];// Load old setting + // reverse mouse wheel direction setting + [self.reverseMouseWheelDirectionSelector setSelectedSegmentIndex:currentSettings.reverseMouseWheelDirection ? 1 : 0];// Load old setting + // slide to menu settings [self.slideToSettingsScreenEdgeSelector setSelectedSegmentIndex:[self getSelectorIndexFromScreenEdge:(uint32_t)currentSettings.slideToSettingsScreenEdge.integerValue]]; // Load old setting @@ -496,6 +499,12 @@ BOOL isCustomResolution(CGSize res) { [self onscreenControlChanged]; [self.largerStickLR1Selector setSelectedSegmentIndex:currentSettings.largerStickLR1 ? 1 : 0]; // load old setting of largerStickLR1 + // tap exclusion area size for custom OSC, must be loaded before touchMode & osc selector. + [self.oscTapExlusionAreaSizeSlider setValue:currentSettings.oscTapExlusionAreaSize.floatValue * 100 animated:YES]; // Load old setting. + [self.oscTapExlusionAreaSizeSlider addTarget:self action:@selector(oscTapExlusionAreaSizeSliderMoved) forControlEvents:(UIControlEventValueChanged)]; // Update label display when slider is being moved. + [self oscTapExlusionAreaSizeSliderMoved]; + + // [self.touchModeSelector setSelectedSegmentIndex:currentSettings.absoluteTouchMode ? 1 : 0]; // this part will enable/disable oscSelector & the largerStickLR1 selector [self.touchModeSelector setSelectedSegmentIndex:currentSettings.touchMode.intValue]; //Load old touchMode setting @@ -603,6 +612,7 @@ BOOL isCustomResolution(CGSize res) { bool customOscEnabled = [self isOnScreenControllerOrButtonEnabled] && [self.onscreenControlSelector selectedSegmentIndex] == OnScreenControlsLevelCustom; // [self widget:self.keyboardToggleFingerNumSlider setEnabled:!customOscEnabled]; + [self widget:self.oscTapExlusionAreaSizeSlider setEnabled:customOscEnabled]; if(customOscEnabled && !justEnteredSettingsViewDoNotOpenOscLayoutTool) { // [self.keyboardToggleFingerNumSlider setValue:3.0]; // [self keyboardToggleFingerNumSliderMoved]; @@ -692,7 +702,8 @@ BOOL isCustomResolution(CGSize res) { [self widget:self.pointerVelocityModeDividerSlider setEnabled:isNativeTouch]; // pointer velocity scaling works only in native touch mode. [self widget:self.touchPointerVelocityFactorSlider setEnabled:isNativeTouch]; // pointer velocity scaling works only in native touch mode. [self widget:self.mousePointerVelocityFactorSlider setEnabled:[self.touchModeSelector selectedSegmentIndex] == RELATIVE_TOUCH]; // mouse velocity scaling works only in relative touch mode. - + [self widget:self.oscTapExlusionAreaSizeSlider setEnabled:customOscEnabled]; + // number of touches required to toggle keyboard will be fixed to 3 when OSC is enabled. // [self widget:self.keyboardToggleFingerNumSlider setEnabled: !customOscEnabled]; // cancel OSC limitation for regular native touch, // when CustomOSC is enabled: @@ -896,6 +907,10 @@ BOOL isCustomResolution(CGSize res) { [self.resolutionDisplayView addSubview:label2]; } +- (void) oscTapExlusionAreaSizeSliderMoved{ + [self.oscTapExlusionAreaSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Tap Exclusion Area Size for Custom OSC: %d%%", (uint16_t)self.oscTapExlusionAreaSizeSlider.value]]; +} + - (void) keyboardToggleFingerNumSliderMoved{ // bool oscEnabled = [self isOnScreenControllerOrButtonEnabled]; bool customOscEnabled = [self isOnScreenControllerOrButtonEnabled] && [self.onscreenControlSelector selectedSegmentIndex] == OnScreenControlsLevelCustom; @@ -997,6 +1012,9 @@ BOOL isCustomResolution(CGSize res) { CGFloat pointerVelocityModeDivider = (CGFloat)(uint8_t)self.pointerVelocityModeDividerSlider.value/100; CGFloat touchPointerVelocityFactor =(CGFloat)(uint16_t)[self map_velocFactorDisplay_fromSliderValue:self.touchPointerVelocityFactorSlider.value]/100; CGFloat mousePointerVelocityFactor =(CGFloat)(uint16_t)self.mousePointerVelocityFactorSlider.value/100; + CGFloat oscTapExlusionAreaSize =(CGFloat)(uint16_t)self.oscTapExlusionAreaSizeSlider.value/100; + + BOOL reverseMouseWheelDirection = [self.reverseMouseWheelDirectionSelector selectedSegmentIndex] == 1; BOOL largerStickLR1 = [self.largerStickLR1Selector selectedSegmentIndex] == 1; BOOL liftStreamViewForKeyboard = [self.liftStreamViewForKeyboardSelector selectedSegmentIndex] == 1; BOOL showKeyboardToolbar = [self.showKeyboardToolbarSelector selectedSegmentIndex] == 1; @@ -1025,6 +1043,8 @@ BOOL isCustomResolution(CGSize res) { pointerVelocityModeDivider:pointerVelocityModeDivider touchPointerVelocityFactor:touchPointerVelocityFactor mousePointerVelocityFactor:mousePointerVelocityFactor + oscTapExlusionAreaSize:oscTapExlusionAreaSize + reverseMouseWheelDirection:reverseMouseWheelDirection largerStickLR1:largerStickLR1 liftStreamViewForKeyboard:liftStreamViewForKeyboard showKeyboardToolbar:showKeyboardToolbar diff --git a/Limelight/mul.lproj/iPad.xcstrings b/Limelight/mul.lproj/iPad.xcstrings index 1032f0e6..cd862ccb 100644 --- a/Limelight/mul.lproj/iPad.xcstrings +++ b/Limelight/mul.lproj/iPad.xcstrings @@ -31,6 +31,66 @@ } } }, + "2Jx-qH-E3Y.segmentTitles[0]" : { + "comment" : "Class = \"UISegmentedControl\"; 2Jx-qH-E3Y.segmentTitles[0] = \"No\"; ObjectID = \"2Jx-qH-E3Y\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "No" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + } + } + }, + "2Jx-qH-E3Y.segmentTitles[1]" : { + "comment" : "Class = \"UISegmentedControl\"; 2Jx-qH-E3Y.segmentTitles[1] = \"Yes\"; ObjectID = \"2Jx-qH-E3Y\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Yes" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + } + } + }, "6w5-Md-NpV.text" : { "comment" : "Class = \"UILabel\"; text = \"Preferred Codec \"; ObjectID = \"6w5-Md-NpV\";", "extractionState" : "extracted_with_value", @@ -859,6 +919,48 @@ } } }, + "FJv-HJ-UYJ.text" : { + "comment" : "Class = \"UILabel\"; text = \"Tap Exclusion Area Size for Custom OSC: 200% \"; ObjectID = \"FJv-HJ-UYJ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Tap Exclusion Area Size for Custom OSC: 200% " + } + } + } + }, + "FwK-oG-vuz.text" : { + "comment" : "Class = \"UILabel\"; text = \"Reverse Wheel Direction for Physical Mouse \"; ObjectID = \"FwK-oG-vuz\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Reverse Wheel Direction for Physical Mouse " + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + } + } + }, "fXq-oD-MrL.text" : { "comment" : "Class = \"UILabel\"; text = \"Play Audio on PC \"; ObjectID = \"fXq-oD-MrL\";", "extractionState" : "extracted_with_value", @@ -2080,6 +2182,12 @@ "state" : "translated", "value" : "返回串流" } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } } } }, diff --git a/Limelight/mul.lproj/iPhone.xcstrings b/Limelight/mul.lproj/iPhone.xcstrings index c435007d..ec7663ec 100644 --- a/Limelight/mul.lproj/iPhone.xcstrings +++ b/Limelight/mul.lproj/iPhone.xcstrings @@ -859,6 +859,18 @@ } } }, + "Dfl-gL-00M.text" : { + "comment" : "Class = \"UILabel\"; text = \"Tap Exclusion Area Size for Custom OSC: 200% \"; ObjectID = \"Dfl-gL-00M\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Tap Exclusion Area Size for Custom OSC: 200% " + } + } + } + }, "dLF-qJ-2nY.segmentTitles[0]" : { "comment" : "Class = \"UISegmentedControl\"; dLF-qJ-2nY.segmentTitles[0] = \"30 FPS\"; ObjectID = \"dLF-qJ-2nY\";", "extractionState" : "extracted_with_value", @@ -1429,6 +1441,66 @@ } } }, + "p2k-7u-PDc.segmentTitles[0]" : { + "comment" : "Class = \"UISegmentedControl\"; p2k-7u-PDc.segmentTitles[0] = \"No\"; ObjectID = \"p2k-7u-PDc\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "No" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + } + } + }, + "p2k-7u-PDc.segmentTitles[1]" : { + "comment" : "Class = \"UISegmentedControl\"; p2k-7u-PDc.segmentTitles[1] = \"Yes\"; ObjectID = \"p2k-7u-PDc\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Yes" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + } + } + }, "P8R-nu-8Ln.segmentTitles[0]" : { "comment" : "Class = \"UISegmentedControl\"; P8R-nu-8Ln.segmentTitles[0] = \"No\"; ObjectID = \"P8R-nu-8Ln\";", "extractionState" : "extracted_with_value", @@ -1867,6 +1939,36 @@ } } }, + "svh-LO-bTr.text" : { + "comment" : "Class = \"UILabel\"; text = \"Reverse Wheel Direction for Physical Mouse \"; ObjectID = \"svh-LO-bTr\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Reverse Wheel Direction for Physical Mouse " + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "反转物理鼠标滚轮方向" + } + } + } + }, "T6M-nz-TW0.text" : { "comment" : "Class = \"UILabel\"; text = \"Play Audio on PC \"; ObjectID = \"T6M-nz-TW0\";", "extractionState" : "extracted_with_value",