diff options
Diffstat (limited to 'frontends/cocoa/URLFieldCell.m')
-rw-r--r-- | frontends/cocoa/URLFieldCell.m | 249 |
1 files changed, 135 insertions, 114 deletions
diff --git a/frontends/cocoa/URLFieldCell.m b/frontends/cocoa/URLFieldCell.m index e08ba3efc..6c36f17c4 100644 --- a/frontends/cocoa/URLFieldCell.m +++ b/frontends/cocoa/URLFieldCell.m @@ -25,176 +25,197 @@ @property (readonly, retain, nonatomic) NSButtonCell *refreshCell; -- (NSRect) buttonFrame: (NSRect) cellFrame; -- (NSRect) urlFrame: (NSRect) cellFrame; -- (NSRect) iconFrame: (NSRect) cellFrame; +- (NSRect)buttonFrame:(NSRect)cellFrame; +- (NSRect)urlFrame:(NSRect)cellFrame; +- (NSRect)iconFrame:(NSRect)cellFrame; @end - @implementation URLFieldCell @synthesize favicon; -- (void) setFavicon: (NSImage *)newIcon +- (void)setFavicon:(NSImage *)newIcon { - if (favicon != newIcon) { - favicon = newIcon ; - [[self controlView] setNeedsDisplay: YES]; - } + if (favicon != newIcon) { + favicon = newIcon; + [[self controlView] setNeedsDisplay:YES]; + } } #define BUTTON_SIZE 32 #define PADDING 2 -- (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView +- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { - [favicon drawInRect: [self iconFrame: cellFrame] fromRect: NSZeroRect - operation: NSCompositingOperationSourceOver fraction: 1.0]; + [favicon drawInRect:[self iconFrame:cellFrame] + fromRect:NSZeroRect + operation:NSCompositingOperationSourceOver + fraction:1.0]; - [super drawInteriorWithFrame: [self urlFrame: cellFrame] inView: controlView]; + [super drawInteriorWithFrame:[self urlFrame:cellFrame] inView:controlView]; - [[self refreshCell] drawInteriorWithFrame: [self buttonFrame: cellFrame] - inView: controlView]; + [[self refreshCell] drawInteriorWithFrame:[self buttonFrame:cellFrame] + inView:controlView]; } -- (void) selectWithFrame: (NSRect)aRect inView: (NSView *)controlView editor: (NSText *)textObj - delegate: (id)anObject start: (NSInteger)selStart length: (NSInteger)selLength +- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj + delegate:(id)anObject + start:(NSInteger)selStart + length:(NSInteger)selLength { - const NSRect textFrame = [self urlFrame: aRect]; - [super selectWithFrame: textFrame inView: controlView editor: textObj - delegate: anObject start: selStart length: selLength]; + const NSRect textFrame = [self urlFrame:aRect]; + [super selectWithFrame:textFrame + inView:controlView + editor:textObj + delegate:anObject + start:selStart + length:selLength]; } -- (void) editWithFrame: (NSRect)aRect inView: (NSView *)controlView editor: (NSText *)textObj - delegate: (id)anObject event: (NSEvent *)theEvent +- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj + delegate:(id)anObject + event:(NSEvent *)theEvent { - const NSRect textFrame = [self urlFrame: aRect]; - [super editWithFrame: textFrame inView: controlView editor: textObj - delegate: anObject event: theEvent]; + const NSRect textFrame = [self urlFrame:aRect]; + [super editWithFrame:textFrame + inView:controlView + editor:textObj + delegate:anObject + event:theEvent]; } -- (void) startDragURLAt: (NSPoint) point inView: (NSView *) view +- (void)startDragURLAt:(NSPoint)point inView:(NSView *)view { - NSString *url = [self stringValue]; - NSString *title = url; - nsurl *nsurl; - - if (nsurl_create( [url UTF8String] , &nsurl ) != NSERROR_OK) - return; - - const struct url_data *data = urldb_get_url_data( nsurl ); - - nsurl_unref(nsurl); - - if (data && data->title) title = [NSString stringWithUTF8String: data->title]; - - NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; - [pb declareTypes: [NSArray arrayWithObjects: NSStringPboardType, NSURLPboardType, - @"public.url", @"public.url-name", nil] owner: nil]; - [pb setString: url forType: NSStringPboardType]; - [pb setString: url forType: @"public.url"]; - [pb setString: title forType: @"public.url-name"]; - [[NSURL URLWithString: url] writeToPasteboard: pb]; - - NSRect urlBounds = NSZeroRect; - urlBounds.size = [title sizeWithAttributes: nil]; - urlBounds.size.width += urlBounds.size.height + 2; - - NSImage *image = [[NSImage alloc] initWithSize: urlBounds.size]; - - [image lockFocus]; - [favicon drawInRect: NSMakeRect( urlBounds.origin.x, urlBounds.origin.y, urlBounds.size.height, urlBounds.size.height ) - fromRect: NSZeroRect operation: NSCompositingOperationCopy fraction: 1.0]; - urlBounds.origin.x += urlBounds.size.height + 2; - [title drawInRect: urlBounds withAttributes: nil]; - [image unlockFocus]; - - point.x -= urlBounds.size.height / 2; - point.y += urlBounds.size.height / 2; - - [view dragImage: image at: point offset: NSZeroSize event: [NSApp currentEvent] - pasteboard: pb source: self slideBack: YES]; + NSString *url = [self stringValue]; + NSString *title = url; + nsurl *nsurl; + + if (nsurl_create([url UTF8String], &nsurl) != NSERROR_OK) + return; + + const struct url_data *data = urldb_get_url_data(nsurl); + + nsurl_unref(nsurl); + + if (data && data->title) + title = [NSString stringWithUTF8String:data->title]; + + NSPasteboard *pb = [NSPasteboard pasteboardWithName:NSDragPboard]; + [pb declareTypes:[NSArray arrayWithObjects:NSStringPboardType, NSURLPboardType, + @"public.url", @"public.url-name", nil] + owner:nil]; + [pb setString:url forType:NSStringPboardType]; + [pb setString:url forType:@"public.url"]; + [pb setString:title forType:@"public.url-name"]; + [[NSURL URLWithString:url] writeToPasteboard:pb]; + + NSRect urlBounds = NSZeroRect; + urlBounds.size = [title sizeWithAttributes:nil]; + urlBounds.size.width += urlBounds.size.height + 2; + + NSImage *image = [[NSImage alloc] initWithSize:urlBounds.size]; + + [image lockFocus]; + [favicon drawInRect:NSMakeRect(urlBounds.origin.x, urlBounds.origin.y, urlBounds.size.height, urlBounds.size.height) + fromRect:NSZeroRect + operation:NSCompositingOperationCopy + fraction:1.0]; + urlBounds.origin.x += urlBounds.size.height + 2; + [title drawInRect:urlBounds withAttributes:nil]; + [image unlockFocus]; + + point.x -= urlBounds.size.height / 2; + point.y += urlBounds.size.height / 2; + + [view dragImage:image + at:point + offset:NSZeroSize + event:[NSApp currentEvent] + pasteboard:pb + source:self + slideBack:YES]; } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { - return NSDragOperationCopy | NSDragOperationGeneric; + return NSDragOperationCopy | NSDragOperationGeneric; } -- (BOOL) trackMouse: (NSEvent *)theEvent inRect: (NSRect)cellFrame ofView: (NSView *)controlView untilMouseUp: (BOOL)flag +- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag { - const NSPoint point = [controlView convertPoint: [theEvent locationInWindow] fromView: nil]; - const NSRect buttonRect = [self buttonFrame: cellFrame]; - if (NSPointInRect( point, [self iconFrame: cellFrame] )) { - [self startDragURLAt: point inView: controlView]; - return NO; - } else if (NSPointInRect( point, buttonRect )) { - return [[self refreshCell] trackMouse: theEvent inRect: buttonRect - ofView: controlView untilMouseUp: flag]; - } else { - cellFrame.size.width -= BUTTON_SIZE + PADDING; - return [super trackMouse: theEvent inRect: cellFrame ofView: controlView untilMouseUp: YES]; - } + const NSPoint point = [controlView convertPoint:[theEvent locationInWindow] fromView:nil]; + const NSRect buttonRect = [self buttonFrame:cellFrame]; + if (NSPointInRect(point, [self iconFrame:cellFrame])) { + [self startDragURLAt:point inView:controlView]; + return NO; + } else if (NSPointInRect(point, buttonRect)) { + return [[self refreshCell] trackMouse:theEvent + inRect:buttonRect + ofView:controlView + untilMouseUp:flag]; + } else { + cellFrame.size.width -= BUTTON_SIZE + PADDING; + return [super trackMouse:theEvent inRect:cellFrame ofView:controlView untilMouseUp:YES]; + } } - -- (NSRect) buttonFrame: (NSRect) cellFrame +- (NSRect)buttonFrame:(NSRect)cellFrame { - NSRect buttonRect = cellFrame; - buttonRect.origin.x = NSMaxX( cellFrame ) - BUTTON_SIZE; - buttonRect.size.width = BUTTON_SIZE; - return buttonRect; + NSRect buttonRect = cellFrame; + buttonRect.origin.x = NSMaxX(cellFrame) - BUTTON_SIZE; + buttonRect.size.width = BUTTON_SIZE; + return buttonRect; } -- (NSRect) urlFrame: (NSRect) cellFrame +- (NSRect)urlFrame:(NSRect)cellFrame { - NSRect textFrame = cellFrame; - textFrame.origin.x += cellFrame.size.height; - textFrame.size.width -= cellFrame.size.height + BUTTON_SIZE + PADDING; - return textFrame; + NSRect textFrame = cellFrame; + textFrame.origin.x += cellFrame.size.height; + textFrame.size.width -= cellFrame.size.height + BUTTON_SIZE + PADDING; + return textFrame; } -- (NSRect) iconFrame: (NSRect)cellFrame +- (NSRect)iconFrame:(NSRect)cellFrame { - NSRect iconFrame = { - .origin = { - .x = cellFrame.origin.x + PADDING, - .y = cellFrame.origin.y, - }, - .size = NSMakeSize( NSHeight( cellFrame ), NSHeight( cellFrame ) ) - }; - return NSInsetRect( iconFrame, 2 * PADDING, 2 * PADDING ); + NSRect iconFrame = { + .origin = { + .x = cellFrame.origin.x + PADDING, + .y = cellFrame.origin.y, + }, + .size = NSMakeSize(NSHeight(cellFrame), NSHeight(cellFrame)) + }; + return NSInsetRect(iconFrame, 2 * PADDING, 2 * PADDING); } -- (NSButtonCell *) refreshCell +- (NSButtonCell *)refreshCell { - if (nil == refreshCell) { - refreshCell = [[NSButtonCell alloc] initImageCell: [NSImage imageNamed: NSImageNameRefreshTemplate]]; - [refreshCell setButtonType: NSMomentaryPushInButton]; - [refreshCell setBordered: NO]; - } - return refreshCell; + if (nil == refreshCell) { + refreshCell = [[NSButtonCell alloc] initImageCell:[NSImage imageNamed:NSImageNameRefreshTemplate]]; + [refreshCell setButtonType:NSMomentaryPushInButton]; + [refreshCell setBordered:NO]; + } + return refreshCell; } -- (void) setRefreshTarget: (id) newTarget +- (void)setRefreshTarget:(id)newTarget { - [[self refreshCell] setTarget: newTarget]; + [[self refreshCell] setTarget:newTarget]; } -- (id) refreshTarget +- (id)refreshTarget { - return [[self refreshCell] target]; + return [[self refreshCell] target]; } -- (void) setRefreshAction: (SEL) newAction +- (void)setRefreshAction:(SEL)newAction { - [[self refreshCell] setAction: newAction]; + [[self refreshCell] setAction:newAction]; } -- (SEL) refreshAction +- (SEL)refreshAction { - return [[self refreshCell] action]; + return [[self refreshCell] action]; } @end |