SameBoy/iOS/GBAboutController.m

245 lines
10 KiB
Objective-C

#import "GBAboutController.h"
@interface GBAboutController ()
@end
@implementation GBAboutController
{
UILabel *_titleLabel;
UILabel *_versionLabel;
UIImageView *_logo;
UITextView *_licenseView;
UILabel *_copyrightLabel;
UIView *_buttonsView;
}
- (UIImage *)buttonImageNamed:(NSString *)name
{
if (@available(iOS 13.0, *)) {
return [UIImage systemImageNamed:name withConfiguration:[UIImageSymbolConfiguration configurationWithScale:UIImageSymbolScaleLarge]];
}
return nil;
}
- (void)alignButton:(UIButton *)button
{
if (!button.imageView.image) return;
CGSize imageSize = button.imageView.frame.size;
button.imageEdgeInsets = UIEdgeInsetsMake(0, (32 - imageSize.width) / 2, 0, 0);
button.titleEdgeInsets = UIEdgeInsetsMake(0, 32 - imageSize.width, 0, 0);
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIVisualEffect *effect = [UIBlurEffect effectWithStyle:(UIBlurEffectStyle)UIBlurEffectStyleProminent];
self.view = [[UIVisualEffectView alloc] initWithEffect:effect];
UIView *root = ((UIVisualEffectView *)self.view).contentView;
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"SameBoy";
_titleLabel.font = [UIFont systemFontOfSize:34 weight:UIFontWeightHeavy];
[root addSubview:_titleLabel];
_versionLabel = [[UILabel alloc] init];
_versionLabel.text = @"Version " GB_VERSION;
_versionLabel.font = [UIFont systemFontOfSize:24 weight:UIFontWeightLight];
[root addSubview:_versionLabel];
_logo = [[UIImageView alloc] init];
_logo.image = [UIImage imageNamed:@"logo"];
_logo.contentMode = UIViewContentModeCenter;
[root addSubview:_logo];
_licenseView = [[UITextView alloc] init];
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"License" ofType:@"html"]];
_licenseView.attributedText = [[NSAttributedString alloc] initWithData:data
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil
error:nil];
_licenseView.editable = false;
if (@available(iOS 13.0, *)) {
_licenseView.backgroundColor = [UIColor systemBackgroundColor];
_licenseView.textColor = [UIColor labelColor];
}
else {
_licenseView.backgroundColor = [UIColor whiteColor];
}
_licenseView.hidden = true;
_licenseView.userInteractionEnabled = false;
_licenseView.layer.cornerRadius = 6;
[root addSubview:_licenseView];
_buttonsView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
UIButton *websiteButton = [[UIButton alloc] initWithFrame:CGRectMake(20, 0, 280, 37)];
[websiteButton setTitle:@"Website" forState:UIControlStateNormal];
[websiteButton setImage:[self buttonImageNamed:@"globe"] forState:UIControlStateNormal];
websiteButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
[websiteButton setTitleColor:websiteButton.tintColor forState:UIControlStateNormal];
websiteButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[websiteButton addTarget:self action:@selector(openWebsite) forControlEvents:UIControlEventTouchUpInside];
[self alignButton:websiteButton];
[_buttonsView addSubview:websiteButton];
UIButton *sponsorButton = [[UIButton alloc] initWithFrame:CGRectMake(20, 45, 280, 37)];
[sponsorButton setTitle:@"Sponsor SameBoy" forState:UIControlStateNormal];
[sponsorButton setImage:[self buttonImageNamed:@"heart"] forState:UIControlStateNormal];
sponsorButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
[sponsorButton setTitleColor:sponsorButton.tintColor forState:UIControlStateNormal];
sponsorButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[sponsorButton addTarget:self action:@selector(openSponsor) forControlEvents:UIControlEventTouchUpInside];
[self alignButton:sponsorButton];
[_buttonsView addSubview:sponsorButton];
UIButton *licenseButton = [[UIButton alloc] initWithFrame:CGRectMake(20, 90, 280, 37)];
[licenseButton setTitle:@"License" forState:UIControlStateNormal];
[licenseButton setImage:[self buttonImageNamed:@"doc.plaintext"] forState:UIControlStateNormal];
licenseButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
licenseButton.titleLabel.textColor = licenseButton.tintColor;
[licenseButton setTitleColor:licenseButton.tintColor forState:UIControlStateNormal];
licenseButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[licenseButton addTarget:self action:@selector(showLicense) forControlEvents:UIControlEventTouchUpInside];
[self alignButton:licenseButton];
[_buttonsView addSubview:licenseButton];
[root addSubview:_buttonsView];
_copyrightLabel = [[UILabel alloc] init];
_copyrightLabel.text = [[NSBundle mainBundle] infoDictionary][@"NSHumanReadableCopyright"];
_copyrightLabel.textAlignment = NSTextAlignmentCenter;
_copyrightLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
_copyrightLabel.font = [UIFont systemFontOfSize:13];
[root addSubview:_copyrightLabel];
[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissSelf)]];
}
- (void)layoutForVerticalLayout
{
UIView *root = ((UIVisualEffectView *)self.view).contentView;
CGRect savedFrame = root.frame;
root.frame = CGRectMake(0, 0, 320, 480);
_titleLabel.frame = CGRectMake(0, 20, 320, 47);
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
_versionLabel.frame = CGRectMake(0, 75, 320, 36);
_versionLabel.textAlignment = NSTextAlignmentCenter;
_versionLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
_logo.frame = CGRectMake(0, 119, 320, 128);
_logo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
_buttonsView.frame = CGRectMake(0, 255, 320, 176);
_buttonsView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_licenseView.frame = CGRectMake(20, 255, 280, 176);
_licenseView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_copyrightLabel.frame = CGRectMake(0, 450, 320, 21);
_copyrightLabel.textAlignment = NSTextAlignmentCenter;
_copyrightLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
root.frame = savedFrame;
}
- (void)layoutForHorizontalLayout
{
UIView *root = ((UIVisualEffectView *)self.view).contentView;
CGRect savedFrame = root.frame;
root.frame = CGRectMake(0, 0, 568, 320);
_titleLabel.frame = CGRectMake(20, 20, 260, 47);
_titleLabel.textAlignment = NSTextAlignmentLeft;
_titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleRightMargin;
_versionLabel.frame = CGRectMake(20, 75, 260, 36);
_versionLabel.textAlignment = NSTextAlignmentLeft;
_versionLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleRightMargin;
_logo.frame = CGRectMake(0, 119, 284, 152);
_logo.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleHeight;
_buttonsView.frame = _licenseView.frame = CGRectMake(284, 20, 284, 280);
_buttonsView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleLeftMargin;
_licenseView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleLeftMargin;
_copyrightLabel.frame = CGRectMake(20, 288, 260, 21);
_copyrightLabel.textAlignment = NSTextAlignmentLeft;
_copyrightLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleRightMargin;
root.frame = savedFrame;
CGRect licenseFrame = _licenseView.frame;
licenseFrame.size.width -= 40;
licenseFrame.origin.x += 20;
_licenseView.frame = licenseFrame;
}
- (void)openWebsite
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://sameboy.github.io"] options:nil completionHandler:nil];
}
- (void)openSponsor
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/sponsors/LIJI32"] options:nil completionHandler:nil];
}
- (void)showLicense
{
_buttonsView.hidden = true;
_licenseView.hidden = false;
_licenseView.userInteractionEnabled = true;
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if ([UIDevice currentDevice].userInterfaceIdiom != UIUserInterfaceIdiomPad) {
UIEdgeInsets insets = self.view.window.safeAreaInsets;
UIView *view = ((UIVisualEffectView *)self.view).contentView;
CGRect parentFrame = self.view.frame;
view.frame = CGRectMake(insets.left,
0,
parentFrame.size.width - insets.left - insets.right,
parentFrame.size.height - insets.bottom);
}
if (self.view.frame.size.width > self.view.frame.size.height) {
[self layoutForHorizontalLayout];
}
else {
[self layoutForVerticalLayout];
}
}
- (void)dismissSelf
{
[self.presentingViewController dismissViewControllerAnimated:true completion:nil];
}
- (UIModalPresentationStyle)modalPresentationStyle
{
return UIModalPresentationFormSheet;
}
@end