summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/shelf/alternate_app_list_button.cc7
-rw-r--r--ash/shelf/app_list_button.cc4
-rw-r--r--ash/shelf/shelf_button.cc10
-rw-r--r--ash/shelf/shelf_button.h1
-rw-r--r--ash/shelf/shelf_view.cc4
-rw-r--r--ash/system/tray/actionable_view.cc36
-rw-r--r--ash/system/tray/actionable_view.h13
-rw-r--r--ash/system/tray/fixed_sized_scroll_view.cc5
-rw-r--r--ash/system/tray/fixed_sized_scroll_view.h1
-rw-r--r--ash/system/tray/tray_background_view.cc15
-rw-r--r--ash/system/tray/tray_background_view.h2
-rw-r--r--ash/system/tray/tray_popup_header_button.cc7
-rw-r--r--ash/system/tray/tray_popup_label_button.cc3
-rw-r--r--ash/system/tray/tray_popup_label_button.h1
-rw-r--r--chrome/browser/chromeos/ui/focus_ring_layer.cc5
-rw-r--r--chrome/browser/ui/views/autofill/autofill_dialog_views.cc17
-rw-r--r--chrome/browser/ui/views/autofill/tooltip_icon.cc7
-rw-r--r--chrome/browser/ui/views/autofill/tooltip_icon.h4
-rw-r--r--chrome/browser/ui/views/desktop_media_picker_views.cc25
-rw-r--r--chrome/browser/ui/views/location_bar/location_bar_view.h3
-rw-r--r--chrome/browser/ui/views/new_avatar_button.cc2
-rw-r--r--chrome/browser/ui/views/tabs/tab_strip.cc2
-rw-r--r--chrome/browser/ui/views/toolbar/back_button.cc9
-rw-r--r--chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc2
-rw-r--r--ui/app_list/views/folder_header_view.cc3
-rw-r--r--ui/message_center/views/bounded_label.cc1
-rw-r--r--ui/message_center/views/message_center_button_bar.cc3
-rw-r--r--ui/message_center/views/message_center_view.cc2
-rw-r--r--ui/message_center/views/message_view.cc22
-rw-r--r--ui/message_center/views/message_view.h7
-rw-r--r--ui/message_center/views/notification_view.cc27
-rw-r--r--ui/message_center/views/notifier_settings_view.cc35
-rw-r--r--ui/message_center/views/padded_button.cc7
-rw-r--r--ui/views/controls/button/checkbox.cc9
-rw-r--r--ui/views/controls/button/image_button.cc23
-rw-r--r--ui/views/controls/button/image_button.h20
-rw-r--r--ui/views/controls/button/label_button.cc19
-rw-r--r--ui/views/controls/button/label_button.h14
-rw-r--r--ui/views/controls/button/label_button_border.cc5
-rw-r--r--ui/views/controls/button/text_button.cc41
-rw-r--r--ui/views/controls/button/text_button.h9
-rw-r--r--ui/views/controls/combobox/combobox.cc2
-rw-r--r--ui/views/controls/image_view.cc71
-rw-r--r--ui/views/controls/image_view.h10
-rw-r--r--ui/views/controls/link.cc20
-rw-r--r--ui/views/controls/link.h3
-rw-r--r--ui/views/controls/native/native_view_host.cc2
-rw-r--r--ui/views/controls/slider.cc24
-rw-r--r--ui/views/controls/slider.h6
-rw-r--r--ui/views/controls/textfield/textfield.cc18
-rw-r--r--ui/views/controls/textfield/textfield.h9
-rw-r--r--ui/views/controls/webview/webview.cc2
-rw-r--r--ui/views/focus_border.cc87
-rw-r--r--ui/views/focus_border.h56
-rw-r--r--ui/views/painter.cc99
-rw-r--r--ui/views/painter.h16
-rw-r--r--ui/views/view.cc15
-rw-r--r--ui/views/view.h13
-rw-r--r--ui/views/view_unittest.cc14
-rw-r--r--ui/views/views.gyp2
60 files changed, 532 insertions, 369 deletions
diff --git a/ash/shelf/alternate_app_list_button.cc b/ash/shelf/alternate_app_list_button.cc
index 4ce2834..bf442d1 100644
--- a/ash/shelf/alternate_app_list_button.cc
+++ b/ash/shelf/alternate_app_list_button.cc
@@ -4,8 +4,10 @@
#include "ash/shelf/alternate_app_list_button.h"
+#include "ash/ash_constants.h"
#include "ash/ash_switches.h"
#include "ash/launcher/launcher_types.h"
+#include "ash/shelf/shelf_button.h"
#include "ash/shelf/shelf_button_host.h"
#include "ash/shelf/shelf_layout_manager.h"
#include "ash/shelf/shelf_widget.h"
@@ -22,6 +24,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/views/controls/button/image_button.h"
+#include "ui/views/painter.h"
namespace ash {
namespace internal {
@@ -39,6 +42,8 @@ AlternateAppListButton::AlternateAppListButton(views::ButtonListener* listener,
SetAccessibleName(l10n_util::GetStringUTF16(IDS_AURA_APP_LIST_TITLE));
SetSize(gfx::Size(ShelfLayoutManager::kShelfSize,
ShelfLayoutManager::kShelfSize));
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor, gfx::Insets(1, 1, 1, 1)));
}
AlternateAppListButton::~AlternateAppListButton() {
@@ -156,7 +161,7 @@ void AlternateAppListButton::OnPaint(gfx::Canvas* canvas) {
forground_bounds.x(),
forground_bounds.y());
- OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
}
void AlternateAppListButton::GetAccessibleState(
diff --git a/ash/shelf/app_list_button.cc b/ash/shelf/app_list_button.cc
index a9612bf..697ed77 100644
--- a/ash/shelf/app_list_button.cc
+++ b/ash/shelf/app_list_button.cc
@@ -6,6 +6,7 @@
#include <vector>
+#include "ash/ash_constants.h"
#include "ash/launcher/launcher_types.h"
#include "ash/shelf/shelf_button_host.h"
#include "grit/ash_resources.h"
@@ -17,6 +18,7 @@
#include "ui/compositor/layer_animation_element.h"
#include "ui/compositor/layer_animation_sequence.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
+#include "ui/views/painter.h"
namespace ash {
namespace internal {
@@ -43,6 +45,8 @@ AppListButton::AppListButton(views::ButtonListener* listener,
SetAccessibleName(l10n_util::GetStringUTF16(IDS_AURA_APP_LIST_TITLE));
SetSize(gfx::Size(kLauncherPreferredSize, kLauncherPreferredSize));
SetImageAlignment(ImageButton::ALIGN_CENTER, ImageButton::ALIGN_TOP);
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor, gfx::Insets(1, 1, 1, 1)));
}
AppListButton::~AppListButton() {
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc
index 4b10b8f..93a44e1 100644
--- a/ash/shelf/shelf_button.cc
+++ b/ash/shelf/shelf_button.cc
@@ -6,6 +6,7 @@
#include <algorithm>
+#include "ash/ash_constants.h"
#include "ash/ash_switches.h"
#include "ash/shelf/shelf_button_host.h"
#include "ash/shelf/shelf_layout_manager.h"
@@ -470,6 +471,15 @@ void ShelfButton::OnBlur() {
CustomButton::OnBlur();
}
+void ShelfButton::OnPaint(gfx::Canvas* canvas) {
+ CustomButton::OnPaint(canvas);
+ if (HasFocus()) {
+ gfx::Rect paint_bounds(GetLocalBounds());
+ paint_bounds.Inset(1, 1, 1, 1);
+ canvas->DrawSolidFocusRect(paint_bounds, kFocusBorderColor);
+ }
+}
+
void ShelfButton::OnGestureEvent(ui::GestureEvent* event) {
switch (event->type()) {
case ui::ET_GESTURE_TAP_DOWN:
diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h
index 1bfc510..60158f2 100644
--- a/ash/shelf/shelf_button.h
+++ b/ash/shelf/shelf_button.h
@@ -107,6 +107,7 @@ class ASH_EXPORT ShelfButton : public views::CustomButton {
virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
virtual void OnFocus() OVERRIDE;
virtual void OnBlur() OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
// ui::EventHandler overrides:
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 274014f..c31f63a 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -51,7 +51,6 @@
#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/focus/focus_search.h"
-#include "ui/views/focus_border.h"
#include "ui/views/view_model.h"
#include "ui/views/view_model_utils.h"
#include "ui/views/widget/widget.h"
@@ -932,9 +931,6 @@ views::View* ShelfView::CreateViewForItem(const LauncherItem& item) {
break;
}
view->set_context_menu_controller(this);
- view->set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
- kFocusBorderColor,
- gfx::Insets(1, 1, 1, 1)));
DCHECK(view);
ConfigureChildView(view);
diff --git a/ash/system/tray/actionable_view.cc b/ash/system/tray/actionable_view.cc
index 9a21b04..40d90b4 100644
--- a/ash/system/tray/actionable_view.cc
+++ b/ash/system/tray/actionable_view.cc
@@ -22,12 +22,16 @@ ActionableView::ActionableView()
ActionableView::~ActionableView() {
}
-void ActionableView::DrawBorder(gfx::Canvas* canvas, const gfx::Rect& bounds) {
- gfx::Rect rect = bounds;
+void ActionableView::OnPaintFocus(gfx::Canvas* canvas) {
+ gfx::Rect rect(GetFocusBounds());
rect.Inset(1, 1, 3, 2);
canvas->DrawSolidFocusRect(rect, kFocusBorderColor);
}
+gfx::Rect ActionableView::GetFocusBounds() {
+ return GetLocalBounds();
+}
+
const char* ActionableView::GetClassName() const {
return kViewClassName;
}
@@ -59,9 +63,26 @@ void ActionableView::SetAccessibleName(const base::string16& name) {
accessible_name_ = name;
}
-void ActionableView::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus())
- DrawBorder(canvas, GetLocalBounds());
+void ActionableView::GetAccessibleState(ui::AccessibleViewState* state) {
+ state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
+ state->name = accessible_name_;
+}
+
+void ActionableView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ OnPaintFocus(canvas);
+}
+
+void ActionableView::OnFocus() {
+ View::OnFocus();
+ // We render differently when focused.
+ SchedulePaint();
+}
+
+void ActionableView::OnBlur() {
+ View::OnBlur();
+ // We render differently when focused.
+ SchedulePaint();
}
void ActionableView::OnGestureEvent(ui::GestureEvent* event) {
@@ -69,10 +90,5 @@ void ActionableView::OnGestureEvent(ui::GestureEvent* event) {
event->SetHandled();
}
-void ActionableView::GetAccessibleState(ui::AccessibleViewState* state) {
- state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
- state->name = accessible_name_;
-}
-
} // namespace internal
} // namespace ash
diff --git a/ash/system/tray/actionable_view.h b/ash/system/tray/actionable_view.h
index 0d0f1a1..f2b3ec1 100644
--- a/ash/system/tray/actionable_view.h
+++ b/ash/system/tray/actionable_view.h
@@ -21,6 +21,8 @@ namespace internal {
// Exported for SystemTray.
class ASH_EXPORT ActionableView : public views::View {
public:
+ static const char kViewClassName[];
+
ActionableView();
virtual ~ActionableView();
@@ -28,10 +30,11 @@ class ASH_EXPORT ActionableView : public views::View {
void SetAccessibleName(const base::string16& name);
const base::string16& accessible_name() const { return accessible_name_; }
- static const char kViewClassName[];
-
protected:
- void DrawBorder(gfx::Canvas* canvas, const gfx::Rect& bounds);
+ void OnPaintFocus(gfx::Canvas* canvas);
+
+ // Returns the bounds to paint the focus rectangle in.
+ virtual gfx::Rect GetFocusBounds();
// Performs an action when user clicks on the view (on mouse-press event), or
// presses a key when this view is in focus. Returns true if the event has
@@ -45,7 +48,9 @@ class ASH_EXPORT ActionableView : public views::View {
virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
virtual void OnMouseCaptureLost() OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Overridden from ui::EventHandler.
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
diff --git a/ash/system/tray/fixed_sized_scroll_view.cc b/ash/system/tray/fixed_sized_scroll_view.cc
index 59b524b..d3fff9ad 100644
--- a/ash/system/tray/fixed_sized_scroll_view.cc
+++ b/ash/system/tray/fixed_sized_scroll_view.cc
@@ -9,7 +9,6 @@ namespace internal {
FixedSizedScrollView::FixedSizedScrollView() {
set_notify_enter_exit_on_child(true);
- set_focus_border(NULL);
}
FixedSizedScrollView::~FixedSizedScrollView() {
@@ -54,9 +53,5 @@ void FixedSizedScrollView::OnBoundsChanged(const gfx::Rect& previous_bounds) {
contents()->SetBoundsRect(bounds);
}
-void FixedSizedScrollView::OnPaintFocusBorder(gfx::Canvas* canvas) {
- // Do not paint the focus border.
-}
-
} // namespace internal
} // namespace ash
diff --git a/ash/system/tray/fixed_sized_scroll_view.h b/ash/system/tray/fixed_sized_scroll_view.h
index c5d9bc0..aff53c2 100644
--- a/ash/system/tray/fixed_sized_scroll_view.h
+++ b/ash/system/tray/fixed_sized_scroll_view.h
@@ -33,7 +33,6 @@ class FixedSizedScrollView : public views::ScrollView {
protected:
// Overridden from views::View:
virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
private:
gfx::Size fixed_size_;
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 3939b70..9eb80c1 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -379,14 +379,6 @@ void TrayBackgroundView::ChildPreferredSizeChanged(views::View* child) {
PreferredSizeChanged();
}
-void TrayBackgroundView::OnPaintFocusBorder(gfx::Canvas* canvas) {
- // The tray itself expands to the right and bottom edge of the screen to make
- // sure clicking on the edges brings up the popup. However, the focus border
- // should be only around the container.
- if (HasFocus())
- DrawBorder(canvas, GetContentsBounds());
-}
-
void TrayBackgroundView::GetAccessibleState(ui::AccessibleViewState* state) {
state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
state->name = GetAccessibleNameForTray();
@@ -403,6 +395,13 @@ bool TrayBackgroundView::PerformAction(const ui::Event& event) {
return false;
}
+gfx::Rect TrayBackgroundView::GetFocusBounds() {
+ // The tray itself expands to the right and bottom edge of the screen to make
+ // sure clicking on the edges brings up the popup. However, the focus border
+ // should be only around the container.
+ return GetContentsBounds();
+}
+
void TrayBackgroundView::UpdateBackground(int alpha) {
// The animator should never fire when the alternate shelf layout is used.
if (!background_ || draw_background_as_active_)
diff --git a/ash/system/tray/tray_background_view.h b/ash/system/tray/tray_background_view.h
index b459684..0f6e2f7 100644
--- a/ash/system/tray/tray_background_view.h
+++ b/ash/system/tray/tray_background_view.h
@@ -70,12 +70,12 @@ class ASH_EXPORT TrayBackgroundView : public ActionableView,
virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
// Overridden from internal::ActionableView.
virtual bool PerformAction(const ui::Event& event) OVERRIDE;
+ virtual gfx::Rect GetFocusBounds() OVERRIDE;
// Overridden from internal::BackgroundAnimatorDelegate.
virtual void UpdateBackground(int alpha) OVERRIDE;
diff --git a/ash/system/tray/tray_popup_header_button.cc b/ash/system/tray/tray_popup_header_button.cc
index ceeda04..e9430e5 100644
--- a/ash/system/tray/tray_popup_header_button.cc
+++ b/ash/system/tray/tray_popup_header_button.cc
@@ -8,6 +8,7 @@
#include "ash/system/tray/tray_constants.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
+#include "ui/views/painter.h"
namespace ash {
namespace internal {
@@ -38,9 +39,9 @@ TrayPopupHeaderButton::TrayPopupHeaderButton(views::ButtonListener* listener,
set_focusable(true);
set_request_focus_on_press(false);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
- kFocusBorderColor,
- gfx::Insets(1, 2, 2, 3)));
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor,
+ gfx::Insets(1, 2, 2, 3)));
}
TrayPopupHeaderButton::~TrayPopupHeaderButton() {}
diff --git a/ash/system/tray/tray_popup_label_button.cc b/ash/system/tray/tray_popup_label_button.cc
index aa72a3b..2f97c37 100644
--- a/ash/system/tray/tray_popup_label_button.cc
+++ b/ash/system/tray/tray_popup_label_button.cc
@@ -8,6 +8,7 @@
#include "ash/system/tray/tray_popup_label_button_border.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/rect.h"
+#include "ui/views/painter.h"
namespace ash {
namespace internal {
@@ -20,7 +21,7 @@ TrayPopupLabelButton::TrayPopupLabelButton(views::ButtonListener* listener,
set_request_focus_on_press(false);
set_animate_on_state_change(false);
SetHorizontalAlignment(gfx::ALIGN_CENTER);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
gfx::Insets(1, 1, 2, 2)));
}
diff --git a/ash/system/tray/tray_popup_label_button.h b/ash/system/tray/tray_popup_label_button.h
index 83ff439..a1f9db6 100644
--- a/ash/system/tray/tray_popup_label_button.h
+++ b/ash/system/tray/tray_popup_label_button.h
@@ -21,7 +21,6 @@ class TrayPopupLabelButton : public views::LabelButton {
virtual ~TrayPopupLabelButton();
private:
-
DISALLOW_COPY_AND_ASSIGN(TrayPopupLabelButton);
};
diff --git a/chrome/browser/chromeos/ui/focus_ring_layer.cc b/chrome/browser/chromeos/ui/focus_ring_layer.cc
index f1420d4..303d594 100644
--- a/chrome/browser/chromeos/ui/focus_ring_layer.cc
+++ b/chrome/browser/chromeos/ui/focus_ring_layer.cc
@@ -80,9 +80,8 @@ void FocusRingLayer::SetForView(views::View* view) {
view_bounds.Inset(2, 2, 2, 2);
}
- // Workarounds for system tray items that has a customized
- // OnPaintFocusBorder. The insets here must be consistent with
- // the ones used in OnPaintFocusBorder and DrawBorder.
+ // Workarounds for system tray items that have customized focus borders. The
+ // insets here must be consistent with the ones used by those classes.
if (view->GetClassName() ==
ash::internal::ActionableView::kViewClassName) {
view_bounds = view->GetLocalBounds();
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index e0990a8..64cdc04 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -60,6 +60,7 @@
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/grid_layout.h"
#include "ui/views/layout/layout_constants.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_client_view.h"
@@ -476,11 +477,8 @@ AutofillDialogViews::AccountChooser::AccountChooser(
menu_button_->set_background(NULL);
menu_button_->set_border(NULL);
gfx::Insets insets = GetInsets();
- menu_button_->set_focus_border(
- views::FocusBorder::CreateDashedFocusBorder(insets.left(),
- insets.top(),
- insets.right(),
- insets.bottom()));
+ menu_button_->SetFocusPainter(
+ views::Painter::CreateDashedFocusPainterWithInsets(insets));
menu_button_->set_focusable(true);
AddChildView(menu_button_);
@@ -937,11 +935,8 @@ AutofillDialogViews::SuggestedButton::SuggestedButton(
gfx::Insets insets = GetInsets();
insets += gfx::Insets(-kFocusBorderWidth, -kFocusBorderWidth,
-kFocusBorderWidth, -kFocusBorderWidth);
- set_focus_border(
- views::FocusBorder::CreateDashedFocusBorder(insets.left(),
- insets.top(),
- insets.right(),
- insets.bottom()));
+ SetFocusPainter(
+ views::Painter::CreateDashedFocusPainterWithInsets(insets));
set_focusable(true);
}
@@ -966,7 +961,7 @@ void AutofillDialogViews::SuggestedButton::OnPaint(gfx::Canvas* canvas) {
const gfx::Insets insets = GetInsets();
canvas->DrawImageInt(*rb.GetImageSkiaNamed(ResourceIDForState()),
insets.left(), insets.top());
- views::View::OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
}
int AutofillDialogViews::SuggestedButton::ResourceIDForState() const {
diff --git a/chrome/browser/ui/views/autofill/tooltip_icon.cc b/chrome/browser/ui/views/autofill/tooltip_icon.cc
index e0f4a68..4fd2a67 100644
--- a/chrome/browser/ui/views/autofill/tooltip_icon.cc
+++ b/chrome/browser/ui/views/autofill/tooltip_icon.cc
@@ -10,8 +10,8 @@
#include "grit/theme_resources.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/views/bubble/bubble_frame_view.h"
-#include "ui/views/focus_border.h"
#include "ui/views/mouse_watcher_view_host.h"
+#include "ui/views/painter.h"
namespace autofill {
@@ -79,9 +79,8 @@ void TooltipIcon::OnMouseExited(const ui::MouseEvent& event) {
}
void TooltipIcon::OnBoundsChanged(const gfx::Rect& prev_bounds) {
- gfx::Insets insets = GetPreferredInsets(this);
- set_focus_border(views::FocusBorder::CreateDashedFocusBorder(
- insets.left(), insets.top(), insets.right(), insets.bottom()));
+ SetFocusPainter(views::Painter::CreateDashedFocusPainterWithInsets(
+ GetPreferredInsets(this)));
}
void TooltipIcon::OnFocus() {
diff --git a/chrome/browser/ui/views/autofill/tooltip_icon.h b/chrome/browser/ui/views/autofill/tooltip_icon.h
index 50b88b7..5d9ff3d 100644
--- a/chrome/browser/ui/views/autofill/tooltip_icon.h
+++ b/chrome/browser/ui/views/autofill/tooltip_icon.h
@@ -21,11 +21,11 @@ class InfoBubble;
class TooltipIcon : public views::ImageView,
public views::MouseWatcherListener {
public:
+ static const char kViewClassName[];
+
explicit TooltipIcon(const base::string16& tooltip);
virtual ~TooltipIcon();
- static const char kViewClassName[];
-
// views::ImageView:
virtual const char* GetClassName() const OVERRIDE;
virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
diff --git a/chrome/browser/ui/views/desktop_media_picker_views.cc b/chrome/browser/ui/views/desktop_media_picker_views.cc
index 560fad1..116014d 100644
--- a/chrome/browser/ui/views/desktop_media_picker_views.cc
+++ b/chrome/browser/ui/views/desktop_media_picker_views.cc
@@ -12,12 +12,12 @@
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/gfx/canvas.h"
#include "ui/native_theme/native_theme.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/scroll_view.h"
#include "ui/views/corewm/shadow_types.h"
-#include "ui/views/focus_border.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/layout_constants.h"
#include "ui/views/widget/widget.h"
@@ -85,7 +85,9 @@ class DesktopMediaSourceView : public views::View {
virtual void Layout() OVERRIDE;
virtual views::View* GetSelectedViewForGroup(int group) OVERRIDE;
virtual bool IsGroupFocusTraversable() const OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
private:
@@ -264,10 +266,6 @@ void DesktopMediaSourceView::Layout() {
kThumbnailWidth, kThumbnailHeight);
label_->SetBounds(kThumbnailMargin, kThumbnailHeight + kThumbnailMargin,
kThumbnailWidth, kLabelHeight);
-
- set_focus_border(views::FocusBorder::CreateDashedFocusBorder(
- kThumbnailMargin / 2, kThumbnailMargin / 2,
- kThumbnailMargin / 2, kThumbnailMargin / 2));
}
views::View* DesktopMediaSourceView::GetSelectedViewForGroup(int group) {
@@ -290,10 +288,27 @@ bool DesktopMediaSourceView::IsGroupFocusTraversable() const {
return false;
}
+void DesktopMediaSourceView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ if (HasFocus()) {
+ gfx::Rect bounds(GetLocalBounds());
+ bounds.Inset(kThumbnailMargin / 2, kThumbnailMargin / 2);
+ canvas->DrawFocusRect(bounds);
+ }
+}
+
void DesktopMediaSourceView::OnFocus() {
View::OnFocus();
SetSelected(true);
ScrollRectToVisible(gfx::Rect(size()));
+ // We paint differently when focused.
+ SchedulePaint();
+}
+
+void DesktopMediaSourceView::OnBlur() {
+ View::OnBlur();
+ // We paint differently when focused.
+ SchedulePaint();
}
bool DesktopMediaSourceView::OnMousePressed(const ui::MouseEvent& event) {
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index e088e3a..f983329 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -223,9 +223,6 @@ class LocationBarView : public LocationBar,
virtual void Layout() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
- // No focus border for the location bar, the caret is enough.
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE {}
-
// Set if we should show a focus rect while the location entry field is
// focused. Used when the toolbar is in full keyboard accessibility mode.
// Repaints if necessary.
diff --git a/chrome/browser/ui/views/new_avatar_button.cc b/chrome/browser/ui/views/new_avatar_button.cc
index 5e19334..feb5324 100644
--- a/chrome/browser/ui/views/new_avatar_button.cc
+++ b/chrome/browser/ui/views/new_avatar_button.cc
@@ -113,7 +113,7 @@ void NewAvatarButton::OnPaint(gfx::Canvas* canvas) {
// From TextButton::PaintButton, draw everything but the text.
OnPaintBackground(canvas);
OnPaintBorder(canvas);
- OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
gfx::Rect rect;
// In RTL languages the marker gets drawn leftmost, so account for its offset.
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index eafc48d..84706b5 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -631,8 +631,6 @@ TabStrip::TabStrip(TabStripController* controller)
mouse_move_count_(0),
immersive_style_(false) {
Init();
- // TODO(sky): temporary work around for 323255.
- set_focus_border(NULL);
}
TabStrip::~TabStrip() {
diff --git a/chrome/browser/ui/views/toolbar/back_button.cc b/chrome/browser/ui/views/toolbar/back_button.cc
index 1e4c4a4..97d9555 100644
--- a/chrome/browser/ui/views/toolbar/back_button.cc
+++ b/chrome/browser/ui/views/toolbar/back_button.cc
@@ -4,8 +4,9 @@
#include "chrome/browser/ui/views/toolbar/back_button.h"
+#include "ui/gfx/insets.h"
#include "ui/views/controls/button/label_button_border.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/painter.h"
BackButton::BackButton(views::ButtonListener* listener,
ui::MenuModel* model)
@@ -36,9 +37,9 @@ void BackButton::SetLeadingMargin(int margin) {
// TODO(gbillock): Refactor this magic number somewhere global to views,
// probably a FocusBorder constant.
const int kFocusRectInset = 3;
- set_focus_border(views::FocusBorder::CreateDashedFocusBorder(
- kFocusRectInset + margin, kFocusRectInset,
- kFocusRectInset, kFocusRectInset));
+ SetFocusPainter(views::Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(kFocusRectInset, kFocusRectInset + margin,
+ kFocusRectInset, kFocusRectInset)));
margin_leading_ = margin;
InvalidateLayout();
diff --git a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
index 86954e0..06e8862 100644
--- a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
+++ b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
@@ -34,7 +34,7 @@ void WrenchToolbarButton::OnPaint(gfx::Canvas* canvas) {
wrench_icon_painter_->Paint(
canvas, GetThemeProvider(), gfx::Rect(size()), GetCurrentBezelType());
- OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
}
void WrenchToolbarButton::ScheduleWrenchIconPaint() {
diff --git a/ui/app_list/views/folder_header_view.cc b/ui/app_list/views/folder_header_view.cc
index 558726c..ba80dee 100644
--- a/ui/app_list/views/folder_header_view.cc
+++ b/ui/app_list/views/folder_header_view.cc
@@ -14,6 +14,7 @@
#include "ui/gfx/canvas.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/textfield/textfield.h"
+#include "ui/views/painter.h"
namespace app_list {
@@ -37,7 +38,7 @@ class FolderHeaderView::FolderNameView : public views::Textfield {
FolderNameView() {
set_border(views::Border::CreateEmptyBorder(1, 1, 1, 1));
const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
gfx::Insets(0, 0, 1, 1)));
}
diff --git a/ui/message_center/views/bounded_label.cc b/ui/message_center/views/bounded_label.cc
index 852d583..2b8423b 100644
--- a/ui/message_center/views/bounded_label.cc
+++ b/ui/message_center/views/bounded_label.cc
@@ -168,7 +168,6 @@ void InnerBoundedLabel::OnBoundsChanged(const gfx::Rect& previous_bounds) {
void InnerBoundedLabel::OnPaint(gfx::Canvas* canvas) {
views::Label::OnPaintBackground(canvas);
- views::Label::OnPaintFocusBorder(canvas);
views::Label::OnPaintBorder(canvas);
int lines = owner_->GetLineLimit();
int height = GetSizeForWidthAndLines(width(), lines).height();
diff --git a/ui/message_center/views/message_center_button_bar.cc b/ui/message_center/views/message_center_button_bar.cc
index 3fcc9c8..9eb7246 100644
--- a/ui/message_center/views/message_center_button_bar.cc
+++ b/ui/message_center/views/message_center_button_bar.cc
@@ -24,6 +24,7 @@
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/grid_layout.h"
+#include "ui/views/painter.h"
namespace message_center {
@@ -76,7 +77,7 @@ NotificationCenterButton::NotificationCenterButton(
set_focusable(true);
set_request_focus_on_press(false);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
gfx::Insets(1, 2, 2, 2)));
}
diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc
index d176ff7..4f774a9 100644
--- a/ui/message_center/views/message_center_view.cc
+++ b/ui/message_center/views/message_center_view.cc
@@ -78,8 +78,6 @@ BoundedScrollView::BoundedScrollView(int min_height, int max_height)
: min_height_(min_height),
max_height_(max_height) {
set_notify_enter_exit_on_child(true);
- // Cancels the default dashed focus border.
- set_focus_border(NULL);
set_background(
views::Background::CreateSolidBackground(kMessageCenterBackgroundColor));
SetVerticalScrollBar(new views::OverlayScrollBar(false));
diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc
index a6c9f00..856231b 100644
--- a/ui/message_center/views/message_view.cc
+++ b/ui/message_center/views/message_view.cc
@@ -20,6 +20,7 @@
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/scroll_view.h"
+#include "ui/views/painter.h"
#include "ui/views/shadow_border.h"
#include "ui/views/widget/widget.h"
@@ -172,9 +173,9 @@ MessageView::MessageView(const string16& display_source)
IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME));
close_button_.reset(close);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
+ focus_painter_ = views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
- gfx::Insets(0, 1, 3, 2)));
+ gfx::Insets(0, 1, 3, 2)).Pass();
}
MessageView::~MessageView() {
@@ -243,6 +244,23 @@ bool MessageView::OnKeyReleased(const ui::KeyEvent& event) {
return true;
}
+void MessageView::OnPaint(gfx::Canvas* canvas) {
+ SlideOutView::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
+void MessageView::OnFocus() {
+ SlideOutView::OnFocus();
+ // We paint a focus indicator.
+ SchedulePaint();
+}
+
+void MessageView::OnBlur() {
+ SlideOutView::OnBlur();
+ // We paint a focus indicator.
+ SchedulePaint();
+}
+
void MessageView::OnGestureEvent(ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_TAP) {
ClickOnNotification();
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h
index c3a4d6b..341e9ad 100644
--- a/ui/message_center/views/message_view.h
+++ b/ui/message_center/views/message_view.h
@@ -5,6 +5,7 @@
#ifndef UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_
#define UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_
+#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "ui/gfx/insets.h"
#include "ui/message_center/message_center_export.h"
@@ -14,6 +15,7 @@
namespace views {
class ImageButton;
+class Painter;
class ScrollView;
}
@@ -58,6 +60,9 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView,
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Overridden from ui::EventHandler:
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
@@ -82,6 +87,8 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView,
string16 accessible_name_;
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(MessageView);
};
diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc
index 1ed5c83..a5c902a 100644
--- a/ui/message_center/views/notification_view.cc
+++ b/ui/message_center/views/notification_view.cc
@@ -32,6 +32,7 @@
#include "ui/views/controls/progress_bar.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(USE_AURA)
@@ -321,7 +322,9 @@ class NotificationButton : public views::CustomButton {
// Overridden from views::View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual int GetHeightForWidth(int width) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Overridden from views::CustomButton:
virtual void StateChanged() OVERRIDE;
@@ -329,12 +332,18 @@ class NotificationButton : public views::CustomButton {
private:
views::ImageView* icon_;
views::Label* title_;
+ scoped_ptr<views::Painter> focus_painter_;
+
+ DISALLOW_COPY_AND_ASSIGN(NotificationButton);
};
NotificationButton::NotificationButton(views::ButtonListener* listener)
: views::CustomButton(listener),
icon_(NULL),
- title_(NULL) {
+ title_(NULL),
+ focus_painter_(views::Painter::CreateSolidFocusPainter(
+ message_center::kFocusBorderColor,
+ gfx::Insets(1, 2, 2, 2))) {
set_focusable(true);
set_request_focus_on_press(false);
set_notify_enter_exit_on_child(true);
@@ -343,9 +352,6 @@ NotificationButton::NotificationButton(views::ButtonListener* listener)
message_center::kButtonHorizontalPadding,
kButtonVecticalPadding,
message_center::kButtonIconToTitlePadding));
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
- message_center::kFocusBorderColor,
- gfx::Insets(1, 2, 2, 2)));
}
NotificationButton::~NotificationButton() {
@@ -394,9 +400,22 @@ int NotificationButton::GetHeightForWidth(int width) {
return message_center::kButtonHeight;
}
+void NotificationButton::OnPaint(gfx::Canvas* canvas) {
+ CustomButton::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
void NotificationButton::OnFocus() {
views::CustomButton::OnFocus();
ScrollRectToVisible(GetLocalBounds());
+ // We render differently when focused.
+ SchedulePaint();
+}
+
+void NotificationButton::OnBlur() {
+ views::CustomButton::OnBlur();
+ // We render differently when focused.
+ SchedulePaint();
}
void NotificationButton::StateChanged() {
diff --git a/ui/message_center/views/notifier_settings_view.cc b/ui/message_center/views/notifier_settings_view.cc
index 7446b0d..399283b 100644
--- a/ui/message_center/views/notifier_settings_view.cc
+++ b/ui/message_center/views/notifier_settings_view.cc
@@ -38,6 +38,7 @@
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/grid_layout.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(USE_AURA)
@@ -124,9 +125,9 @@ const int kComputedTitleElementSpacing =
settings::kDescriptionToSwitcherSpace - kButtonPainterInsets - 1;
// A function to create a focus border.
-views::FocusBorder* CreateFocusBorder() {
- return views::FocusBorder::CreateSolidFocusBorder(kFocusBorderColor,
- gfx::Insets(1, 2, 3, 2));
+scoped_ptr<views::Painter> CreateFocusPainter() {
+ return views::Painter::CreateSolidFocusPainter(kFocusBorderColor,
+ gfx::Insets(1, 2, 3, 2));
}
// EntryView ------------------------------------------------------------------
@@ -135,7 +136,7 @@ views::FocusBorder* CreateFocusBorder() {
// middle. It also guarantee the left margin.
class EntryView : public views::View {
public:
- EntryView(views::View* contents);
+ explicit EntryView(views::View* contents);
virtual ~EntryView();
// views::View:
@@ -145,13 +146,17 @@ class EntryView : public views::View {
virtual void OnFocus() OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
private:
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(EntryView);
};
-EntryView::EntryView(views::View* contents) {
- set_focus_border(CreateFocusBorder());
+EntryView::EntryView(views::View* contents)
+ : focus_painter_(CreateFocusPainter()) {
AddChildView(contents);
}
@@ -181,6 +186,8 @@ void EntryView::GetAccessibleState(ui::AccessibleViewState* state) {
void EntryView::OnFocus() {
views::View::OnFocus();
ScrollRectToVisible(GetLocalBounds());
+ // We render differently when focused.
+ SchedulePaint();
}
bool EntryView::OnKeyPressed(const ui::KeyEvent& event) {
@@ -191,6 +198,17 @@ bool EntryView::OnKeyReleased(const ui::KeyEvent& event) {
return child_at(0)->OnKeyReleased(event);
}
+void EntryView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
+void EntryView::OnBlur() {
+ View::OnBlur();
+ // We render differently when focused.
+ SchedulePaint();
+}
+
} // namespace
@@ -294,7 +312,7 @@ NotifierSettingsView::NotifierButton::NotifierButton(
if (ShouldHaveLearnMoreButton()) {
// Create a more-info button that will be right-aligned.
learn_more_ = new views::ImageButton(this);
- learn_more_->set_focus_border(CreateFocusBorder());
+ learn_more_->SetFocusPainter(CreateFocusPainter());
learn_more_->set_request_focus_on_press(false);
learn_more_->set_focusable(true);
@@ -466,7 +484,6 @@ NotifierSettingsView::NotifierSettingsView(NotifierSettingsProvider* provider)
provider_->AddObserver(this);
set_focusable(true);
- set_focus_border(NULL);
set_background(
views::Background::CreateSolidBackground(kMessageCenterBackgroundColor));
if (get_use_acceleration_when_possible())
@@ -582,7 +599,7 @@ void NotifierSettingsView::UpdateContentsView(
kMenuButtonVerticalPadding, kMenuButtonLeftPadding,
kMenuButtonVerticalPadding, kMenuButtonRightPadding));
notifier_group_selector_->set_border(selector_border.release());
- notifier_group_selector_->set_focus_border(NULL);
+ notifier_group_selector_->SetFocusPainter(scoped_ptr<views::Painter>());
notifier_group_selector_->set_animate_on_state_change(false);
notifier_group_selector_->set_focusable(true);
contents_title_view->AddChildView(notifier_group_selector_);
diff --git a/ui/message_center/views/padded_button.cc b/ui/message_center/views/padded_button.cc
index 51e11c5..cb7810b 100644
--- a/ui/message_center/views/padded_button.cc
+++ b/ui/message_center/views/padded_button.cc
@@ -9,14 +9,15 @@
#include "ui/gfx/canvas.h"
#include "ui/message_center/message_center_style.h"
#include "ui/views/controls/button/image_button.h"
+#include "ui/views/painter.h"
namespace message_center {
PaddedButton::PaddedButton(views::ButtonListener* listener)
- : views::ImageButton(listener) {
+ : views::ImageButton(listener) {
set_focusable(true);
set_request_focus_on_press(false);
- set_focus_border(views::FocusBorder::CreateSolidFocusBorder(
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
gfx::Insets(1, 2, 2, 2)));
}
@@ -68,7 +69,7 @@ void PaddedButton::OnPaint(gfx::Canvas* canvas) {
if (!overlay_image_.isNull())
canvas->DrawImageInt(overlay_image_, position.x(), position.y());
}
- OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
}
void PaddedButton::OnFocus() {
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc
index 6405689..6db5802 100644
--- a/ui/views/controls/button/checkbox.cc
+++ b/ui/views/controls/button/checkbox.cc
@@ -8,6 +8,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/views/controls/button/label_button_border.h"
+#include "ui/views/painter.h"
namespace views {
@@ -79,11 +80,13 @@ void Checkbox::SetChecked(bool checked) {
void Checkbox::Layout() {
LabelButton::Layout();
- // Construct a focus border that only surrounds the label area.
+ // Construct a focus painter that only surrounds the label area.
gfx::Rect rect = label()->GetMirroredBounds();
rect.Inset(-2, 3);
- set_focus_border(FocusBorder::CreateDashedFocusBorder(
- rect.x(), rect.y(), width() - rect.right(), height() - rect.bottom()));
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(rect.y(), rect.x(),
+ height() - rect.bottom(),
+ width() - rect.right())));
}
const char* Checkbox::GetClassName() const {
diff --git a/ui/views/controls/button/image_button.cc b/ui/views/controls/button/image_button.cc
index 3811916..6a84234 100644
--- a/ui/views/controls/button/image_button.cc
+++ b/ui/views/controls/button/image_button.cc
@@ -10,6 +10,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/scoped_canvas.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
namespace views {
@@ -27,7 +28,8 @@ ImageButton::ImageButton(ButtonListener* listener)
h_alignment_(ALIGN_LEFT),
v_alignment_(ALIGN_TOP),
preferred_size_(kDefaultWidth, kDefaultHeight),
- draw_image_mirrored_(false) {
+ draw_image_mirrored_(false),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
// By default, we request that the gfx::Canvas passed to our View::OnPaint()
// implementation is flipped horizontally so that the button's images are
// mirrored when the UI directionality is right-to-left.
@@ -73,6 +75,10 @@ void ImageButton::SetImageAlignment(HorizontalAlignment h_align,
SchedulePaint();
}
+void ImageButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
////////////////////////////////////////////////////////////////////////////////
// ImageButton, View overrides:
@@ -114,12 +120,25 @@ void ImageButton::OnPaint(gfx::Canvas* canvas) {
if (!overlay_image_.isNull())
canvas->DrawImageInt(overlay_image_, position.x(), position.y());
}
- OnPaintFocusBorder(canvas);
+
+ Painter::PaintFocusPainter(this, canvas, focus_painter());
}
////////////////////////////////////////////////////////////////////////////////
// ImageButton, protected:
+void ImageButton::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
+
+void ImageButton::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
+
gfx::ImageSkia ImageButton::GetImageToPaint() {
gfx::ImageSkia img;
diff --git a/ui/views/controls/button/image_button.h b/ui/views/controls/button/image_button.h
index dd6b461..d74eceb 100644
--- a/ui/views/controls/button/image_button.h
+++ b/ui/views/controls/button/image_button.h
@@ -13,6 +13,8 @@
namespace views {
+class Painter;
+
// An image button.
// Note that this type of button is not focusable by default and will not be
@@ -57,10 +59,7 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
void SetImageAlignment(HorizontalAlignment h_align,
VerticalAlignment v_align);
- // Overridden from View:
- virtual gfx::Size GetPreferredSize() OVERRIDE;
- virtual const char* GetClassName() const OVERRIDE;
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
// Sets preferred size, so it could be correctly positioned in layout even if
// it is NULL.
@@ -73,7 +72,16 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
draw_image_mirrored_ = mirrored;
}
+ // Overridden from View:
+ virtual gfx::Size GetPreferredSize() OVERRIDE;
+ virtual const char* GetClassName() const OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+
protected:
+ // Overridden from View:
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
+
// Returns the image to paint. This is invoked from paint and returns a value
// from images.
virtual gfx::ImageSkia GetImageToPaint();
@@ -81,6 +89,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
// Updates button background for |scale_factor|.
void UpdateButtonBackground(ui::ScaleFactor scale_factor);
+ Painter* focus_painter() { return focus_painter_.get(); }
+
// The images used to render the different states of this button.
gfx::ImageSkia images_[STATE_COUNT];
@@ -109,6 +119,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
// resources.
bool draw_image_mirrored_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(ImageButton);
};
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc
index c5bafdb..3fa79f85 100644
--- a/ui/views/controls/button/label_button.cc
+++ b/ui/views/controls/button/label_button.cc
@@ -11,7 +11,7 @@
#include "ui/gfx/sys_color_change_listener.h"
#include "ui/native_theme/native_theme.h"
#include "ui/views/controls/button/label_button_border.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/painter.h"
#include "ui/views/window/dialog_delegate.h"
#if defined(OS_WIN)
@@ -146,8 +146,12 @@ void LabelButton::SetStyle(ButtonStyle style) {
style_ = style;
set_border(new LabelButtonBorder(style));
// Inset the button focus rect from the actual border; roughly match Windows.
- set_focus_border(style == STYLE_BUTTON ?
- NULL : FocusBorder::CreateDashedFocusBorder(3, 3, 3, 3));
+ if (style == STYLE_BUTTON) {
+ SetFocusPainter(scoped_ptr<Painter>());
+ } else {
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(3, 3, 3, 3)));
+ }
if (style == STYLE_BUTTON || style == STYLE_NATIVE_TEXTBUTTON) {
label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
set_focusable(true);
@@ -159,6 +163,10 @@ void LabelButton::SetStyle(ButtonStyle style) {
ResetColorsFromNativeTheme();
}
+void LabelButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
gfx::Size LabelButton::GetPreferredSize() {
// Use a temporary label copy for sizing to avoid calculation side-effects.
gfx::Font font = GetFont();
@@ -254,6 +262,11 @@ const char* LabelButton::GetClassName() const {
return kViewClassName;
}
+void LabelButton::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
void LabelButton::OnFocus() {
View::OnFocus();
// Typically the border renders differently when focused.
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h
index f37d9c8..05dc128 100644
--- a/ui/views/controls/button/label_button.h
+++ b/ui/views/controls/button/label_button.h
@@ -6,6 +6,7 @@
#define UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_H_
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/font.h"
#include "ui/gfx/image/image_skia.h"
@@ -16,6 +17,8 @@
namespace views {
+class Painter;
+
// LabelButton is an alternative to TextButton, it's not focusable by default.
class VIEWS_EXPORT LabelButton : public CustomButton,
public NativeThemeDelegate {
@@ -65,16 +68,19 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
ButtonStyle style() const { return style_; }
void SetStyle(ButtonStyle style);
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
// View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void Layout() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
protected:
- ImageView* image() const { return image_; }
- Label* label() const { return label_; }
+ ImageView* image() const { return image_; }
+ Label* label() const { return label_; }
- // Overridden from View:
+ // View:
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
virtual void OnBlur() OVERRIDE;
@@ -138,6 +144,8 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
// The button's overall style.
ButtonStyle style_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(LabelButton);
};
diff --git a/ui/views/controls/button/label_button_border.cc b/ui/views/controls/button/label_button_border.cc
index 7eaef00..1bd1b74 100644
--- a/ui/views/controls/button/label_button_border.cc
+++ b/ui/views/controls/button/label_button_border.cc
@@ -147,11 +147,6 @@ void LabelButtonBorder::Paint(const View& view, gfx::Canvas* canvas) {
rect.Inset(insets_);
canvas->FillRect(rect, extra.button.background_color);
}
-
- // Draw the Views focus border for the native theme style.
- if (style() == Button::STYLE_NATIVE_TEXTBUTTON &&
- view.focus_border() && extra.button.is_focused)
- view.focus_border()->Paint(view, canvas);
}
gfx::Insets LabelButtonBorder::GetInsets() const {
diff --git a/ui/views/controls/button/text_button.cc b/ui/views/controls/button/text_button.cc
index fcb0391..e829405 100644
--- a/ui/views/controls/button/text_button.cc
+++ b/ui/views/controls/button/text_button.cc
@@ -13,7 +13,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image.h"
#include "ui/views/controls/button/button.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(OS_WIN)
@@ -37,12 +37,11 @@ const int kPreferredPaddingVertical = 5;
const int kPreferredNativeThemePaddingHorizontal = 12;
const int kPreferredNativeThemePaddingVertical = 5;
-// By default the focus rect is drawn at the border of the view.
-// For a button, we inset the focus rect by 3 pixels so that it
-// doesn't draw on top of the button's border. This roughly matches
-// how the Windows native focus rect for buttons looks. A subclass
-// that draws a button with different padding may need to
-// override OnPaintFocusBorder and do something different.
+// By default the focus rect is drawn at the border of the view. For a button,
+// we inset the focus rect by 3 pixels so that it doesn't draw on top of the
+// button's border. This roughly matches how the Windows native focus rect for
+// buttons looks. A subclass that draws a button with different padding may need
+// to provide a different focus painter and do something different.
const int kFocusRectInset = 3;
// How long the hover fade animation should last.
@@ -218,7 +217,8 @@ TextButtonBase::TextButtonBase(ButtonListener* listener, const string16& text)
use_enabled_color_from_theme_(true),
use_disabled_color_from_theme_(true),
use_highlight_color_from_theme_(true),
- use_hover_color_from_theme_(true) {
+ use_hover_color_from_theme_(true),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
SetText(text);
// OnNativeThemeChanged sets the color member variables.
TextButtonBase::OnNativeThemeChanged(GetNativeTheme());
@@ -407,6 +407,18 @@ int TextButtonBase::ComputeCanvasStringFlags() const {
return flags;
}
+void TextButtonBase::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_)
+ SchedulePaint();
+}
+
+void TextButtonBase::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_)
+ SchedulePaint();
+}
+
void TextButtonBase::GetExtraParams(
ui::NativeTheme::ExtraParams* params) const {
params->button.checked = false;
@@ -452,11 +464,15 @@ gfx::Rect TextButtonBase::GetTextBounds() const {
return GetContentBounds(0);
}
+void TextButtonBase::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
if (mode == PB_NORMAL) {
OnPaintBackground(canvas);
OnPaintBorder(canvas);
- OnPaintFocusBorder(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
gfx::Rect text_bounds(GetTextBounds());
@@ -601,10 +617,9 @@ TextButton::TextButton(ButtonListener* listener, const string16& text)
icon_text_spacing_(kDefaultIconTextSpacing),
ignore_minimum_size_(true) {
set_border(new TextButtonDefaultBorder);
- set_focus_border(FocusBorder::CreateDashedFocusBorder(kFocusRectInset,
- kFocusRectInset,
- kFocusRectInset,
- kFocusRectInset));
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(kFocusRectInset, kFocusRectInset,
+ kFocusRectInset, kFocusRectInset)));
}
TextButton::~TextButton() {
diff --git a/ui/views/controls/button/text_button.h b/ui/views/controls/button/text_button.h
index 49f12c6..18d2ba2 100644
--- a/ui/views/controls/button/text_button.h
+++ b/ui/views/controls/button/text_button.h
@@ -166,6 +166,9 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
bool show_multiple_icon_states() const { return show_multiple_icon_states_; }
void SetShowMultipleIconStates(bool show_multiple_icon_states);
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+ Painter* focus_painter() { return focus_painter_.get(); }
+
// Paint the button into the specified canvas. If |mode| is |PB_FOR_DRAG|, the
// function paints a drag image representation into the canvas.
enum PaintButtonMode { PB_NORMAL, PB_FOR_DRAG };
@@ -221,6 +224,10 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
virtual ui::NativeTheme::State GetForegroundThemeState(
ui::NativeTheme::ExtraParams* params) const OVERRIDE;
+ // Overridden from View:
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
+
virtual void GetExtraParams(ui::NativeTheme::ExtraParams* params) const;
virtual gfx::Rect GetTextBounds() const;
@@ -289,6 +296,8 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
bool use_highlight_color_from_theme_;
bool use_hover_color_from_theme_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(TextButtonBase);
};
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc
index d726fe2..ed66de7 100644
--- a/ui/views/controls/combobox/combobox.cc
+++ b/ui/views/controls/combobox/combobox.cc
@@ -101,8 +101,6 @@ Combobox::Combobox(ui::ComboboxModel* model)
model_->AddObserver(this);
UpdateFromModel();
set_focusable(true);
- // |text_border_| draws focus.
- set_focus_border(NULL);
set_border(text_border_);
}
diff --git a/ui/views/controls/image_view.cc b/ui/views/controls/image_view.cc
index bc2ad8e..2bbf91c 100644
--- a/ui/views/controls/image_view.cc
+++ b/ui/views/controls/image_view.cc
@@ -10,6 +10,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/insets.h"
+#include "ui/views/painter.h"
namespace views {
@@ -19,7 +20,8 @@ ImageView::ImageView()
vert_alignment_(CENTER),
interactive_(true),
last_paint_scale_(0.f),
- last_painted_bitmap_pixels_(NULL) {
+ last_painted_bitmap_pixels_(NULL),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
}
ImageView::~ImageView() {
@@ -73,6 +75,10 @@ void ImageView::ResetImageSize() {
image_size_set_ = false;
}
+void ImageView::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
gfx::Size ImageView::GetPreferredSize() {
gfx::Insets insets = GetInsets();
if (image_size_set_) {
@@ -126,31 +132,22 @@ gfx::Point ImageView::ComputeImageOrigin(const gfx::Size& image_size) const {
return gfx::Point(x, y);
}
-void ImageView::OnPaint(gfx::Canvas* canvas) {
- View::OnPaint(canvas);
-
- last_paint_scale_ = canvas->image_scale();
- last_painted_bitmap_pixels_ = NULL;
-
- if (image_.isNull())
- return;
+void ImageView::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
- gfx::Rect image_bounds(GetImageBounds());
- if (image_bounds.IsEmpty())
- return;
+void ImageView::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
- if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) {
- // Resize case
- SkPaint paint;
- paint.setFilterBitmap(true);
- canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(),
- image_bounds.x(), image_bounds.y(), image_bounds.width(),
- image_bounds.height(), true, paint);
- } else {
- canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y());
- }
- last_painted_bitmap_pixels_ =
- image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels();
+void ImageView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ OnPaintImage(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
void ImageView::GetAccessibleState(ui::AccessibleViewState* state) {
@@ -200,4 +197,30 @@ bool ImageView::HitTestRect(const gfx::Rect& rect) const {
return interactive_ ? View::HitTestRect(rect) : false;
}
+
+void ImageView::OnPaintImage(gfx::Canvas* canvas) {
+ last_paint_scale_ = canvas->image_scale();
+ last_painted_bitmap_pixels_ = NULL;
+
+ if (image_.isNull())
+ return;
+
+ gfx::Rect image_bounds(GetImageBounds());
+ if (image_bounds.IsEmpty())
+ return;
+
+ if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) {
+ // Resize case
+ SkPaint paint;
+ paint.setFilterBitmap(true);
+ canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(),
+ image_bounds.x(), image_bounds.y(), image_bounds.width(),
+ image_bounds.height(), true, paint);
+ } else {
+ canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y());
+ }
+ last_painted_bitmap_pixels_ =
+ image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels();
+}
+
} // namespace views
diff --git a/ui/views/controls/image_view.h b/ui/views/controls/image_view.h
index b40cb83..b0f4ce8 100644
--- a/ui/views/controls/image_view.h
+++ b/ui/views/controls/image_view.h
@@ -14,6 +14,8 @@ class Canvas;
namespace views {
+class Painter;
+
/////////////////////////////////////////////////////////////////////////////
//
// ImageView class.
@@ -75,8 +77,12 @@ class VIEWS_EXPORT ImageView : public View {
void set_interactive(bool interactive) { interactive_ = interactive; }
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
// Overriden from View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual bool GetTooltipText(const gfx::Point& p,
@@ -84,6 +90,8 @@ class VIEWS_EXPORT ImageView : public View {
virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
private:
+ void OnPaintImage(gfx::Canvas* canvas);
+
// Returns true if |img| is the same as the last image we painted. This is
// intended to be a quick check, not exhaustive. In other words it's possible
// for this to return false even though the images are in fact equal.
@@ -121,6 +129,8 @@ class VIEWS_EXPORT ImageView : public View {
// safe to cache.
void* last_painted_bitmap_pixels_;
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(ImageView);
};
diff --git a/ui/views/controls/link.cc b/ui/views/controls/link.cc
index b2bcc8f..5a5729a 100644
--- a/ui/views/controls/link.cc
+++ b/ui/views/controls/link.cc
@@ -11,6 +11,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/font.h"
#include "ui/views/controls/link_listener.h"
@@ -62,6 +63,25 @@ gfx::NativeCursor Link::GetCursor(const ui::MouseEvent& event) {
#endif
}
+void Link::OnPaint(gfx::Canvas* canvas) {
+ Label::OnPaint(canvas);
+
+ if (HasFocus())
+ canvas->DrawFocusRect(GetLocalBounds());
+}
+
+void Link::OnFocus() {
+ Label::OnFocus();
+ // We render differently focused.
+ SchedulePaint();
+}
+
+void Link::OnBlur() {
+ Label::OnBlur();
+ // We render differently focused.
+ SchedulePaint();
+}
+
bool Link::HitTestRect(const gfx::Rect& rect) const {
// We need to allow clicks on the link. So we override the implementation in
// Label and use the default implementation of View.
diff --git a/ui/views/controls/link.h b/ui/views/controls/link.h
index 9230acb..f6a876d 100644
--- a/ui/views/controls/link.h
+++ b/ui/views/controls/link.h
@@ -37,6 +37,9 @@ class VIEWS_EXPORT Link : public Label {
virtual void OnEnabledChanged() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
diff --git a/ui/views/controls/native/native_view_host.cc b/ui/views/controls/native/native_view_host.cc
index 760f856..28b1fe3 100644
--- a/ui/views/controls/native/native_view_host.cc
+++ b/ui/views/controls/native/native_view_host.cc
@@ -17,7 +17,7 @@ const char NativeViewHost::kViewClassName[] = "NativeViewHost";
const char kWidgetNativeViewHostKey[] = "WidgetNativeViewHost";
#if defined(USE_AURA)
-// Views implmenetatxion draws the focus.
+// Views implementation draws the focus.
// TODO(oshima): Eliminate this flag and consolidate
// the focus border code.
const bool NativeViewHost::kRenderNativeControlFocus = false;
diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc
index b68ea1d..242ff5e 100644
--- a/ui/views/controls/slider.cc
+++ b/ui/views/controls/slider.cc
@@ -171,6 +171,19 @@ void Slider::SetAccessibleName(const string16& name) {
accessible_name_ = name;
}
+void Slider::OnPaintFocus(gfx::Canvas* canvas) {
+ if (!HasFocus())
+ return;
+
+ if (!focus_border_color_) {
+ canvas->DrawFocusRect(GetLocalBounds());
+ } else if (HasFocus()) {
+ canvas->DrawSolidFocusRect(
+ gfx::Rect(1, 1, width() - 3, height() - 3),
+ focus_border_color_);
+ }
+}
+
gfx::Size Slider::GetPreferredSize() {
const int kSizeMajor = 200;
const int kSizeMinor = 40;
@@ -248,6 +261,7 @@ void Slider::OnPaint(gfx::Canvas* canvas) {
canvas->DrawImageInt(*thumb_, thumb_x, button_cy);
}
View::OnPaint(canvas);
+ OnPaintFocus(canvas);
}
bool Slider::OnMousePressed(const ui::MouseEvent& event) {
@@ -316,14 +330,4 @@ void Slider::GetAccessibleState(ui::AccessibleViewState* state) {
base::StringPrintf("%d%%", (int)(value_ * 100 + 0.5)));
}
-void Slider::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (!focus_border_color_) {
- View::OnPaintFocusBorder(canvas);
- } else if (HasFocus()) {
- canvas->DrawSolidFocusRect(
- gfx::Rect(1, 1, width() - 3, height() - 3),
- focus_border_color_);
- }
-}
-
} // namespace views
diff --git a/ui/views/controls/slider.h b/ui/views/controls/slider.h
index 3c17e94..cec24c2 100644
--- a/ui/views/controls/slider.h
+++ b/ui/views/controls/slider.h
@@ -41,8 +41,7 @@ class VIEWS_EXPORT SliderListener {
virtual ~SliderListener() {}
};
-class VIEWS_EXPORT Slider : public View,
- public gfx::AnimationDelegate {
+class VIEWS_EXPORT Slider : public View, public gfx::AnimationDelegate {
public:
enum Orientation {
HORIZONTAL,
@@ -80,6 +79,8 @@ class VIEWS_EXPORT Slider : public View,
// Moves the button to the specified point and updates the value accordingly.
void MoveButtonTo(const gfx::Point& point);
+ void OnPaintFocus(gfx::Canvas* canvas);
+
// views::View overrides:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
@@ -88,7 +89,6 @@ class VIEWS_EXPORT Slider : public View,
virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
// ui::EventHandler overrides:
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index fe2296b..04003ba 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -23,6 +23,7 @@
#include "ui/views/controls/textfield/native_textfield_views.h"
#include "ui/views/controls/textfield/native_textfield_wrapper.h"
#include "ui/views/controls/textfield/textfield_controller.h"
+#include "ui/views/painter.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/widget.h"
@@ -78,8 +79,8 @@ Textfield::Textfield()
GetDefaultTextfieldObscuredRevealDuration();
}
- if (!NativeViewHost::kRenderNativeControlFocus)
- set_focus_border(NULL);
+ if (NativeViewHost::kRenderNativeControlFocus)
+ focus_painter_ = Painter::CreateDashedFocusPainter();
}
Textfield::Textfield(StyleFlags style)
@@ -108,8 +109,8 @@ Textfield::Textfield(StyleFlags style)
GetDefaultTextfieldObscuredRevealDuration();
}
- if (!NativeViewHost::kRenderNativeControlFocus)
- set_focus_border(NULL);
+ if (NativeViewHost::kRenderNativeControlFocus)
+ focus_painter_ = Painter::CreateDashedFocusPainter();
}
Textfield::~Textfield() {
@@ -407,6 +408,10 @@ void Textfield::ExecuteCommand(int command_id) {
native_wrapper_->ExecuteTextCommand(command_id);
}
+void Textfield::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
bool Textfield::HasTextBeingDragged() {
return native_wrapper_->HasTextBeingDragged();
}
@@ -449,9 +454,10 @@ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
return e.key_code() == ui::VKEY_BACK || e.IsUnicodeKeyCode();
}
-void Textfield::OnPaintFocusBorder(gfx::Canvas* canvas) {
+void Textfield::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
if (NativeViewHost::kRenderNativeControlFocus)
- View::OnPaintFocusBorder(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
bool Textfield::OnKeyPressed(const ui::KeyEvent& e) {
diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h
index 2c10b8e..307e562 100644
--- a/ui/views/controls/textfield/textfield.h
+++ b/ui/views/controls/textfield/textfield.h
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
@@ -38,7 +39,7 @@ class TextInputClient;
namespace views {
class ImageView;
-
+class Painter;
class TextfieldController;
// This class implements a View that wraps a native text (edit) field.
@@ -239,6 +240,8 @@ class VIEWS_EXPORT Textfield : public View {
// Performs the action associated with the specified command id.
void ExecuteCommand(int command_id);
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
// Provided only for testing:
gfx::NativeView GetTestingHandle() const {
return native_wrapper_ ? native_wrapper_->GetTestingHandle() : NULL;
@@ -257,7 +260,7 @@ class VIEWS_EXPORT Textfield : public View {
virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE;
virtual void OnEnabledChanged() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE;
virtual bool OnMouseDragged(const ui::MouseEvent& e) OVERRIDE;
@@ -343,6 +346,8 @@ class VIEWS_EXPORT Textfield : public View {
// Used to bind callback functions to this object.
base::WeakPtrFactory<Textfield> weak_ptr_factory_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(Textfield);
};
diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc
index eef661f..f2ea02f 100644
--- a/ui/views/controls/webview/webview.cc
+++ b/ui/views/controls/webview/webview.cc
@@ -35,8 +35,6 @@ WebView::WebView(content::BrowserContext* browser_context)
is_embedding_fullscreen_widget_(false),
browser_context_(browser_context),
allow_accelerators_(false) {
- // WebView shouldn't render focus.
- set_focus_border(NULL);
AddChildView(wcv_holder_);
NativeViewAccessibility::RegisterWebView(this);
}
diff --git a/ui/views/focus_border.cc b/ui/views/focus_border.cc
deleted file mode 100644
index 3ff28c3..0000000
--- a/ui/views/focus_border.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/focus_border.h"
-
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/insets.h"
-#include "ui/gfx/rect.h"
-#include "ui/views/view.h"
-
-namespace views {
-namespace {
-
-class DashedFocusBorder : public FocusBorder {
- public:
- DashedFocusBorder(
- int left_inset, int top_inset, int right_inset, int bottom_inset)
- : left_inset_(left_inset),
- top_inset_(top_inset),
- right_inset_(right_inset),
- bottom_inset_(bottom_inset) {
- }
-
- virtual void Paint(const View& view, gfx::Canvas* canvas) const OVERRIDE {
- gfx::Rect rect(view.GetLocalBounds());
- rect.Inset(left_inset_, top_inset_, right_inset_, bottom_inset_);
- canvas->DrawFocusRect(rect);
- }
-
- private:
- int left_inset_;
- int top_inset_;
- int right_inset_;
- int bottom_inset_;
-
- DISALLOW_COPY_AND_ASSIGN(DashedFocusBorder);
-};
-
-class SolidFocusBorder : public FocusBorder {
- public:
- SolidFocusBorder(SkColor focus_color, const gfx::Insets& insets)
- : focus_color_(focus_color), insets_(insets) {
- }
-
- virtual void Paint(const View& view, gfx::Canvas* canvas) const OVERRIDE {
- gfx::Rect rect(view.GetLocalBounds());
- rect.Inset(insets_);
- canvas->DrawSolidFocusRect(rect, focus_color_);
- }
-
- private:
- // The focus color to use.
- SkColor focus_color_;
-
- // The insets to use.
- gfx::Insets insets_;
-
- DISALLOW_COPY_AND_ASSIGN(SolidFocusBorder);
-};
-
-} // namespace
-
-FocusBorder::~FocusBorder() {
-}
-
-// static
-FocusBorder* FocusBorder::CreateDashedFocusBorder() {
- return new DashedFocusBorder(0, 0, 0, 0);
-}
-
-// static
-FocusBorder* FocusBorder::CreateDashedFocusBorder(
- int left, int top, int right, int bottom) {
- return new DashedFocusBorder(left, top, right, bottom);
-}
-
-// static
-FocusBorder* FocusBorder::CreateSolidFocusBorder(
- SkColor focus_color, const gfx::Insets& insets) {
- return new SolidFocusBorder(focus_color, insets);
-}
-
-FocusBorder::FocusBorder() {
-}
-
-} // namespace views
diff --git a/ui/views/focus_border.h b/ui/views/focus_border.h
deleted file mode 100644
index e10ca41..0000000
--- a/ui/views/focus_border.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_VIEWS_FOCUS_BORDER_H_
-#define UI_VIEWS_FOCUS_BORDER_H_
-
-#include "base/basictypes.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/insets.h"
-#include "ui/views/views_export.h"
-
-namespace gfx {
-class Canvas;
-}
-
-namespace views {
-class View;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Focus border class.
-//
-// The focus border class is used to display an indication of focus on a view.
-// To set a focus border on a view, call SetFocusBorder on the view. Once set
-// on a view, the focus border is owned by the view.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-class VIEWS_EXPORT FocusBorder {
- public:
- virtual ~FocusBorder();
-
- // Creates the default inset dashed line focus border.
- static FocusBorder* CreateDashedFocusBorder();
- static FocusBorder* CreateDashedFocusBorder(
- int left, int top, int right, int bottom);
-
- // Creates a focus border with a given |inset| and |focus_color| which is one
- // pixel thick.
- static FocusBorder* CreateSolidFocusBorder(
- SkColor focus_color, const gfx::Insets& insets);
-
- // Renders the focus border for the specified view.
- virtual void Paint(const View& view, gfx::Canvas* canvas) const = 0;
-
- protected:
- FocusBorder();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FocusBorder);
-};
-
-} // namespace views
-
-#endif // UI_VIEWS_FOCUS_BORDER_H_
diff --git a/ui/views/painter.cc b/ui/views/painter.cc
index ce84a58..b6a2e7d 100644
--- a/ui/views/painter.cc
+++ b/ui/views/painter.cc
@@ -15,12 +15,83 @@
#include "ui/gfx/insets.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
-
+#include "ui/views/view.h"
namespace views {
namespace {
+// DashedFocusPainter ----------------------------------------------------------
+
+class DashedFocusPainter : public Painter {
+ public:
+ explicit DashedFocusPainter(const gfx::Insets& insets);
+ virtual ~DashedFocusPainter();
+
+ // Painter:
+ virtual gfx::Size GetMinimumSize() const OVERRIDE;
+ virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE;
+
+ private:
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(DashedFocusPainter);
+};
+
+DashedFocusPainter::DashedFocusPainter(const gfx::Insets& insets)
+ : insets_(insets) {
+}
+
+DashedFocusPainter::~DashedFocusPainter() {
+}
+
+gfx::Size DashedFocusPainter::GetMinimumSize() const {
+ return gfx::Size();
+}
+
+void DashedFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
+ gfx::Rect rect(size);
+ rect.Inset(insets_);
+ canvas->DrawFocusRect(rect);
+}
+
+// SolidFocusPainter -----------------------------------------------------------
+
+class SolidFocusPainter : public Painter {
+ public:
+ SolidFocusPainter(SkColor color, const gfx::Insets& insets);
+ virtual ~SolidFocusPainter();
+
+ // Painter:
+ virtual gfx::Size GetMinimumSize() const OVERRIDE;
+ virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE;
+
+ private:
+ const SkColor color_;
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(SolidFocusPainter);
+};
+
+SolidFocusPainter::SolidFocusPainter(SkColor color,
+ const gfx::Insets& insets)
+ : color_(color),
+ insets_(insets) {
+}
+
+SolidFocusPainter::~SolidFocusPainter() {
+}
+
+gfx::Size SolidFocusPainter::GetMinimumSize() const {
+ return gfx::Size();
+}
+
+void SolidFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
+ gfx::Rect rect(size);
+ rect.Inset(insets_);
+ canvas->DrawSolidFocusRect(rect, color_);
+}
+
// GradientPainter ------------------------------------------------------------
class GradientPainter : public Painter {
@@ -88,7 +159,6 @@ void GradientPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
SkIntToScalar(size.height()), paint);
}
-
// ImagePainter ---------------------------------------------------------------
// ImagePainter stores and paints nine images as a scalable grid.
@@ -239,6 +309,14 @@ void Painter::PaintPainterAt(gfx::Canvas* canvas,
}
// static
+void Painter::PaintFocusPainter(View* view,
+ gfx::Canvas* canvas,
+ Painter* focus_painter) {
+ if (focus_painter && view->HasFocus())
+ PaintPainterAt(canvas, focus_painter, view->GetLocalBounds());
+}
+
+// static
Painter* Painter::CreateHorizontalGradient(SkColor c1, SkColor c2) {
SkColor colors[2];
colors[0] = c1;
@@ -274,6 +352,23 @@ Painter* Painter::CreateImageGridPainter(const int image_ids[]) {
return new ImagePainter(image_ids);
}
+// static
+scoped_ptr<Painter> Painter::CreateDashedFocusPainter() {
+ return scoped_ptr<Painter>(new DashedFocusPainter(gfx::Insets())).Pass();
+}
+
+// static
+scoped_ptr<Painter> Painter::CreateDashedFocusPainterWithInsets(
+ const gfx::Insets& insets) {
+ return scoped_ptr<Painter>(new DashedFocusPainter(insets)).Pass();
+}
+
+// static
+scoped_ptr<Painter> Painter::CreateSolidFocusPainter(
+ SkColor color,
+ const gfx::Insets& insets) {
+ return scoped_ptr<Painter>(new SolidFocusPainter(color, insets)).Pass();
+}
// HorizontalPainter ----------------------------------------------------------
diff --git a/ui/views/painter.h b/ui/views/painter.h
index c0ff443..3799e91 100644
--- a/ui/views/painter.h
+++ b/ui/views/painter.h
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/views/views_export.h"
@@ -25,6 +26,8 @@ class Size;
namespace views {
+class View;
+
// Painter, as the name implies, is responsible for painting in a particular
// region. Think of Painter as a Border or Background that can be painted
// in any region of a View.
@@ -39,6 +42,12 @@ class VIEWS_EXPORT Painter {
Painter* painter,
const gfx::Rect& rect);
+ // Convenience that paints |focus_painter| only if |view| HasFocus() and
+ // |focus_painter| is non-NULL.
+ static void PaintFocusPainter(View* view,
+ gfx::Canvas* canvas,
+ Painter* focus_painter);
+
// Creates a painter that draws a gradient between the two colors.
static Painter* CreateHorizontalGradient(SkColor c1, SkColor c2);
static Painter* CreateVerticalGradient(SkColor c1, SkColor c2);
@@ -65,6 +74,13 @@ class VIEWS_EXPORT Painter {
// Top-Left/Top/Top-Right/Left/[Center]/Right/Bottom-Left/Bottom/Bottom-Right.
static Painter* CreateImageGridPainter(const int image_ids[]);
+ // Factory methods for creating painters intended for rendering focus.
+ static scoped_ptr<Painter> CreateDashedFocusPainter();
+ static scoped_ptr<Painter> CreateDashedFocusPainterWithInsets(
+ const gfx::Insets& insets);
+ static scoped_ptr<Painter> CreateSolidFocusPainter(SkColor color,
+ const gfx::Insets& insets);
+
// Returns the minimum size this painter can paint without obvious graphical
// problems (e.g. overlapping images).
virtual gfx::Size GetMinimumSize() const = 0;
diff --git a/ui/views/view.cc b/ui/views/view.cc
index becd1bc1..f74d0f9 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -161,7 +161,6 @@ View::View()
registered_for_visible_bounds_notification_(false),
clip_insets_(0, 0, 0, 0),
needs_layout_(true),
- focus_border_(FocusBorder::CreateDashedFocusBorder()),
flip_canvas_on_paint_for_rtl_ui_(false),
paint_to_layer_(false),
accelerator_focus_manager_(NULL),
@@ -1404,7 +1403,6 @@ void View::PaintChildren(gfx::Canvas* canvas) {
void View::OnPaint(gfx::Canvas* canvas) {
TRACE_EVENT1("views", "View::OnPaint", "class", GetClassName());
OnPaintBackground(canvas);
- OnPaintFocusBorder(canvas);
OnPaintBorder(canvas);
}
@@ -1426,15 +1424,6 @@ void View::OnPaintBorder(gfx::Canvas* canvas) {
}
}
-void View::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (focus_border_.get() && HasFocus()) {
- TRACE_EVENT2("views", "views::OnPaintFocusBorder",
- "width", canvas->sk_canvas()->getDevice()->width(),
- "height", canvas->sk_canvas()->getDevice()->height());
- focus_border_->Paint(*this, canvas);
- }
-}
-
// Accelerated Painting --------------------------------------------------------
void View::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) {
@@ -1606,14 +1595,10 @@ void View::OnBlur() {
}
void View::Focus() {
- if (focus_border_.get())
- SchedulePaint();
OnFocus();
}
void View::Blur() {
- if (focus_border_.get())
- SchedulePaint();
OnBlur();
}
diff --git a/ui/views/view.h b/ui/views/view.h
index e5d6297..9bdf8405 100644
--- a/ui/views/view.h
+++ b/ui/views/view.h
@@ -31,7 +31,6 @@
#include "ui/gfx/vector2d.h"
#include "ui/views/background.h"
#include "ui/views/border.h"
-#include "ui/views/focus_border.h"
#if defined(OS_WIN)
#include "base/win/scoped_comptr.h"
@@ -516,11 +515,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
const Border* border() const { return border_.get(); }
Border* border() { return border_.get(); }
- // The focus_border object is owned by this object and may be NULL.
- void set_focus_border(FocusBorder* b) { focus_border_.reset(b); }
- const FocusBorder* focus_border() const { return focus_border_.get(); }
- FocusBorder* focus_border() { return focus_border_.get(); }
-
// Get the theme provider from the parent widget.
virtual ui::ThemeProvider* GetThemeProvider() const;
@@ -1089,10 +1083,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Override to paint a border not specified by SetBorder().
virtual void OnPaintBorder(gfx::Canvas* canvas);
- // Override to paint a focus border not specified by set_focus_border() around
- // relevant contents. The focus border is usually a dotted rectangle.
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas);
-
// Accelerated painting ------------------------------------------------------
// Returns the offset from this view to the nearest ancestor with a layer. If
@@ -1512,9 +1502,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Border.
scoped_ptr<Border> border_;
- // Focus border.
- scoped_ptr<FocusBorder> focus_border_;
-
// RTL painting --------------------------------------------------------------
// Indicates whether or not the gfx::Canvas object passed to View::Paint()
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index 964efdf..264da27 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -27,7 +27,6 @@
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/focus/accelerator_handler.h"
#include "ui/views/focus/view_storage.h"
-#include "ui/views/focus_border.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/view.h"
#include "ui/views/views_delegate.h"
@@ -2212,9 +2211,7 @@ TEST_F(ViewTest, FocusBlurPaints) {
parent_view.scheduled_paint_rects_.clear();
child_view1->scheduled_paint_rects_.clear();
- // If no FocusBorder is installed then focus changes shouldn't
- // SchedulePaint().
- child_view1->set_focus_border(NULL);
+ // Focus change shouldn't trigger paints.
child_view1->DoFocus();
EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty());
@@ -2223,15 +2220,6 @@ TEST_F(ViewTest, FocusBlurPaints) {
child_view1->DoBlur();
EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty());
EXPECT_TRUE(child_view1->scheduled_paint_rects_.empty());
-
- // Repeat with a FocusBorder, should now paint.
- child_view1->set_focus_border(FocusBorder::CreateDashedFocusBorder());
- child_view1->DoFocus();
- EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty());
- child_view1->scheduled_paint_rects_.clear();
-
- child_view1->DoBlur();
- EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty());
}
// Verifies SetBounds(same bounds) doesn't trigger a SchedulePaint().
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index da105c5..3c0454d 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -293,8 +293,6 @@
'focus/view_storage.h',
'focus/widget_focus_manager.cc',
'focus/widget_focus_manager.h',
- 'focus_border.cc',
- 'focus_border.h',
'ime/input_method_base.cc',
'ime/input_method_base.h',
'ime/input_method_bridge.cc',