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

Unified Diff: chrome/browser/ui/views/autofill/decorated_textfield.cc

Issue 135863002: Reland Merge NativeTextfieldViews into views::Textfield. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Handle Ctrl-Shift-Delete and Backspace on Linux, like on ChromeOS. Created 6 years, 11 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/autofill/decorated_textfield.cc
diff --git a/chrome/browser/ui/views/autofill/decorated_textfield.cc b/chrome/browser/ui/views/autofill/decorated_textfield.cc
index fa3e816f95fbd7497dd65912d21bc21fb2063b31..94e8202c7655ffbb8edc403a80d7b34dd58294a8 100644
--- a/chrome/browser/ui/views/autofill/decorated_textfield.cc
+++ b/chrome/browser/ui/views/autofill/decorated_textfield.cc
@@ -10,7 +10,6 @@
#include "ui/views/background.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/focusable_border.h"
-#include "ui/views/controls/textfield/native_textfield_views.h"
#include "ui/views/controls/textfield/textfield_controller.h"
namespace {
@@ -25,38 +24,28 @@ namespace autofill {
// static
const char DecoratedTextfield::kViewClassName[] = "autofill/DecoratedTextfield";
-const int DecoratedTextfield::kMagicInsetNumber = 6;
-
DecoratedTextfield::DecoratedTextfield(
const base::string16& default_value,
const base::string16& placeholder,
views::TextfieldController* controller)
- : border_(new views::FocusableBorder()),
- invalid_(false),
+ : invalid_(false),
editable_(true) {
UpdateBackground();
-
- set_border(border_);
- // Removes the border from |native_wrapper_|.
- RemoveBorder();
+ UpdateBorder();
set_placeholder_text(placeholder);
SetText(default_value);
SetController(controller);
- SetHorizontalMargins(0, 0);
}
DecoratedTextfield::~DecoratedTextfield() {}
void DecoratedTextfield::SetInvalid(bool invalid) {
- invalid_ = invalid;
- if (!editable_)
+ if (invalid_ == invalid)
return;
- if (invalid)
- border_->SetColor(kWarningColor);
- else
- border_->UseDefaultColor();
+ invalid_ = invalid;
+ UpdateBorder();
SchedulePaint();
}
@@ -65,14 +54,7 @@ void DecoratedTextfield::SetEditable(bool editable) {
return;
editable_ = editable;
- if (editable) {
- SetInvalid(invalid_);
- UseDefaultBackgroundColor();
- } else {
- border_->SetColor(SK_ColorTRANSPARENT);
- SetBackgroundColor(SK_ColorTRANSPARENT);
- }
-
+ UpdateBorder();
UpdateBackground();
SetEnabled(editable);
IconChanged();
@@ -111,10 +93,7 @@ void DecoratedTextfield::SetTooltipIcon(const base::string16& text) {
}
base::string16 DecoratedTextfield::GetPlaceholderText() const {
- if (!editable_)
- return base::string16();
-
- return views::Textfield::GetPlaceholderText();
+ return editable_ ? views::Textfield::GetPlaceholderText() : base::string16();
}
const char* DecoratedTextfield::GetClassName() const {
@@ -125,25 +104,14 @@ views::View* DecoratedTextfield::GetEventHandlerForRect(const gfx::Rect& rect) {
views::View* handler = views::Textfield::GetEventHandlerForRect(rect);
if (handler->GetClassName() == TooltipIcon::kViewClassName)
return handler;
- return textfield_view_;
-}
-
-void DecoratedTextfield::OnFocus() {
- views::Textfield::OnFocus();
- SchedulePaint();
-}
-
-void DecoratedTextfield::OnBlur() {
- views::Textfield::OnBlur();
- SchedulePaint();
+ return this;
}
gfx::Size DecoratedTextfield::GetPreferredSize() {
- int w = views::Textfield::GetPreferredSize().width();
- views::LabelButton button(NULL, base::string16());
- button.SetStyle(views::Button::STYLE_BUTTON);
- int h = button.GetPreferredSize().height();
- return gfx::Size(w, h - kMagicInsetNumber);
+ static const int height =
+ views::LabelButton(NULL, base::string16()).GetPreferredSize().height();
+ const gfx::Size size = views::Textfield::GetPreferredSize();
+ return gfx::Size(size.width(), std::max(size.height(), height));
}
void DecoratedTextfield::Layout() {
@@ -157,29 +125,45 @@ void DecoratedTextfield::Layout() {
bounds.right() - icon_size.width() - kTextfieldIconPadding;
// Vertically centered.
int y = bounds.y() + (bounds.height() - icon_size.height()) / 2;
- icon_view_->SetBounds(x,
- y,
- icon_size.width(),
- icon_size.height());
+ icon_view_->SetBounds(x, y, icon_size.width(), icon_size.height());
}
}
void DecoratedTextfield::UpdateBackground() {
+ if (editable_)
+ UseDefaultBackgroundColor();
+ else
+ SetBackgroundColor(SK_ColorTRANSPARENT);
set_background(
views::Background::CreateSolidBackground(GetBackgroundColor()));
}
-void DecoratedTextfield::IconChanged() {
- // Don't show the icon if nothing else is showing.
- icon_view_->SetVisible(editable_ || !text().empty());
+void DecoratedTextfield::UpdateBorder() {
+ views::FocusableBorder* border = new views::FocusableBorder();
+ if (invalid_)
+ border->SetColor(kWarningColor);
+ else if (!editable_)
+ border->SetColor(SK_ColorTRANSPARENT);
- int icon_space = icon_view_ ?
+ const gfx::Insets insets = GetInsets();
+ int left = icon_view_ ?
icon_view_->GetPreferredSize().width() + 2 * kTextfieldIconPadding : 0;
+ int right = 0;
+ if (base::i18n::IsRTL())
+ std::swap(left, right);
+ border->SetInsets(insets.top(), insets.left() + left, insets.bottom(),
+ insets.right() + right);
+ set_border(border);
+}
- bool is_rtl = base::i18n::IsRTL();
- SetHorizontalMargins(is_rtl ? icon_space : 0, is_rtl ? 0 : icon_space);
+void DecoratedTextfield::IconChanged() {
+ // Don't show the icon if nothing else is showing.
+ const bool visible = editable_ || !text().empty();
+ if (icon_view_->visible() == visible)
+ return;
- Layout();
+ icon_view_->SetVisible(visible);
+ UpdateBorder();
SchedulePaint();
}

Powered by Google App Engine
This is Rietveld 408576698