Source

BWToolkit / BWTransparentSliderCell.m

Brandon Walkin b48f0b7 
























































Brandon Walkin 7e348c1 
Brandon Walkin b48f0b7 




























































































//
//  BWTransparentSliderCell.m
//  BWToolkit
//
//  Created by Brandon Walkin (www.brandonwalkin.com)
//  All code is provided under the New BSD license.
//

#import "BWTransparentSliderCell.h"

@implementation BWTransparentSliderCell

static NSImage *trackLeftImage, *trackFillImage, *trackRightImage, *thumbPImage, *thumbNImage, *triangleThumbNImage, *triangleThumbPImage;

+ (void)initialize 
{
	if([BWTransparentSliderCell class] == [self class])
	{
		NSBundle *bundle = [NSBundle bundleForClass:[BWTransparentSliderCell class]];
		
		trackLeftImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderTrackLeft.tiff"]];
		trackFillImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderTrackFill.tiff"]];
		trackRightImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderTrackRight.tiff"]];
		thumbPImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderThumbP.tiff"]];
		thumbNImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderThumbN.tiff"]];
		triangleThumbNImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderTriangleThumbN.tiff"]];
		triangleThumbPImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentSliderTriangleThumbP.tiff"]];
	}
}

- (id)initWithCoder:(NSCoder *)decoder;
{
	self = [super initWithCoder:decoder];
	
	[self setControlSize:NSSmallControlSize];
	isPressed = NO;
	[super setTickMarkPosition:NSTickMarkBelow];
	
	return self;
}

- (void)drawBarInside:(NSRect)cellFrame flipped:(BOOL)flipped
{
	NSRect slideRect = cellFrame;
	slideRect.size.height = [trackFillImage size].height;
	if(cellFrame.size.height > slideRect.size.height)
		slideRect.origin.y += roundf((cellFrame.size.height - slideRect.size.height) * 0.5f);
	
	slideRect.size.width -= 5;
	slideRect.origin.x += 2;
	
	if ([self numberOfTickMarks] > 0)
	{
		slideRect.origin.y--;
		slideRect.size.width++;
	}
	
	CGFloat alpha = 1.0;
	
	if (![self isEnabled])
		alpha = 0.6;
	
	NSDrawThreePartImage(slideRect, trackLeftImage, trackFillImage, trackRightImage, NO, NSCompositeSourceOver, alpha, flipped);
	
	// Draw solid white on top of all of the ticks
	if ([self numberOfTickMarks] > 0)
	{
		int i;
		for (i=0; i < [self numberOfTickMarks]; i++)
		{
			NSRect tickRect = [self rectOfTickMarkAtIndex:i];
			[[NSColor whiteColor] set];
			NSRectFill(tickRect);
		}
	}
}

- (void)drawKnob:(NSRect)rect
{
	NSImage *drawImage;
	
	if ([self numberOfTickMarks] == 0)
	{
		if (isPressed)
			drawImage = thumbPImage;
		else
			drawImage = thumbNImage;
	}
	else
	{
		if (isPressed)
			drawImage = triangleThumbPImage;
		else
			drawImage = triangleThumbNImage;
	}

	NSPoint drawPoint;
	drawPoint.x = rect.origin.x + roundf((rect.size.width - drawImage.size.width) / 2) - 1;
	drawPoint.y = NSMaxY(rect) - roundf((rect.size.height - drawImage.size.height) / 2) + 2;
	
	if ([self numberOfTickMarks] > 0)
	{
		drawPoint.y -= 2;
		drawPoint.x++;
	}
	
	[drawImage compositeToPoint:drawPoint operation:NSCompositeSourceOver];
}

- (BOOL)_usesCustomTrackImage
{
	return YES;
}

-(NSRect)knobRectFlipped:(BOOL)flipped
{
	NSRect rect = [super knobRectFlipped:flipped];
	if([self numberOfTickMarks] > 0){
		rect.size.height+=2;
		return NSOffsetRect(rect, 0, flipped ? 2 : -2);
	}
	return rect;
}

- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView
{
	isPressed = YES;
	return [super startTrackingAt:startPoint inView:controlView];	
}

- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag
{
	isPressed = NO;
	[super stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag];
}

- (void)setTickMarkPosition:(NSTickMarkPosition)position
{
	
}

- (NSControlSize)controlSize
{
	return NSSmallControlSize;
}

- (void)setControlSize:(NSControlSize)size
{
	
}

@end
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.