- feat: highlight size tweak

- fixed: legacy onscreen controls unavailable in touch disabled mode
This commit is contained in:
TrueZhuanjia
2025-10-28 16:41:39 +08:00
parent 7223ab3be5
commit e7132e3371
7 changed files with 292 additions and 149 deletions
@@ -28,6 +28,12 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
AlphaSliderModeCount
};
typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
widgetBorderWidth,
hightlightSize,
BorderWidthSliderModeCount
};
@end
@@ -36,6 +42,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
OSCProfilesManager* profilesManager;
OnScreenWidgetView* selectedWidgetView;
AlphaSliderMode alphaSliderMode;
BorderWidthSliderMode borderWidthSliderMode;
CALayer* selectedControllerLayer;
CGRect controllerLoadedBounds;
bool widgetViewSelected;
@@ -73,10 +80,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
- (void) viewWillDisappear:(BOOL)animated{
OnScreenWidgetView.editMode = false;
for (OnScreenWidgetView* widgetView in self.onScreenWidgetViews){
[widgetView.stickBallLayer removeFromSuperlayer];
[widgetView.crossMarkLayer removeFromSuperlayer];
}
OnScreenWidgetView.isTweakingHighlightSize = false;
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] postNotificationName:@"OscLayoutCloseNotification" object:self];
}
@@ -114,6 +118,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
- (void)reloadOnScreenWidgetViews{
NSLog(@"reloadOnScreenWidgets %f", CACurrentMediaTime());
OnScreenWidgetView.isTweakingHighlightSize = false;
OnScreenWidgetView.editMode = true;
[self hideStickIndicators];
@@ -142,6 +147,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
widgetView.widthFactor = buttonState.widthFactor;
widgetView.heightFactor = buttonState.heightFactor;
widgetView.borderWidth = buttonState.borderWidth;
widgetView.highlightSizeFactor = buttonState.highlightSizeFactor;
widgetView.autoTapInterval = buttonState.autoTapInterval;
[widgetView setVibrationWithStyle:buttonState.vibrationStyle];
widgetView.mouseButtonAction = buttonState.mouseButtonAction;
@@ -373,6 +379,57 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
}
}
- (void)switchBorderWidthSlider:(UISwipeGestureRecognizer *)sender {
if(!widgetViewSelected) return;
borderWidthSliderMode = (borderWidthSliderMode + 1) % BorderWidthSliderModeCount;
OnScreenWidgetView.isTweakingHighlightSize = borderWidthSliderMode == hightlightSize;
[self loadWidgetWidths];
}
- (void)loadWidgetWidths{
if(self->selectedWidgetView != nil && self->widgetViewSelected){
switch(borderWidthSliderMode){
case widgetBorderWidth:
[self.widgetBorderWidthSlider setMinimumValue:0];
[self.widgetBorderWidthSlider setMaximumValue:8];
[self.widgetBorderWidthSlider setValue:selectedWidgetView.borderWidth animated:NO];
selectedWidgetView.buttonDownVisualEffectLayer.hidden = true;
selectedWidgetView.l3r3Indicator.hidden = true;
(selectedWidgetView.lrudIndicatorBall.hidden
= selectedWidgetView.upIndicator.hidden
= selectedWidgetView.downIndicator.hidden
= selectedWidgetView.leftIndicator.hidden
= selectedWidgetView.rightIndicator.hidden
= true);
[self.widgetBorderWidthLabel setText:[LocalizationHelper localizedStringForKey:@"Border width: %.2f", _widgetBorderWidthSlider.value]];
break;
case hightlightSize:
[self.widgetBorderWidthSlider setMinimumValue:0];
[self.widgetBorderWidthSlider setMaximumValue:2];
[self.widgetBorderWidthSlider setValue:selectedWidgetView.highlightSizeFactor animated:NO];
selectedWidgetView.buttonDownVisualEffectLayer.hidden = selectedWidgetView.widgetType != WidgetTypeEnumButton;
selectedWidgetView.l3r3Indicator.hidden = !selectedWidgetView.hasL3R3Indicator;
(selectedWidgetView.lrudIndicatorBall.hidden
= selectedWidgetView.upIndicator.hidden
= selectedWidgetView.downIndicator.hidden
= selectedWidgetView.leftIndicator.hidden
= selectedWidgetView.rightIndicator.hidden
= !selectedWidgetView.isDirectionPad);
[self.widgetBorderWidthLabel setText:[LocalizationHelper localizedStringForKey:@"Highlight size: %.2f", _widgetBorderWidthSlider.value]];
break;
default:
break;
}
}
}
/* animates the toolbar up and off the screen or back down onto the screen */
- (void) moveToolbar:(UISwipeGestureRecognizer *)sender {
BOOL isPad = [[UIDevice currentDevice].model hasPrefix:@"iPad"];
@@ -683,6 +740,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
newWidget.widthFactor = widget.widthFactor;
newWidget.heightFactor = widget.heightFactor;
newWidget.borderWidth = widget.borderWidth;
newWidget.highlightSizeFactor = widget.highlightSizeFactor;
newWidget.autoTapInterval = widget.autoTapInterval;
newWidget.sensitivityFactorX = widget.sensitivityFactorX;
newWidget.sensitivityFactorY = widget.sensitivityFactorY;
@@ -695,6 +753,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
newWidget.mouseButtonAction = widget.mouseButtonAction;
newWidget.buttonMode = widget.buttonMode;
[self.view insertSubview:newWidget belowSubview:self.widgetPanelStack];
[newWidget accessWidgetAttributes];
if(createNew) [newWidget setLocationWithPosition:CGPointMake(90, 130)];
else [newWidget setLocationWithPosition:widget.center];
@@ -779,7 +838,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
if([view isKindOfClass:[OnScreenWidgetView class]]){
OnScreenWidgetView* widget = (OnScreenWidgetView* )view;
[widget.crossMarkLayer setHidden:true];
[widget.stickBallLayer setHidden:true];
[widget.lrudIndicatorBall setHidden:true];
}
}
}
@@ -802,10 +861,14 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
self->widgetViewSelected = true;
self->controllerLayerSelected = false;
if(widgetView != selectedWidgetView) [selectedWidgetView setAutoTapIntervalByTextWithStr:_autoTapField.text];
if(widgetView != selectedWidgetView){
[selectedWidgetView setAutoTapIntervalByTextWithStr:_autoTapField.text];
}
self->selectedWidgetView = widgetView;
[selectedWidgetView hideAllHighlightLayersOfAllWidgetsWithSelfIncluded:YES];
[self autoFitLabel:self.currentProfileLabel];
self.currentProfileLabel.textAlignment = NSTextAlignmentLeft;
[self.currentProfileLabel setText:
@@ -878,13 +941,13 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
[self autoFitLabel:self.widgetHeightLabel];
[self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.deNormalizedHeightFactor]];
[self loadWidgetAlphas];
[self autoFitLabel:self.widgetAlphaLabel];
[self.widgetBorderWidthSlider setValue:self->selectedWidgetView.borderWidth];
// [self.widgetBorderWidthSlider setValue:self->selectedWidgetView.borderWidth];
[self loadWidgetWidths];
[self autoFitLabel:self.widgetBorderWidthLabel];
[self widgetBorderWidthSliderMoved:self.widgetBorderWidthSlider];
// [self widgetBorderWidthSliderMoved:self.widgetBorderWidthSlider];
self.autoTapStack.hidden = !selectedWidgetView.hasAutoTap;
// [self.autoTapSlider setValue:self->selectedWidgetView.autoTapInterval];
@@ -1013,16 +1076,25 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
if(self->selectedControllerLayer != nil && self->controllerLayerSelected){
[self.layoutOSC adjustControllerLayerOpacityWith:self->selectedControllerLayer and:sender.value];
}
return;
}
- (void)widgetBorderWidthSliderMoved:(UISlider* )sender{
[self.widgetBorderWidthLabel setText:[LocalizationHelper localizedStringForKey:@"Border width: %.2f", sender.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected){
[self->selectedWidgetView adjustBorderWithWidth:sender.value];
switch(borderWidthSliderMode){
case widgetBorderWidth:
[self->selectedWidgetView adjustBorderWithWidth:sender.value];
break;
case hightlightSize:
self->selectedWidgetView.highlightSizeFactor = sender.value;
if(selectedWidgetView.widgetType == WidgetTypeEnumButton) [selectedWidgetView setupButtonDownVisualEffectLayer];
if(selectedWidgetView.hasL3R3Indicator) [selectedWidgetView setupL3R3Indicator];
if(selectedWidgetView.isDirectionPad) [selectedWidgetView setupLrudDirectionIndicatorlayers];
break;
default:
break;
}
}
return;
[self loadWidgetWidths];
}
/*
@@ -1040,7 +1112,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
}
}
- (void)slideModeChanged:(UISegmentedControl* )sender{
- (void)buttonModeChanged:(UISegmentedControl* )sender{
if(self->selectedWidgetView != nil && self->widgetViewSelected){
selectedWidgetView.buttonMode = _buttonModeSelector.selectedSegmentIndex;
}
@@ -1201,6 +1273,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
self.widgetHeightLabel.text = [LocalizationHelper localizedStringForKey:@"Height"];
self.widgetHeightStack.hidden = YES;
alphaSliderMode = widgetAlpha;
[self.widgetAlphaSlider addTarget:self action:@selector(widgetAlphaSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
self.widgetAlphaLabel.text = [LocalizationHelper localizedStringForKey:@"Alpha"];
self.widgetAlphaLabel.userInteractionEnabled = true;
@@ -1209,10 +1282,17 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
action:@selector(switchAlphaSlider:)];
[self.widgetAlphaLabel addGestureRecognizer:alphaSwitchTapGesture];
borderWidthSliderMode = widgetBorderWidth;
[self.widgetBorderWidthSlider addTarget:self action:@selector(widgetBorderWidthSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
self.widgetBorderWidthLabel.text = [LocalizationHelper localizedStringForKey:@"Border width"];
self.widgetBorderWidthLabel.userInteractionEnabled = true;
UITapGestureRecognizer *borderWidthSwitchTapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(switchBorderWidthSlider:)];
[self.widgetBorderWidthLabel addGestureRecognizer:borderWidthSwitchTapGesture];
self.borderWidthAlphaStack.hidden = YES;
// [self.autoTapSlider addTarget:self action:@selector(autoTapSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
self.autoTapLabel.text = [LocalizationHelper localizedStringForKey:@"Autotap timer "];
@@ -1254,7 +1334,7 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
[self.mouseButtonDownSelector setTitleTextAttributes:whiteFontAttributes forState:UIControlStateNormal];
self.mouseDownButtonStack.hidden = YES;
[self.buttonModeSelector addTarget:self action:@selector(slideModeChanged:) forControlEvents:(UIControlEventValueChanged)];
[self.buttonModeSelector addTarget:self action:@selector(buttonModeChanged:) forControlEvents:(UIControlEventValueChanged)];
[self.buttonModeSelector setTitleTextAttributes:whiteFontAttributes forState:UIControlStateNormal];
self.buttonModeStack.hidden = YES;
@@ -1524,7 +1604,6 @@ typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerIsOverlappingWithTrashcanButton:selectedWidgetView.layer]){
[self->selectedWidgetView removeFromSuperview];
[self.onScreenWidgetViews removeObject:self->selectedWidgetView];
[selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer];
}