Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3607)

Unified Diff: chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm

Issue 1821823004: [Mac][Material Design] Update Omnibox dropdown on Mac to MD (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up for review. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm
index f8a10b8c84872db71eae7828941e7c1fbcde2f7b..8ea6ffd1ea21c06101dd51a5c8819602e969111e 100644
--- a/chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm
+++ b/chrome/browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm
@@ -25,24 +25,42 @@
#import "ui/base/cocoa/cocoa_base_utils.h"
#import "ui/base/cocoa/flipped_view.h"
#include "ui/base/cocoa/window_size_constants.h"
+#include "ui/base/material_design/material_design_controller.h"
+#include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/image/image_skia_util_mac.h"
+#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
#include "ui/gfx/text_elider.h"
+#include "ui/gfx/vector_icons_public.h"
namespace {
+const int kPopupPaddingVertical = 5;
+const int kMaterialPopupPaddingVertical = 4;
+
// Padding between matrix and the top and bottom of the popup window.
-const CGFloat kPopupPaddingVertical = 5.0;
+CGFloat PopupPaddingVertical() {
+ if (!ui::MaterialDesignController::IsModeMaterial()) {
+ return kPopupPaddingVertical;
+ }
+ return kMaterialPopupPaddingVertical;
+}
// Animation duration when animating the popup window smaller.
const NSTimeInterval kShrinkAnimationDuration = 0.1;
+} // namespace
+
// Background colors for different states of the popup elements.
-NSColor* BackgroundColor() {
- return [NSColor controlBackgroundColor];
-}
+// Static.
tapted 2016/04/28 14:29:44 // static (I guess this is one exception to the "
shrike 2016/04/28 21:05:35 Done.
tapted 2016/04/28 14:29:44 remove blank line
shrike 2016/04/28 21:05:35 Done.
-} // namespace
+NSColor* OmniboxPopupViewMac::BackgroundColor(BOOL is_dark_theme) {
+ const CGFloat kMDDarkControlBackround = 40 / 255.;
+ return is_dark_theme
+ ? [NSColor colorWithGenericGamma22White:kMDDarkControlBackround alpha:1]
+ : [NSColor controlBackgroundColor];
+}
OmniboxPopupViewMac::OmniboxPopupViewMac(OmniboxView* omnibox_view,
OmniboxEditModel* edit_model,
@@ -102,7 +120,9 @@ void OmniboxPopupViewMac::UpdatePopupAppearance() {
tableView:matrix_
popupView:*this
answerImage:answerImage]];
- [matrix_ setSeparator:[OmniboxPopupCell createSeparatorString]];
+ BOOL is_dark_theme = [matrix_ hasDarkTheme];
+ [matrix_ setSeparator:
+ [OmniboxPopupCell createSeparatorStringForDarkTheme:is_dark_theme]];
// Update the selection before placing (and displaying) the window.
PaintUpdatesNow();
@@ -165,15 +185,19 @@ void OmniboxPopupViewMac::CreatePopupIfNeeded() {
[[FlippedView alloc] initWithFrame:NSZeroRect]);
[popup_ setContentView:contentView];
+ BOOL is_dark_theme = ui::MaterialDesignController::IsModeMaterial() &&
+ [[field_ window] hasDarkTheme];
+
// View to draw a background beneath the matrix.
background_view_.reset([[NSBox alloc] initWithFrame:NSZeroRect]);
[background_view_ setBoxType:NSBoxCustom];
[background_view_ setBorderType:NSNoBorder];
- [background_view_ setFillColor:BackgroundColor()];
+ [background_view_ setFillColor:BackgroundColor(is_dark_theme)];
[background_view_ setContentViewMargins:NSZeroSize];
[contentView addSubview:background_view_];
- matrix_.reset([[OmniboxPopupMatrix alloc] initWithObserver:this]);
+ matrix_.reset([[OmniboxPopupMatrix alloc] initWithObserver:this
+ forDarkTheme:is_dark_theme]);
[background_view_ addSubview:matrix_];
top_separator_view_.reset(
@@ -181,7 +205,8 @@ void OmniboxPopupViewMac::CreatePopupIfNeeded() {
[contentView addSubview:top_separator_view_];
bottom_separator_view_.reset(
- [[OmniboxPopupBottomSeparatorView alloc] initWithFrame:NSZeroRect]);
+ [[OmniboxPopupBottomSeparatorView alloc] initWithFrame:NSZeroRect
+ forDarkTheme:is_dark_theme]);
[contentView addSubview:bottom_separator_view_];
// TODO(dtseng): Ignore until we provide NSAccessibility support.
@@ -198,7 +223,7 @@ void OmniboxPopupViewMac::PositionPopup(const CGFloat matrixHeight) {
// Calculate the popup's position on the screen.
NSRect popup_frame = anchor_rect_base;
// Size to fit the matrix and shift down by the size.
- popup_frame.size.height = matrixHeight + kPopupPaddingVertical * 2.0;
+ popup_frame.size.height = matrixHeight + PopupPaddingVertical() * 2.0;
popup_frame.size.height += [OmniboxPopupTopSeparatorView preferredHeight];
popup_frame.size.height += [OmniboxPopupBottomSeparatorView preferredHeight];
popup_frame.origin.y -= NSHeight(popup_frame);
@@ -232,21 +257,31 @@ void OmniboxPopupViewMac::PositionPopup(const CGFloat matrixHeight) {
background_rect.origin.y = NSMaxY(top_separator_frame);
[background_view_ setFrame:background_rect];
- // Calculate the width of the table based on backing out the popup's border
+ // In Material Design, the table is the width of the window. In non-MD,
+ // calculate the width of the table based on backing out the popup's border
// from the width of the field.
- const CGFloat tableWidth = NSWidth([field_ bounds]);
- DCHECK_GT(tableWidth, 0.0);
+ CGFloat table_width = NSWidth([background_view_ bounds]);
+ bool is_mode_material = ui::MaterialDesignController::IsModeMaterial();
+ if (!is_mode_material) {
+ table_width = NSWidth([field_ bounds]);
+ }
+ DCHECK_GT(table_width, 0.0);
// Matrix.
NSPoint field_origin_base =
[field_ convertPoint:[field_ bounds].origin toView:nil];
NSRect matrix_frame = NSZeroRect;
- matrix_frame.origin.x = field_origin_base.x - NSMinX(anchor_rect_base);
- matrix_frame.origin.y = kPopupPaddingVertical;
- matrix_frame.size.width = tableWidth;
+ matrix_frame.origin.x = 0;
+ if (!is_mode_material) {
+ matrix_frame.origin.x = field_origin_base.x - NSMinX(anchor_rect_base);
+ } else {
+ [matrix_ setContentLeftPadding:field_origin_base.x];
+ }
+ matrix_frame.origin.y = PopupPaddingVertical();
+ matrix_frame.size.width = table_width;
matrix_frame.size.height = matrixHeight;
[matrix_ setFrame:matrix_frame];
- [[[matrix_ tableColumns] objectAtIndex:0] setWidth:tableWidth];
+ [[[matrix_ tableColumns] objectAtIndex:0] setWidth:table_width];
// Don't play animation games on first display.
target_popup_frame_ = popup_frame;
@@ -302,14 +337,27 @@ void OmniboxPopupViewMac::PositionPopup(const CGFloat matrixHeight) {
}
NSImage* OmniboxPopupViewMac::ImageForMatch(
- const AutocompleteMatch& match) const {
+ const AutocompleteMatch& match,
+ BOOL ignore_dark_theme) const {
gfx::Image image = model_->GetIconIfExtensionMatch(match);
if (!image.IsEmpty())
return image.AsNSImage();
- const int resource_id = model_->IsStarredMatch(match) ?
- IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match.type);
- return OmniboxViewMac::ImageForResource(resource_id);
+ if (!ui::MaterialDesignController::IsModeMaterial()) {
+ const int resource_id = model_->IsStarredMatch(match) ?
+ IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match.type);
+ return OmniboxViewMac::ImageForResource(resource_id);
+ }
+ bool is_dark_mode = !ignore_dark_theme && [matrix_ hasDarkTheme];
+ const SkColor icon_color =
+ is_dark_mode ? SkColorSetA(SK_ColorWHITE, 0xCC) : gfx::kChromeIconGrey;
+ const gfx::VectorIconId vector_icon_id = model_->IsStarredMatch(match)
+ ? gfx::VectorIconId::LOCATION_BAR_STAR
+ : AutocompleteMatch::TypeToVectorIcon(match.type);
+ const int kIconSize = 16;
+ return NSImageFromImageSkia(gfx::CreateVectorIcon(vector_icon_id,
+ kIconSize,
+ icon_color));
}
void OmniboxPopupViewMac::OpenURLForRow(size_t row,

Powered by Google App Engine
This is Rietveld 408576698