forked from sprang/Inkpad
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWDColorBalanceController.m
More file actions
103 lines (82 loc) · 3.77 KB
/
WDColorBalanceController.m
File metadata and controls
103 lines (82 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// WDColorBalanceController.m
// Inkpad
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2011-2013 Steve Sprang
//
#import "WDCanvas.h"
#import "WDCanvasController.h"
#import "WDColor.h"
#import "WDColorBalanceController.h"
#import "WDColorSlider.h"
#import "WDDrawingController.h"
@implementation WDColorBalanceController
- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (!self) {
return nil;
}
self.defaultsName = @"color balance";
return self;
}
- (void) performAdjustment
{
[self.drawingController adjustColor:^(WDColor *color) { return [color colorBalanceRed:redShift_
green:greenShift_
blue:blueShift_]; }
scope:(WDColorAdjustStroke | WDColorAdjustFill | WDColorAdjustShadow)];
}
- (void) takeShiftFrom:(WDColorSlider *)sender
{
float value = ([sender floatValue] - 0.5f) * 2;
if (sender.tag == 0) {
[redSlider_ setColor:[[WDColor cyanColor] blendedColorWithFraction:[sender floatValue] ofColor:[WDColor redColor]]];
redShift_ = value;
redLabel_.text = [self.formatter stringFromNumber:@((int) roundf(redShift_ * 100))];
} else if (sender.tag == 1) {
[greenSlider_ setColor:[[WDColor magentaColor] blendedColorWithFraction:[sender floatValue] ofColor:[WDColor greenColor]]];
greenShift_ = value;
greenLabel_.text = [self.formatter stringFromNumber:@((int) roundf(greenShift_ * 100))];
} else {
[blueSlider_ setColor:[[WDColor yellowColor] blendedColorWithFraction:[sender floatValue] ofColor:[WDColor blueColor]]];
blueShift_ = value;
blueLabel_.text = [self.formatter stringFromNumber:@((int) roundf(blueShift_ * 100))];
}
}
- (void) takeFinalShiftFrom:(WDColorSlider *)sender
{
[self performAdjustment];
}
- (void) resetShiftsToZero
{
redShift_ = greenShift_ = blueShift_ = 0.0f;
[redSlider_ setColor:[[WDColor cyanColor] blendedColorWithFraction:0.5f ofColor:[WDColor redColor]]];
[greenSlider_ setColor:[[WDColor magentaColor] blendedColorWithFraction:0.5f ofColor:[WDColor greenColor]]];
[blueSlider_ setColor:[[WDColor yellowColor] blendedColorWithFraction:0.5f ofColor:[WDColor blueColor]]];
// reset labels
redLabel_.text = @"0";
greenLabel_.text = @"0";
blueLabel_.text = @"0";
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
[redSlider_ setMode:WDColorSliderModeRedBalance];
[greenSlider_ setMode:WDColorSliderModeGreenBalance];
[blueSlider_ setMode:WDColorSliderModeBlueBalance];
UIControlEvents dragEvents = (UIControlEventTouchDown | UIControlEventTouchDragInside | UIControlEventTouchDragOutside);
[redSlider_ addTarget:self action:@selector(takeShiftFrom:) forControlEvents:dragEvents];
[greenSlider_ addTarget:self action:@selector(takeShiftFrom:) forControlEvents:dragEvents];
[blueSlider_ addTarget:self action:@selector(takeShiftFrom:) forControlEvents:dragEvents];
UIControlEvents touchEndEvents = (UIControlEventTouchUpInside | UIControlEventTouchUpOutside);
[redSlider_ addTarget:self action:@selector(takeFinalShiftFrom:) forControlEvents:touchEndEvents];
[greenSlider_ addTarget:self action:@selector(takeFinalShiftFrom:) forControlEvents:touchEndEvents];
[blueSlider_ addTarget:self action:@selector(takeFinalShiftFrom:) forControlEvents:touchEndEvents];
}
@end