1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-03 09:57:46 +01:00
Telegram/thirdparty/PGPhotoEditor/PGWarmthTool.m
2015-10-01 19:19:52 +03:00

89 lines
1.8 KiB
Objective-C

#import "PGWarmthTool.h"
@interface PGWarmthTool ()
{
PGPhotoProcessPassParameter *_parameter;
}
@end
@implementation PGWarmthTool
- (instancetype)init
{
self = [super init];
if (self != nil)
{
_identifier = @"warmth";
_type = PGPhotoToolTypeShader;
_order = 11;
_minimumValue = -100;
_maximumValue = 100;
_defaultValue = 0;
self.value = @(_defaultValue);
}
return self;
}
- (NSString *)title
{
return TGLocalized(@"PhotoEditor.WarmthTool");
}
- (UIImage *)image
{
return [UIImage imageNamed:@"PhotoEditorWarmthTool"];
}
- (bool)shouldBeSkipped
{
return (ABS(((NSNumber *)self.displayValue).floatValue - self.defaultValue) < FLT_EPSILON);
}
- (NSArray *)parameters
{
if (!_parameters)
{
_parameter = [PGPhotoProcessPassParameter parameterWithName:@"warmth" type:@"lowp float"];
_parameters = @[ _parameter ];
}
return _parameters;
}
- (void)updateParameters
{
NSNumber *value = (NSNumber *)self.displayValue;
CGFloat parameterValue = value.floatValue / 100.0f;
[_parameter setFloatValue:parameterValue];
}
- (NSString *)shaderString
{
return PGShaderString
(
if (abs(warmth) > toolEpsilon) {
highp vec3 yuvVec;
if (warmth > 0.0 ) {
yuvVec = vec3(0.1765, -0.1255, 0.0902);
}
else {
yuvVec = -vec3(0.0588, 0.1569, -0.1255);
}
highp vec3 yuvColor = rgbToYuv(result.rgb);
highp float luma = yuvColor.r;
highp float curveScale = sin(luma * 3.14159);
yuvColor += 0.375 * warmth * curveScale * yuvVec;
result.rgb = yuvToRgb(yuvColor);
}
);
}
@end