Changed CSInputLayer to a subclass of CAGradientLayer. Added simple gradient configuration in the settings dialog. A configured gradient is drawn OVER the background color. If you set the opacity of gradient colors to less than 1 the configured background color will bleed through appropriately.

This commit is contained in:
Zakk 2015-04-22 05:21:07 -04:00
parent 9275b7bca3
commit d5ec017120
8 changed files with 294 additions and 7 deletions

View file

@ -7,10 +7,10 @@
//
#import <QuartzCore/QuartzCore.h>
#import <AppKit/AppKit.h>
@class InputSource;
@interface CSInputLayer : CALayer
@interface CSInputLayer : CAGradientLayer
{
//CAReplicatorLayer *_xLayer;
CAReplicatorLayer *_yLayer;
@ -33,9 +33,21 @@
@property (nonatomic, assign) CGFloat fakeWidth;
@property (nonatomic, assign) CGFloat fakeHeight;
@property (strong) NSColor *startColor;
@property (strong) NSColor *stopColor;
@property (assign) CGFloat gradientStartX;
@property (assign) CGFloat gradientStartY;
@property (assign) CGFloat gradientStopX;
@property (assign) CGFloat gradientStopY;
-(void)setSourceLayer:(CALayer *)sourceLayer withTransition:(CATransition *)transition;
-(void)frameTick;
-(void)transitionToLayer:(CALayer *)toLayer fromLayer:(CALayer *)fromLayer withTransition:(CATransition *)transition;
-(void)transitionsDisabled;
-(void)clearGradient;
@end

View file

@ -17,6 +17,9 @@
@synthesize scrollXSpeed = _scrollXSpeed;
@synthesize scrollYSpeed = _scrollYSpeed;
@synthesize cropRect = _cropRect;
@synthesize startColor = _startColor;
@synthesize stopColor = _stopColor;
@dynamic fakeHeight;
@dynamic fakeWidth;
@ -113,6 +116,129 @@
}
-(void)clearGradient
{
self.colors = @[];
self.startColor = nil;
self.stopColor = nil;
}
-(void)setGradientStartX:(CGFloat)gradientStartX
{
CGPoint cBounds = self.startPoint;
cBounds.x = gradientStartX;
self.startPoint = cBounds;
}
-(CGFloat)gradientStartX
{
return self.startPoint.x;
}
-(void)setGradientStartY:(CGFloat)gradientStartY
{
CGPoint cBounds = self.startPoint;
cBounds.y = gradientStartY;
self.startPoint = cBounds;
}
-(CGFloat)gradientStartY
{
return self.startPoint.y;
}
-(void)setGradientStopX:(CGFloat)gradientStopX
{
CGPoint cBounds = self.endPoint;
cBounds.x = gradientStopX;
self.endPoint = cBounds;
}
-(CGFloat)gradientStopX
{
return self.endPoint.x;
}
-(void)setGradientStopY:(CGFloat)gradientStopY
{
CGPoint cBounds = self.endPoint;
cBounds.y = gradientStopY;
self.endPoint = cBounds;
}
-(CGFloat)gradientStopY
{
return self.endPoint.y;
}
-(void)setStartColor:(NSColor *)startColor
{
if (!startColor)
{
return;
}
CGColorRef newStart = CGColorRetain(startColor.CGColor);
_startColor = startColor;
NSMutableArray *newColors = [NSMutableArray array];
[newColors addObject:(id)CFBridgingRelease(newStart)];
id lastColor = self.colors.lastObject;
if (lastColor)
{
[newColors addObject:lastColor];
}
self.colors = newColors;
}
-(NSColor *)startColor
{
return _startColor;
}
-(void)setStopColor:(NSColor *)stopColor
{
if (!stopColor)
{
return;
}
CGColorRef newStop = CGColorRetain(stopColor.CGColor);
_stopColor = stopColor;
NSMutableArray *newColors = [NSMutableArray array];
id startColor = self.colors.firstObject;
if (startColor)
{
[newColors addObject:startColor];
}
[newColors addObject:(id)CFBridgingRelease(newStop)];
self.colors = newColors;
}
-(NSColor *)stopColor
{
return _stopColor;
}
-(void)frameTick
{

View file

@ -162,6 +162,16 @@ static NSArray *_sourceTypes = nil;
[aCoder encodeObject:self.constraintMap forKey:@"constraintMap"];
[aCoder encodeObject:self.layer.startColor forKey:@"gradientStartColor"];
[aCoder encodeObject:self.layer.stopColor forKey:@"gradientStopColor"];
[aCoder encodeFloat: self.layer.startPoint.x forKey:@"gradientStartPointX"];
[aCoder encodeFloat: self.layer.startPoint.y forKey:@"gradientStartPointY"];
[aCoder encodeFloat: self.layer.endPoint.x forKey:@"gradientEndPointX"];
[aCoder encodeFloat: self.layer.endPoint.y forKey:@"gradientEndPointY"];
[aCoder encodeObject:self.layer.filters forKey:@"layerFilters"];
if (_userBackground)
@ -381,6 +391,20 @@ static NSArray *_sourceTypes = nil;
[self buildLayerConstraints];
}
self.layer.startColor = [aDecoder decodeObjectForKey:@"gradientStartColor"];
self.layer.stopColor = [aDecoder decodeObjectForKey:@"gradientStopColor"];
self.layer.gradientStartX = [aDecoder decodeFloatForKey:@"gradientStartPointX"];
self.layer.gradientStartY = [aDecoder decodeFloatForKey:@"gradientStartPointY"];
self.layer.gradientStopX = [aDecoder decodeFloatForKey:@"gradientEndPointX"];
self.layer.gradientStopY = [aDecoder decodeFloatForKey:@"gradientEndPointY"];
self.layer.filters = [aDecoder decodeObjectForKey:@"layerFilters"];

View file

@ -519,7 +519,7 @@
<font key="titleFont" metaFont="system"/>
</box>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m45-gD-fqn">
<rect key="frame" x="254" y="152" width="100" height="14"/>
<rect key="frame" x="15" y="117" width="100" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Background Color" id="cMD-l0-1zH">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -527,14 +527,14 @@
</textFieldCell>
</textField>
<colorWell fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MYi-0Z-X4u">
<rect key="frame" x="360" y="148" width="44" height="23"/>
<rect key="frame" x="132" y="113" width="44" height="23"/>
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.backgroundColor" id="xWM-uT-IWE"/>
</connections>
</colorWell>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NTl-Bn-3Hq">
<rect key="frame" x="407" y="144" width="59" height="28"/>
<rect key="frame" x="179" y="109" width="59" height="28"/>
<buttonCell key="cell" type="push" title="Clear" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="9Wg-xZ-gwB">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
@ -553,6 +553,122 @@
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<font key="titleFont" metaFont="system"/>
</box>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="N2b-0k-tTo">
<rect key="frame" x="15" y="90" width="111" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Gradient Start Color" id="SdE-Kn-dVn">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HMn-kV-Oei">
<rect key="frame" x="15" y="63" width="110" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Gradient Stop Color" id="kZU-hO-1xs">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<colorWell fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QUu-H4-Sr4">
<rect key="frame" x="132" y="86" width="44" height="23"/>
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.startColor" id="PM0-Cc-yOr"/>
</connections>
</colorWell>
<colorWell fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CVI-Ly-scM">
<rect key="frame" x="132" y="59" width="44" height="23"/>
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.stopColor" id="Rs8-J6-xhW"/>
</connections>
</colorWell>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PbG-mI-o0s">
<rect key="frame" x="182" y="63" width="12" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="X" id="UTo-Zi-3hP">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HuF-R3-4tW">
<rect key="frame" x="245" y="90" width="12" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Y" id="Nto-Bf-P1V">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hCF-Fy-wvw">
<rect key="frame" x="245" y="63" width="12" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Y" id="9hw-uJ-Dar">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sdx-pu-hBR">
<rect key="frame" x="182" y="90" width="12" height="14"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="X" id="sw9-mt-Iqh">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="inZ-TA-S78">
<rect key="frame" x="200" y="61" width="39" height="19"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="lae-8f-a9F">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.gradientStopX" id="0k6-4t-EdZ"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wMU-lB-vGu">
<rect key="frame" x="200" y="88" width="39" height="19"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="WuV-JZ-XbZ">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.gradientStartX" id="JqZ-4m-NEe"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7U4-ln-Kcs">
<rect key="frame" x="263" y="88" width="39" height="19"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1Xo-ub-15U">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.gradientStartY" id="wyu-8P-fVi"/>
</connections>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oFb-MA-BZO">
<rect key="frame" x="17" y="26" width="103" height="28"/>
<buttonCell key="cell" type="push" title="Clear Gradient" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="RVy-wt-Hfx">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<connections>
<action selector="clearGradient:" target="-2" id="rhJ-sR-ZNA"/>
</connections>
</button>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8AQ-Bm-xvX">
<rect key="frame" x="263" y="61" width="39" height="19"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1CO-0V-sK1">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.layer.gradientStopY" id="Qft-de-Fiy"/>
</connections>
</textField>
</subviews>
</view>
</tabViewItem>

View file

@ -175,6 +175,7 @@
{
[self.rootLayer replaceSublayer:self.layout.rootLayer with:saveLayer];
} else {
[self.rootLayer addSublayer:self.layout.rootLayer];
}

View file

@ -2010,7 +2010,7 @@
<constraint firstItem="2368" firstAttribute="top" secondItem="372" secondAttribute="top" id="t3R-20-X4J"/>
</constraints>
</view>
<point key="canvasLocation" x="358.5" y="220"/>
<point key="canvasLocation" x="339.5" y="110"/>
</window>
<dictionaryController objectClassName="_NSControllerKeyValuePair" id="gSI-N4-DsK" userLabel="CompressorDictionaryController">
<connections>
@ -2241,7 +2241,7 @@ MgA3AEEARwBQAFcAXABkAHkAewB9AH8AgQCLAJAAlQCgAKMApQCnAKkArgC5AMIAygDNANYA2wDoAOwA
</connections>
</segmentedControl>
</subviews>
<point key="canvasLocation" x="885.5" y="194.5"/>
<point key="canvasLocation" x="872.5" y="291.5"/>
</view>
<view id="bRh-Lo-mbG">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>

View file

@ -50,6 +50,8 @@
- (IBAction)addFilterAction:(NSButton *)sender;
-(IBAction) clearGradient:(NSButton *)sender;
@property (weak) IBOutlet NSArrayController *multiSourceController;
@property (weak) IBOutlet NSArrayController *currentEffectsController;
@property (weak) IBOutlet NSWindow *cropSelectionWindow;

View file

@ -422,6 +422,12 @@
-(IBAction) clearGradient:(NSButton *)sender
{
[self.inputSource.layer clearGradient];
}
- (IBAction)resetConstraints:(id)sender