code from nickshanks to generate the progress bars without images, also makes the bars resolution independent

This commit is contained in:
Mitchell Livingston 2007-05-23 21:34:14 +00:00
parent eadedea754
commit 78ec2e2551
22 changed files with 3589 additions and 142 deletions

74
CTGradient.h Normal file
View File

@ -0,0 +1,74 @@
//
// CTGradient.h
//
// Created by Chad Weider on 2/14/07.
// Copyright (c) 2007 Chad Weider.
// Some rights reserved: <http://creativecommons.org/licenses/by/2.5/>
//
// Version: 1.6
#import <Cocoa/Cocoa.h>
typedef struct _CTGradientElement
{
float red, green, blue, alpha;
float position;
struct _CTGradientElement *nextElement;
} CTGradientElement;
typedef enum _CTBlendingMode
{
CTLinearBlendingMode,
CTChromaticBlendingMode,
CTInverseChromaticBlendingMode
} CTGradientBlendingMode;
@interface CTGradient : NSObject <NSCopying, NSCoding>
{
CTGradientElement* elementList;
CTGradientBlendingMode blendingMode;
CGFunctionRef gradientFunction;
}
+ (id)gradientWithBeginningColor:(NSColor *)begin endingColor:(NSColor *)end;
+ (id)aquaSelectedGradient;
+ (id)aquaNormalGradient;
+ (id)aquaPressedGradient;
+ (id)unifiedSelectedGradient;
+ (id)unifiedNormalGradient;
+ (id)unifiedPressedGradient;
+ (id)unifiedDarkGradient;
+ (id)sourceListSelectedGradient;
+ (id)sourceListUnselectedGradient;
+ (id)rainbowGradient;
+ (id)hydrogenSpectrumGradient;
- (CTGradient *)gradientWithAlphaComponent:(float)alpha;
- (void)addElement:(CTGradientElement*)newElement;
- (CTGradient *)addColorStop:(NSColor *)color atPosition:(float)position; //positions given relative to [0,1]
- (CTGradient *)removeColorStopAtIndex:(unsigned)index;
- (CTGradient *)removeColorStopAtPosition:(float)position;
- (CTGradientBlendingMode)blendingMode;
- (NSColor *)colorStopAtIndex:(unsigned)index;
- (NSColor *)colorAtPosition:(float)position;
- (void)drawSwatchInRect:(NSRect)rect;
- (void)fillRect:(NSRect)rect angle:(float)angle; //fills rect with axial gradient
// angle in degrees
- (void)radialFillRect:(NSRect)rect; //fills rect with radial gradient
// gradient from center outwards
- (void)fillBezierPath:(NSBezierPath *)path angle:(float)angle;
- (void)radialFillBezierPath:(NSBezierPath *)path;
@end

1253
CTGradient.m Normal file

File diff suppressed because it is too large Load Diff

44
CTGradientAdditions.h Normal file
View File

@ -0,0 +1,44 @@
/******************************************************************************
* $Id$
*
* Copyright (c) 2007 Transmission authors and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
#import "CTGradient.h"
@interface CTGradient (ActionBarView)
+ (CTGradient *)actionNormalGradient;
+ (CTGradient *)actionPressedGradient;
@end
@interface CTGradient (ProgressBar)
+ (CTGradient *)progressWhiteGradient;
+ (CTGradient *)progressGreyGradient;
+ (CTGradient *)progressBlueGradient;
+ (CTGradient *)progressGreenGradient;
+ (CTGradient *)progressLightGreenGradient;
+ (CTGradient *)progressTransparentGradient;
@end
@interface CTGradient (MiddleColour)
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end;
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1 middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end;
@end

387
CTGradientAdditions.m Normal file
View File

@ -0,0 +1,387 @@
/******************************************************************************
* $Id$
*
* Copyright (c) 2007 Transmission authors and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
#import "CTGradientAdditions.h"
@implementation CTGradient (ActionBar)
+ (CTGradient *)actionNormalGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.9;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.9;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.95;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 1.0;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)actionPressedGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.80;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.64;
color2.alpha = 1.00;
color2.position = 11.5/23;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.80;
color3.alpha = 1.00;
color3.position = 11.5/23;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.77;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end
@implementation CTGradient (ProgressBar)
+ (CTGradient *)progressWhiteGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.95;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.8;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.95;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.95;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressGreyGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.7;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.6;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.7;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.7;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressBlueGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.416;
color1.green = 0.788;
color1.blue = 0.97;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.274;
color2.green = 0.52;
color2.blue = 0.94;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.372;
color3.green = 0.635;
color3.blue = 0.98;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.396;
color4.green = 0.66;
color4.blue = 1.00;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressGreenGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.270;
color1.green = 0.89;
color1.blue = 0.35;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.180;
color2.green = 0.71;
color2.blue = 0.23;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.420;
color3.green = 0.86;
color3.blue = 0.32;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.466;
color4.green = 0.89;
color4.blue = 0.34;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressLightGreenGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.478;
color1.green = 1.00;
color1.blue = 0.55;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.388;
color2.green = 0.92;
color2.blue = 0.44;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.627;
color3.green = 1.00;
color3.blue = 0.53;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.675;
color4.green = 1.00;
color4.blue = 0.55;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressTransparentGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 1.0;
color1.alpha = 0.65;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 1.0;
color2.alpha = 0.05;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 1.0;
color3.alpha = 0.4;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 1.0;
color4.alpha = 0.4;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end
@implementation CTGradient (MiddleColour)
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
CTGradientElement color2;
CTGradientElement color3;
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
green:&color1.green
blue:&color1.blue
alpha:&color1.alpha];
[[middle colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
green:&color2.green
blue:&color2.blue
alpha:&color2.alpha];
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
green:&color3.green
blue:&color3.blue
alpha:&color3.alpha];
color1.position = 0;
color2.position = 0.5;
color3.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
return [newInstance autorelease];
}
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1 middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
CTGradientElement color2;
CTGradientElement color3;
CTGradientElement color4;
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
green:&color1.green
blue:&color1.blue
alpha:&color1.alpha];
[[middle1 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
green:&color2.green
blue:&color2.blue
alpha:&color2.alpha];
[[middle2 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
green:&color3.green
blue:&color3.blue
alpha:&color3.alpha];
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color4.red
green:&color4.green
blue:&color4.blue
alpha:&color4.alpha];
color1.position = 0;
color2.position = 0.5;
color3.position = 0.5;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end

View File

@ -98,16 +98,6 @@
A21F5C040AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m */; };
A2265F420B5EF5F40093DDA5 /* FileBrowserCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */; };
A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; };
A2305A800A3DC9E400AB2D77 /* ProgressBarWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305A7C0A3DC9E400AB2D77 /* ProgressBarWhite.png */; };
A2305A810A3DC9E400AB2D77 /* ProgressBarBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305A7D0A3DC9E400AB2D77 /* ProgressBarBlue.png */; };
A2305A820A3DC9E400AB2D77 /* ProgressBarGray.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305A7E0A3DC9E400AB2D77 /* ProgressBarGray.png */; };
A2305A830A3DC9E400AB2D77 /* ProgressBarGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305A7F0A3DC9E400AB2D77 /* ProgressBarGreen.png */; };
A2305A950A3DCAC500AB2D77 /* ProgressBarAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305A940A3DCAC500AB2D77 /* ProgressBarAdvanced.png */; };
A2305AA90A3DCCEF00AB2D77 /* ProgressBarEndAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305AA40A3DCCEF00AB2D77 /* ProgressBarEndAdvanced.png */; };
A2305AAA0A3DCCEF00AB2D77 /* ProgressBarEndBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305AA50A3DCCEF00AB2D77 /* ProgressBarEndBlue.png */; };
A2305AAB0A3DCCEF00AB2D77 /* ProgressBarEndWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305AA60A3DCCEF00AB2D77 /* ProgressBarEndWhite.png */; };
A2305AAC0A3DCCEF00AB2D77 /* ProgressBarEndGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305AA70A3DCCEF00AB2D77 /* ProgressBarEndGreen.png */; };
A2305AAD0A3DCCEF00AB2D77 /* ProgressBarEndGray.png in Resources */ = {isa = PBXBuildFile; fileRef = A2305AA80A3DCCEF00AB2D77 /* ProgressBarEndGray.png */; };
A232D29E0A70903E00973B12 /* Filter.png in Resources */ = {isa = PBXBuildFile; fileRef = A232D29D0A70903E00973B12 /* Filter.png */; };
A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A2385DD20BFE06C800B24EF6 /* DragOverlayWindow.m */; };
A23BBEB70A9BBE77003F7274 /* BarButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A27431D90A68538400FA780A /* BarButton.m */; };
@ -143,7 +133,6 @@
A27ABC240A6ADE410020EC71 /* ImageBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = A27ABC220A6ADE410020EC71 /* ImageBackgroundView.m */; };
A289EB0C0A33C56D00B082A3 /* ButtonBorder.png in Resources */ = {isa = PBXBuildFile; fileRef = A289EB0B0A33C56D00B082A3 /* ButtonBorder.png */; };
A28DBADC0A33C1D800F4B4A7 /* ActionButton.png in Resources */ = {isa = PBXBuildFile; fileRef = A28DBADB0A33C1D800F4B4A7 /* ActionButton.png */; };
A28FF34E0BB23A4E001F5010 /* ProgressBarLightGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = A28FF34D0BB23A4E001F5010 /* ProgressBarLightGreen.png */; };
A2912C540A2956E80097A0CA /* PrefsWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = A2912C520A2956E80097A0CA /* PrefsWindow.nib */; };
A291DAAF0AC8BEB6003385E9 /* PiecesView.m in Sources */ = {isa = PBXBuildFile; fileRef = A291DAAD0AC8BEB6003385E9 /* PiecesView.m */; };
A29597350A72A9E10057248B /* StatusBarBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = A29597340A72A9E10057248B /* StatusBarBackground.png */; };
@ -166,6 +155,8 @@
A2F40AE40A361C00006B8288 /* Transmission.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4D2784360905709500687951 /* Transmission.icns */; };
A2F6DB090A55F31C0058D1E5 /* SpeedLimitButton.png in Resources */ = {isa = PBXBuildFile; fileRef = A2F6DB070A55F31C0058D1E5 /* SpeedLimitButton.png */; };
A2FB057F0BFEB6800095564D /* DragOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = A2FB057D0BFEB6800095564D /* DragOverlayView.m */; };
E138A9770C04D88F00C5426C /* CTGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = E138A9740C04D88F00C5426C /* CTGradient.m */; };
E138A9780C04D88F00C5426C /* CTGradientAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E138A9760C04D88F00C5426C /* CTGradientAdditions.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -316,16 +307,6 @@
A2265F3F0B5EF5F40093DDA5 /* FileBrowserCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileBrowserCell.h; path = macosx/FileBrowserCell.h; sourceTree = "<group>"; };
A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileBrowserCell.m; path = macosx/FileBrowserCell.m; sourceTree = "<group>"; };
A22A8D550AEEAFA5007E9CB9 /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = macosx/English.lproj/Localizable.strings; sourceTree = "<group>"; };
A2305A7C0A3DC9E400AB2D77 /* ProgressBarWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarWhite.png; path = macosx/Images/ProgressBarWhite.png; sourceTree = "<group>"; };
A2305A7D0A3DC9E400AB2D77 /* ProgressBarBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarBlue.png; path = macosx/Images/ProgressBarBlue.png; sourceTree = "<group>"; };
A2305A7E0A3DC9E400AB2D77 /* ProgressBarGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGray.png; path = macosx/Images/ProgressBarGray.png; sourceTree = "<group>"; };
A2305A7F0A3DC9E400AB2D77 /* ProgressBarGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGreen.png; path = macosx/Images/ProgressBarGreen.png; sourceTree = "<group>"; };
A2305A940A3DCAC500AB2D77 /* ProgressBarAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarAdvanced.png; path = macosx/Images/ProgressBarAdvanced.png; sourceTree = "<group>"; };
A2305AA40A3DCCEF00AB2D77 /* ProgressBarEndAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndAdvanced.png; path = macosx/Images/ProgressBarEndAdvanced.png; sourceTree = "<group>"; };
A2305AA50A3DCCEF00AB2D77 /* ProgressBarEndBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndBlue.png; path = macosx/Images/ProgressBarEndBlue.png; sourceTree = "<group>"; };
A2305AA60A3DCCEF00AB2D77 /* ProgressBarEndWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndWhite.png; path = macosx/Images/ProgressBarEndWhite.png; sourceTree = "<group>"; };
A2305AA70A3DCCEF00AB2D77 /* ProgressBarEndGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGreen.png; path = macosx/Images/ProgressBarEndGreen.png; sourceTree = "<group>"; };
A2305AA80A3DCCEF00AB2D77 /* ProgressBarEndGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGray.png; path = macosx/Images/ProgressBarEndGray.png; sourceTree = "<group>"; };
A232D29D0A70903E00973B12 /* Filter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Filter.png; path = macosx/Images/Filter.png; sourceTree = "<group>"; };
A2385DD20BFE06C800B24EF6 /* DragOverlayWindow.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = DragOverlayWindow.m; path = macosx/DragOverlayWindow.m; sourceTree = "<group>"; };
A2385DD30BFE06C800B24EF6 /* DragOverlayWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DragOverlayWindow.h; path = macosx/DragOverlayWindow.h; sourceTree = "<group>"; };
@ -378,7 +359,6 @@
A27ABC220A6ADE410020EC71 /* ImageBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ImageBackgroundView.m; path = macosx/ImageBackgroundView.m; sourceTree = "<group>"; };
A289EB0B0A33C56D00B082A3 /* ButtonBorder.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ButtonBorder.png; path = macosx/Images/ButtonBorder.png; sourceTree = "<group>"; };
A28DBADB0A33C1D800F4B4A7 /* ActionButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ActionButton.png; path = macosx/Images/ActionButton.png; sourceTree = "<group>"; };
A28FF34D0BB23A4E001F5010 /* ProgressBarLightGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarLightGreen.png; path = macosx/Images/ProgressBarLightGreen.png; sourceTree = "<group>"; };
A2912C530A2956E80097A0CA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = macosx/English.lproj/PrefsWindow.nib; sourceTree = "<group>"; };
A291DAAC0AC8BEB6003385E9 /* PiecesView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PiecesView.h; path = macosx/PiecesView.h; sourceTree = "<group>"; };
A291DAAD0AC8BEB6003385E9 /* PiecesView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PiecesView.m; path = macosx/PiecesView.m; sourceTree = "<group>"; };
@ -418,6 +398,10 @@
A2FB057C0BFEB6800095564D /* DragOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DragOverlayView.h; path = macosx/DragOverlayView.h; sourceTree = "<group>"; };
A2FB057D0BFEB6800095564D /* DragOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = DragOverlayView.m; path = macosx/DragOverlayView.m; sourceTree = "<group>"; };
A2FB06950BFF484A0095564D /* Globe.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Globe.tiff; path = macosx/Images/Globe.tiff; sourceTree = "<group>"; };
E138A9730C04D88F00C5426C /* CTGradient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CTGradient.h; sourceTree = "<group>"; };
E138A9740C04D88F00C5426C /* CTGradient.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CTGradient.m; sourceTree = "<group>"; };
E138A9750C04D88F00C5426C /* CTGradientAdditions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CTGradientAdditions.h; sourceTree = "<group>"; };
E138A9760C04D88F00C5426C /* CTGradientAdditions.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CTGradientAdditions.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -518,6 +502,7 @@
A24999210B49F1B5001EADA3 /* ActionPopUpButton.m */,
A2A1CB770BF29D5500AE959F /* PeerProgressIndicatorCell.h */,
A2A1CB780BF29D5500AE959F /* PeerProgressIndicatorCell.m */,
E138A9720C04D88F00C5426C /* CTGradient */,
);
name = Sources;
sourceTree = "<group>";
@ -551,17 +536,6 @@
A259316A0A73B2CC002F4FE7 /* Transmission Help */,
A2F8951E0A2D4BA500ED2127 /* Credits.rtf */,
A2FB06950BFF484A0095564D /* Globe.tiff */,
A2305AA40A3DCCEF00AB2D77 /* ProgressBarEndAdvanced.png */,
A2305AA50A3DCCEF00AB2D77 /* ProgressBarEndBlue.png */,
A2305AA60A3DCCEF00AB2D77 /* ProgressBarEndWhite.png */,
A2305AA70A3DCCEF00AB2D77 /* ProgressBarEndGreen.png */,
A2305AA80A3DCCEF00AB2D77 /* ProgressBarEndGray.png */,
A2305A940A3DCAC500AB2D77 /* ProgressBarAdvanced.png */,
A2305A7C0A3DC9E400AB2D77 /* ProgressBarWhite.png */,
A2305A7D0A3DC9E400AB2D77 /* ProgressBarBlue.png */,
A2305A7E0A3DC9E400AB2D77 /* ProgressBarGray.png */,
A2305A7F0A3DC9E400AB2D77 /* ProgressBarGreen.png */,
A28FF34D0BB23A4E001F5010 /* ProgressBarLightGreen.png */,
A260C9AB0AA3B8D700FDC1B7 /* Error.tiff */,
A29C8B320ACC6E93000ED9F9 /* YellowDot.tiff */,
A2D4F0840A915F7200890C32 /* GreenDot.tiff */,
@ -718,6 +692,18 @@
name = CLI;
sourceTree = "<group>";
};
E138A9720C04D88F00C5426C /* CTGradient */ = {
isa = PBXGroup;
children = (
E138A9730C04D88F00C5426C /* CTGradient.h */,
E138A9740C04D88F00C5426C /* CTGradient.m */,
E138A9750C04D88F00C5426C /* CTGradientAdditions.h */,
E138A9760C04D88F00C5426C /* CTGradientAdditions.m */,
);
name = CTGradient;
path = macosx/CTGradient;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@ -828,6 +814,7 @@
);
mainGroup = 29B97314FDCFA39411CA2CEA /* Transmission */;
projectDirPath = "";
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* Transmission */,
4DDBB71809E16BAE00284745 /* transmissioncli */,
@ -873,16 +860,6 @@
A2F40AE40A361C00006B8288 /* Transmission.icns in Resources */,
A25FCDEF0A3769A6002BCBBE /* PauseSelected.png in Resources */,
A25FCDF00A3769AC002BCBBE /* ResumeSelected.png in Resources */,
A2305A800A3DC9E400AB2D77 /* ProgressBarWhite.png in Resources */,
A2305A810A3DC9E400AB2D77 /* ProgressBarBlue.png in Resources */,
A2305A820A3DC9E400AB2D77 /* ProgressBarGray.png in Resources */,
A2305A830A3DC9E400AB2D77 /* ProgressBarGreen.png in Resources */,
A2305A950A3DCAC500AB2D77 /* ProgressBarAdvanced.png in Resources */,
A2305AA90A3DCCEF00AB2D77 /* ProgressBarEndAdvanced.png in Resources */,
A2305AAA0A3DCCEF00AB2D77 /* ProgressBarEndBlue.png in Resources */,
A2305AAB0A3DCCEF00AB2D77 /* ProgressBarEndWhite.png in Resources */,
A2305AAC0A3DCCEF00AB2D77 /* ProgressBarEndGreen.png in Resources */,
A2305AAD0A3DCCEF00AB2D77 /* ProgressBarEndGray.png in Resources */,
A2D0E0490A54A97C003C72CF /* Bandwidth.png in Resources */,
A2F6DB090A55F31C0058D1E5 /* SpeedLimitButton.png in Resources */,
A20AB97B0A5C622A004F81FA /* SmallTurtle.png in Resources */,
@ -910,7 +887,6 @@
A29C8B330ACC6E93000ED9F9 /* YellowDot.tiff in Resources */,
A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */,
A24103070AF80E390001C8D0 /* FilterButtonPressedLeft.png in Resources */,
A28FF34E0BB23A4E001F5010 /* ProgressBarLightGreen.png in Resources */,
A241528B0C0261B8007DD3B4 /* Globe.tiff in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1005,6 +981,8 @@
A2A1CB7A0BF29D5500AE959F /* PeerProgressIndicatorCell.m in Sources */,
A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */,
A2FB057F0BFEB6800095564D /* DragOverlayView.m in Sources */,
E138A9770C04D88F00C5426C /* CTGradient.m in Sources */,
E138A9780C04D88F00C5426C /* CTGradientAdditions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -0,0 +1,74 @@
//
// CTGradient.h
//
// Created by Chad Weider on 2/14/07.
// Copyright (c) 2007 Chad Weider.
// Some rights reserved: <http://creativecommons.org/licenses/by/2.5/>
//
// Version: 1.6
#import <Cocoa/Cocoa.h>
typedef struct _CTGradientElement
{
float red, green, blue, alpha;
float position;
struct _CTGradientElement *nextElement;
} CTGradientElement;
typedef enum _CTBlendingMode
{
CTLinearBlendingMode,
CTChromaticBlendingMode,
CTInverseChromaticBlendingMode
} CTGradientBlendingMode;
@interface CTGradient : NSObject <NSCopying, NSCoding>
{
CTGradientElement* elementList;
CTGradientBlendingMode blendingMode;
CGFunctionRef gradientFunction;
}
+ (id)gradientWithBeginningColor:(NSColor *)begin endingColor:(NSColor *)end;
+ (id)aquaSelectedGradient;
+ (id)aquaNormalGradient;
+ (id)aquaPressedGradient;
+ (id)unifiedSelectedGradient;
+ (id)unifiedNormalGradient;
+ (id)unifiedPressedGradient;
+ (id)unifiedDarkGradient;
+ (id)sourceListSelectedGradient;
+ (id)sourceListUnselectedGradient;
+ (id)rainbowGradient;
+ (id)hydrogenSpectrumGradient;
- (CTGradient *)gradientWithAlphaComponent:(float)alpha;
- (void)addElement:(CTGradientElement*)newElement;
- (CTGradient *)addColorStop:(NSColor *)color atPosition:(float)position; //positions given relative to [0,1]
- (CTGradient *)removeColorStopAtIndex:(unsigned)index;
- (CTGradient *)removeColorStopAtPosition:(float)position;
- (CTGradientBlendingMode)blendingMode;
- (NSColor *)colorStopAtIndex:(unsigned)index;
- (NSColor *)colorAtPosition:(float)position;
- (void)drawSwatchInRect:(NSRect)rect;
- (void)fillRect:(NSRect)rect angle:(float)angle; //fills rect with axial gradient
// angle in degrees
- (void)radialFillRect:(NSRect)rect; //fills rect with radial gradient
// gradient from center outwards
- (void)fillBezierPath:(NSBezierPath *)path angle:(float)angle;
- (void)radialFillBezierPath:(NSBezierPath *)path;
@end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
/******************************************************************************
* $Id$
*
* Copyright (c) 2007 Transmission authors and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
#import "CTGradient.h"
@interface CTGradient (ActionBarView)
+ (CTGradient *)actionNormalGradient;
+ (CTGradient *)actionPressedGradient;
@end
@interface CTGradient (ProgressBar)
+ (CTGradient *)progressWhiteGradient;
+ (CTGradient *)progressGrayGradient;
+ (CTGradient *)progressBlueGradient;
+ (CTGradient *)progressGreenGradient;
+ (CTGradient *)progressLightGreenGradient;
+ (CTGradient *)progressTransparentGradient;
@end
@interface CTGradient (MiddleColour)
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end;
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1
middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end;
@end

View File

@ -0,0 +1,388 @@
/******************************************************************************
* $Id$
*
* Copyright (c) 2007 Transmission authors and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
#import "CTGradientAdditions.h"
@implementation CTGradient (ActionBar)
+ (CTGradient *)actionNormalGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.9;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.9;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.95;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 1.0;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)actionPressedGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.80;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.64;
color2.alpha = 1.00;
color2.position = 11.5/23;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.80;
color3.alpha = 1.00;
color3.position = 11.5/23;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.77;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end
@implementation CTGradient (ProgressBar)
+ (CTGradient *)progressWhiteGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.95;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.8;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.95;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.95;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressGrayGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 0.7;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 0.6;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 0.7;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 0.7;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressBlueGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.416;
color1.green = 0.788;
color1.blue = 0.97;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.274;
color2.green = 0.52;
color2.blue = 0.94;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.372;
color3.green = 0.635;
color3.blue = 0.98;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.396;
color4.green = 0.66;
color4.blue = 1.00;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressGreenGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.270;
color1.green = 0.89;
color1.blue = 0.35;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.180;
color2.green = 0.71;
color2.blue = 0.23;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.420;
color3.green = 0.86;
color3.blue = 0.32;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.466;
color4.green = 0.89;
color4.blue = 0.34;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressLightGreenGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = 0.478;
color1.green = 1.00;
color1.blue = 0.55;
color1.alpha = 1.00;
color1.position = 0;
CTGradientElement color2;
color2.red = 0.388;
color2.green = 0.92;
color2.blue = 0.44;
color2.alpha = 1.00;
color2.position = 0.5;
CTGradientElement color3;
color3.red = 0.627;
color3.green = 1.00;
color3.blue = 0.53;
color3.alpha = 1.00;
color3.position = 0.5;
CTGradientElement color4;
color4.red = 0.675;
color4.green = 1.00;
color4.blue = 0.55;
color4.alpha = 1.00;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
+ (CTGradient *)progressTransparentGradient
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
color1.red = color1.green = color1.blue = 1.0;
color1.alpha = 0.65;
color1.position = 0;
CTGradientElement color2;
color2.red = color2.green = color2.blue = 1.0;
color2.alpha = 0.05;
color2.position = 0.5;
CTGradientElement color3;
color3.red = color3.green = color3.blue = 1.0;
color3.alpha = 0.4;
color3.position = 0.5;
CTGradientElement color4;
color4.red = color4.green = color4.blue = 1.0;
color4.alpha = 0.4;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end
@implementation CTGradient (MiddleColour)
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
CTGradientElement color2;
CTGradientElement color3;
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
green:&color1.green
blue:&color1.blue
alpha:&color1.alpha];
[[middle colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
green:&color2.green
blue:&color2.blue
alpha:&color2.alpha];
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
green:&color3.green
blue:&color3.blue
alpha:&color3.alpha];
color1.position = 0;
color2.position = 0.5;
color3.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
return [newInstance autorelease];
}
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1
middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end
{
CTGradient *newInstance = [[[self class] alloc] init];
CTGradientElement color1;
CTGradientElement color2;
CTGradientElement color3;
CTGradientElement color4;
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
green:&color1.green
blue:&color1.blue
alpha:&color1.alpha];
[[middle1 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
green:&color2.green
blue:&color2.blue
alpha:&color2.alpha];
[[middle2 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
green:&color3.green
blue:&color3.blue
alpha:&color3.alpha];
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color4.red
green:&color4.green
blue:&color4.blue
alpha:&color4.alpha];
color1.position = 0;
color2.position = 0.5;
color3.position = 0.5;
color4.position = 1;
[newInstance addElement:&color1];
[newInstance addElement:&color2];
[newInstance addElement:&color3];
[newInstance addElement:&color4];
return [newInstance autorelease];
}
@end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

View File

@ -25,16 +25,14 @@
#ifndef TORRENTCELL_H
#define TORRENTCELL_H
#import <Cocoa/Cocoa.h>
#import "Torrent.h"
#import "CTGradient.h"
@interface TorrentCell : NSCell
{
NSImage * fProgressWhite, * fProgressBlue, * fProgressGray, * fProgressGreen,
* fProgressAdvanced, * fProgressEndWhite, * fProgressEndBlue,
* fProgressEndGray, * fProgressEndGreen, * fProgressLightGreen,
* fProgressEndAdvanced, * fErrorImage;
NSImage * fErrorImage;
CTGradient * fWhiteGradient, * fGreyGradient, * fLightGreenGradient,
* fGreenGradient, * fBlueGradient, * fTransparentGradient;
NSUserDefaults * fDefaults;
}

View File

@ -25,6 +25,7 @@
#import "TorrentCell.h"
#import "TorrentTableView.h"
#import "StringAdditions.h"
#import "CTGradientAdditions.h"
//also defined in Torrent.m
#define BAR_HEIGHT 12.0
@ -41,42 +42,21 @@
- (id) init
{
if ((self = [super init]))
{
if((self = [super init]))
{
fDefaults = [NSUserDefaults standardUserDefaults];
NSSize startSize = NSMakeSize(100.0, BAR_HEIGHT);
fProgressWhite = [NSImage imageNamed: @"ProgressBarWhite.png"];
[fProgressWhite setScalesWhenResized: YES];
fWhiteGradient = [[CTGradient aquaNormalGradient] retain];
fGreyGradient = [[CTGradient progressGrayGradient] retain];
fBlueGradient = [[CTGradient progressBlueGradient] retain];
fGreenGradient = [[CTGradient progressGreenGradient] retain];
fLightGreenGradient = [[CTGradient progressLightGreenGradient] retain];
fTransparentGradient = [[CTGradient progressTransparentGradient] retain];
fProgressBlue = [NSImage imageNamed: @"ProgressBarBlue.png"];
[fProgressBlue setScalesWhenResized: YES];
[fProgressBlue setSize: startSize];
fProgressGray = [NSImage imageNamed: @"ProgressBarGray.png"];
[fProgressGray setScalesWhenResized: YES];
[fProgressGray setSize: startSize];
fProgressGreen = [NSImage imageNamed: @"ProgressBarGreen.png"];
[fProgressGreen setScalesWhenResized: YES];
fProgressLightGreen = [NSImage imageNamed: @"ProgressBarLightGreen.png"];
[fProgressLightGreen setScalesWhenResized: YES];
fProgressAdvanced = [NSImage imageNamed: @"ProgressBarAdvanced.png"];
[fProgressAdvanced setScalesWhenResized: YES];
fProgressEndWhite = [NSImage imageNamed: @"ProgressBarEndWhite.png"];
fProgressEndBlue = [NSImage imageNamed: @"ProgressBarEndBlue.png"];
fProgressEndGray = [NSImage imageNamed: @"ProgressBarEndGray.png"];
fProgressEndGreen = [NSImage imageNamed: @"ProgressBarEndGreen.png"];
fProgressEndAdvanced = [NSImage imageNamed: @"ProgressBarEndAdvanced.png"];
fErrorImage = [[NSImage imageNamed: @"Error.tiff"] copy]; //no need to release for some reason
[fErrorImage setFlipped: YES];
fErrorImage = [[NSImage imageNamed: @"Error"] copy];
[fErrorImage setFlipped: YES];
}
return self;
return self;
}
- (void) placeBar: (NSImage *) barImage width: (float) width point: (NSPoint) point
@ -93,88 +73,61 @@
- (void) buildSimpleBar: (float) width point: (NSPoint) point
{
NSDictionary * info = [self objectValue];
width -= 2.0;
float completedWidth, remainingWidth;
//bar images and widths
NSImage * barLeftEnd, * barRightEnd, * barComplete, * barRemaining;
NSRect barBounds, completeBounds;
if([[self controlView] isFlipped])
barBounds = NSMakeRect(point.x, point.y, width, BAR_HEIGHT);
else
barBounds = NSMakeRect(point.x, point.y - BAR_HEIGHT, width, BAR_HEIGHT);
completeBounds = barBounds;
if ([[info objectForKey: @"Seeding"] boolValue])
{
float stopRatio, ratio;
if ((stopRatio = [[info objectForKey: @"StopRatio"] floatValue]) != INVALID
&& (ratio = [[info objectForKey: @"Ratio"] floatValue]) < stopRatio)
{
if (ratio < 0)
ratio = 0;
completedWidth = width * ratio / stopRatio;
}
else
completedWidth = width;
remainingWidth = width - completedWidth;
{
if (ratio < 0)
ratio = 0;
completeBounds.size.width = width * ratio / stopRatio;
}
barLeftEnd = fProgressEndGreen;
barRightEnd = fProgressEndGreen;
barComplete = fProgressGreen;
barRemaining = fProgressLightGreen;
if (completeBounds.size.width < barBounds.size.width)
[fLightGreenGradient fillRect: barBounds angle: -90];
[fGreenGradient fillRect: completeBounds angle: -90];
}
else
{
completedWidth = [[info objectForKey: @"Progress"] floatValue] * width;
remainingWidth = width - completedWidth;
completeBounds.size.width = [[info objectForKey: @"Progress"] floatValue] * width;
if (completeBounds.size.width < barBounds.size.width)
[fWhiteGradient fillRect: barBounds angle: -90];
BOOL isActive = [[info objectForKey: @"Active"] boolValue];
if (remainingWidth == width)
barLeftEnd = fProgressEndWhite;
else if (isActive)
barLeftEnd = fProgressEndBlue;
if ([[info objectForKey: @"Active"] boolValue])
[fBlueGradient fillRect: completeBounds angle: -90];
else
barLeftEnd = fProgressEndGray;
if (completedWidth < width)
barRightEnd = fProgressEndWhite;
else if (isActive)
barRightEnd = fProgressEndBlue;
else
barRightEnd = fProgressEndGray;
barComplete = isActive ? fProgressBlue : fProgressGray;
barRemaining = fProgressWhite;
[fGreyGradient fillRect: completeBounds angle: -90];
}
//place bar
[barLeftEnd compositeToPoint: point operation: NSCompositeSourceOver];
point.x += 1.0;
[self placeBar: barComplete width: completedWidth point: point];
point.x += completedWidth;
[self placeBar: barRemaining width: remainingWidth point: point];
point.x += remainingWidth;
[barRightEnd compositeToPoint: point operation: NSCompositeSourceOver];
[[NSColor colorWithDeviceWhite: 0.0 alpha: 0.2] set];
[NSBezierPath strokeRect: NSInsetRect(barBounds, 0.5, 0.5)];
}
- (void) buildAdvancedBar: (float) widthFloat point: (NSPoint) point
- (void) buildAdvancedBar: (float) width point: (NSPoint) point
{
NSDictionary * info = [self objectValue];
//draw overlay over advanced bar
[fProgressEndAdvanced compositeToPoint: point operation: NSCompositeSourceOver];
widthFloat -= 2.0;
point.x += 1.0;
//place actual advanced bar
NSImage * image = [info objectForKey: @"AdvancedBar"];
[image setSize: NSMakeSize(widthFloat, BAR_HEIGHT)];
[image setSize: NSMakeSize(width, BAR_HEIGHT)];
[image compositeToPoint: point operation: NSCompositeSourceOver];
[self placeBar: fProgressAdvanced width: widthFloat point: point];
point.x += widthFloat;
[fProgressEndAdvanced compositeToPoint: point operation: NSCompositeSourceOver];
NSRect barBounds;
if([[self controlView] isFlipped])
barBounds = NSMakeRect(point.x, point.y, width, BAR_HEIGHT);
else
barBounds = NSMakeRect(point.x, point.y - BAR_HEIGHT, width, BAR_HEIGHT);
[fTransparentGradient fillRect: barBounds angle: -90];
[[NSColor colorWithDeviceWhite: 0.0 alpha: 0.2] set];
[NSBezierPath strokeRect: NSInsetRect(barBounds, 0.5, 0.5)];
}
- (void) toggleMinimalStatus