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

This commit is contained in:
TrueZhuanjia
2025-07-25 19:56:46 +08:00
parent 02c6a12a82
commit ab7ccc7732
7 changed files with 41 additions and 31 deletions
+2 -2
View File
@@ -417,7 +417,7 @@ import UIKit
print("No match found for input: \(input)")
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 keyStrings = matchedString.split(separator: "+").map { String($0) }
@@ -475,7 +475,7 @@ import UIKit
print("No match found for input: \(input)")
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 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) {
position.x = position.x * _view.bounds.size.width;
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;
}
@@ -1930,7 +1930,7 @@ static float L3_Y;
if(alpha < 0.23) targetAlpha = 0.23;
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 ||
layer == self._bButton ||
+1 -1
View File
@@ -50,7 +50,7 @@
andConfig:(StreamConfiguration*)streamConfig;
- (void) reloadOnScreenControlsWith:(ControllerSupport*)controllerSupport
andConfig:(StreamConfiguration*)streamConfig;
- (void) clearOnScreenKeyboardButtons;
- (void) clearOnScreenWidgets;
- (void) reloadOnScreenWidgetViews;
- (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) {
// 检查子视图是否是特定类型的实例
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");
// remove all keyboard widget views first
[self clearOnScreenKeyboardButtons];
[self clearOnScreenWidgets];
// bool customOscEnabled = [self isOscEnabled] && settings.onscreenControls.intValue == OnScreenControlsLevelCustom;
@@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
- (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 (nonatomic) NSMutableSet* OnScreenWidgetViews;
@property (nonatomic) NSMutableSet* onScreenWidgetViews;
@property int OSCSegmentSelected;
@property (nonatomic, assign) bool quickSwitchEnabled;
@@ -62,7 +62,7 @@
- (void) viewWillDisappear:(BOOL)animated{
OnScreenWidgetView.editMode = false;
for (OnScreenWidgetView* widgetView in self.OnScreenWidgetViews){
for (OnScreenWidgetView* widgetView in self.onScreenWidgetViews){
[widgetView.stickBallLayer removeFromSuperlayer];
[widgetView.crossMarkLayer removeFromSuperlayer];
}
@@ -89,7 +89,7 @@
}
}
[self.OnScreenWidgetViews removeAllObjects];
[self.onScreenWidgetViews removeAllObjects];
NSLog(@"reload os Key here");
@@ -120,7 +120,7 @@
[widgetView resizeWidgetView]; // resize must be called after relocation
[widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha];
[widgetView adjustBorderWithWidth:buttonState.borderWidth];
[self.OnScreenWidgetViews addObject:widgetView];
[self.onScreenWidgetViews addObject:widgetView];
}
}
}
@@ -128,8 +128,8 @@
- (void) viewDidLoad {
[super viewDidLoad];
profilesManager = [OSCProfilesManager sharedManager:self.view.bounds];
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
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
//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;
@@ -253,7 +253,7 @@
#pragma mark - Class Helper Functions
- (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 */
@@ -588,10 +588,10 @@
[newWidget resizeWidgetView]; // resize must be called after relocation
[newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha];
[newWidget adjustBorderWithWidth:widget.borderWidth];
[self.OnScreenWidgetViews addObject:newWidget];
[self.onScreenWidgetViews addObject:newWidget];
self->selectedWidgetView = newWidget;
if(!createNew){
[self.OnScreenWidgetViews removeObject:widget];
[self.onScreenWidgetViews removeObject:widget];
[widget removeFromSuperview];
}
}
@@ -604,7 +604,7 @@
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.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue];
[self.OnScreenWidgetViews addObject:widgetView];
[self.onScreenWidgetViews addObject:widgetView];
// Add the widgetView to the view controller's view
[self.view insertSubview:widgetView belowSubview:self.widgetPanelStack];
[widgetView setLocationWithPosition:CGPointMake(90, 130)];
@@ -1253,7 +1253,7 @@
if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerIsOverlappingWithTrashcanButton:selectedWidgetView.layer]){
[self->selectedWidgetView removeFromSuperview];
[self.OnScreenWidgetViews removeObject:self->selectedWidgetView];
[self.onScreenWidgetViews removeObject:self->selectedWidgetView];
[self clearStickIndicator];
[selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer];
}
@@ -218,15 +218,8 @@
}
- (void)configOscLayoutTool{
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 */
// _layoutOnScreenControlsVC = [[LayoutOnScreenControlsViewController alloc] init];
BOOL isIPhone = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone);
@@ -242,20 +235,22 @@
_layoutOnScreenControlsVC.view.backgroundColor = UIColor.clearColor;
_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{
[self configOscLayoutTool];
ToolboxViewController* oldToolboxVC = toolBoxViewController;
toolBoxViewController = [[ToolboxViewController alloc] init];
toolBoxViewController.specialEntryDelegate = self;
toolBoxViewController.specialEntries = oldToolboxVC.specialEntries;
[self configOscLayoutTool];
[self presentViewController:toolBoxViewController animated:YES completion:^{
//[self->toolBoxViewController setupConstraints];
}];
}
- (void)configSwipeGestures{
- (void)configGestures{
_slideToSettingsRecognizer = [[CustomEdgeSlideGestureRecognizer alloc] initWithTarget:self action:@selector(edgeSwiped)];
_slideToSettingsRecognizer.edges = _settings.slideToSettingsScreenEdge.intValue;
_slideToSettingsRecognizer.normalizedThresholdDistance = _settings.slideToSettingsDistance.floatValue;
@@ -271,6 +266,17 @@
_slideToCmdToolRecognizer.delaysTouchesBegan = NO;
_slideToCmdToolRecognizer.delaysTouchesEnded = NO;
[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{
@@ -310,7 +316,7 @@
overlayLevel = _settings.statsOverlayLevel.intValue;
[self configOscLayoutTool];
[self updateToolboxSpecialEntries];
[self configSwipeGestures];
[self configGestures];
[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.mainFrameViewcontroller reloadStreamConfig]; // reload streamconfig
@@ -628,10 +634,14 @@
[_streamView keyboardWillHide];
}
- (void)handleWidgetLayoutGesture{
[self configOscLayoutTool];
[self openWidgetLayoutTool];
}
- (void)openWidgetLayoutTool{
[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.toolbarStackView.hidden = false;
_layoutOnScreenControlsVC.toolbarRootView.hidden = false;
@@ -640,7 +650,7 @@
- (void)switchWidgetProfile{
[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.toolbarStackView.hidden = true;
_layoutOnScreenControlsVC.toolbarRootView.hidden = true;