• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import "ui/base/cocoa/controls/hover_image_menu_button_cell.h"
6
7@implementation HoverImageMenuButtonCell
8
9@synthesize hovered = hovered_;
10
11- (id)initTextCell:(NSString*)stringValue
12         pullsDown:(BOOL)pullDown {
13  if ((self = [super initTextCell:stringValue
14                        pullsDown:pullDown])) {
15    [self setUsesItemFromMenu:NO];
16  }
17  return self;
18}
19
20- (void)setHoverImage:(NSImage*)newImage {
21  if ([hoverImage_ isEqual:newImage])
22    return;
23
24  hoverImage_.reset([newImage retain]);
25  if (hovered_)
26    [[self controlView] setNeedsDisplay:YES];
27}
28
29- (NSImage*)hoverImage {
30  return hoverImage_;
31}
32
33- (void)setHovered:(BOOL)hovered {
34  if (hovered_ == hovered)
35    return;
36
37  hovered_ = hovered;
38  [[self controlView] setNeedsDisplay:YES];
39}
40
41- (NSImage*)imageToDraw {
42  if ([self isHighlighted] && [self alternateImage])
43    return [self alternateImage];
44
45  if ([self isHovered] && [self hoverImage])
46    return [self hoverImage];
47
48  // Note that NSPopUpButtonCell updates the cell image when the [self menuItem]
49  // changes.
50  return [self image];
51}
52
53- (void)setDefaultImage:(NSImage*)defaultImage {
54  base::scoped_nsobject<NSMenuItem> buttonMenuItem([[NSMenuItem alloc] init]);
55  [buttonMenuItem setImage:defaultImage];
56  [self setMenuItem:buttonMenuItem];
57}
58
59- (void)drawWithFrame:(NSRect)cellFrame
60               inView:(NSView*)controlView {
61  [[self imageToDraw] drawInRect:cellFrame
62                        fromRect:NSZeroRect
63                       operation:NSCompositeSourceOver
64                        fraction:1.0
65                  respectFlipped:YES
66                           hints:nil];
67}
68
69@end
70