OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include <cmath> |
| 6 |
5 #include "chrome/browser/autocomplete/autocomplete_popup_view_mac.h" | 7 #include "chrome/browser/autocomplete/autocomplete_popup_view_mac.h" |
6 | 8 |
7 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
8 #include "app/text_elider.h" | 10 #include "app/text_elider.h" |
9 #include "base/stl_util-inl.h" | 11 #include "base/stl_util-inl.h" |
10 #include "base/sys_string_conversions.h" | 12 #include "base/sys_string_conversions.h" |
11 #include "chrome/browser/autocomplete/autocomplete_edit.h" | 13 #include "chrome/browser/autocomplete/autocomplete_edit.h" |
12 #include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h" | 14 #include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h" |
13 #include "chrome/browser/autocomplete/autocomplete_popup_model.h" | 15 #include "chrome/browser/autocomplete/autocomplete_popup_model.h" |
14 #include "chrome/browser/cocoa/event_utils.h" | 16 #include "chrome/browser/cocoa/event_utils.h" |
15 #include "chrome/browser/cocoa/image_utils.h" | 17 #include "chrome/browser/cocoa/image_utils.h" |
16 #include "gfx/rect.h" | 18 #include "gfx/rect.h" |
17 #include "grit/theme_resources.h" | 19 #include "grit/theme_resources.h" |
18 #include "skia/ext/skia_utils_mac.h" | 20 #include "skia/ext/skia_utils_mac.h" |
19 #import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h" | 21 #import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h" |
20 | 22 |
21 namespace { | 23 namespace { |
22 | 24 |
23 // The size delta between the font used for the edit and the result | 25 // The size delta between the font used for the edit and the result |
24 // rows. | 26 // rows. |
25 const int kEditFontAdjust = -1; | 27 const int kEditFontAdjust = -1; |
26 | 28 |
27 // How much to adjust the cell sizing up from the default determined | 29 // How much to adjust the cell sizing up from the default determined |
28 // by the font. | 30 // by the font. |
29 const int kCellHeightAdjust = 7.0; | 31 const int kCellHeightAdjust = 6.0; |
30 | 32 |
31 // How to round off the popup's corners. Goal is to match star and go | 33 // How to round off the popup's corners. Goal is to match star and go |
32 // buttons. | 34 // buttons. |
33 const CGFloat kPopupRoundingRadius = 3.5; | 35 const CGFloat kPopupRoundingRadius = 3.5; |
34 | 36 |
35 // Gap between the field and the popup. | 37 // Gap between the field and the popup. |
36 const CGFloat kPopupFieldGap = 2.0; | 38 const CGFloat kPopupFieldGap = 2.0; |
37 | 39 |
38 // How opaque the popup window should be. This matches Windows (see | 40 // How opaque the popup window should be. This matches Windows (see |
39 // autocomplete_popup_contents_view.cc, kGlassPopupTransparency). | 41 // autocomplete_popup_contents_view.cc, kGlassPopupTransparency). |
40 const CGFloat kPopupAlpha = 240.0 / 255.0; | 42 const CGFloat kPopupAlpha = 240.0 / 255.0; |
41 | 43 |
42 // How far to offset image column from the left. | 44 // How far to offset image column from the left. |
43 const CGFloat kImageXOffset = 4.0; | 45 const CGFloat kImageXOffset = 4.0; |
44 | 46 |
45 // How far to offset the text column from the left. | 47 // How far to offset the text column from the left. |
46 const CGFloat kTextXOffset = 26.0; | 48 const CGFloat kTextXOffset = 27.0; |
47 | 49 |
48 // Animation duration when animating the popup window smaller. | 50 // Animation duration when animating the popup window smaller. |
49 const NSTimeInterval kShrinkAnimationDuration = 0.1; | 51 const NSTimeInterval kShrinkAnimationDuration = 0.1; |
50 | 52 |
51 // Maximum fraction of the popup width that can be used to display match | 53 // Maximum fraction of the popup width that can be used to display match |
52 // contents. | 54 // contents. |
53 const float kMaxContentsFraction = 0.7; | 55 const float kMaxContentsFraction = 0.7; |
54 | 56 |
55 // NSEvent -buttonNumber for middle mouse button. | 57 // NSEvent -buttonNumber for middle mouse button. |
56 const static NSInteger kMiddleButtonNumber(2); | 58 const static NSInteger kMiddleButtonNumber(2); |
57 | 59 |
58 // The autocomplete field's visual border is slightly inset from the | 60 // The autocomplete field's visual border is slightly inset from the |
59 // actual border so that it can spill a glow into the toolbar or | 61 // actual border so that it can spill a glow into the toolbar or |
60 // something like that. This is how much to inset vertically. | 62 // something like that. This is how much to inset vertically. |
61 const CGFloat kFieldVisualInset = 1.0; | 63 const CGFloat kFieldVisualInset = 1.0; |
62 | 64 |
63 // The popup window has a single-pixel border in screen coordinates, | 65 // The popup window has a single-pixel border in screen coordinates, |
64 // which has to be backed out to line the borders up with the field | 66 // which has to be backed out to line the borders up with the field |
65 // borders. | 67 // borders. |
66 const CGFloat kWindowBorderWidth = 1.0; | 68 const CGFloat kWindowBorderWidth = 1.0; |
67 | 69 |
68 // |AutocompleteButtonCell| and |AutocompleteTextFieldCell| draw their | |
69 // text somewhat differently. The image needs to be adjusted slightly | |
70 // downward to align with the text the same. | |
71 const CGFloat kImageBaselineAdjust = 1.0; | |
72 | |
73 // Background colors for different states of the popup elements. | 70 // Background colors for different states of the popup elements. |
74 NSColor* BackgroundColor() { | 71 NSColor* BackgroundColor() { |
75 return [[NSColor controlBackgroundColor] colorWithAlphaComponent:kPopupAlpha]; | 72 return [[NSColor controlBackgroundColor] colorWithAlphaComponent:kPopupAlpha]; |
76 } | 73 } |
77 NSColor* SelectedBackgroundColor() { | 74 NSColor* SelectedBackgroundColor() { |
78 return [[NSColor selectedControlColor] colorWithAlphaComponent:kPopupAlpha]; | 75 return [[NSColor selectedControlColor] colorWithAlphaComponent:kPopupAlpha]; |
79 } | 76 } |
80 NSColor* HoveredBackgroundColor() { | 77 NSColor* HoveredBackgroundColor() { |
81 return [[NSColor controlHighlightColor] colorWithAlphaComponent:kPopupAlpha]; | 78 return [[NSColor controlHighlightColor] colorWithAlphaComponent:kPopupAlpha]; |
82 } | 79 } |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 // with the star button and autocomplete field. | 509 // with the star button and autocomplete field. |
513 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { | 510 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { |
514 [[self backgroundColor] set]; | 511 [[self backgroundColor] set]; |
515 NSRectFill(cellFrame); | 512 NSRectFill(cellFrame); |
516 | 513 |
517 // Put the image centered vertically but in a fixed column. | 514 // Put the image centered vertically but in a fixed column. |
518 NSImage* image = [self image]; | 515 NSImage* image = [self image]; |
519 if (image) { | 516 if (image) { |
520 NSRect imageRect = cellFrame; | 517 NSRect imageRect = cellFrame; |
521 imageRect.size = [image size]; | 518 imageRect.size = [image size]; |
522 imageRect.origin.y += kImageBaselineAdjust + | 519 imageRect.origin.y += |
523 floor((NSHeight(cellFrame) - NSHeight(imageRect)) / 2); | 520 std::floor((NSHeight(cellFrame) - NSHeight(imageRect)) / 2.0); |
524 imageRect.origin.x += kImageXOffset; | 521 imageRect.origin.x += kImageXOffset; |
525 [image drawInRect:imageRect | 522 [image drawInRect:imageRect |
526 fromRect:NSZeroRect // Entire image | 523 fromRect:NSZeroRect // Entire image |
527 operation:NSCompositeSourceOver | 524 operation:NSCompositeSourceOver |
528 fraction:1.0 | 525 fraction:1.0 |
529 neverFlipped:YES]; | 526 neverFlipped:YES]; |
530 } | 527 } |
531 | 528 |
532 // Adjust the title position to be lined up under the field's text. | 529 // Adjust the title position to be lined up under the field's text. |
533 NSAttributedString* title = [self attributedTitle]; | 530 NSAttributedString* title = [self attributedTitle]; |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
731 yRadius:kPopupRoundingRadius]; | 728 yRadius:kPopupRoundingRadius]; |
732 | 729 |
733 // Draw the matrix clipped to our border. | 730 // Draw the matrix clipped to our border. |
734 [NSGraphicsContext saveGraphicsState]; | 731 [NSGraphicsContext saveGraphicsState]; |
735 [path addClip]; | 732 [path addClip]; |
736 [super drawRect:rect]; | 733 [super drawRect:rect]; |
737 [NSGraphicsContext restoreGraphicsState]; | 734 [NSGraphicsContext restoreGraphicsState]; |
738 } | 735 } |
739 | 736 |
740 @end | 737 @end |
OLD | NEW |