Swiftgram/submodules/LegacyComponents/Sources/TGPhotoBrushSettingsView.m
2020-02-22 15:38:54 +04:00

227 lines
7.2 KiB
Objective-C

#import "TGPhotoBrushSettingsView.h"
#import "LegacyComponentsInternal.h"
#import "TGImageUtils.h"
#import "TGPhotoEditorSliderView.h"
#import <LegacyComponents/TGModernButton.h>
#import "TGPaintBrush.h"
#import "TGPaintBrushPreview.h"
const CGFloat TGPhotoBrushSettingsViewMargin = 19.0f;
const CGFloat TGPhotoBrushSettingsItemHeight = 44.0f;
@interface TGPhotoBrushSettingsView ()
{
NSArray *_brushes;
TGPaintBrushPreview *_preview;
UIImageView *_backgroundView;
NSArray *_brushViews;
NSArray *_brushSeparatorViews;
UIImageView *_selectedCheckView;
UIImage *_landscapeLeftBackgroundImage;
UIImage *_landscapeRightBackgroundImage;
UIImage *_portraitBackgroundImage;
}
@end
@implementation TGPhotoBrushSettingsView
@synthesize interfaceOrientation = _interfaceOrientation;
- (instancetype)initWithBrushes:(NSArray *)brushes preview:(TGPaintBrushPreview *)preview
{
self = [super initWithFrame:CGRectZero];
if (self != nil)
{
_brushes = brushes;
_preview = preview;
_interfaceOrientation = UIInterfaceOrientationPortrait;
_backgroundView = [[UIImageView alloc] init];
//_backgroundView.alpha = 0.98f;
[self addSubview:_backgroundView];
NSMutableArray *brushViews = [[NSMutableArray alloc] init];
NSMutableArray *separatorViews = [[NSMutableArray alloc] init];
[brushes enumerateObjectsUsingBlock:^(__unused TGPaintBrush *brush, NSUInteger index, __unused BOOL *stop)
{
TGModernButton *button = [[TGModernButton alloc] initWithFrame:CGRectMake(0, TGPhotoBrushSettingsViewMargin + index * TGPhotoBrushSettingsItemHeight, 0, 0)];
button.tag = index;
button.imageView.contentMode = UIViewContentModeCenter;
button.contentEdgeInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 0.0f);
[button addTarget:self action:@selector(brushButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button];
[brushViews addObject:button];
if (index != brushes.count - 1)
{
UIView *separatorView = [[UIView alloc] init];
separatorView.backgroundColor = UIColorRGB(0xd6d6da);
[self addSubview:separatorView];
[separatorViews addObject:separatorView];
}
}];
_brushViews = brushViews;
_brushSeparatorViews = separatorViews;
_selectedCheckView = [[UIImageView alloc] initWithImage:TGComponentsImageNamed(@"PaintCheck")];
_selectedCheckView.frame = CGRectMake(15.0f, 16.0f, _selectedCheckView.frame.size.width, _selectedCheckView.frame.size.height);
}
return self;
}
- (void)brushButtonPressed:(TGModernButton *)sender
{
[sender addSubview:_selectedCheckView];
if (self.brushChanged != nil)
self.brushChanged(_brushes[sender.tag]);
}
- (void)present
{
self.alpha = 0.0f;
self.layer.rasterizationScale = TGScreenScaling();
self.layer.shouldRasterize = true;
[self _setupBrushPreviews];
[UIView animateWithDuration:0.2 animations:^
{
self.alpha = 1.0f;
} completion:^(__unused BOOL finished)
{
//self.layer.shouldRasterize = false;
}];
}
- (void)dismissWithCompletion:(void (^)(void))completion
{
self.layer.rasterizationScale = TGScreenScaling();
self.layer.shouldRasterize = true;
[UIView animateWithDuration:0.15 animations:^
{
self.alpha = 0.0f;
} completion:^(__unused BOOL finished)
{
if (completion != nil)
completion();
}];
}
- (void)_setupBrushPreviews
{
[_brushes enumerateObjectsUsingBlock:^(TGPaintBrush *aBrush, NSUInteger index, __unused BOOL *stop)
{
UIImage *image = aBrush.previewImage;
if (image == nil)
{
image = [_preview imageForBrush:aBrush size:CGSizeMake([self sizeThatFits:CGSizeZero].width - 85.0f, TGPhotoBrushSettingsItemHeight)];
aBrush.previewImage = image;
}
[_brushViews[index] setImage:image forState:UIControlStateNormal];
}];
}
- (TGPaintBrush *)brush
{
return _brushes[_selectedCheckView.superview.tag];
}
- (void)setBrush:(TGPaintBrush *)brush
{
[_brushes enumerateObjectsUsingBlock:^(TGPaintBrush *aBrush, NSUInteger index, BOOL *stop)
{
if ([brush isEqual:aBrush])
{
[_brushViews[index] addSubview:_selectedCheckView];
*stop = true;
}
}];
}
- (CGSize)sizeThatFits:(CGSize)__unused size
{
return CGSizeMake(256, _brushViews.count * TGPhotoBrushSettingsItemHeight + TGPhotoBrushSettingsViewMargin * 2);
}
- (void)setInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
_interfaceOrientation = interfaceOrientation;
switch (self.interfaceOrientation)
{
case UIInterfaceOrientationLandscapeLeft:
{
_backgroundView.image = [TGPhotoPaintSettingsView landscapeLeftBackgroundImage];
}
break;
case UIInterfaceOrientationLandscapeRight:
{
_backgroundView.image = [TGPhotoPaintSettingsView landscapeRightBackgroundImage];
}
break;
default:
{
_backgroundView.image = [TGPhotoPaintSettingsView portraitBackgroundImage];
}
break;
}
[self setNeedsLayout];
}
- (void)layoutSubviews
{
switch (self.interfaceOrientation)
{
case UIInterfaceOrientationLandscapeLeft:
{
_backgroundView.frame = CGRectMake(TGPhotoBrushSettingsViewMargin - 13.0f, TGPhotoBrushSettingsViewMargin, self.frame.size.width - TGPhotoBrushSettingsViewMargin * 2 + 13.0f, self.frame.size.height - TGPhotoBrushSettingsViewMargin * 2);
}
break;
case UIInterfaceOrientationLandscapeRight:
{
_backgroundView.frame = CGRectMake(TGPhotoBrushSettingsViewMargin, TGPhotoBrushSettingsViewMargin, self.frame.size.width - TGPhotoBrushSettingsViewMargin * 2 + 13.0f, self.frame.size.height - TGPhotoBrushSettingsViewMargin * 2);
}
break;
default:
{
_backgroundView.frame = CGRectMake(TGPhotoBrushSettingsViewMargin, TGPhotoBrushSettingsViewMargin, self.frame.size.width - TGPhotoBrushSettingsViewMargin * 2, self.frame.size.height - TGPhotoBrushSettingsViewMargin * 2 + 13.0f);
}
break;
}
CGFloat thickness = TGScreenPixel;
[_brushViews enumerateObjectsUsingBlock:^(TGModernButton *view, NSUInteger index, __unused BOOL *stop)
{
view.frame = CGRectMake(TGPhotoBrushSettingsViewMargin, TGPhotoBrushSettingsViewMargin + TGPhotoBrushSettingsItemHeight * index, self.frame.size.width - TGPhotoBrushSettingsViewMargin * 2, TGPhotoBrushSettingsItemHeight);
}];
[_brushSeparatorViews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger index, __unused BOOL *stop)
{
view.frame = CGRectMake(TGPhotoBrushSettingsViewMargin + 44.0f, TGPhotoBrushSettingsViewMargin + TGPhotoBrushSettingsItemHeight * (index + 1), self.frame.size.width - TGPhotoBrushSettingsViewMargin * 2 - 44.0f, thickness);
}];
}
@end