feat: on-screen widget border alpha tweak

This commit is contained in:
TrueZhuanjia committed 2025-10-19 11:04:56 +08:00
1 parent 0ea6248773
commit 9dda594519
8 files changed
+101 -46

No files matched your search

@@ -394,6 +394,7 @@ static CGRect layoutViewBounds;
buttonState.heightFactor = [self normalizeSizeHeightFactor:widgetView and:buttonState]; buttonState.heightFactor = [self normalizeSizeHeightFactor:widgetView and:buttonState];
buttonState.backgroundAlpha = widgetView.backgroundAlpha; buttonState.backgroundAlpha = widgetView.backgroundAlpha;
buttonState.labelAlpha = widgetView.labelAlpha; buttonState.labelAlpha = widgetView.labelAlpha;
buttonState.borderAlpha = widgetView.borderAlpha;
buttonState.borderWidth = widgetView.borderWidth; buttonState.borderWidth = widgetView.borderWidth;
buttonState.autoTapInterval = widgetView.autoTapInterval; buttonState.autoTapInterval = widgetView.autoTapInterval;
buttonState.vibrationStyle = widgetView.vibrationStyle; buttonState.vibrationStyle = widgetView.vibrationStyle;
@@ -45,6 +45,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) CGFloat oscLayerSizeFactor; // for OnScreenController CALayer @property (nonatomic, assign) CGFloat oscLayerSizeFactor; // for OnScreenController CALayer
@property (nonatomic, assign) CGFloat backgroundAlpha; @property (nonatomic, assign) CGFloat backgroundAlpha;
@property (nonatomic, assign) CGFloat labelAlpha; @property (nonatomic, assign) CGFloat labelAlpha;
@property (nonatomic, assign) CGFloat borderAlpha;
@property (nonatomic, assign) uint8_t vibrationStyle; @property (nonatomic, assign) uint8_t vibrationStyle;
@property (nonatomic, assign) uint8_t mouseButtonAction; @property (nonatomic, assign) uint8_t mouseButtonAction;
@property (nonatomic, assign) uint16_t autoTapInterval; @property (nonatomic, assign) uint16_t autoTapInterval;
@@ -53,6 +53,7 @@
[encoder encodeFloat:self.oscLayerSizeFactor forKey:@"oscLayerSizeFactor"]; [encoder encodeFloat:self.oscLayerSizeFactor forKey:@"oscLayerSizeFactor"];
[encoder encodeFloat:self.backgroundAlpha forKey:@"backgroundAlpha"]; [encoder encodeFloat:self.backgroundAlpha forKey:@"backgroundAlpha"];
[encoder encodeFloat:self.labelAlpha forKey:@"labelAlpha"]; [encoder encodeFloat:self.labelAlpha forKey:@"labelAlpha"];
[encoder encodeFloat:self.borderAlpha forKey:@"borderAlpha"];
[encoder encodeFloat:self.borderWidth forKey:@"borderWidth"]; [encoder encodeFloat:self.borderWidth forKey:@"borderWidth"];
[encoder encodeObject:self.widgetShape forKey:@"widgetShape"]; [encoder encodeObject:self.widgetShape forKey:@"widgetShape"];
[encoder encodeFloat:self.minStickOffset forKey:@"minStickOffset"]; [encoder encodeFloat:self.minStickOffset forKey:@"minStickOffset"];
@@ -82,6 +83,7 @@
self.oscLayerSizeFactor = [decoder decodeFloatForKey:@"oscLayerSizeFactor"]; self.oscLayerSizeFactor = [decoder decodeFloatForKey:@"oscLayerSizeFactor"];
self.backgroundAlpha = [decoder containsValueForKey:@"backgroundAlpha"] ? [decoder decodeFloatForKey:@"backgroundAlpha"] : 0.5; self.backgroundAlpha = [decoder containsValueForKey:@"backgroundAlpha"] ? [decoder decodeFloatForKey:@"backgroundAlpha"] : 0.5;
self.labelAlpha = [decoder containsValueForKey:@"labelAlpha"] ? [decoder decodeFloatForKey:@"labelAlpha"] : 0.82; self.labelAlpha = [decoder containsValueForKey:@"labelAlpha"] ? [decoder decodeFloatForKey:@"labelAlpha"] : 0.82;
self.borderAlpha = [decoder containsValueForKey:@"borderAlpha"] ? [decoder decodeFloatForKey:@"borderAlpha"] : self.labelAlpha*1.01;
self.borderWidth = [decoder decodeFloatForKey:@"borderWidth"]; self.borderWidth = [decoder decodeFloatForKey:@"borderWidth"];
self.widgetShape = [decoder decodeObjectForKey:@"widgetShape"]; self.widgetShape = [decoder decodeObjectForKey:@"widgetShape"];
self.minStickOffset = [decoder decodeFloatForKey:@"minStickOffset"]; self.minStickOffset = [decoder decodeFloatForKey:@"minStickOffset"];
+14 -18
View File
@@ -74,6 +74,7 @@ import UIKit
@objc public var borderWidth: CGFloat = 0.0 @objc public var borderWidth: CGFloat = 0.0
@objc public var backgroundAlpha: CGFloat = 0.5 @objc public var backgroundAlpha: CGFloat = 0.5
@objc public var labelAlpha: CGFloat = 0.82 @objc public var labelAlpha: CGFloat = 0.82
@objc public var borderAlpha: CGFloat = 0.82 * 1.01
@objc public var vibrationStyle: Int = 6 @objc public var vibrationStyle: Int = 6
@objc public var latestTouchLocation: CGPoint @objc public var latestTouchLocation: CGPoint
@objc public var selfViewOnTheRight: Bool = false @objc public var selfViewOnTheRight: Bool = false
@@ -407,15 +408,9 @@ import UIKit
layoutChanges.removeLast() layoutChanges.removeLast()
} }
@objc public func adjustTransparency(alpha: CGFloat){ @objc public func adjustTransparency(alpha: CGFloat, tweakBorderAlpha:Bool){
if alpha != 0 { self.backgroundAlpha = alpha
self.backgroundAlpha = alpha self.tweakAlpha(tweakBorderAlpha: tweakBorderAlpha)
}
else{
// self.backgroundAlpha = 0.5
self.backgroundAlpha = alpha
}
self.tweakAlpha()
} }
@objc public func adjustBorder(width: CGFloat){ @objc public func adjustBorder(width: CGFloat){
@@ -461,17 +456,18 @@ import UIKit
label.textColor = UIColor(white: 1.0, alpha: labelAlpha) label.textColor = UIColor(white: 1.0, alpha: labelAlpha)
} }
private func tweakAlpha(){ @objc public func tweakBorderAlpha(alpha:CGFloat){
borderAlpha = alpha
defaultBorderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor
self.layer.borderColor = defaultBorderColor
}
private func tweakAlpha(tweakBorderAlpha:Bool){
// setup default border from self.backgroundAlpha // setup default border from self.backgroundAlpha
let realBackgroundAlpha = self.backgroundAlpha - 0.18 // offset to be consistent with legacy onScreen controller layer opacity let realBackgroundAlpha = self.backgroundAlpha - 0.18 // offset to be consistent with legacy onScreen controller layer opacity
self.backgroundColor = UIColor(white: 0.2, alpha: realBackgroundAlpha) // offset to be consistent with legacy onScreen controller layer opacity self.backgroundColor = UIColor(white: 0.2, alpha: realBackgroundAlpha) // offset to be consistent with legacy onScreen controller layer opacity
var borderAlpha = realBackgroundAlpha * 1.01
if widgetType == WidgetTypeEnum.touchPad { borderAlpha = tweakBorderAlpha ? realBackgroundAlpha * 1.01 : borderAlpha
minimumBorderAlpha = 0.0
}
if borderAlpha < minimumBorderAlpha {
borderAlpha = minimumBorderAlpha
}
defaultBorderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor defaultBorderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor
self.layer.borderColor = defaultBorderColor self.layer.borderColor = defaultBorderColor
@@ -580,7 +576,7 @@ import UIKit
self.setSquareWidgetCornerRadius() self.setSquareWidgetCornerRadius()
self.layer.borderWidth = self.borderWidth self.layer.borderWidth = self.borderWidth
self.tweakAlpha() self.tweakAlpha(tweakBorderAlpha: false)
if self.shape == "default" || self.shape.isEmpty { if self.shape == "default" || self.shape.isEmpty {
if CommandManager.oscButtonMappings.keys.contains(self.buttonString) && !CommandManager.oscRectangleButtonCmds.contains(self.buttonString){ //make oscButtons round if CommandManager.oscButtonMappings.keys.contains(self.buttonString) && !CommandManager.oscRectangleButtonCmds.contains(self.buttonString){ //make oscButtons round
+2 -1
View File
@@ -575,9 +575,10 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
// widgetView.sizeReference = buttonState.sizeReference; // widgetView.sizeReference = buttonState.sizeReference;
//portrait markmarkmark //portrait markmarkmark
[widgetView resizeWidgetView]; // resize must be called after relocation [widgetView resizeWidgetView]; // resize must be called after relocation
[widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha]; [widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha tweakBorderAlpha:NO];
[widgetView adjustBorderWithWidth:buttonState.borderWidth]; [widgetView adjustBorderWithWidth:buttonState.borderWidth];
[widgetView tweakLabelAlphaWithAlpha:buttonState.labelAlpha]; [widgetView tweakLabelAlphaWithAlpha:buttonState.labelAlpha];
[widgetView tweakBorderAlphaWithAlpha:buttonState.borderAlpha];
[widgetView setupAutoTapTimer]; [widgetView setupAutoTapTimer];
} }
} }
@@ -1025,6 +1025,29 @@
} }
} }
}, },
"Border alpha: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "边界透明度: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "邊界透明度: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "邊界透明度: %.2f"
}
}
}
},
"Border width" : { "Border width" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
-2
View File
@@ -28,8 +28,6 @@ static UIUserInterfaceStyle _userInterfaceStyle;
} }
} }
+ (UIUserInterfaceStyle)userInterfaceStyle { + (UIUserInterfaceStyle)userInterfaceStyle {
[ThemeManager setPublicUIStyle]; [ThemeManager setPublicUIStyle];
return _userInterfaceStyle; return _userInterfaceStyle;
@@ -21,6 +21,13 @@
@interface LayoutOnScreenControlsViewController () @interface LayoutOnScreenControlsViewController ()
typedef NS_ENUM(NSUInteger, AlphaSliderMode) {
widgetAlpha,
labelAlpha,
borderAlpha,
AlphaSliderModeCount
};
@end @end
@@ -28,7 +35,7 @@
BOOL isToolbarHidden; BOOL isToolbarHidden;
OSCProfilesManager* profilesManager; OSCProfilesManager* profilesManager;
OnScreenWidgetView* selectedWidgetView; OnScreenWidgetView* selectedWidgetView;
bool labelAlphaLoaded; AlphaSliderMode alphaSliderMode;
CALayer* selectedControllerLayer; CALayer* selectedControllerLayer;
CGRect controllerLoadedBounds; CGRect controllerLoadedBounds;
bool widgetViewSelected; bool widgetViewSelected;
@@ -152,8 +159,9 @@
[widgetView setLocationWithPosition:buttonState.position]; [widgetView setLocationWithPosition:buttonState.position];
widgetView.sizeReference = [self getCurrentWidgetSizeReference]; widgetView.sizeReference = [self getCurrentWidgetSizeReference];
[widgetView resizeWidgetView]; // resize must be called after relocation [widgetView resizeWidgetView]; // resize must be called after relocation
[widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha]; [widgetView adjustTransparencyWithAlpha:buttonState.backgroundAlpha tweakBorderAlpha:NO];
[widgetView tweakLabelAlphaWithAlpha:buttonState.labelAlpha]; [widgetView tweakLabelAlphaWithAlpha:buttonState.labelAlpha];
[widgetView tweakBorderAlphaWithAlpha:buttonState.borderAlpha];
[widgetView adjustBorderWithWidth:buttonState.borderWidth]; [widgetView adjustBorderWithWidth:buttonState.borderWidth];
[self.onScreenWidgetViews addObject:widgetView]; [self.onScreenWidgetViews addObject:widgetView];
} }
@@ -339,10 +347,30 @@
- (void)switchAlphaSlider:(UISwipeGestureRecognizer *)sender { - (void)switchAlphaSlider:(UISwipeGestureRecognizer *)sender {
if(!widgetViewSelected) return; if(!widgetViewSelected) return;
labelAlphaLoaded = !labelAlphaLoaded; alphaSliderMode = (alphaSliderMode + 1) % AlphaSliderModeCount;
if(labelAlphaLoaded) [self.widgetAlphaSlider setValue: self->selectedWidgetView.labelAlpha]; [self loadWidgetAlphas];
else [self.widgetAlphaSlider setValue: self->selectedWidgetView.backgroundAlpha]; }
[self widgetAlphaSliderMoved:self.widgetAlphaSlider];
- (void)loadWidgetAlphas{
if(self->selectedWidgetView != nil && self->widgetViewSelected){
switch(alphaSliderMode){
case widgetAlpha:
[self.widgetAlphaSlider setValue: self->selectedWidgetView.backgroundAlpha];
[self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Alpha: %.2f", _widgetAlphaSlider.value]];
break;
case labelAlpha:
[self.widgetAlphaSlider setValue: self->selectedWidgetView.labelAlpha];
[self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Label alpha: %.2f", _widgetAlphaSlider.value]];
break;
case borderAlpha:
[self.widgetAlphaSlider setValue: self->selectedWidgetView.borderAlpha];
[self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Border alpha: %.2f", _widgetAlphaSlider.value]];
break;
case AlphaSliderModeCount:
default:
break;
}
}
} }
/* animates the toolbar up and off the screen or back down onto the screen */ /* animates the toolbar up and off the screen or back down onto the screen */
@@ -672,8 +700,9 @@
else [newWidget setLocationWithPosition:widget.center]; else [newWidget setLocationWithPosition:widget.center];
newWidget.sizeReference = widget.sizeReference; newWidget.sizeReference = widget.sizeReference;
[newWidget resizeWidgetView]; // resize must be called after relocation [newWidget resizeWidgetView]; // resize must be called after relocation
[newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha]; [newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha tweakBorderAlpha:NO];
[newWidget tweakLabelAlphaWithAlpha:widget.labelAlpha]; [newWidget tweakLabelAlphaWithAlpha:widget.labelAlpha];
[newWidget tweakBorderAlphaWithAlpha:widget.borderAlpha];
[newWidget adjustBorderWithWidth:widget.borderWidth]; [newWidget adjustBorderWithWidth:widget.borderWidth];
[self.onScreenWidgetViews addObject:newWidget]; [self.onScreenWidgetViews addObject:newWidget];
self->selectedWidgetView = newWidget; self->selectedWidgetView = newWidget;
@@ -763,8 +792,6 @@
*/ */
- (void)widgetViewTapped: (NSNotification *)notification{ - (void)widgetViewTapped: (NSNotification *)notification{
//self.undoButton.alpha = selectedWidgetView.layoutChanges.count>1 && !CGPointEqualToPoint(selectedWidgetView.layoutChanges.lastObject.CGPointValue, selectedWidgetView.initialCenter)? 1.0 : 0.3;
// labelAlphaLoaded = false;
[self hideStickIndicators]; [self hideStickIndicators];
@@ -851,10 +878,9 @@
[self autoFitLabel:self.widgetHeightLabel]; [self autoFitLabel:self.widgetHeightLabel];
[self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.deNormalizedHeightFactor]]; [self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.deNormalizedHeightFactor]];
if(labelAlphaLoaded) [self.widgetAlphaSlider setValue: self->selectedWidgetView.labelAlpha];
else [self.widgetAlphaSlider setValue: self->selectedWidgetView.backgroundAlpha]; [self loadWidgetAlphas];
[self autoFitLabel:self.widgetAlphaLabel]; [self autoFitLabel:self.widgetAlphaLabel];
[self widgetAlphaSliderMoved:self.widgetAlphaSlider];
[self.widgetBorderWidthSlider setValue:self->selectedWidgetView.borderWidth]; [self.widgetBorderWidthSlider setValue:self->selectedWidgetView.borderWidth];
[self autoFitLabel:self.widgetBorderWidthLabel]; [self autoFitLabel:self.widgetBorderWidthLabel];
@@ -871,7 +897,6 @@
NSForegroundColorAttributeName:[[UIColor whiteColor] colorWithAlphaComponent:0.77] NSForegroundColorAttributeName:[[UIColor whiteColor] colorWithAlphaComponent:0.77]
}]; }];
[self autoFitLabel:self.autoTapLabel]; [self autoFitLabel:self.autoTapLabel];
// [self autoTapSliderMoved:self.autoTapSlider];
self.decelerationRateStack.hidden = !selectedWidgetView.hasTrackBall; self.decelerationRateStack.hidden = !selectedWidgetView.hasTrackBall;
[self.decelerationRateSlider setValue:selectedWidgetView.trackballDecelerationRate]; [self.decelerationRateSlider setValue:selectedWidgetView.trackballDecelerationRate];
@@ -967,20 +992,28 @@
} }
- (void)widgetAlphaSliderMoved:(UISlider* )sender{ - (void)widgetAlphaSliderMoved:(UISlider* )sender{
if(labelAlphaLoaded){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
[self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Label alpha: %.2f", sender.value]]; switch(alphaSliderMode){
[selectedWidgetView tweakLabelAlphaWithAlpha:sender.value]; case widgetAlpha:
} [self->selectedWidgetView adjustTransparencyWithAlpha:sender.value tweakBorderAlpha:YES];
else{ break;
[self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Alpha: %.2f", sender.value]]; case labelAlpha:
if(self->selectedWidgetView != nil && self->widgetViewSelected){ [selectedWidgetView tweakLabelAlphaWithAlpha:sender.value];
[self->selectedWidgetView adjustTransparencyWithAlpha:sender.value]; break;
} case borderAlpha:
[self->selectedWidgetView tweakBorderAlphaWithAlpha:sender.value];
if(self->selectedControllerLayer != nil && self->controllerLayerSelected){ break;
[self.layoutOSC adjustControllerLayerOpacityWith:self->selectedControllerLayer and:sender.value]; case AlphaSliderModeCount:
default:
break;
} }
[self loadWidgetAlphas];
} }
if(self->selectedControllerLayer != nil && self->controllerLayerSelected){
[self.layoutOSC adjustControllerLayerOpacityWith:self->selectedControllerLayer and:sender.value];
}
return; return;
} }