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