fix: profile saving issue caused by launching osw tool via tap gesture

This commit is contained in:
TrueZhuanjia committed 2025-07-25 19:56:46 +08:00
1 parent 02c6a12a82
commit ab7ccc7732
7 files changed
+41 -31

No files matched your search

+2 -2
View File
@@ -417,7 +417,7 @@ import UIKit
print("No match found for input: \(input)") print("No match found for input: \(input)")
return nil return nil
} }
print("Regex matched for input: \(input)") // print("Regex matched for input: \(input)")
let matchedString = (input as NSString).substring(with: match.range(at: 0)) let matchedString = (input as NSString).substring(with: match.range(at: 0))
let keyStrings = matchedString.split(separator: "+").map { String($0) } let keyStrings = matchedString.split(separator: "+").map { String($0) }
@@ -475,7 +475,7 @@ import UIKit
print("No match found for input: \(input)") print("No match found for input: \(input)")
return nil return nil
} }
print("Regex matched for input: \(input)") // print("Regex matched for input: \(input)")
let matchedString = (input as NSString).substring(with: match.range(at: 0)) let matchedString = (input as NSString).substring(with: match.range(at: 0))
let cmdStrings = matchedString.split(separator: "-").map { String($0) } let cmdStrings = matchedString.split(separator: "-").map { String($0) }
+2 -2
View File
@@ -343,7 +343,7 @@ static float L3_Y;
if(position.x < 1.0 && position.y < 1.0) { if(position.x < 1.0 && position.y < 1.0) {
position.x = position.x * _view.bounds.size.width; position.x = position.x * _view.bounds.size.width;
position.y = position.y * _view.bounds.size.height; position.y = position.y * _view.bounds.size.height;
NSLog(@"denormalizing position: %f, %f", position.x, position.y); // NSLog(@"denormalizing position: %f, %f", position.x, position.y);
} }
return position; return position;
} }
@@ -1930,7 +1930,7 @@ static float L3_Y;
if(alpha < 0.23) targetAlpha = 0.23; if(alpha < 0.23) targetAlpha = 0.23;
if(alpha == 0.0 || alpha == 1.0) targetAlpha = 5.0f/6.0f; // invalid alpha value if(alpha == 0.0 || alpha == 1.0) targetAlpha = 5.0f/6.0f; // invalid alpha value
NSLog(@"alphas: %f",targetAlpha); // NSLog(@"alphas: %f",targetAlpha);
if (layer == self._aButton || if (layer == self._aButton ||
layer == self._bButton || layer == self._bButton ||
+1 -1
View File
@@ -50,7 +50,7 @@
andConfig:(StreamConfiguration*)streamConfig; andConfig:(StreamConfiguration*)streamConfig;
- (void) reloadOnScreenControlsWith:(ControllerSupport*)controllerSupport - (void) reloadOnScreenControlsWith:(ControllerSupport*)controllerSupport
andConfig:(StreamConfiguration*)streamConfig; andConfig:(StreamConfiguration*)streamConfig;
- (void) clearOnScreenKeyboardButtons; - (void) clearOnScreenWidgets;
- (void) reloadOnScreenWidgetViews; - (void) reloadOnScreenWidgetViews;
- (CGSize) getVideoAreaSize; - (CGSize) getVideoAreaSize;
+2 -2
View File
@@ -399,7 +399,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
} }
- (void) clearOnScreenKeyboardButtons{ - (void) clearOnScreenWidgets{
for (UIView *subview in self->streamFrameTopLayerView.subviews) { for (UIView *subview in self->streamFrameTopLayerView.subviews) {
// 检查子视图是否是特定类型的实例 // 检查子视图是否是特定类型的实例
if ([subview isKindOfClass:[OnScreenWidgetView class]]) { if ([subview isKindOfClass:[OnScreenWidgetView class]]) {
@@ -422,7 +422,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
// NSLog(@"reload on screen keyboard buttons here"); // NSLog(@"reload on screen keyboard buttons here");
// remove all keyboard widget views first // remove all keyboard widget views first
[self clearOnScreenKeyboardButtons]; [self clearOnScreenWidgets];
// bool customOscEnabled = [self isOscEnabled] && settings.onscreenControls.intValue == OnScreenControlsLevelCustom; // bool customOscEnabled = [self isOscEnabled] && settings.onscreenControls.intValue == OnScreenControlsLevelCustom;
@@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)presentProfilesTableView; - (void)presentProfilesTableView;
@property LayoutOnScreenControls *layoutOSC; // object that contains a view which contains the on screen controller buttons that allows the user to drag and positions each button on the screen using touch @property LayoutOnScreenControls *layoutOSC; // object that contains a view which contains the on screen controller buttons that allows the user to drag and positions each button on the screen using touch
@property (nonatomic) NSMutableSet* OnScreenWidgetViews; @property (nonatomic) NSMutableSet* onScreenWidgetViews;
@property int OSCSegmentSelected; @property int OSCSegmentSelected;
@property (nonatomic, assign) bool quickSwitchEnabled; @property (nonatomic, assign) bool quickSwitchEnabled;
@@ -62,7 +62,7 @@
- (void) viewWillDisappear:(BOOL)animated{ - (void) viewWillDisappear:(BOOL)animated{
OnScreenWidgetView.editMode = false; OnScreenWidgetView.editMode = false;
for (OnScreenWidgetView* widgetView in self.OnScreenWidgetViews){ for (OnScreenWidgetView* widgetView in self.onScreenWidgetViews){
[widgetView.stickBallLayer removeFromSuperlayer]; [widgetView.stickBallLayer removeFromSuperlayer];
[widgetView.crossMarkLayer removeFromSuperlayer]; [widgetView.crossMarkLayer removeFromSuperlayer];
} }
@@ -89,7 +89,7 @@
} }
} }
[self.OnScreenWidgetViews removeAllObjects]; [self.onScreenWidgetViews removeAllObjects];
NSLog(@"reload os Key here"); NSLog(@"reload os Key here");
@@ -120,7 +120,7 @@
[widgetView resizeWidgetView]; // resize must be called after relocation [widgetView resizeWidgetView]; // resize must be called after relocation
[widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha]; [widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha];
[widgetView adjustBorderWithWidth:buttonState.borderWidth]; [widgetView adjustBorderWithWidth:buttonState.borderWidth];
[self.OnScreenWidgetViews addObject:widgetView]; [self.onScreenWidgetViews addObject:widgetView];
} }
} }
} }
@@ -128,8 +128,8 @@
- (void) viewDidLoad { - (void) viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
profilesManager = [OSCProfilesManager sharedManager:self.view.bounds]; profilesManager = [OSCProfilesManager sharedManager:self.view.bounds];
self.OnScreenWidgetViews = [[NSMutableSet alloc] init]; // will be revised to read persisted data , somewhere else self.onScreenWidgetViews = [[NSMutableSet alloc] init]; // will be revised to read persisted data , somewhere else
[OSCProfilesManager setOnScreenWidgetViewsSet:self.OnScreenWidgetViews]; // pass the keyboard button dict to profiles manager [OSCProfilesManager setOnScreenWidgetViewsSet:self.onScreenWidgetViews]; // pass the keyboard button dict to profiles manager
//isToolbarHidden = NO; // keeps track if the toolbar is hidden up above the screen so that we know whether to hide or show it when the user taps the toolbar's hide/show button //isToolbarHidden = NO; // keeps track if the toolbar is hidden up above the screen so that we know whether to hide or show it when the user taps the toolbar's hide/show button
_quickSwitchEnabled = false; _quickSwitchEnabled = false;
@@ -253,7 +253,7 @@
#pragma mark - Class Helper Functions #pragma mark - Class Helper Functions
- (void)handleReturnToForeground { - (void)handleReturnToForeground {
[OSCProfilesManager setOnScreenWidgetViewsSet:self.OnScreenWidgetViews]; // pass the keyboard button dict to profiles manager [OSCProfilesManager setOnScreenWidgetViewsSet:self.onScreenWidgetViews]; // pass the keyboard button dict to profiles manager
} }
/* fades the 'Undo Button' in or out depending on whether the user has any OSC layout changes to undo */ /* fades the 'Undo Button' in or out depending on whether the user has any OSC layout changes to undo */
@@ -588,10 +588,10 @@
[newWidget resizeWidgetView]; // resize must be called after relocation [newWidget resizeWidgetView]; // resize must be called after relocation
[newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha]; [newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha];
[newWidget adjustBorderWithWidth:widget.borderWidth]; [newWidget adjustBorderWithWidth:widget.borderWidth];
[self.OnScreenWidgetViews addObject:newWidget]; [self.onScreenWidgetViews addObject:newWidget];
self->selectedWidgetView = newWidget; self->selectedWidgetView = newWidget;
if(!createNew){ if(!createNew){
[self.OnScreenWidgetViews removeObject:widget]; [self.onScreenWidgetViews removeObject:widget];
[widget removeFromSuperview]; [widget removeFromSuperview];
} }
} }
@@ -604,7 +604,7 @@
widgetView.guidelineDelegate = (id<OnScreenWidgetGuidelineUpdateDelegate>)self; widgetView.guidelineDelegate = (id<OnScreenWidgetGuidelineUpdateDelegate>)self;
widgetView.translatesAutoresizingMaskIntoConstraints = NO; // weird but this is mandatory, or you will find no key views added to the right place widgetView.translatesAutoresizingMaskIntoConstraints = NO; // weird but this is mandatory, or you will find no key views added to the right place
widgetView.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue]; widgetView.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue];
[self.OnScreenWidgetViews addObject:widgetView]; [self.onScreenWidgetViews addObject:widgetView];
// Add the widgetView to the view controller's view // Add the widgetView to the view controller's view
[self.view insertSubview:widgetView belowSubview:self.widgetPanelStack]; [self.view insertSubview:widgetView belowSubview:self.widgetPanelStack];
[widgetView setLocationWithPosition:CGPointMake(90, 130)]; [widgetView setLocationWithPosition:CGPointMake(90, 130)];
@@ -1253,7 +1253,7 @@
if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerIsOverlappingWithTrashcanButton:selectedWidgetView.layer]){ if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerIsOverlappingWithTrashcanButton:selectedWidgetView.layer]){
[self->selectedWidgetView removeFromSuperview]; [self->selectedWidgetView removeFromSuperview];
[self.OnScreenWidgetViews removeObject:self->selectedWidgetView]; [self.onScreenWidgetViews removeObject:self->selectedWidgetView];
[self clearStickIndicator]; [self clearStickIndicator];
[selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer]; [selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer];
} }
@@ -218,15 +218,8 @@
} }
- (void)configOscLayoutTool{ - (void)configOscLayoutTool{
if([self isOscLayoutToolEnabled]){ if([self isOscLayoutToolEnabled]){
_oscLayoutTapRecoginizer = [[CustomTapGestureRecognizer alloc] initWithTarget:self action:@selector(openWidgetLayoutTool)];
_oscLayoutTapRecoginizer.numberOfTouchesRequired = _settings.oscLayoutToolFingers.intValue; //tap a predefined number of fingers to open osc layout tool
_oscLayoutTapRecoginizer.tapDownTimeThreshold = 0.2;
_oscLayoutTapRecoginizer.delaysTouchesBegan = NO;
_oscLayoutTapRecoginizer.delaysTouchesEnded = NO;
if(_settings.touchMode.intValue == AbsoluteTouch) _oscLayoutTapRecoginizer.immediateTriggering = true; // make immediate triggering on for absolute touch mode
[self.view addGestureRecognizer:_oscLayoutTapRecoginizer]; //
/* sets a reference to the correct 'LayoutOnScreenControlsViewController' depending on whether the user is on an iPhone or iPad */ /* sets a reference to the correct 'LayoutOnScreenControlsViewController' depending on whether the user is on an iPhone or iPad */
// _layoutOnScreenControlsVC = [[LayoutOnScreenControlsViewController alloc] init]; // _layoutOnScreenControlsVC = [[LayoutOnScreenControlsViewController alloc] init];
BOOL isIPhone = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone); BOOL isIPhone = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone);
@@ -242,20 +235,22 @@
_layoutOnScreenControlsVC.view.backgroundColor = UIColor.clearColor; _layoutOnScreenControlsVC.view.backgroundColor = UIColor.clearColor;
_layoutOnScreenControlsVC.modalPresentationStyle = UIModalPresentationOverCurrentContext; _layoutOnScreenControlsVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
} }
//NSLog(@"in osc frameview gestures: %d", (uint32_t)[self.view.gestureRecognizers count]);
//NSLog(@"in osc streamview gestures: %d", (uint32_t)[_streamView.gestureRecognizers count]);
} }
- (void)presentToolboxViewController{ - (void)presentToolboxViewController{
[self configOscLayoutTool];
ToolboxViewController* oldToolboxVC = toolBoxViewController; ToolboxViewController* oldToolboxVC = toolBoxViewController;
toolBoxViewController = [[ToolboxViewController alloc] init]; toolBoxViewController = [[ToolboxViewController alloc] init];
toolBoxViewController.specialEntryDelegate = self; toolBoxViewController.specialEntryDelegate = self;
toolBoxViewController.specialEntries = oldToolboxVC.specialEntries; toolBoxViewController.specialEntries = oldToolboxVC.specialEntries;
[self configOscLayoutTool];
[self presentViewController:toolBoxViewController animated:YES completion:^{ [self presentViewController:toolBoxViewController animated:YES completion:^{
//[self->toolBoxViewController setupConstraints]; //[self->toolBoxViewController setupConstraints];
}]; }];
} }
- (void)configSwipeGestures{ - (void)configGestures{
_slideToSettingsRecognizer = [[CustomEdgeSlideGestureRecognizer alloc] initWithTarget:self action:@selector(edgeSwiped)]; _slideToSettingsRecognizer = [[CustomEdgeSlideGestureRecognizer alloc] initWithTarget:self action:@selector(edgeSwiped)];
_slideToSettingsRecognizer.edges = _settings.slideToSettingsScreenEdge.intValue; _slideToSettingsRecognizer.edges = _settings.slideToSettingsScreenEdge.intValue;
_slideToSettingsRecognizer.normalizedThresholdDistance = _settings.slideToSettingsDistance.floatValue; _slideToSettingsRecognizer.normalizedThresholdDistance = _settings.slideToSettingsDistance.floatValue;
@@ -271,6 +266,17 @@
_slideToCmdToolRecognizer.delaysTouchesBegan = NO; _slideToCmdToolRecognizer.delaysTouchesBegan = NO;
_slideToCmdToolRecognizer.delaysTouchesEnded = NO; _slideToCmdToolRecognizer.delaysTouchesEnded = NO;
[self.view addGestureRecognizer:_slideToCmdToolRecognizer]; [self.view addGestureRecognizer:_slideToCmdToolRecognizer];
if([self isOscLayoutToolEnabled]){
_oscLayoutTapRecoginizer = [[CustomTapGestureRecognizer alloc] initWithTarget:self action:@selector(handleWidgetLayoutGesture)];
_oscLayoutTapRecoginizer.numberOfTouchesRequired = _settings.oscLayoutToolFingers.intValue; //tap a predefined number of fingers to open osc layout tool
_oscLayoutTapRecoginizer.tapDownTimeThreshold = 0.2;
_oscLayoutTapRecoginizer.delaysTouchesBegan = NO;
_oscLayoutTapRecoginizer.delaysTouchesEnded = NO;
if(_settings.touchMode.intValue == AbsoluteTouch) _oscLayoutTapRecoginizer.immediateTriggering = true; // make immediate triggering on for absolute touch mode
[self.view addGestureRecognizer:_oscLayoutTapRecoginizer]; //
}
} }
- (void)configZoomGestureAndAddStreamView{ - (void)configZoomGestureAndAddStreamView{
@@ -310,7 +316,7 @@
overlayLevel = _settings.statsOverlayLevel.intValue; overlayLevel = _settings.statsOverlayLevel.intValue;
[self configOscLayoutTool]; [self configOscLayoutTool];
[self updateToolboxSpecialEntries]; [self updateToolboxSpecialEntries];
[self configSwipeGestures]; [self configGestures];
[self configZoomGestureAndAddStreamView]; [self configZoomGestureAndAddStreamView];
[self->_streamView disableOnScreenControls]; //don't know why but this must be called outside the streamview class, just put it here. execute in streamview class cause hang [self->_streamView disableOnScreenControls]; //don't know why but this must be called outside the streamview class, just put it here. execute in streamview class cause hang
[self.mainFrameViewcontroller reloadStreamConfig]; // reload streamconfig [self.mainFrameViewcontroller reloadStreamConfig]; // reload streamconfig
@@ -628,10 +634,14 @@
[_streamView keyboardWillHide]; [_streamView keyboardWillHide];
} }
- (void)handleWidgetLayoutGesture{
[self configOscLayoutTool];
[self openWidgetLayoutTool];
}
- (void)openWidgetLayoutTool{ - (void)openWidgetLayoutTool{
[self->_streamView disableOnScreenControls]; [self->_streamView disableOnScreenControls];
[self->_streamView clearOnScreenKeyboardButtons]; // clear all onScreenKeyboardButtons before entering edit mode [self->_streamView clearOnScreenWidgets]; // clear all onScreenKeyboardButtons before entering edit mode
_layoutOnScreenControlsVC.quickSwitchEnabled = false; _layoutOnScreenControlsVC.quickSwitchEnabled = false;
_layoutOnScreenControlsVC.toolbarStackView.hidden = false; _layoutOnScreenControlsVC.toolbarStackView.hidden = false;
_layoutOnScreenControlsVC.toolbarRootView.hidden = false; _layoutOnScreenControlsVC.toolbarRootView.hidden = false;
@@ -640,7 +650,7 @@
- (void)switchWidgetProfile{ - (void)switchWidgetProfile{
[self->_streamView disableOnScreenControls]; [self->_streamView disableOnScreenControls];
[self->_streamView clearOnScreenKeyboardButtons]; // clear all onScreenKeyboardButtons before entering edit mode [self->_streamView clearOnScreenWidgets]; // clear all onScreenKeyboardButtons before entering edit mode
_layoutOnScreenControlsVC.quickSwitchEnabled = true; _layoutOnScreenControlsVC.quickSwitchEnabled = true;
_layoutOnScreenControlsVC.toolbarStackView.hidden = true; _layoutOnScreenControlsVC.toolbarStackView.hidden = true;
_layoutOnScreenControlsVC.toolbarRootView.hidden = true; _layoutOnScreenControlsVC.toolbarRootView.hidden = true;