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

Unified Diff: chrome/browser/ui/views/find_bar_view.cc

Issue 1270783005: V1 of material design find in page bar (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mvp Created 5 years, 4 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/views/find_bar_view.cc
diff --git a/chrome/browser/ui/views/find_bar_view.cc b/chrome/browser/ui/views/find_bar_view.cc
index 8d786443e9736bca0aefe812e5de53abc2c83742..f8fda8dd234deb2927aeb0d88996245a0841ac55 100644
--- a/chrome/browser/ui/views/find_bar_view.cc
+++ b/chrome/browser/ui/views/find_bar_view.cc
@@ -25,14 +25,23 @@
#include "ui/base/ime/input_method.h"
#include "ui/base/ime/text_input_flags.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/material_design/material_design_controller.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/theme_provider.h"
#include "ui/events/event.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public2.h"
+#include "ui/native_theme/common_theme.h"
+#include "ui/native_theme/native_theme.h"
#include "ui/resources/grit/ui_resources.h"
+#include "ui/views/background.h"
#include "ui/views/border.h"
+#include "ui/views/bubble/bubble_border.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/label.h"
+#include "ui/views/controls/separator.h"
+#include "ui/views/layout/box_layout.h"
#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
@@ -69,6 +78,26 @@ const SkColor kBackgroundColorNoMatch = SkColorSetRGB(255, 102, 102);
// number brings the width on a "regular fonts" system to about 300px.
const int kDefaultCharWidth = 43;
+// Creates a label that mouse click focus to a given target.
sky 2015/08/05 00:06:01 This comment is missing a few words, and I was con
Evan Stade 2015/08/05 19:04:25 Done.
+class MatchCountLabel : public views::Label {
sky 2015/08/05 00:06:01 Rather than this, and FocusForwarderView, could we
Evan Stade 2015/08/05 19:04:25 that sounds more difficult because a) we'd probabl
+ public:
+ explicit MatchCountLabel(views::View* target_view)
+ : target_view_(target_view) {
+ DCHECK(target_view);
+ }
+
+ // views::Label overrides:
+ bool OnMousePressed(const ui::MouseEvent& event) override {
+ target_view_->RequestFocus();
+ return true;
+ }
+
+ private:
+ views::View* target_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(MatchCountLabel);
+};
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -82,36 +111,17 @@ FindBarView::FindBarView(FindBarHost* host)
find_previous_button_(NULL),
find_next_button_(NULL),
close_button_(NULL) {
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-
find_text_ = new views::Textfield;
find_text_->set_id(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD);
find_text_->set_default_width_in_chars(kDefaultCharWidth);
find_text_->set_controller(this);
find_text_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FIND));
find_text_->SetTextInputFlags(ui::TEXT_INPUT_FLAG_AUTOCORRECT_OFF);
- // The find bar textfield has a background image instead of a border.
- find_text_->SetBorder(views::Border::NullBorder());
AddChildView(find_text_);
- match_count_text_ = new views::Label();
- AddChildView(match_count_text_);
-
- // Create a focus forwarder view which sends focus to find_text_.
- focus_forwarder_view_ = new FocusForwarderView(find_text_);
- AddChildView(focus_forwarder_view_);
-
find_previous_button_ = new views::ImageButton(this);
find_previous_button_->set_tag(FIND_PREVIOUS_TAG);
find_previous_button_->SetFocusable(true);
- find_previous_button_->SetImage(views::CustomButton::STATE_NORMAL,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV));
- find_previous_button_->SetImage(views::CustomButton::STATE_HOVERED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_H));
- find_previous_button_->SetImage(views::CustomButton::STATE_PRESSED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_P));
- find_previous_button_->SetImage(views::CustomButton::STATE_DISABLED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_D));
find_previous_button_->SetTooltipText(
l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP));
find_previous_button_->SetAccessibleName(
@@ -121,14 +131,6 @@ FindBarView::FindBarView(FindBarHost* host)
find_next_button_ = new views::ImageButton(this);
find_next_button_->set_tag(FIND_NEXT_TAG);
find_next_button_->SetFocusable(true);
- find_next_button_->SetImage(views::CustomButton::STATE_NORMAL,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT));
- find_next_button_->SetImage(views::CustomButton::STATE_HOVERED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_H));
- find_next_button_->SetImage(views::CustomButton::STATE_PRESSED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_P));
- find_next_button_->SetImage(views::CustomButton::STATE_DISABLED,
- rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_D));
find_next_button_->SetTooltipText(
l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_NEXT_TOOLTIP));
find_next_button_->SetAccessibleName(
@@ -138,12 +140,6 @@ FindBarView::FindBarView(FindBarHost* host)
close_button_ = new views::ImageButton(this);
close_button_->set_tag(CLOSE_TAG);
close_button_->SetFocusable(true);
- close_button_->SetImage(views::CustomButton::STATE_NORMAL,
- rb.GetImageSkiaNamed(IDR_CLOSE_1));
- close_button_->SetImage(views::CustomButton::STATE_HOVERED,
- rb.GetImageSkiaNamed(IDR_CLOSE_1_H));
- close_button_->SetImage(views::CustomButton::STATE_PRESSED,
- rb.GetImageSkiaNamed(IDR_CLOSE_1_P));
close_button_->SetTooltipText(
l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_CLOSE_TOOLTIP));
close_button_->SetAccessibleName(
@@ -151,18 +147,12 @@ FindBarView::FindBarView(FindBarHost* host)
close_button_->SetAnimationDuration(0);
AddChildView(close_button_);
- SetBackground(rb.GetImageSkiaNamed(IDR_FIND_DLG_LEFT_BACKGROUND),
- rb.GetImageSkiaNamed(IDR_FIND_DLG_RIGHT_BACKGROUND));
-
- SetBorderFromIds(
- IDR_FIND_DIALOG_LEFT, IDR_FIND_DIALOG_MIDDLE, IDR_FIND_DIALOG_RIGHT);
-
- preferred_height_ = rb.GetImageSkiaNamed(IDR_FIND_DIALOG_MIDDLE)->height();
-
- static const int kImages[] = IMAGE_GRID(IDR_TEXTFIELD);
- find_text_border_.reset(views::Painter::CreateImageGridPainter(kImages));
-
EnableCanvasFlippingForRTLUI(true);
+
+ if (ui::MaterialDesignController::IsModeMaterial())
+ InitViewsForMaterial();
+ else
+ InitViewsForNonMaterial();
}
FindBarView::~FindBarView() {
@@ -243,6 +233,9 @@ void FindBarView::SetFocusAndSelection(bool select_all) {
// FindBarView, views::View overrides:
void FindBarView::OnPaint(gfx::Canvas* canvas) {
+ if (ui::MaterialDesignController::IsModeMaterial())
+ return views::View::OnPaint(canvas);
+
// Paint drop down bar border and background.
DropdownBarView::OnPaint(canvas);
@@ -278,7 +271,23 @@ void FindBarView::OnPaint(gfx::Canvas* canvas) {
match_count_text_->background_color());
}
+void FindBarView::OnPaintBackground(gfx::Canvas* canvas) {
+ if (!ui::MaterialDesignController::IsModeMaterial())
+ return views::View::OnPaintBackground(canvas);
+
+ // Draw within the lines.
+ canvas->Save();
+ gfx::Rect bounds = GetLocalBounds();
+ bounds.Inset(border()->GetInsets());
+ canvas->ClipRect(bounds);
+ views::View::OnPaintBackground(canvas);
+ canvas->Restore();
+}
+
void FindBarView::Layout() {
+ if (ui::MaterialDesignController::IsModeMaterial())
+ return views::View::Layout();
+
int panel_width = GetPreferredSize().width();
// Stay within view bounds.
@@ -347,6 +356,12 @@ void FindBarView::Layout() {
}
gfx::Size FindBarView::GetPreferredSize() const {
+ if (ui::MaterialDesignController::IsModeMaterial()) {
+ gfx::Size size = views::View::GetPreferredSize();
+ size.set_width(find_text_->GetPreferredSize().width());
sky 2015/08/05 00:06:01 It's worth a comment as to why the preferred size
Evan Stade 2015/08/05 19:04:25 Done.
+ return size;
+ }
+
gfx::Size prefsize = find_text_->GetPreferredSize();
prefsize.set_height(preferred_height_);
@@ -440,6 +455,114 @@ void FindBarView::OnAfterPaste() {
last_searched_text_.clear();
}
+void FindBarView::InitViewsForNonMaterial() {
+ match_count_text_ = new views::Label();
+ AddChildView(match_count_text_);
+
+ // Create a focus forwarder view which sends focus to find_text_.
+ focus_forwarder_view_ = new FocusForwarderView(find_text_);
+ AddChildView(focus_forwarder_view_);
+
+ // The find bar textfield has a background image instead of a border.
+ find_text_->SetBorder(views::Border::NullBorder());
+
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ find_previous_button_->SetImage(views::CustomButton::STATE_NORMAL,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV));
+ find_previous_button_->SetImage(views::CustomButton::STATE_HOVERED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_H));
+ find_previous_button_->SetImage(views::CustomButton::STATE_PRESSED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_P));
+ find_previous_button_->SetImage(views::CustomButton::STATE_DISABLED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_D));
+
+ find_next_button_->SetImage(views::CustomButton::STATE_NORMAL,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT));
+ find_next_button_->SetImage(views::CustomButton::STATE_HOVERED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_H));
+ find_next_button_->SetImage(views::CustomButton::STATE_PRESSED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_P));
+ find_next_button_->SetImage(views::CustomButton::STATE_DISABLED,
+ rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_D));
+
+ close_button_->SetImage(views::CustomButton::STATE_NORMAL,
+ rb.GetImageSkiaNamed(IDR_CLOSE_1));
+ close_button_->SetImage(views::CustomButton::STATE_HOVERED,
+ rb.GetImageSkiaNamed(IDR_CLOSE_1_H));
+ close_button_->SetImage(views::CustomButton::STATE_PRESSED,
+ rb.GetImageSkiaNamed(IDR_CLOSE_1_P));
+
+ SetBackground(rb.GetImageSkiaNamed(IDR_FIND_DLG_LEFT_BACKGROUND),
+ rb.GetImageSkiaNamed(IDR_FIND_DLG_RIGHT_BACKGROUND));
+ SetBorderFromIds(IDR_FIND_DIALOG_LEFT, IDR_FIND_DIALOG_MIDDLE,
+ IDR_FIND_DIALOG_RIGHT);
+
+ preferred_height_ = rb.GetImageSkiaNamed(IDR_FIND_DIALOG_MIDDLE)->height();
+
+ static const int kImages[] = IMAGE_GRID(IDR_TEXTFIELD);
+ find_text_border_.reset(views::Painter::CreateImageGridPainter(kImages));
+}
+
+void FindBarView::InitViewsForMaterial() {
+ // The background color is not used since there's no arrow.
+ // TODO(estade): this shadow is not quite the same as in the mocks.
+ SetBorder(make_scoped_ptr(new views::BubbleBorder(
+ views::BubbleBorder::NONE, views::BubbleBorder::SMALL_SHADOW,
+ SK_ColorGREEN)));
+
+ match_count_text_ = new MatchCountLabel(find_text_);
+ AddChildViewAt(match_count_text_, 1);
+
+ views::Separator* separator =
+ new views::Separator(views::Separator::VERTICAL);
+ // TODO(estade): refine these constants.
+ separator->SetColor(SkColorSetRGB(0xD5, 0xD5, 0xD5));
+ separator->SetBorder(views::Border::CreateEmptyBorder(4, 10, 4, 10));
+ AddChildViewAt(separator, 2);
+
+ find_text_->SetBorder(views::Border::NullBorder());
+ // Reserve horizontal space. Note that |find_text_| will only be allotted
+ // what space remains after other elements have been laid out, but this
+ // setting is still used when calculating the overall find bar's width.
+ find_text_->set_default_width_in_chars(30);
+
+ struct {
+ views::ImageButton* button;
+ gfx::VectorIconId id;
+ } button_images[] = {
+ {find_previous_button_, gfx::VectorIconId::FIND_PREV},
+ {find_next_button_, gfx::VectorIconId::FIND_NEXT},
+ {close_button_, gfx::VectorIconId::FIND_CLOSE},
+ };
+
+ SkColor grey;
+ ui::CommonThemeGetSystemColor(ui::NativeTheme::kColorId_ChromeIconGrey,
+ &grey);
+ SkColor blue;
+ ui::CommonThemeGetSystemColor(ui::NativeTheme::kColorId_GoogleBlue, &blue);
+ for (size_t i = 0; i < arraysize(button_images); ++i) {
+ views::ImageButton* button = button_images[i].button;
+ button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
+
+ gfx::ImageSkia image = gfx::CreateVectorIcon(button_images[i].id, 16, grey);
+ button->SetImage(views::CustomButton::STATE_NORMAL, &image);
+ image = gfx::CreateVectorIcon(button_images[i].id, 16, blue);
+ button->SetImage(views::CustomButton::STATE_PRESSED, &image);
+ // TODO(estade): I don't think the buttons are ever disabled, so this image
+ // is never visible. Consider removing this image or setting the buttons to
+ // disabled at sensible times.
+ image = gfx::CreateVectorIcon(button_images[i].id, 16,
+ SkColorSetA(grey, 0xff / 2));
+ button->SetImage(views::CustomButton::STATE_DISABLED, &image);
+ }
+
+ views::BoxLayout* manager =
+ new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0);
+ SetLayoutManager(manager);
+ manager->SetFlexForView(find_text_, 1);
+}
+
void FindBarView::Find(const base::string16& search_text) {
FindBarController* controller = find_bar_host()->GetFindBarController();
DCHECK(controller);
@@ -502,6 +625,9 @@ const char* FindBarView::GetClassName() const {
}
void FindBarView::OnThemeChanged() {
+ if (ui::MaterialDesignController::IsModeMaterial())
+ return;
+
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
if (GetThemeProvider()) {
close_button_->SetBackground(
@@ -510,3 +636,13 @@ void FindBarView::OnThemeChanged() {
rb.GetImageSkiaNamed(IDR_CLOSE_1_MASK));
}
}
+
+void FindBarView::OnNativeThemeChanged(const ui::NativeTheme* theme) {
+ if (!ui::MaterialDesignController::IsModeMaterial())
+ return;
+
+ SkColor color =
+ theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground);
+ set_background(views::Background::CreateSolidBackground(color));
+ match_count_text_->SetBackgroundColor(color);
+}

Powered by Google App Engine
This is Rietveld 408576698