15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_IMAGE_BUTTON_CELL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_IMAGE_BUTTON_CELL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/mac/scoped_nsobject.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace image_button_cell {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Possible states
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ButtonState {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kDefaultState = 0,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kHoverState,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kPressedState,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kDisabledState,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The same as above, but for non-main, non-key windows.
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kDefaultStateBackground,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kHoverStateBackground,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonStateCount
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ImageButtonCell
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@protocol ImageButton
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@optional
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sent from an ImageButtonCell to its view when the mouse enters or exits the
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cell.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)mouseInsideStateDidChange:(BOOL)isInside;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A button cell that can disable a different image for each possible button
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state. Images are specified by image IDs.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface ImageButtonCell : NSButtonCell {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @private
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // At most one of these two fields will be non-null.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int imageId;
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::scoped_nsobject<NSImage> image;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } image_[image_button_cell::kButtonStateCount];
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BOOL isMouseInside_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@property(assign, nonatomic) BOOL isMouseInside;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Gets the image for the given button state. Will load from a resource pak if
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the image was originally set using an image ID.
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)- (NSImage*)imageForState:(image_button_cell::ButtonState)state
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                     view:(NSView*)controlView;
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sets the image for the given button state using an image ID.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The image will be lazy loaded from a resource pak -- important because
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// this is in the hot path for startup.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)setImageID:(NSInteger)imageID
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    forButtonState:(image_button_cell::ButtonState)state;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Sets the image for the given button state using an image.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)- (void)setImage:(NSImage*)image
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  forButtonState:(image_button_cell::ButtonState)state;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Gets the alpha to use to draw the button for the current window focus state.
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)- (CGFloat)imageAlphaForWindowState:(NSWindow*)window;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Draws the cell's image within |cellFrame|.
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)- (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView*)controlView;
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// If |controlView| is a first responder then draws a blue focus ring.
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)- (void)drawFocusRingWithFrame:(NSRect)cellFrame inView:(NSView*)controlView;
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_COCOA_IMAGE_BUTTON_CELL_H_
76