1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#import <Cocoa/Cocoa.h> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/mac/scoped_nsobject.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass OmniboxPopupViewMac; 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// OmniboxPopupCell overrides how backgrounds are displayed to 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// handle hover versus selected. So long as we're in there, it also 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// provides some default initialization. 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch@interface OmniboxPopupCell : NSButtonCell { 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) @private 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The popup view parent of this cell. 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OmniboxPopupViewMac* parent_; 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // The match which will be rendered for this row in omnibox dropdown. 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch match_; 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // NSAttributedString instances for various match components. 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::scoped_nsobject<NSAttributedString> separator_; 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::scoped_nsobject<NSAttributedString> description_; 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // NOTE: While |prefix_| is used only for postfix suggestions, it still needs 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // to be a member of the class. This allows the |NSAttributedString| instance 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // to stay alive between the call to |drawTitle| and the actual paint event 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // which accesses the |NSAttributedString| instance. 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::scoped_nsobject<NSAttributedString> prefix_; 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The width of widest match contents in a set of infinite suggestions. 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CGFloat maxMatchContentsWidth_; 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The offset at which the infinite suggesiton contents should be displayed. 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CGFloat contentsOffset_; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)- (void)setMatch:(const AutocompleteMatch&)match; 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (void)setMaxMatchContentsWidth:(CGFloat)maxMatchContentsWidth; 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (void)setContentsOffset:(CGFloat)contentsOffset; 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Returns the width of the match contents. 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (CGFloat)getMatchContentsWidth; 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Returns the offset of the start of the contents in the input text for the 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// given match. It is costly to compute this offset, so it is computed once and 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// shared by all OmniboxPopupCell instances through OmniboxPopupViewMac parent. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch+ (CGFloat)computeContentsOffset:(const AutocompleteMatch&)match; 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch@end 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_ 60