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 #ifndef CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 6 #define CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 7 8 #import <Cocoa/Cocoa.h> 9 10 #include "base/mac/scoped_nsobject.h" 11 #include "chrome/browser/autocomplete/autocomplete_match.h" 12 13 class OmniboxPopupViewMac; 14 15 // OmniboxPopupCell overrides how backgrounds are displayed to 16 // handle hover versus selected. So long as we're in there, it also 17 // provides some default initialization. 18 @interface OmniboxPopupCell : NSButtonCell { 19 @private 20 // The popup view parent of this cell. 21 OmniboxPopupViewMac* parent_; 22 23 // The match which will be rendered for this row in omnibox dropdown. 24 AutocompleteMatch match_; 25 26 // NSAttributedString instances for various match components. 27 base::scoped_nsobject<NSAttributedString> separator_; 28 base::scoped_nsobject<NSAttributedString> description_; 29 30 // NOTE: While |prefix_| is used only for postfix suggestions, it still needs 31 // to be a member of the class. This allows the |NSAttributedString| instance 32 // to stay alive between the call to |drawTitle| and the actual paint event 33 // which accesses the |NSAttributedString| instance. 34 base::scoped_nsobject<NSAttributedString> prefix_; 35 36 // The width of widest match contents in a set of infinite suggestions. 37 CGFloat maxMatchContentsWidth_; 38 39 // The offset at which the infinite suggesiton contents should be displayed. 40 CGFloat contentsOffset_; 41 } 42 43 - (void)setMatch:(const AutocompleteMatch&)match; 44 45 - (void)setMaxMatchContentsWidth:(CGFloat)maxMatchContentsWidth; 46 47 - (void)setContentsOffset:(CGFloat)contentsOffset; 48 49 // Returns the width of the match contents. 50 - (CGFloat)getMatchContentsWidth; 51 52 // Returns the offset of the start of the contents in the input text for the 53 // given match. It is costly to compute this offset, so it is computed once and 54 // shared by all OmniboxPopupCell instances through OmniboxPopupViewMac parent. 55 + (CGFloat)computeContentsOffset:(const AutocompleteMatch&)match; 56 57 @end 58 59 #endif // CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 60