Swiftgram/submodules/LegacyComponents/Sources/TGPhotoEditorHUDView.m
Ilya Laktyushin a47c3777e6 Various Fixes
2021-02-18 01:47:34 +04:00

151 lines
4.6 KiB
Objective-C

#import "TGPhotoEditorHUDView.h"
#import "LegacyComponentsInternal.h"
#import "TGFont.h"
#import "TGPhotoEditorInterfaceAssets.h"
@interface TGPhotoEditorHUDView ()
{
UIImageView *_backgroundView;
UILabel *_label;
UILabel *_valueLabel;
}
@end
@implementation TGPhotoEditorHUDView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
self.userInteractionEnabled = false;
static UIImage *background = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(21, 21), false, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [TGPhotoEditorInterfaceAssets panelBackgroundColor].CGColor);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 21, 21) cornerRadius:6];
[path fill];
background = [UIGraphicsGetImageFromCurrentImageContext() resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
UIGraphicsEndImageContext();
});
_backgroundView = [[UIImageView alloc] initWithFrame:CGRectZero];
_backgroundView.alpha = 0.0f;
_backgroundView.image = background;
[self addSubview:_backgroundView];
UIFont *font;
if (iosMajorVersion() >= 13) {
UIFontDescriptor *fontDescriptor = [UIFont systemFontOfSize:14.0f weight:UIFontWeightMedium].fontDescriptor;
NSArray *monospacedSetting = @[@{UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)}];
UIFontDescriptor *updatedDescriptor = [fontDescriptor fontDescriptorByAddingAttributes:@{
UIFontDescriptorFeatureSettingsAttribute: monospacedSetting
}];
if (updatedDescriptor != nil) {
font = [UIFont fontWithDescriptor:updatedDescriptor size:14.0];
} else {
font = [UIFont systemFontOfSize:14];
}
} else {
font = [UIFont systemFontOfSize:14];
}
_label = [[UILabel alloc] initWithFrame:CGRectZero];
_label.backgroundColor = [UIColor clearColor];
_label.font = [UIFont systemFontOfSize:14];
_label.textAlignment = NSTextAlignmentLeft;
_label.textColor = [UIColor whiteColor];
[_backgroundView addSubview:_label];
_valueLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_valueLabel.backgroundColor = [UIColor clearColor];
_valueLabel.font = font;
_valueLabel.textAlignment = NSTextAlignmentRight;
_valueLabel.textColor = [TGPhotoEditorInterfaceAssets accentColor];
[_backgroundView addSubview:_valueLabel];
}
return self;
}
- (void)setText:(NSString *)text
{
if (text.length == 0)
{
[self setHidden:true animated:true];
return;
}
_label.text = text;
[_label sizeToFit];
_valueLabel.hidden = true;
[self setNeedsLayout];
[self setHidden:false animated:true];
}
- (void)setTitle:(NSString *)title value:(NSString *)value
{
if (title.length == 0)
{
[self setHidden:true animated:true];
return;
}
_label.text = title;
[_label sizeToFit];
_valueLabel.text = value;
[_valueLabel sizeToFit];
[self setNeedsLayout];
[self setHidden:false animated:true];
}
- (void)setHidden:(bool)hidden animated:(bool)animated
{
if (animated)
{
[UIView animateWithDuration:0.1f delay:0 options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState animations:^
{
_backgroundView.alpha = hidden ? 0.0f : 1.0f;
} completion:nil];
}
else
{
_backgroundView.alpha = hidden ? 0.0f : 1.0f;
}
}
- (void)layoutSubviews
{
CGFloat padding = 8.0f;
_label.frame = CGRectMake(padding, 6.0f, CGCeil(_label.frame.size.width), CGCeil(_label.frame.size.height));
CGFloat width;
if (_valueLabel.isHidden) {
width = _label.frame.size.width + 2.0f * padding;
} else {
width = 2.0f * padding + _label.frame.size.width + 50.0f + 3.0f;
}
_valueLabel.frame = CGRectMake(width - padding - 50.0f, 6.0f, 50.0f, CGCeil(_valueLabel.frame.size.height));
_backgroundView.frame = CGRectMake((self.frame.size.width - width) / 2, 15, width, 30);
}
@end