| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2009 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 "chrome/browser/ui/cocoa/find_bar_text_field_cell.h" | |
| 6 | |
| 7 #include "app/l10n_util.h" | |
| 8 #include "base/logging.h" | |
| 9 #include "base/string_number_conversions.h" | |
| 10 #include "base/string_util.h" | |
| 11 #include "base/sys_string_conversions.h" | |
| 12 #include "grit/generated_resources.h" | |
| 13 | |
| 14 namespace { | |
| 15 | |
| 16 const CGFloat kBaselineAdjust = 1.0; | |
| 17 | |
| 18 // How far to offset the keyword token into the field. | |
| 19 const NSInteger kResultsXOffset = 3; | |
| 20 | |
| 21 // How much width (beyond text) to add to the keyword token on each | |
| 22 // side. | |
| 23 const NSInteger kResultsTokenInset = 3; | |
| 24 | |
| 25 // How far to shift bounding box of hint down from top of field. | |
| 26 // Assumes -setFlipped:YES. | |
| 27 const NSInteger kResultsYOffset = 4; | |
| 28 | |
| 29 // How far the editor insets itself, for purposes of determining if | |
| 30 // decorations need to be trimmed. | |
| 31 const CGFloat kEditorHorizontalInset = 3.0; | |
| 32 | |
| 33 // Conveniences to centralize width+offset calculations. | |
| 34 CGFloat WidthForResults(NSAttributedString* resultsString) { | |
| 35 return kResultsXOffset + ceil([resultsString size].width) + | |
| 36 2 * kResultsTokenInset; | |
| 37 } | |
| 38 | |
| 39 } // namespace | |
| 40 | |
| 41 @implementation FindBarTextFieldCell | |
| 42 | |
| 43 - (CGFloat)baselineAdjust { | |
| 44 return kBaselineAdjust; | |
| 45 } | |
| 46 | |
| 47 - (CGFloat)cornerRadius { | |
| 48 return 4.0; | |
| 49 } | |
| 50 | |
| 51 - (StyledTextFieldCellRoundedFlags)roundedFlags { | |
| 52 return StyledTextFieldCellRoundedLeft; | |
| 53 } | |
| 54 | |
| 55 // @synthesize doesn't seem to compile for this transition. | |
| 56 - (NSAttributedString*)resultsString { | |
| 57 return resultsString_.get(); | |
| 58 } | |
| 59 | |
| 60 // Convenience for the attributes used in the right-justified info | |
| 61 // cells. Sets the background color to red if |foundMatches| is YES. | |
| 62 - (NSDictionary*)resultsAttributes:(BOOL)foundMatches { | |
| 63 scoped_nsobject<NSMutableParagraphStyle> style( | |
| 64 [[NSMutableParagraphStyle alloc] init]); | |
| 65 [style setAlignment:NSRightTextAlignment]; | |
| 66 | |
| 67 return [NSDictionary dictionaryWithObjectsAndKeys: | |
| 68 [self font], NSFontAttributeName, | |
| 69 [NSColor lightGrayColor], NSForegroundColorAttributeName, | |
| 70 [NSColor whiteColor], NSBackgroundColorAttributeName, | |
| 71 style.get(), NSParagraphStyleAttributeName, | |
| 72 nil]; | |
| 73 } | |
| 74 | |
| 75 - (void)setActiveMatch:(NSInteger)current of:(NSInteger)total { | |
| 76 NSString* results = | |
| 77 base::SysUTF16ToNSString(l10n_util::GetStringFUTF16( | |
| 78 IDS_FIND_IN_PAGE_COUNT, | |
| 79 base::IntToString16(current), | |
| 80 base::IntToString16(total))); | |
| 81 resultsString_.reset([[NSAttributedString alloc] | |
| 82 initWithString:results | |
| 83 attributes:[self resultsAttributes:(total > 0)]]); | |
| 84 } | |
| 85 | |
| 86 - (void)clearResults { | |
| 87 resultsString_.reset(nil); | |
| 88 } | |
| 89 | |
| 90 - (NSRect)textFrameForFrame:(NSRect)cellFrame { | |
| 91 NSRect textFrame([super textFrameForFrame:cellFrame]); | |
| 92 if (resultsString_) | |
| 93 textFrame.size.width -= WidthForResults(resultsString_); | |
| 94 return textFrame; | |
| 95 } | |
| 96 | |
| 97 // Do not show the I-beam cursor over the results label. | |
| 98 - (NSRect)textCursorFrameForFrame:(NSRect)cellFrame { | |
| 99 return [self textFrameForFrame:cellFrame]; | |
| 100 } | |
| 101 | |
| 102 - (void)drawResultsWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { | |
| 103 DCHECK(resultsString_); | |
| 104 | |
| 105 NSRect textFrame = [self textFrameForFrame:cellFrame]; | |
| 106 NSRect infoFrame(NSMakeRect(NSMaxX(textFrame), | |
| 107 cellFrame.origin.y + kResultsYOffset, | |
| 108 ceil([resultsString_ size].width), | |
| 109 cellFrame.size.height - kResultsYOffset)); | |
| 110 [resultsString_.get() drawInRect:infoFrame]; | |
| 111 } | |
| 112 | |
| 113 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { | |
| 114 if (resultsString_) | |
| 115 [self drawResultsWithFrame:cellFrame inView:controlView]; | |
| 116 [super drawInteriorWithFrame:cellFrame inView:controlView]; | |
| 117 } | |
| 118 | |
| 119 @end | |
| OLD | NEW |