diff --git a/VoidLink/Base.lproj/iPad.storyboard b/VoidLink/Base.lproj/iPad.storyboard
index ea6c8880..b81916f9 100644
--- a/VoidLink/Base.lproj/iPad.storyboard
+++ b/VoidLink/Base.lproj/iPad.storyboard
@@ -2522,7 +2522,7 @@
-
+
@@ -3483,16 +3483,16 @@
-
+
diff --git a/VoidLink/Input/OnScreenWidgetView.swift b/VoidLink/Input/OnScreenWidgetView.swift
index 15c8182c..27fb2ab7 100644
--- a/VoidLink/Input/OnScreenWidgetView.swift
+++ b/VoidLink/Input/OnScreenWidgetView.swift
@@ -105,8 +105,33 @@ import ObjectiveC.runtime
private var comboKeyTimeIntervalMs: UInt32 = 0
@objc public var logicallyDown: Bool = false
- @objc public var widthFactor: CGFloat = 1.0
- @objc public var heightFactor: CGFloat = 1.0
+
+ @objc public var isBeingResized: Bool = false
+ @objc public var widthFactor: CGFloat = 1.0 {
+ didSet{
+ isBeingResized = true
+ self.resizeWidgetView()
+ if OnScreenWidgetView.editMode {self.highlightBorderDuringResizing()}
+ }
+ }
+ @objc public var heightFactor: CGFloat = 1.0 {
+ didSet{
+ isBeingResized = true
+ self.resizeWidgetView()
+ if OnScreenWidgetView.editMode {self.highlightBorderDuringResizing()}
+ }
+ }
+ private func highlightBorderDuringResizing() {
+ if widgetType == .touchPad {
+ self.highlightBorder(highlighted: true, color: standardHighlightColor.cgColor)
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
+ if !self.isBeingResized {
+ self.highlightBorder(highlighted: false)
+ }
+ }
+ }
+ }
+
@objc public var componentSizeFactor: CGFloat = 2.88 {
didSet{
if self.isStickWheel {
@@ -751,8 +776,8 @@ import ObjectiveC.runtime
translatesAutoresizingMaskIntoConstraints = false
// replace invalid factor values
- if self.widthFactor == 0 {self.widthFactor = 1.0}
- if self.heightFactor == 0 {self.heightFactor = 1.0}
+ // if self.widthFactor == 0 {self.widthFactor = 1.0}
+ // if self.heightFactor == 0 {self.heightFactor = 1.0}
/*
NSLayoutConstraint.activate([
@@ -3522,9 +3547,11 @@ import ObjectiveC.runtime
widget.isUserInteractionEnabled = false
if ((folder.buttonMode != .slideAndHold && widget.widgetType == .touchPad)
|| abs(widget.backgroundAlpha) < 0.1){
- widget.highlightBorder(highlighted: true, color: UIColor.systemBlue.cgColor)
+ widget.highlightBorder(highlighted: folder.animatesTransition, color: UIColor.systemBlue.cgColor)
}
- let duration = OnScreenWidgetView.enableFolderAnimation ? (folder.buttonMode == .slideAndHold ? 0.05 : widget.standardFoldingInterval) : 0
+ let duration = (OnScreenWidgetView.enableFolderAnimation && folder.animatesTransition)
+ ? (folder.buttonMode == .slideAndHold ? 0.05 : widget.standardFoldingInterval)
+ : 0
UIView.animate(withDuration: duration, animations: {
widget.center = folder.center
},completion: { finished in
@@ -3549,9 +3576,12 @@ import ObjectiveC.runtime
widget.isHidden = false
if ((folder.buttonMode != .slideAndHold && widget.widgetType == .touchPad)
|| abs(widget.backgroundAlpha) < 0.1){
- widget.highlightBorder(highlighted: true, color: UIColor.systemBlue.cgColor)
+ widget.highlightBorder(highlighted: folder.animatesTransition, color: UIColor.systemBlue.cgColor)
}
- UIView.animate(withDuration: OnScreenWidgetView.enableFolderAnimation ? (folder.buttonMode == .slideAndHold ? 0.05 : widget.standardFoldingInterval) : 0, animations: {
+ UIView.animate(withDuration: (OnScreenWidgetView.enableFolderAnimation && folder.animatesTransition)
+ ? (folder.buttonMode == .slideAndHold ? 0.05 : widget.standardFoldingInterval)
+ : 0
+ , animations: {
widget.center = widget.storedCenter
},completion: { finished in
widget.capturedTouches.removeAllObjects()
@@ -3560,7 +3590,9 @@ import ObjectiveC.runtime
widget.isHidden = folder.folded
if ((folder.buttonMode != .slideAndHold && widget.widgetType == .touchPad)
|| abs(widget.backgroundAlpha) < 0.1){
- widget.highlightBorder(highlighted: false)
+ DispatchQueue.main.asyncAfter(deadline: .now() + (widget.widgetType == .touchPad ? 0.15 : 0)) {
+ widget.highlightBorder(highlighted: false)
+ }
}
if widget.hasNonEditableLabel {widget.setupAtrributedText()}
})
diff --git a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
index 005b4819..a43dfea9 100644
--- a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
+++ b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift
@@ -971,7 +971,7 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
mouseDownButtonStack.isHidden = !widgetView.isMousePadWithButtonActions
mouseButtonDownSelector.selectedSegmentIndex = Int(widgetView.mouseButtonAction.rawValue)
- animatedStack.isHidden = !widgetView.isMagnifier
+ animatedStack.isHidden = !(widgetView.isMagnifier || widgetView.isFolder)
animatedSelector.selectedSegmentIndex = widgetView.animatesTransition ? 1 : 0
autoDockTimerStack.isHidden = !(widgetView.isFolder && widgetView.parentSequence == -1);
@@ -1722,11 +1722,15 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
}
widgetSizeSlider.addTarget(self, action: #selector(widgetSizeSliderMoved(_:)), for: .valueChanged)
+ widgetSizeSlider.addTarget(self, action: #selector(widgetSizeSliderTouchUp(_:)), for: [.touchUpInside, .touchUpOutside])
widgetSizeLabel.text = LocalizationHelper.localizedString(forKey: "Size")
widgetSizeStack.isHidden = true
+
widgetHeightSlider.addTarget(self, action: #selector(widgetHeightSliderMoved(_:)), for: .valueChanged)
+ widgetHeightSlider.addTarget(self, action: #selector(widgetSizeSliderTouchUp(_:)), for: [.touchUpInside, .touchUpOutside])
widgetHeightLabel.text = LocalizationHelper.localizedString(forKey: "Height")
widgetHeightStack.isHidden = true
+
componentSizeSlider.addTarget(self, action: #selector(componentSizeSliderMoved(_:)), for: .valueChanged)
componentSizeLabel.text = LocalizationHelper.localizedString(forKey: "Component size")
componentSizeStack.isHidden = true
@@ -1922,12 +1926,19 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true
selectedWidgetView.widthFactor = CGFloat(sender.value)
selectedWidgetView.heightFactor = CGFloat(sender.value)
- selectedWidgetView.resizeWidgetView()
}
if let selectedControllerLayer, controllerLayerSelected {
layoutOSC.resizeControllerLayer(with: selectedControllerLayer, and: CGFloat(sender.value))
}
}
+
+ @objc private func widgetSizeSliderTouchUp(_ sender: UISlider) {
+ if let selectedWidgetView, widgetViewSelected {
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
+ selectedWidgetView.isBeingResized = false
+ }
+ }
+ }
@objc private func widgetHeightSliderMoved(_ sender: UISlider) {
widgetHeightLabel.text = LocalizationHelper.localizedString(forKey: "Height: %.2f", sender.value)
@@ -1935,7 +1946,6 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true
if selectedWidgetView.shape == "round" { return }
selectedWidgetView.heightFactor = CGFloat(sender.value)
- selectedWidgetView.resizeWidgetView()
}
}
@@ -1944,7 +1954,6 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
if let selectedWidgetView, widgetViewSelected {
selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true
selectedWidgetView.componentSizeFactor = CGFloat(sender.value)
- // selectedWidgetView.resizeWidgetView()
}
}