From ec4d5637206c80100b1970bd2f158860a1b8d3b7 Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Wed, 19 May 2004 23:58:06 +0000 Subject: [PATCH] * iTunes style slider --- modules/gui/macosx/misc.h | 19 ---- modules/gui/macosx/misc.m | 202 +++++++++----------------------------- 2 files changed, 49 insertions(+), 172 deletions(-) diff --git a/modules/gui/macosx/misc.h b/modules/gui/macosx/misc.h index 11c8c876d5..1434533f6a 100644 --- a/modules/gui/macosx/misc.h +++ b/modules/gui/macosx/misc.h @@ -63,22 +63,3 @@ } @end - -/***************************************************************************** - * MPSliderCell - *****************************************************************************/ - -@interface MPSliderCell : NSSliderCell -{ - NSColor * _bgColor; - NSColor * _knobColor; - float _knobThickness; -} - -- (void)setBackgroundColor:(NSColor *)newColor; -- (NSColor *)backgroundColor; - -- (void)setKnobColor:(NSColor *)newColor; -- (NSColor *)knobColor; - -@end \ No newline at end of file diff --git a/modules/gui/macosx/misc.m b/modules/gui/macosx/misc.m index faf4f5bd1e..3c265fce07 100644 --- a/modules/gui/macosx/misc.m +++ b/modules/gui/macosx/misc.m @@ -207,167 +207,63 @@ /***************************************************************************** * MPSlider *****************************************************************************/ - @implementation MPSlider -+ (Class)cellClass +void _drawKnobInRect(NSRect knobRect) { - return( [MPSliderCell class] ); + // Center knob in given rect + knobRect.origin.x += (int)((float)(knobRect.size.width - 7)/2.0); + knobRect.origin.y += (int)((float)(knobRect.size.height - 7)/2.0); + + // Draw diamond + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 3, knobRect.origin.y + 6, 1, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 2, knobRect.origin.y + 5, 3, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 1, knobRect.origin.y + 4, 5, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 0, knobRect.origin.y + 3, 7, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 1, knobRect.origin.y + 2, 5, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 2, knobRect.origin.y + 1, 3, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 3, knobRect.origin.y + 0, 1, 1), NSCompositeSourceOver); } -@end - -/***************************************************************************** - * MPSliderCell - *****************************************************************************/ - -@implementation MPSliderCell - -- (id)init +void _drawFrameInRect(NSRect frameRect) { - self = [super init]; - - if( self != nil ) - { - _bgColor = [[NSColor colorWithDeviceRed: 0.8627451 - green: 0.8784314 - blue: 0.7725490 - alpha: 1.0] retain]; - _knobColor = [[NSColor blackColor] retain]; - } - NSLog(@"boe"); - return( self ); -} - -- (void)dealloc -{ - [_bgColor release]; - [_knobColor release]; - [super dealloc]; + // Draw frame + NSRectFillUsingOperation(NSMakeRect(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(frameRect.origin.x, frameRect.origin.y + frameRect.size.height-1, frameRect.size.width, 1), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(frameRect.origin.x, frameRect.origin.y, 1, frameRect.size.height), NSCompositeSourceOver); + NSRectFillUsingOperation(NSMakeRect(frameRect.origin.x+frameRect.size.width-1, frameRect.origin.y, 1, frameRect.size.height), NSCompositeSourceOver); } -- (void)setBackgroundColor:(NSColor *)newColor +- (void)drawRect:(NSRect)rect { - [_bgColor release]; - _bgColor = [newColor retain]; + // Draw default to make sure the slider behaves correctly + [[NSGraphicsContext currentContext] saveGraphicsState]; + NSRectClip(NSZeroRect); + [super drawRect:rect]; + [[NSGraphicsContext currentContext] restoreGraphicsState]; + + // Full size + rect = [self bounds]; + int diff = (int)(([[self cell] knobThickness] - 7.0)/2.0) - 1; + rect.origin.x += diff-1; + rect.origin.y += diff; + rect.size.width -= 2*diff-2; + rect.size.height -= 2*diff; + + // Draw dark + NSRect knobRect = [[self cell] knobRectFlipped:NO]; + [[[NSColor blackColor] colorWithAlphaComponent:0.6] set]; + _drawFrameInRect(rect); + _drawKnobInRect(knobRect); + + // Draw shadow + [[[NSColor blackColor] colorWithAlphaComponent:0.1] set]; + rect.origin.x++; + rect.origin.y++; + knobRect.origin.x++; + knobRect.origin.y++; + _drawFrameInRect(rect); + _drawKnobInRect(knobRect); } -- (NSColor *)backgroundColor -{ - return( _bgColor ); -} - -- (void)setKnobColor:(NSColor *)newColor -{ - [_knobColor release]; - _knobColor = [newColor retain]; -} - -- (NSColor *)knobColor -{ - return( _knobColor ); -} - -- (void)setKnobThickness:(float)f_value -{ - _knobThickness = f_value; -} - -- (float)knobThickness -{ - return( _knobThickness ); -} - -- (NSSize)cellSizeForBounds:(NSRect)s_rc -{ - return( s_rc.size ); -} - -- (void)drawWithFrame:(NSRect)s_rc inView:(NSView *)o_view -{ - if( _scFlags.weAreVertical ) - { - s_rc.origin.x = 1; s_rc.size.width -= 3; - s_rc.origin.y = 2; s_rc.size.height -= 5; - } - else - { - s_rc.origin.x = 2; s_rc.size.width -= 5; - s_rc.origin.y = 1; s_rc.size.height -= 3; - } - - [super drawWithFrame: s_rc inView: o_view]; -} - -- (void)drawBarInside:(NSRect)s_rc flipped:(BOOL)b_flipped -{ - NSRect s_arc; - - s_rc.size.width += (s_rc.origin.x * 2) + 1; - s_rc.size.height += (s_rc.origin.y * 2) + 1; - s_rc.origin.x = s_rc.origin.y = 0; - - [[NSGraphicsContext currentContext] setShouldAntialias: NO]; - - [_bgColor set]; - NSRectFill( s_rc ); - - s_arc = s_rc; - s_arc.origin.x += 1.5; - s_arc.origin.y += 1.5; - s_arc.size.width -= s_arc.origin.x; - s_arc.size.height -= s_arc.origin.y; - [[_bgColor shadowWithLevel: 0.1] set]; - [NSBezierPath strokeRect: s_arc]; - - s_arc.origin = s_rc.origin; - [[NSColor blackColor] set]; - [NSBezierPath strokeRect: s_arc]; - - [[NSGraphicsContext currentContext] setShouldAntialias: YES]; -} - -- (NSRect)knobRectFlipped:(BOOL)b_flipped -{ - NSSize s_size; - NSPoint s_pto; - float floatValue; - - floatValue = [self floatValue]; - - if( _scFlags.weAreVertical && b_flipped ) - { - floatValue = _maxValue + _minValue - floatValue; - } - - floatValue = (floatValue - _minValue) / (_maxValue - _minValue); - - if( _scFlags.weAreVertical ) - { - s_size = NSMakeSize( _trackRect.size.width, _knobThickness ? - _knobThickness : _trackRect.size.width ); - s_pto = _trackRect.origin; - s_pto.y += (_trackRect.size.height - s_size.height) * floatValue; - } - else - { - s_size = NSMakeSize( _knobThickness ? _knobThickness : - _trackRect.size.height, _trackRect.size.height ); - s_pto = _trackRect.origin; - s_pto.x += (_trackRect.size.width - s_size.width) * floatValue; - } - - return NSMakeRect( s_pto.x, s_pto.y, s_size.width, s_size.height ); -} - -- (void)drawKnob:(NSRect)s_rc -{ - [[NSGraphicsContext currentContext] setShouldAntialias: NO]; - - [_knobColor set]; - NSRectFill( s_rc ); - - [[NSGraphicsContext currentContext] setShouldAntialias: YES]; -} - -@end +@end \ No newline at end of file -- 2.39.2