summaryrefslogtreecommitdiffstats
path: root/macosx/MVMenuButton.m
diff options
context:
space:
mode:
authordynaflash <[email protected]>2007-08-02 12:52:41 +0000
committerdynaflash <[email protected]>2007-08-02 12:52:41 +0000
commit3021a6afa90e0b601524792614807d7a5176f6a7 (patch)
tree13e5837795a02257b2e3cc67c3c8e8cfb91e22b6 /macosx/MVMenuButton.m
parent891ea7118f8ca6d60e3920cbed100ae2a7f8bad1 (diff)
MacGui: files I forgot to add on last commit
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@780 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'macosx/MVMenuButton.m')
-rw-r--r--macosx/MVMenuButton.m164
1 files changed, 164 insertions, 0 deletions
diff --git a/macosx/MVMenuButton.m b/macosx/MVMenuButton.m
new file mode 100644
index 000000000..ea6b2efc6
--- /dev/null
+++ b/macosx/MVMenuButton.m
@@ -0,0 +1,164 @@
+#import "MVMenuButton.h"
+
+@implementation MVMenuButton
+- (void) encodeWithCoder:(NSCoder *) coder {
+ [super encodeWithCoder:coder];
+}
+
+- (id) initWithFrame:(NSRect) frame {
+ if( ( self = [super initWithFrame:frame] ) ) {
+ [self setBordered:NO];
+ [self setButtonType:NSMomentaryChangeButton];
+ }
+ return self;
+}
+
+- (id) initWithCoder:(NSCoder *) coder {
+ if( ( self = [super initWithCoder:coder] ) ) {
+ _size = NSRegularControlSize;
+ _drawsArrow = NO;
+ _orgImage = [[self image] copy];
+ _smallImage = nil;
+ _toolbarItem = nil;
+ }
+ return self;
+}
+
+- (void) dealloc {
+ [_orgImage release];
+ [_smallImage release];
+
+ _orgImage = nil;
+ _smallImage = nil;
+ _toolbarItem = nil;
+
+ [super dealloc];
+}
+
+- (void) drawRect:(NSRect) rect {
+ [super drawRect:rect];
+
+ if( [self drawsArrow] ) {
+ NSBezierPath *path = [NSBezierPath bezierPath];
+
+ if( _size == NSRegularControlSize ) {
+ [path moveToPoint:NSMakePoint( NSWidth( [self frame] ) - 6, NSHeight( [self frame] ) - 3 )];
+ [path relativeLineToPoint:NSMakePoint( 6, 0 )];
+ [path relativeLineToPoint:NSMakePoint( -3, 3 )];
+ } else if( _size == NSSmallControlSize ) {
+ [path moveToPoint:NSMakePoint( NSWidth( [self frame] ) - 4, NSHeight( [self frame] ) - 3 )];
+ [path relativeLineToPoint:NSMakePoint( 4, 0 )];
+ [path relativeLineToPoint:NSMakePoint( -2, 3 )];
+ }
+
+ [path closePath];
+ [[[NSColor blackColor] colorWithAlphaComponent:0.75] set];
+ [path fill];
+ }
+}
+
+- (void) mouseDown:(NSEvent *) theEvent {
+ if( ! [self isEnabled] ) return;
+ if( ! [self menu] ) {
+ [super mouseDown:theEvent];
+ return;
+ }
+
+ [self highlight:YES];
+
+ NSPoint point = [self convertPoint:[self bounds].origin toView:nil];
+ point.y -= NSHeight( [self frame] ) + 2.;
+ point.x -= 1.;
+
+ NSEvent *event = [NSEvent mouseEventWithType:[theEvent type] location:point modifierFlags:[theEvent modifierFlags] timestamp:[theEvent timestamp] windowNumber:[[theEvent window] windowNumber] context:[theEvent context] eventNumber:[theEvent eventNumber] clickCount:[theEvent clickCount] pressure:[theEvent pressure]];
+ [NSMenu popUpContextMenu:[self menu] withEvent:event forView:self];
+
+ [self mouseUp:[[NSApplication sharedApplication] currentEvent]];
+}
+
+- (void) mouseUp:(NSEvent *) theEvent {
+ [self highlight:NO];
+ [super mouseUp:theEvent];
+}
+
+- (void) mouseDragged:(NSEvent *) theEvent {
+ return;
+}
+
+- (NSControlSize) controlSize {
+ return ( _size ? _size : NSRegularControlSize );
+}
+
+- (void) setControlSize:(NSControlSize) controlSize {
+ if( ! _orgImage ) _orgImage = [[self image] copy];
+ if( controlSize == NSRegularControlSize ) {
+ [super setImage:_orgImage];
+ [_toolbarItem setMinSize:NSMakeSize( 32., 32. )];
+ [_toolbarItem setMaxSize:NSMakeSize( 32., 32. )];
+ } else if( controlSize == NSSmallControlSize ) {
+ if( ! _smallImage ) {
+ NSImageRep *sourceImageRep = [_orgImage bestRepresentationForDevice:nil];
+ _smallImage = [[NSImage alloc] initWithSize:NSMakeSize( 24., 24. )];
+ [_smallImage lockFocus];
+ [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
+ [sourceImageRep drawInRect:NSMakeRect( 0., 0., 24., 24. )];
+ [_smallImage unlockFocus];
+ }
+ [super setImage:_smallImage];
+ [_toolbarItem setMinSize:NSMakeSize( 24., 24. )];
+ [_toolbarItem setMaxSize:NSMakeSize( 24., 24. )];
+ }
+ _size = controlSize;
+}
+
+- (void) setImage:(NSImage *) image {
+ [_orgImage autorelease];
+ _orgImage = [[self image] copy];
+
+ NSImageRep *sourceImageRep = [image bestRepresentationForDevice:nil];
+ [_smallImage autorelease];
+ _smallImage = [[NSImage alloc] initWithSize:NSMakeSize( 24., 24. )];
+ [_smallImage lockFocus];
+ [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
+ [sourceImageRep drawInRect:NSMakeRect( 0., 0., 24., 24. )];
+ [_smallImage unlockFocus];
+
+ if( _size == NSRegularControlSize ) [super setImage:image];
+ else if( _size == NSSmallControlSize ) [super setImage:_smallImage];
+}
+
+- (NSImage *) smallImage {
+ return _smallImage;
+}
+
+- (void) setSmallImage:(NSImage *) image {
+ [_smallImage autorelease];
+ _smallImage = [image copy];
+}
+
+- (NSToolbarItem *) toolbarItem {
+ return _toolbarItem;
+}
+
+- (void) setToolbarItem:(NSToolbarItem *) item {
+ _toolbarItem = item;
+}
+
+- (BOOL) drawsArrow {
+ return _drawsArrow;
+}
+
+- (void) setDrawsArrow:(BOOL) arrow {
+ _drawsArrow = arrow;
+}
+
+- (id) accessibilityAttributeValue:(NSString *) attribute {
+ if( [attribute isEqualToString:NSAccessibilityTitleAttribute] )
+ return [_toolbarItem label];
+ if( [attribute isEqualToString:NSAccessibilityHelpAttribute] )
+ return [_toolbarItem toolTip];
+ if( [attribute isEqualToString:NSAccessibilityToolbarButtonAttribute] )
+ return _toolbarItem;
+ return [super accessibilityAttributeValue:attribute];
+}
+@end