widget layering fixes
This commit is contained in:
@@ -453,7 +453,7 @@ import ObjectiveC.runtime
|
||||
|
||||
if !self.cmdString.contains("+"){
|
||||
// 安全解包并处理 `comboKeyStrings`
|
||||
if var comboStrings = CommandManager.shared.extractCmdStrings(from: self.cmdString) {
|
||||
if let comboStrings = CommandManager.shared.extractCmdStrings(from: self.cmdString) {
|
||||
|
||||
if CommandManager.touchPadCmds.contains(comboStrings.first ?? "") {self.widgetType = WidgetTypeEnum.touchPad}
|
||||
else {self.widgetType = WidgetTypeEnum.button}
|
||||
@@ -3932,6 +3932,23 @@ import ObjectiveC.runtime
|
||||
isRestoringFolderStates = false
|
||||
}
|
||||
|
||||
@objc static func getDeepestButton() -> OnScreenWidgetView?{
|
||||
var maxIndex: Int = Int.max
|
||||
var deepestButton: OnScreenWidgetView?
|
||||
for widget in OnScreenWidgetView.mapping.values.filter({ $0.widgetType == .button}){
|
||||
let currentIndex = widget.superview?.subviews.firstIndex(of: widget)
|
||||
if let currentIndex = currentIndex {
|
||||
if currentIndex < maxIndex {
|
||||
maxIndex = currentIndex
|
||||
deepestButton = widget
|
||||
}
|
||||
}
|
||||
else {continue}
|
||||
}
|
||||
OnScreenWidgetView.deepestButton = deepestButton
|
||||
return deepestButton
|
||||
}
|
||||
|
||||
@objc static func getMaxSequence() -> Int16{
|
||||
return OnScreenWidgetView.mapping.keys.max() ?? -1
|
||||
}
|
||||
@@ -4052,7 +4069,7 @@ import ObjectiveC.runtime
|
||||
}
|
||||
|
||||
deinit {
|
||||
print("onScreenWidgetView deinit \(self.widgetLabel) \(CACurrentMediaTime())")
|
||||
print("onScreenWidgetView deinit \(self.widgetLabel))")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -805,21 +805,8 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
|
||||
[self->oscProfileMan replaceSelectedProfileWith:profile overwriteDefault:YES];
|
||||
}
|
||||
|
||||
uint64_t buttonIndex = 9999999;
|
||||
UIView* deepestButton;
|
||||
for (UIView *subview in self->_streamFrameTopLayerView.subviews) {
|
||||
if ([subview isKindOfClass:[OnScreenWidgetView class]]) {
|
||||
OnScreenWidgetView* widget = (OnScreenWidgetView* ) subview;
|
||||
if(widget.widgetType == WidgetTypeEnumButton){
|
||||
uint64_t index = [self->_streamFrameTopLayerView.subviews indexOfObject:subview];
|
||||
if (index<buttonIndex){
|
||||
buttonIndex = index;
|
||||
deepestButton = subview;
|
||||
OnScreenWidgetView.deepestButton = (OnScreenWidgetView* )deepestButton;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
OnScreenWidgetView.deepestButton = nil;
|
||||
UIView* deepestButton = [OnScreenWidgetView getDeepestButton];
|
||||
if(deepestButton){
|
||||
for (UIView *subview in self->_streamFrameTopLayerView.subviews) {
|
||||
if ([subview isKindOfClass:[OnScreenWidgetView class]]) {
|
||||
|
||||
+10
@@ -492,6 +492,16 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
self.layoutOSC.oscButtonLayerPool.removeAllObjects()
|
||||
}
|
||||
|
||||
OnScreenWidgetView.deepestButton = nil;
|
||||
_ = OnScreenWidgetView.getDeepestButton()
|
||||
if let deepestButton = OnScreenWidgetView.deepestButton {
|
||||
for widget in OnScreenWidgetView.mapping.values {
|
||||
if widget.widgetType == .touchPad {
|
||||
widget.superview?.insertSubview(widget, belowSubview: deepestButton)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view.bringSubviewToFront(toolbarRootView)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user