diff --git a/VoidLink/Input/OnScreenWidgetView.swift b/VoidLink/Input/OnScreenWidgetView.swift
index db00c42a..1d6d84d5 100644
--- a/VoidLink/Input/OnScreenWidgetView.swift
+++ b/VoidLink/Input/OnScreenWidgetView.swift
@@ -361,6 +361,8 @@ import ObjectiveC.runtime
@objc public var downIndicator = CAShapeLayer()
@objc public var leftIndicator = CAShapeLayer()
@objc public var rightIndicator = CAShapeLayer()
+ @objc public var sprintSign = CALayer()
+ @objc public var walkSign = CALayer()
@objc public var walkKeyThresholdPreviewLayer = CAShapeLayer()
@objc public var sprintKeyThresholdPreviewLayer = CAShapeLayer()
@@ -842,6 +844,8 @@ import ObjectiveC.runtime
self.rightIndicator.borderColor = self.buttonDownVisualEffectLayer.borderColor
self.walkKeyThresholdPreviewLayer.strokeColor = self.buttonDownVisualEffectLayer.borderColor
self.sprintKeyThresholdPreviewLayer.strokeColor = self.buttonDownVisualEffectLayer.borderColor
+ GraphicUtils.changeColor(layer: self.sprintSign, color: standardHighlightColor.withAlphaComponent(highlightAlpha))
+ GraphicUtils.changeColor(layer: self.walkSign, color: standardHighlightColor.withAlphaComponent(highlightAlpha))
}
private func tweakAlpha(tweakBorderAlpha:Bool, tweakLabelAlpha:Bool = true){
@@ -1317,8 +1321,8 @@ import ObjectiveC.runtime
private func setupLrudDirectionLayer(directionLayer:CAShapeLayer) {
let indicatorFrame = CAShapeLayer();
indicatorFrame.frame = CGRectMake(0, 0, 75*highlightSizeFactor, 75*highlightSizeFactor)
- indicatorFrame.cornerRadius = 9 * highlightSizeFactor
- directionLayer.borderWidth = 6 * min(1.0, highlightSizeFactor)
+ indicatorFrame.cornerRadius = 23 * highlightSizeFactor
+ directionLayer.borderWidth = 5.3 * min(1.0, highlightSizeFactor)
directionLayer.frame = indicatorFrame.bounds.insetBy(dx: -directionLayer.borderWidth, dy: -directionLayer.borderWidth) // Adjust the inset as needed
directionLayer.cornerRadius = indicatorFrame.cornerRadius + directionLayer.borderWidth
directionLayer.backgroundColor = UIColor.clear.cgColor
@@ -1373,7 +1377,7 @@ import ObjectiveC.runtime
self.sendComboButtonsUpEvent(comboStrings: [self.comboButtonStrings[0]])
}
}
-
+ self.sprintSign.isHidden = !isInSprintMode
if !directionPadTouchBegan, isInSprintMode, vibrationOn {
vibrationGenerator.prepare()
vibrationGenerator.impactOccurred()
@@ -1393,7 +1397,7 @@ import ObjectiveC.runtime
self.sendComboButtonsUpEvent(comboStrings: [self.comboButtonStrings[1]])
}
}
-
+ self.walkSign.isHidden = !isInWalkMode
if !directionPadTouchBegan, isInWalkMode, vibrationOn {
vibrationGenerator.prepare()
vibrationGenerator.impactOccurred()
@@ -1670,6 +1674,7 @@ import ObjectiveC.runtime
}
}
+
@objc public func setupLrudDirectionIndicatorlayers() {
CATransaction.begin()
CATransaction.setDisableActions(true)
@@ -1702,6 +1707,26 @@ import ObjectiveC.runtime
self.layer.addSublayer(self.stickWheelAxis)
self.stickWheelAxis.isHidden = false
}
+
+ self.sprintSign.removeFromSuperlayer()
+ self.sprintSign = GraphicUtils.makeSVGLayer(from: "sprintSign", in: self.upIndicator, at:CGPoint(x: 0.5+0.028, y: 0.5-0.22), targetSize: CGSize(width: 26*highlightSizeFactor, height: 26*highlightSizeFactor))
+ GraphicUtils.changeColor(layer: self.sprintSign, color: standardHighlightColor)
+ self.upIndicator.addSublayer(self.sprintSign)
+ var frameInSelfLayer = self.upIndicator.convert(self.sprintSign.frame, to: self.layer)
+ self.sprintSign.removeFromSuperlayer()
+ self.layer.addSublayer(self.sprintSign)
+ self.sprintSign.frame = frameInSelfLayer
+ self.sprintSign.isHidden = !OnScreenWidgetView.editMode
+
+ self.walkSign.removeFromSuperlayer()
+ self.walkSign = GraphicUtils.makeSVGLayer(from: "walkSign", in: self.upIndicator, at:CGPoint(x: 0.5+0.032, y: 0.5-0.22), targetSize: CGSize(width: 32*highlightSizeFactor, height: 32*highlightSizeFactor))
+ GraphicUtils.changeColor(layer: self.walkSign, color: standardHighlightColor)
+ self.upIndicator.addSublayer(self.walkSign)
+ frameInSelfLayer = self.upIndicator.convert(self.walkSign.frame, to: self.layer)
+ self.walkSign.removeFromSuperlayer()
+ self.layer.addSublayer(self.walkSign)
+ self.walkSign.frame = frameInSelfLayer
+ self.walkSign.isHidden = true
setupMovementThresholdPreviewLayersIfNeeded()
updateMovementThresholdPreview()
@@ -3027,6 +3052,8 @@ import ObjectiveC.runtime
self.leftIndicator.isHidden = true
self.rightIndicator.isHidden = true
self.anchorBall.isHidden = true
+ self.sprintSign.isHidden = true
+ self.walkSign.isHidden = true
}
if CommandManager.verticalTouchPads.contains(touchPadString){
diff --git a/VoidLink/SVGs/sprintSign.svg b/VoidLink/SVGs/sprintSign.svg
new file mode 100644
index 00000000..1002da3a
--- /dev/null
+++ b/VoidLink/SVGs/sprintSign.svg
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/VoidLink/SVGs/walkSign.svg b/VoidLink/SVGs/walkSign.svg
new file mode 100644
index 00000000..4a4a4f87
--- /dev/null
+++ b/VoidLink/SVGs/walkSign.svg
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
index 60c74832..bd0ba689 100644
--- a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
+++ b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
@@ -1761,14 +1761,18 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
walkModeThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Walkmode threshold")
walkModeThresholdStack.isHidden = true
+ let whiteAttrs: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.white]
+
sprintKeyThresholdSlider.addTarget(self, action: #selector(sprintKeyThresholdSliderMoved(_:)), for: .valueChanged)
sprintKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold")
sprintKeySelector.addTarget(self, action: #selector(sprintKeyActionChanged(_:)), for: .valueChanged)
+ sprintKeySelector.setTitleTextAttributes(whiteAttrs, for: .normal)
sprintKeyStack.isHidden = true
walkKeyThresholdSlider.addTarget(self, action: #selector(walkKeyThresholdSliderMoved(_:)), for: .valueChanged)
walkKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold")
walkKeySelector.addTarget(self, action: #selector(walkKeyActionChanged(_:)), for: .valueChanged)
+ walkKeySelector.setTitleTextAttributes(whiteAttrs, for: .normal)
walkKeyStack.isHidden = true
minStickOffsetSlider.addTarget(self, action: #selector(minStickOffsetSliderMoved(_:)), for: .valueChanged)
@@ -1796,9 +1800,6 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
stickIndicatorOffsetLabel.text = LocalizationHelper.localizedString(forKey: "Indicator offset")
stickIndicatorOffsetStack.isHidden = true
- anchorModeSelector.addTarget(self, action: #selector(anchorModeChanged(_:)), for: .valueChanged)
- anchorModeStack.isHidden = true
-
autoDockTimerSlider.addTarget(self, action: #selector(autoDockTimerSliderMoved(_:)), for: .valueChanged)
autoDockTimerLabel.text = LocalizationHelper.localizedString(forKey: "Auto dock")
autoDockTimerStack.isHidden = true;
@@ -1806,8 +1807,11 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
dockedAlphaSlider.addTarget(self, action: #selector(dockedAlphaSliderMoved(_:)), for: .valueChanged)
dockedAlphaLabel.text = LocalizationHelper.localizedString(forKey: "Docked opacity")
dockedAlphaStack.isHidden = true;
-
- let whiteAttrs: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.white]
+
+ anchorModeSelector.addTarget(self, action: #selector(anchorModeChanged(_:)), for: .valueChanged)
+ anchorModeSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
+ anchorModeStack.isHidden = true
+
mouseButtonDownSelector.addTarget(self, action: #selector(mouseDownButtonChanged(_:)), for: .valueChanged)
mouseButtonDownSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
mouseDownButtonStack.isHidden = true
@@ -1819,11 +1823,13 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
buttonModeSelector.addTarget(self, action: #selector(buttonModeChanged(_:)), for: .valueChanged)
buttonModeSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
buttonModeStack.isHidden = true
+
collectedWidgetsSelector.addTarget(self, action: #selector(collectionHiddenChanged(_:)), for: .valueChanged)
collectedWidgetsSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
revealModeSelector.addTarget(self, action: #selector(revealModeChanged(_:)), for: .valueChanged)
revealModeSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
collectedWidgetsStack.isHidden = true
+
bulkMoveSelector.addTarget(self, action: #selector(bulkMoveChanged(_:)), for: .valueChanged)
bulkMoveSelector.setTitleTextAttributes(whiteAttrs, for: .normal)
bulkMoveStack.isHidden = true
@@ -2405,16 +2411,20 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
@objc private func anchorModeChanged(_ sender: UISegmentedControl) {
if let selectedWidget {
selectedWidget.touchPointAnchored = sender.selectedSegmentIndex == 1
- componentSizeStack.isHidden = sender.selectedSegmentIndex != 0
- stickIndicatorOffsetStack.isHidden = sender.selectedSegmentIndex != 1
- stickIndicatorOffsetSlider.value = Float(selectedWidget.stickIndicatorOffset)
- self.stickIndicatorOffsetSliderMoved(stickIndicatorOffsetSlider)
- autoFitStack(self.widgetPanelStack)
+
+ if selectedWidget.isDisplacementBasedStickPad {
+ componentSizeStack.isHidden = sender.selectedSegmentIndex != 0
+ stickIndicatorOffsetStack.isHidden = sender.selectedSegmentIndex != 1
+ stickIndicatorOffsetSlider.value = Float(selectedWidget.stickIndicatorOffset)
+ self.stickIndicatorOffsetSliderMoved(stickIndicatorOffsetSlider)
+ }
if selectedWidget.isDirectionPad {
sensitivityXSlider.value = sender.selectedSegmentIndex == 0 ? 0.0 : 6.5
sensitivityXSliderMoved(sensitivityXSlider)
}
+
+ autoFitStack(self.widgetPanelStack)
}
}
diff --git a/VoidLink/ViewControllers/StreamFrameViewController.m b/VoidLink/ViewControllers/StreamFrameViewController.m
index 593b4356..c05d7c6d 100644
--- a/VoidLink/ViewControllers/StreamFrameViewController.m
+++ b/VoidLink/ViewControllers/StreamFrameViewController.m
@@ -788,9 +788,9 @@
}
- (void)updateTheme {
- self.view.backgroundColor = ThemeManager.menuBackgroundColor;
- _stageLabel.textColor = [ThemeManager.textColor colorWithAlphaComponent:0.9];
- _spinner.color = ThemeManager.textColor;
+ self.view.backgroundColor = UIColor.blackColor;
+ _stageLabel.textColor = [UIColor.whiteColor colorWithAlphaComponent:0.9];
+ _spinner.color = UIColor.whiteColor;
}
- (void)viewDidLoad
@@ -817,6 +817,7 @@
_stageLabel.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
_spinner = [[UIActivityIndicatorView alloc] init];
+ _spinner.color = UIColor.whiteColor;
[_spinner setUserInteractionEnabled:NO];
#if TARGET_OS_TV
[_spinner setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge];
@@ -967,6 +968,12 @@
_mainFrameViewcontroller.sessionLaunchedWithAbsoluteTouch = _settings.touchMode.intValue == AbsoluteTouch;
OnScreenWidgetView.gamepadArrivalReported = false;
+
+ OnScreenWidgetView.enableFolderAnimation = false;
+ dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
+ dispatch_after(delay, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ OnScreenWidgetView.enableFolderAnimation = true;
+ });
}
- (void)keyboardWillShow:(NSNotification *)notification{