92 lines
2.8 KiB
Objective-C
92 lines
2.8 KiB
Objective-C
#import "ControlButton.h"
|
|
#import "ControlLayout.h"
|
|
#import "ControlSubButton.h"
|
|
#import "CustomControlsUtils.h"
|
|
#import "../LauncherPreferences.h"
|
|
#import "../ios_uikit_bridge.h"
|
|
#import "../utils.h"
|
|
|
|
@interface ControlLayout ()
|
|
@end
|
|
|
|
@implementation ControlLayout
|
|
|
|
- (void)loadControlLayout:(NSMutableDictionary *)layoutDictionary {
|
|
self.layoutDictionary = layoutDictionary;
|
|
|
|
CGFloat currentScale = [self.layoutDictionary[@"scaledAt"] floatValue];
|
|
CGFloat savedScale = getPrefFloat(@"control.button_scale");
|
|
loadControlObject(self, self.layoutDictionary);
|
|
|
|
self.layoutDictionary[@"scaledAt"] = @(savedScale);
|
|
}
|
|
|
|
- (void)loadControlFile:(NSString *)name {
|
|
[self removeAllButtons];
|
|
|
|
NSString *controlFilePath = [NSString stringWithFormat:@"%s/controlmap/%@", getenv("POJAV_HOME"), name];
|
|
|
|
self.layoutDictionary = parseJSONFromFile(controlFilePath);
|
|
if (self.layoutDictionary[@"NSErrorObject"] != nil) {
|
|
showDialog(localize(@"Error", nil), [NSString stringWithFormat:@"Could not open %@: %@", controlFilePath, [self.layoutDictionary[@"NSErrorObject"] localizedDescription]]);
|
|
return;
|
|
}
|
|
[self loadControlLayout:self.layoutDictionary];
|
|
}
|
|
|
|
- (void)removeAllButtons {
|
|
[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
|
|
[self.layoutDictionary removeAllObjects];
|
|
}
|
|
|
|
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
|
|
{
|
|
return action == @selector(actionMenuExit:) ||
|
|
action == @selector(actionMenuSave:) ||
|
|
action == @selector(actionMenuLoad:) ||
|
|
action == @selector(actionMenuSetDef:) ||
|
|
action == @selector(actionMenuAddButton:) ||
|
|
action == @selector(actionMenuAddDrawer:) ||
|
|
action == @selector(actionMenuAddSubButton:) ||
|
|
action == @selector(actionMenuBtnCopy:) ||
|
|
action == @selector(actionMenuBtnDelete:) ||
|
|
action == @selector(actionMenuBtnEdit:) ||
|
|
action == @selector(actionMenuBtnSafeArea:);
|
|
}
|
|
|
|
- (BOOL)canBecomeFirstResponder {
|
|
return YES;
|
|
}
|
|
|
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
|
|
UIView *result = [super hitTest:point withEvent:event];
|
|
if (result == self && !isControlModifiable) {
|
|
return nil;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
- (void)setFrame:(CGRect)frame {
|
|
[super setFrame:frame];
|
|
|
|
for (UIView *view in self.subviews) {
|
|
if (![view isKindOfClass:ControlButton.class]) {
|
|
continue;
|
|
}
|
|
[(ControlButton *)view update];
|
|
}
|
|
|
|
CGFloat savedScale = getPrefFloat(@"control.button_scale");
|
|
self.layoutDictionary[@"scaledAt"] = @(savedScale);
|
|
}
|
|
|
|
// https://nsantoine.dev/posts/CALayerCaptureHiding
|
|
- (void)hideViewFromCapture:(BOOL)hide {
|
|
if ([self.layer respondsToSelector:@selector(disableUpdateMask)]) {
|
|
NSUInteger hideFlag = (1 << 1) | (1 << 4);
|
|
self.layer.disableUpdateMask = hide ? hideFlag : 0;
|
|
}
|
|
}
|
|
|
|
@end
|