// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #import "chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.h" #include namespace { // How far to offset image column from the left. const CGFloat kImageXOffset = 5.0; // How far to offset the text column from the left. const CGFloat kTextXOffset = 28.0; // Rounding radius of selection and hover background on popup items. const CGFloat kCellRoundingRadius = 2.0; NSColor* SelectedBackgroundColor() { return [NSColor selectedControlColor]; } NSColor* HoveredBackgroundColor() { return [NSColor controlHighlightColor]; } } // namespace @implementation OmniboxPopupCell - (id)init { self = [super init]; if (self) { [self setImagePosition:NSImageLeft]; [self setBordered:NO]; [self setButtonType:NSRadioButton]; // Without this highlighting messes up white areas of images. [self setHighlightsBy:NSNoCellMask]; } return self; } // The default NSButtonCell drawing leaves the image flush left and // the title next to the image. This spaces things out to line up // with the star button and autocomplete field. - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { if ([self state] == NSOnState || [self isHighlighted]) { if ([self state] == NSOnState) [SelectedBackgroundColor() set]; else [HoveredBackgroundColor() set]; NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:cellFrame xRadius:kCellRoundingRadius yRadius:kCellRoundingRadius]; [path fill]; } // Put the image centered vertically but in a fixed column. NSImage* image = [self image]; if (image) { NSRect imageRect = cellFrame; imageRect.size = [image size]; imageRect.origin.y += std::floor((NSHeight(cellFrame) - NSHeight(imageRect)) / 2.0); imageRect.origin.x += kImageXOffset; [image drawInRect:imageRect fromRect:NSZeroRect // Entire image operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil]; } // Adjust the title position to be lined up under the field's text. NSAttributedString* title = [self attributedTitle]; if (title && [title length]) { NSRect titleRect = cellFrame; titleRect.size.width -= kTextXOffset; titleRect.origin.x += kTextXOffset; [self drawTitle:title withFrame:titleRect inView:controlView]; } } @end