diff --git a/CocoaSplit/CSInputLayer.h b/CocoaSplit/CSInputLayer.h index 1bc6540e..706fc0a8 100644 --- a/CocoaSplit/CSInputLayer.h +++ b/CocoaSplit/CSInputLayer.h @@ -7,10 +7,10 @@ // #import - +#import @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 diff --git a/CocoaSplit/CSInputLayer.m b/CocoaSplit/CSInputLayer.m index 53a07759..60fcfbf9 100644 --- a/CocoaSplit/CSInputLayer.m +++ b/CocoaSplit/CSInputLayer.m @@ -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 { diff --git a/CocoaSplit/InputSource.m b/CocoaSplit/InputSource.m index 68ebfdde..df7d34f9 100644 --- a/CocoaSplit/InputSource.m +++ b/CocoaSplit/InputSource.m @@ -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"]; diff --git a/CocoaSplit/Interface/InputPopupControllerViewController.xib b/CocoaSplit/Interface/InputPopupControllerViewController.xib index 3868511c..f7b5bcb8 100644 --- a/CocoaSplit/Interface/InputPopupControllerViewController.xib +++ b/CocoaSplit/Interface/InputPopupControllerViewController.xib @@ -519,7 +519,7 @@ - + @@ -527,14 +527,14 @@ - + + + + + + + + + + + + diff --git a/CocoaSplit/LayoutRenderer.m b/CocoaSplit/LayoutRenderer.m index cba711ff..181e01fb 100644 --- a/CocoaSplit/LayoutRenderer.m +++ b/CocoaSplit/LayoutRenderer.m @@ -175,6 +175,7 @@ { [self.rootLayer replaceSublayer:self.layout.rootLayer with:saveLayer]; + } else { [self.rootLayer addSublayer:self.layout.rootLayer]; } diff --git a/CocoaSplit/en.lproj/MainMenu.xib b/CocoaSplit/en.lproj/MainMenu.xib index 9c1f53ff..fee16686 100644 --- a/CocoaSplit/en.lproj/MainMenu.xib +++ b/CocoaSplit/en.lproj/MainMenu.xib @@ -2010,7 +2010,7 @@ - + @@ -2241,7 +2241,7 @@ MgA3AEEARwBQAFcAXABkAHkAewB9AH8AgQCLAJAAlQCgAKMApQCnAKkArgC5AMIAygDNANYA2wDoAOwA - + diff --git a/InputPopupControllerViewController.h b/InputPopupControllerViewController.h index ec74fbaa..f2da2316 100644 --- a/InputPopupControllerViewController.h +++ b/InputPopupControllerViewController.h @@ -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; diff --git a/InputPopupControllerViewController.m b/InputPopupControllerViewController.m index cb351dff..ade601c1 100644 --- a/InputPopupControllerViewController.m +++ b/InputPopupControllerViewController.m @@ -422,6 +422,12 @@ +-(IBAction) clearGradient:(NSButton *)sender +{ + + [self.inputSource.layer clearGradient]; +} + - (IBAction)resetConstraints:(id)sender