mirror of https://github.com/LIJI32/SameBoy.git
117 lines
4.7 KiB
Objective-C
117 lines
4.7 KiB
Objective-C
#import "GBThemePreviewController.h"
|
|
#import "GBVerticalLayout.h"
|
|
#import "GBHorizontalLayout.h"
|
|
#import "GBBackgroundView.h"
|
|
|
|
@implementation GBThemePreviewController
|
|
{
|
|
GBHorizontalLayout *_horizontalLayout;
|
|
GBVerticalLayout *_verticalLayout;
|
|
GBBackgroundView *_backgroundView;
|
|
}
|
|
|
|
- (instancetype)initWithTheme:(GBTheme *)theme
|
|
{
|
|
self = [super init];
|
|
_horizontalLayout = [[GBHorizontalLayout alloc] initWithTheme:theme];
|
|
_verticalLayout = [[GBVerticalLayout alloc] initWithTheme:theme];
|
|
return self;
|
|
}
|
|
|
|
- (void)viewDidLoad
|
|
{
|
|
[super viewDidLoad];
|
|
_backgroundView = [[GBBackgroundView alloc] initWithLayout:_verticalLayout];
|
|
self.view.backgroundColor = _verticalLayout.theme.backgroundGradientBottom;
|
|
[self.view addSubview:_backgroundView];
|
|
[_backgroundView enterPreviewMode:true];
|
|
_backgroundView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
|
|
|
|
[self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
|
|
[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
|
|
action:@selector(showPopup)]];
|
|
}
|
|
|
|
- (UIModalPresentationStyle)modalPresentationStyle
|
|
{
|
|
return UIModalPresentationFullScreen;
|
|
}
|
|
|
|
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
|
|
{
|
|
GBLayout *layout = _horizontalLayout;
|
|
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
|
|
layout = _verticalLayout;
|
|
}
|
|
_backgroundView.frame = [layout viewRectForOrientation:orientation];
|
|
_backgroundView.layout = layout;
|
|
}
|
|
|
|
- (void)showPopup
|
|
{
|
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"Apply “%@” as the current theme?", _verticalLayout.theme.name]
|
|
message:nil
|
|
preferredStyle:[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad?
|
|
UIAlertControllerStyleAlert : UIAlertControllerStyleActionSheet];
|
|
if (false) {
|
|
// No supporter-only themes outside the App Store release
|
|
}
|
|
else {
|
|
[alert addAction:[UIAlertAction actionWithTitle:@"Apply Theme"
|
|
style:UIAlertActionStyleDefault
|
|
handler:^(UIAlertAction *action) {
|
|
[[NSUserDefaults standardUserDefaults] setObject:_verticalLayout.theme.name forKey:@"GBInterfaceTheme"];
|
|
[[self presentingViewController] dismissViewControllerAnimated:true completion:nil];
|
|
}]];
|
|
}
|
|
[alert addAction:[UIAlertAction actionWithTitle:@"Exit Preview"
|
|
style:UIAlertActionStyleDefault
|
|
handler:^(UIAlertAction *action) {
|
|
[[self presentingViewController] dismissViewControllerAnimated:true completion:nil];
|
|
}]];
|
|
[self presentViewController:alert animated:true completion:^{
|
|
alert.view.superview.userInteractionEnabled = true;
|
|
[alert.view.superview addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
|
|
action:@selector(dismissPopup)]];
|
|
for (UIView *view in alert.view.superview.subviews) {
|
|
if (view.backgroundColor) {
|
|
view.userInteractionEnabled = true;
|
|
[view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
|
|
action:@selector(dismissPopup)]];
|
|
|
|
}
|
|
}
|
|
}];
|
|
}
|
|
|
|
- (void)dismissViewController
|
|
{
|
|
[self dismissViewControllerAnimated:true completion:nil];
|
|
}
|
|
|
|
- (void)dismissPopup
|
|
{
|
|
[self dismissViewControllerAnimated:true completion:nil];
|
|
}
|
|
|
|
- (UIStatusBarStyle)preferredStatusBarStyle
|
|
{
|
|
if (@available(iOS 13.0, *)) {
|
|
return _verticalLayout.theme.isDark? UIStatusBarStyleLightContent : UIStatusBarStyleDarkContent;
|
|
}
|
|
return _verticalLayout.theme.isDark? UIStatusBarStyleLightContent : UIStatusBarStyleDefault;
|
|
}
|
|
|
|
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
|
|
{
|
|
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
|
|
return UIInterfaceOrientationMaskAll;
|
|
}
|
|
if (MAX([UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width) <= 568) {
|
|
return UIInterfaceOrientationMaskLandscape;
|
|
}
|
|
return UIInterfaceOrientationMaskAllButUpsideDown;
|
|
}
|
|
|
|
@end
|