diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 15:38:19 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 15:38:19 +0000 |
commit | 9fc4f203c93d906a5b94a0e48556ee52515185f0 (patch) | |
tree | bd16f20b4442184b98ccf9db656491940b64cbcd | |
parent | 2f4294538dea93c4b48b20b9b564d09bb7591301 (diff) | |
download | chromium_src-9fc4f203c93d906a5b94a0e48556ee52515185f0.zip chromium_src-9fc4f203c93d906a5b94a0e48556ee52515185f0.tar.gz chromium_src-9fc4f203c93d906a5b94a0e48556ee52515185f0.tar.bz2 |
Bye bye tab close dot, we hardly knew you.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2813045
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51718 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/app/theme/tab_close_dot_mask.png | bin | 115 -> 0 bytes | |||
-rw-r--r-- | chrome/app/theme/theme_resources.grd | 1 | ||||
-rw-r--r-- | chrome/browser/views/tabs/base_tab.cc | 98 | ||||
-rw-r--r-- | chrome/browser/views/tabs/base_tab.h | 14 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab.cc | 8 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab.cc | 26 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip.cc | 9 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip_interactive_uitest.cc | 59 | ||||
-rw-r--r-- | chrome/test/interactive_ui/interactive_ui_tests.gypi | 2 | ||||
-rw-r--r-- | views/controls/button/image_button.h | 19 | ||||
-rw-r--r-- | views/event.h | 6 | ||||
-rw-r--r-- | views/view.cc | 33 | ||||
-rw-r--r-- | views/view.h | 30 | ||||
-rw-r--r-- | views/widget/root_view.cc | 72 | ||||
-rw-r--r-- | views/widget/root_view.h | 24 |
15 files changed, 49 insertions, 352 deletions
diff --git a/chrome/app/theme/tab_close_dot_mask.png b/chrome/app/theme/tab_close_dot_mask.png Binary files differdeleted file mode 100644 index 1575694..0000000 --- a/chrome/app/theme/tab_close_dot_mask.png +++ /dev/null diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd index b4ca9a1..8d5d214 100644 --- a/chrome/app/theme/theme_resources.grd +++ b/chrome/app/theme/theme_resources.grd @@ -74,7 +74,6 @@ <include name="IDR_TAB_CLOSE" file="tab_close.png" type="BINDATA" /> <include name="IDR_TAB_CLOSE_H" file="tab_close_h.png" type="BINDATA" /> <include name="IDR_TAB_CLOSE_P" file="tab_close_p.png" type="BINDATA" /> - <include name="IDR_TAB_CLOSE_DOT_MASK" file="tab_close_dot_mask.png" type="BINDATA" /> <include name="IDR_TAB_CLOSE_MASK" file="tab_close_mask.png" type="BINDATA" /> <include name="IDR_TAB_INACTIVE_CENTER" file="tab_inactive_center.png" type="BINDATA" /> <include name="IDR_TAB_INACTIVE_LEFT" file="tab_inactive_left.png" type="BINDATA" /> diff --git a/chrome/browser/views/tabs/base_tab.cc b/chrome/browser/views/tabs/base_tab.cc index 9583233..5441379 100644 --- a/chrome/browser/views/tabs/base_tab.cc +++ b/chrome/browser/views/tabs/base_tab.cc @@ -20,7 +20,6 @@ #include "gfx/canvas_skia.h" #include "gfx/favicon_size.h" #include "gfx/font.h" -#include "gfx/skbitmap_operations.h" #include "grit/app_resources.h" #include "grit/generated_resources.h" #include "grit/theme_resources.h" @@ -49,36 +48,20 @@ static SkBitmap* close_button_p = NULL; static SkBitmap* crashed_fav_icon = NULL; +namespace { + //////////////////////////////////////////////////////////////////////////////// // TabCloseButton // // This is a Button subclass that causes middle clicks to be forwarded to the // parent View by explicitly not handling them in OnMousePressed. -class BaseTab::TabCloseButton : public views::ImageButton { +class TabCloseButton : public views::ImageButton { public: - TabCloseButton(BaseTab* tab, bool show_mini_dot) - : views::ImageButton(tab), - tab_(tab), - is_mouse_near_(!show_mini_dot), - color_(0) { + explicit TabCloseButton(views::ButtonListener* listener) + : views::ImageButton(listener) { } virtual ~TabCloseButton() {} - // Sets the color used to derive the background color. - void SetColor(SkColor color) { - if (color_ == color) - return; - - color_ = color; - // This is invoked from Paint, so we don't need to schedule a paint. - UpdateBackgroundImage(false); - } - - // Invoked when the selected state changes. - void SelectedStateChanged() { - UpdateBackgroundImage(true); - } - virtual bool OnMousePressed(const views::MouseEvent& event) { bool handled = ImageButton::OnMousePressed(event); // Explicitly mark midle-mouse clicks as non-handled to ensure the tab @@ -99,63 +82,12 @@ class BaseTab::TabCloseButton : public views::ImageButton { GetParent()->OnMouseExited(event); } - virtual void OnMouseNear(const views::MouseEvent& event) { - is_mouse_near_ = true; - UpdateBackgroundImage(true); - } - - virtual void OnMouseExitedNear(const views::MouseEvent& event) { - is_mouse_near_ = false; - UpdateBackgroundImage(true); - } - private: - // Returns the image to use for the background. - static const SkBitmap& GetBackgroundImage(SkColor color, bool is_mouse_near) { - // All tabs share the same color, so we cache the bitmaps. - static SkColor cached_color = 0; - static SkBitmap* near_image = NULL; - static SkBitmap* far_image = NULL; - if (!near_image || cached_color != color) { - cached_color = color; - if (!near_image) { - near_image = new SkBitmap(); - far_image = new SkBitmap(); - } - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - *near_image = SkBitmapOperations::CreateButtonBackground( - color, - *rb.GetBitmapNamed(IDR_TAB_CLOSE), - *rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); - *far_image = SkBitmapOperations::CreateButtonBackground( - color, - *rb.GetBitmapNamed(IDR_TAB_CLOSE), - *rb.GetBitmapNamed(IDR_TAB_CLOSE_DOT_MASK)); - } - return is_mouse_near ? *near_image : *far_image; - } - - // Should we use the near image? - bool use_near_image() const { return is_mouse_near_ || tab_->IsSelected(); } - - // Resets the background image. - void UpdateBackgroundImage(bool paint) { - set_background_image(GetBackgroundImage(color_, use_near_image())); - if (paint) - SchedulePaint(); - } - - BaseTab* tab_; - - // Is the mouse near the close button? - bool is_mouse_near_; - - // Color used to derive the background image from. - SkColor color_; - DISALLOW_COPY_AND_ASSIGN(TabCloseButton); }; +} // namespace + // static int BaseTab::close_button_width_ = 0; // static @@ -207,7 +139,7 @@ class BaseTab::FavIconCrashAnimation : public LinearAnimation, DISALLOW_COPY_AND_ASSIGN(FavIconCrashAnimation); }; -BaseTab::BaseTab(TabController* controller, bool show_mini_dot) +BaseTab::BaseTab(TabController* controller) : controller_(controller), closing_(false), dragging_(false), @@ -219,7 +151,7 @@ BaseTab::BaseTab(TabController* controller, bool show_mini_dot) BaseTab::InitResources(); // Add the Close Button. - TabCloseButton* close_button = new TabCloseButton(this, show_mini_dot); + TabCloseButton* close_button = new TabCloseButton(this); close_button_ = close_button; close_button->SetImage(views::CustomButton::BS_NORMAL, close_button_n); close_button->SetImage(views::CustomButton::BS_HOT, close_button_h); @@ -296,10 +228,6 @@ void BaseTab::StopPulse() { pulse_animation_.reset(NULL); } -void BaseTab::SelectedChanged() { - close_button_->SelectedStateChanged(); -} - bool BaseTab::IsSelected() const { return controller() ? controller()->IsTabSelected(this) : true; } @@ -406,14 +334,6 @@ void BaseTab::AdvanceLoadingAnimation(TabRendererData::NetworkState old_state, SchedulePaint(); } -views::ImageButton* BaseTab::close_button() const { - return close_button_; -} - -void BaseTab::SetCloseButtonColor(SkColor color) { - close_button_->SetColor(color); -} - void BaseTab::PaintIcon(gfx::Canvas* canvas, int x, int y) { if (base::i18n::IsRTL()) { if (!data().favicon.isNull()) diff --git a/chrome/browser/views/tabs/base_tab.h b/chrome/browser/views/tabs/base_tab.h index c0c9bde..e2ac34a 100644 --- a/chrome/browser/views/tabs/base_tab.h +++ b/chrome/browser/views/tabs/base_tab.h @@ -32,7 +32,7 @@ class BaseTab : public AnimationDelegate, public views::ContextMenuController, public views::View { public: - BaseTab(TabController* controller, bool show_mini_dot); + explicit BaseTab(TabController* controller); ~BaseTab(); // Sets the data this tabs displays. Invokes DataChanged for subclasses to @@ -71,10 +71,6 @@ class BaseTab : public AnimationDelegate, theme_provider_ = provider; } - // Invoked when the selected state changes. Resets the image of the close - // button. - void SelectedChanged(); - // Returns true if the tab is selected. virtual bool IsSelected() const; @@ -108,10 +104,7 @@ class BaseTab : public AnimationDelegate, return hover_animation_.get(); } - views::ImageButton* close_button() const; - - // Sets the color used to derive the close button images. - void SetCloseButtonColor(SkColor color); + views::ImageButton* close_button() const { return close_button_; } // Paints the icon at the specified x-coordinate. void PaintIcon(gfx::Canvas* canvas, int x, int y); @@ -150,7 +143,6 @@ class BaseTab : public AnimationDelegate, private: // The animation object used to swap the favicon with the sad tab icon. class FavIconCrashAnimation; - class TabCloseButton; // Set the temporary offset for the favicon. This is used during the crash // animation. @@ -194,7 +186,7 @@ class BaseTab : public AnimationDelegate, scoped_refptr<AnimationContainer> animation_container_; - TabCloseButton* close_button_; + views::ImageButton* close_button_; // The current index of the loading animation. int loading_animation_frame_; diff --git a/chrome/browser/views/tabs/side_tab.cc b/chrome/browser/views/tabs/side_tab.cc index 0169772..f57a32b 100644 --- a/chrome/browser/views/tabs/side_tab.cc +++ b/chrome/browser/views/tabs/side_tab.cc @@ -13,6 +13,7 @@ #include "gfx/path.h" #include "gfx/skia_util.h" #include "grit/app_resources.h" +#include "grit/theme_resources.h" #include "views/controls/button/image_button.h" namespace { @@ -37,8 +38,11 @@ const int kPhantomTabIconAlpha = 100; // SideTab, public: SideTab::SideTab(TabController* controller) - : BaseTab(controller, false) { - SetCloseButtonColor(kTextColor); + : BaseTab(controller) { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + close_button()->SetBackground(kTextColor, + rb.GetBitmapNamed(IDR_TAB_CLOSE), + rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); } SideTab::~SideTab() { diff --git a/chrome/browser/views/tabs/tab.cc b/chrome/browser/views/tabs/tab.cc index 22e424a..8b981e6 100644 --- a/chrome/browser/views/tabs/tab.cc +++ b/chrome/browser/views/tabs/tab.cc @@ -23,7 +23,6 @@ #include "grit/theme_resources.h" #include "third_party/skia/include/effects/SkGradientShader.h" #include "views/controls/button/image_button.h" -#include "views/widget/root_view.h" #include "views/widget/tooltip_manager.h" #include "views/widget/widget.h" #include "views/window/non_client_view.h" @@ -102,7 +101,7 @@ const char Tab::kViewClassName[] = "browser/tabs/Tab"; // Tab, public: Tab::Tab(TabController* controller) - : BaseTab(controller, true), + : BaseTab(controller), showing_icon_(false), showing_close_button_(false), close_button_color_(NULL) { @@ -213,7 +212,13 @@ void Tab::Paint(gfx::Canvas* canvas) { PaintIcon(canvas); // If the close button color has changed, generate a new one. - SetCloseButtonColor(title_color); + if (!close_button_color_ || title_color != close_button_color_) { + close_button_color_ = title_color; + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + close_button()->SetBackground(close_button_color_, + rb.GetBitmapNamed(IDR_TAB_CLOSE), + rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); + } } void Tab::Layout() { @@ -261,7 +266,6 @@ void Tab::Layout() { // Size the Close button. showing_close_button_ = ShouldShowCloseBox(); - gfx::Insets near_insets; if (showing_close_button_) { int close_button_top = kTopPadding + kCloseButtonVertFuzz + @@ -271,24 +275,10 @@ void Tab::Layout() { close_button_top, close_button_width(), close_button_height()); close_button()->SetVisible(true); - int avail_width = width() - close_button()->bounds().right(); - if (avail_width > 0) { - View* root = GetRootView(); - if (root) { // Root is NULL when dragging. - // Enable mouse near events for the region from the top of the browser - // to the bottom of the tab. - gfx::Point loc; - ConvertPointToView(close_button(), GetRootView(), &loc); - near_insets.Set(loc.y(), close_button()->x(), - height() - close_button()->bounds().bottom(), - avail_width); - } - } } else { close_button()->SetBounds(0, 0, 0, 0); close_button()->SetVisible(false); } - close_button()->RegisterForMouseNearEvents(near_insets); int title_left = favicon_bounds_.right() + kFavIconTitleSpacing; int title_top = kTopPadding + (content_height - font_height()) / 2; diff --git a/chrome/browser/views/tabs/tab_strip.cc b/chrome/browser/views/tabs/tab_strip.cc index 3054e0a..03cc42f 100644 --- a/chrome/browser/views/tabs/tab_strip.cc +++ b/chrome/browser/views/tabs/tab_strip.cc @@ -248,13 +248,8 @@ void TabStrip::SelectTabAt(int old_model_index, int new_model_index) { } if (old_model_index >= 0) { - Tab* tab = GetTabAtTabDataIndex(ModelIndexToTabIndex(old_model_index)); - tab->StopMiniTabTitleAnimation(); - tab->SelectedChanged(); - } - if (new_model_index >= 0) { - GetTabAtTabDataIndex( - ModelIndexToTabIndex(new_model_index))->SelectedChanged(); + GetTabAtTabDataIndex(ModelIndexToTabIndex(old_model_index))-> + StopMiniTabTitleAnimation(); } } diff --git a/chrome/browser/views/tabs/tab_strip_interactive_uitest.cc b/chrome/browser/views/tabs/tab_strip_interactive_uitest.cc deleted file mode 100644 index b6a5d4a..0000000 --- a/chrome/browser/views/tabs/tab_strip_interactive_uitest.cc +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2010 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 "base/message_loop.h" -#include "chrome/browser/automation/ui_controls.h" -#include "chrome/browser/browser.h" -#include "chrome/browser/browser_window.h" -#include "chrome/browser/view_ids.h" -#include "chrome/browser/views/tabs/base_tab.h" -#include "chrome/browser/views/tabs/tab_strip.h" -#include "chrome/common/url_constants.h" -#include "chrome/test/in_process_browser_test.h" -#include "chrome/test/ui_test_utils.h" -#include "views/widget/root_view.h" -#include "views/widget/widget.h" - -typedef InProcessBrowserTest TabStripTest; - -// Creates a tab, middle clicks to close the first, then clicks back on the -// first. This test exercises a crasher in the mouse near code path. -IN_PROC_BROWSER_TEST_F(TabStripTest, Close) { - int initial_tab_count = browser()->tab_count(); - - browser()->AddTabWithURL( - GURL(chrome::kAboutBlankURL), GURL(), PageTransition::TYPED, -1, - TabStripModel::ADD_SELECTED, NULL, std::string()); - views::RootView* root = - views::Widget::FindRootView(browser()->window()->GetNativeHandle()); - ASSERT_TRUE(root); - TabStrip* tab_strip = - static_cast<TabStrip*>(root->GetViewByID(VIEW_ID_TAB_STRIP)); - ASSERT_TRUE(tab_strip); - - // Force a layout to ensure no animations are active. - tab_strip->Layout(); - - // Close the first tab by way of am middle click. - BaseTab* tab1 = tab_strip->base_tab_at_tab_index(1); - ui_controls::MoveMouseToCenterAndPress( - tab1, ui_controls::MIDDLE, ui_controls::DOWN | ui_controls::UP, - new MessageLoop::QuitTask()); - - // Force a layout to ensure no animations are active. - ui_test_utils::RunMessageLoop(); - - EXPECT_EQ(initial_tab_count, browser()->tab_count()); - - // Force a layout to ensure no animations are active. - tab_strip->Layout(); - - // Click on the first tab. - BaseTab* tab0 = tab_strip->base_tab_at_tab_index(0); - ui_controls::MoveMouseToCenterAndPress( - tab0, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, - new MessageLoop::QuitTask()); - - ui_test_utils::RunMessageLoop(); -} diff --git a/chrome/test/interactive_ui/interactive_ui_tests.gypi b/chrome/test/interactive_ui/interactive_ui_tests.gypi index 65cec5f..6a64f05 100644 --- a/chrome/test/interactive_ui/interactive_ui_tests.gypi +++ b/chrome/test/interactive_ui/interactive_ui_tests.gypi @@ -36,7 +36,6 @@ '<(DEPTH)/chrome/browser/notifications/notifications_interactive_uitest.cc', '<(DEPTH)/chrome/browser/views/bookmark_bar_view_test.cc', '<(DEPTH)/chrome/browser/views/find_bar_host_interactive_uitest.cc', - '<(DEPTH)/chrome/browser/views/tabs/tab_strip_interactive_uitest.cc', '<(DEPTH)/chrome/browser/views/tabs/tab_dragging_test.cc', '<(DEPTH)/chrome/test/in_process_browser_test.cc', '<(DEPTH)/chrome/test/in_process_browser_test.h', @@ -74,7 +73,6 @@ ['OS=="linux" and toolkit_views==1', { 'sources!': [ '<(DEPTH)/chrome/browser/gtk/bookmark_bar_gtk_interactive_uitest.cc', - '<(DEPTH)/chrome/browser/views/tabs/tab_strip_interactive_uitest.cc', # TODO(port) '<(DEPTH)/chrome/test/interactive_ui/npapi_interactive_test.cc', ], diff --git a/views/controls/button/image_button.h b/views/controls/button/image_button.h index ffd426b..f755c18 100644 --- a/views/controls/button/image_button.h +++ b/views/controls/button/image_button.h @@ -18,14 +18,6 @@ namespace views { class ImageButton : public CustomButton { public: - enum HorizontalAlignment { ALIGN_LEFT = 0, - ALIGN_CENTER, - ALIGN_RIGHT, }; - - enum VerticalAlignment { ALIGN_TOP = 0, - ALIGN_MIDDLE, - ALIGN_BOTTOM }; - explicit ImageButton(ButtonListener* listener); virtual ~ImageButton(); @@ -37,10 +29,13 @@ class ImageButton : public CustomButton { const SkBitmap* image, const SkBitmap* mask); - // Explicitly sets the background image. - void set_background_image(const SkBitmap& background) { - background_image_ = background; - } + enum HorizontalAlignment { ALIGN_LEFT = 0, + ALIGN_CENTER, + ALIGN_RIGHT, }; + + enum VerticalAlignment { ALIGN_TOP = 0, + ALIGN_MIDDLE, + ALIGN_BOTTOM }; // Sets how the image is laid out within the button's bounds. void SetImageAlignment(HorizontalAlignment h_align, diff --git a/views/event.h b/views/event.h index 91c0a53..6f96a71 100644 --- a/views/event.h +++ b/views/event.h @@ -41,8 +41,6 @@ class Event { ET_MOUSE_MOVED, ET_MOUSE_ENTERED, ET_MOUSE_EXITED, - ET_MOUSE_NEAR, - ET_MOUSE_EXITED_NEAR, ET_KEY_PRESSED, ET_KEY_RELEASED, ET_MOUSEWHEEL, @@ -102,9 +100,7 @@ class Event { type_ == ET_MOUSE_MOVED || type_ == ET_MOUSE_ENTERED || type_ == ET_MOUSE_EXITED || - type_ == ET_MOUSEWHEEL || - type_ == ET_MOUSE_NEAR || - type_ == ET_MOUSE_EXITED_NEAR; + type_ == ET_MOUSEWHEEL; } #if defined(OS_WIN) diff --git a/views/view.cc b/views/view.cc index 22b048b..d3a9b98 100644 --- a/views/view.cc +++ b/views/view.cc @@ -133,21 +133,6 @@ void View::SetBounds(const gfx::Rect& bounds) { } } -void View::RegisterForMouseNearEvents(const gfx::Insets& insets) { - RootView* root = GetRootView(); - if (insets.empty()) { - near_insets_.reset(NULL); - if (root) - root->UnregisterViewForNearNotification(this); - } else { - near_insets_.reset( - new gfx::Insets(insets.top(), insets.left(), insets.bottom(), - insets.right())); - if (root) - root->RegisterViewForNearNotification(this); - } -} - gfx::Rect View::GetLocalBounds(bool include_border) const { if (include_border || !border_.get()) return gfx::Rect(0, 0, width(), height()); @@ -556,7 +541,7 @@ void View::AddChildView(int index, View* v) { UpdateTooltip(); RootView* root = GetRootView(); if (root) - RegisterChildrenForRootNotifications(root, v); + RegisterChildrenForVisibleBoundsNotification(root, v); if (layout_manager_.get()) layout_manager_->ViewAdded(this, v); @@ -628,7 +613,7 @@ void View::DoRemoveChildView(View* a_view, RootView* root = GetRootView(); if (root) - UnregisterChildrenForRootNotifications(root, a_view); + UnregisterChildrenForVisibleBoundsNotification(root, a_view); a_view->PropagateRemoveNotifications(this); a_view->SetParent(NULL); @@ -1459,26 +1444,24 @@ ThemeProvider* View::GetThemeProvider() const { } // static -void View::RegisterChildrenForRootNotifications(RootView* root, View* view) { +void View::RegisterChildrenForVisibleBoundsNotification( + RootView* root, View* view) { DCHECK(root && view); if (view->GetNotifyWhenVisibleBoundsInRootChanges()) root->RegisterViewForVisibleBoundsNotification(view); - if (view->near_insets_.get()) - root->RegisterViewForNearNotification(view); for (int i = 0; i < view->GetChildViewCount(); ++i) - RegisterChildrenForRootNotifications(root, view->GetChildViewAt(i)); + RegisterChildrenForVisibleBoundsNotification(root, view->GetChildViewAt(i)); } // static -void View::UnregisterChildrenForRootNotifications( +void View::UnregisterChildrenForVisibleBoundsNotification( RootView* root, View* view) { DCHECK(root && view); if (view->GetNotifyWhenVisibleBoundsInRootChanges()) root->UnregisterViewForVisibleBoundsNotification(view); - if (view->near_insets_.get()) - root->UnregisterViewForNearNotification(view); for (int i = 0; i < view->GetChildViewCount(); ++i) - UnregisterChildrenForRootNotifications(root, view->GetChildViewAt(i)); + UnregisterChildrenForVisibleBoundsNotification(root, + view->GetChildViewAt(i)); } void View::AddDescendantToNotify(View* view) { diff --git a/views/view.h b/views/view.h index 67cae75..3ac8349 100644 --- a/views/view.h +++ b/views/view.h @@ -178,11 +178,6 @@ class View : public AcceleratorTarget { void SetX(int x) { SetBounds(x, y(), width(), height()); } void SetY(int y) { SetBounds(x(), y, width(), height()); } - // Registers this view for mouse near events (OnMouseNear and - // OnMouseExitedNear). Mouse near events are sent for the extended rectangle - // defined by the bounds of this view + |insets|. - void RegisterForMouseNearEvents(const gfx::Insets& insets); - // Returns the left coordinate of the View, relative to the parent View, // which is the value of bounds_.x(). // @@ -695,18 +690,6 @@ class View : public AcceleratorTarget { // Default implementation does nothing. Override as needed. virtual void OnMouseExited(const MouseEvent& event); - // Sent when the mouse enters the rectangle defined by this views bounds and - // the insets passed to RegisterForMouseNearEvents. This is only sent for - // views that have explicitly registered for near notification - // (RegisterForMouseNearEvents). - virtual void OnMouseNear(const MouseEvent& event) {} - - // Sent when the mouse exits the rectangle defined by this views bounds and - // the insets passed to RegisterForMouseNearEvents. This is only sent for - // views that have explicitly registered for near notification - // (RegisterForMouseNearEvents). - virtual void OnMouseExitedNear(const MouseEvent& event) {} - // Set the MouseHandler for a drag session. // // A drag session is a stream of mouse events starting @@ -1208,11 +1191,11 @@ class View : public AcceleratorTarget { // Recursively descends through all descendant views, // registering/unregistering all views that want visible bounds in root - // view notification and/or mouse near events. - static void RegisterChildrenForRootNotifications(RootView* root, View* view); - static void UnregisterChildrenForRootNotifications(RootView* root, - View* view); - + // view notification. + static void RegisterChildrenForVisibleBoundsNotification(RootView* root, + View* view); + static void UnregisterChildrenForVisibleBoundsNotification(RootView* root, + View* view); // Adds/removes view to the list of descendants that are notified any time // this views location and possibly size are changed. @@ -1312,9 +1295,6 @@ class View : public AcceleratorTarget { // right-to-left locales for this View. bool flip_canvas_on_paint_for_rtl_ui_; - // Insets passed to RegisterForMouseNearEvents. - scoped_ptr<gfx::Insets> near_insets_; - // The default value for how long to wait (in ms) before showing a menu // button on hover. This value is used if the OS doesn't supply one. static const int kShowFolderDropMenuDelay; diff --git a/views/widget/root_view.cc b/views/widget/root_view.cc index b9cf725..cfe7505 100644 --- a/views/widget/root_view.cc +++ b/views/widget/root_view.cc @@ -490,33 +490,6 @@ void RootView::OnMouseMoved(const MouseEvent& e) { mouse_move_handler_->OnMouseExited(exited_event); SetActiveCursor(NULL); } - - if (registered_near_views_.empty()) - return; - - std::set<View*> near_views; - GetViewsRegisteredForNearNotification(e, &near_views); - - MouseEvent exited_near_event(Event::ET_MOUSE_EXITED_NEAR, 0, 0, 0); - for (std::set<View*>::const_iterator i = near_views_.begin(); - i != near_views_.end(); ++i) { - if (near_views.find(*i) == near_views.end()) - (*i)->OnMouseExitedNear(exited_near_event); - } - - for (std::set<View*>::const_iterator i = near_views.begin(); - i != near_views.end(); ++i) { - if (near_views_.find(*i) == near_views_.end()) { - MouseEvent entered_event(Event::ET_MOUSE_ENTERED, - this, - *i, - e.location(), - 0); - (*i)->OnMouseNear(entered_event); - } - } - - near_views_.swap(near_views); } void RootView::ProcessOnMouseExited() { @@ -525,8 +498,6 @@ void RootView::ProcessOnMouseExited() { mouse_move_handler_->OnMouseExited(exited_event); mouse_move_handler_ = NULL; } - - SendMouseExitedNear(); } void RootView::SetMouseHandler(View *new_mh) { @@ -687,15 +658,6 @@ void RootView::UnregisterViewForVisibleBoundsNotification(View* view) { } } -void RootView::RegisterViewForNearNotification(View* view) { - registered_near_views_.insert(view); -} - -void RootView::UnregisterViewForNearNotification(View* view) { - registered_near_views_.erase(view); - near_views_.erase(view); -} - void RootView::SetMouseLocationAndFlags(const MouseEvent& e) { last_mouse_event_flags_ = e.GetFlags(); last_mouse_event_x_ = e.x(); @@ -752,38 +714,4 @@ void RootView::SetActiveCursor(gfx::NativeCursor cursor) { #endif } -void RootView::GetViewsRegisteredForNearNotification( - const MouseEvent& e, - std::set<View*>* near_views) { - const gfx::Point& location = e.location(); - for (std::set<View*>::const_iterator i = registered_near_views_.begin(); - i != registered_near_views_.end(); ++i) { - View* view = *i; - DCHECK(view->near_insets_.get()); - const gfx::Insets& insets = *view->near_insets_; - gfx::Point view_loc(view->x() - insets.left(), - view->y() - insets.top()); - View::ConvertPointToView(view->GetParent(), this, &view_loc); - if (location.x() >= view_loc.x() && - location.y() >= view_loc.y() && - location.x() < view_loc.x() + (view->width() + insets.width()) && - location.y() < view_loc.y() + (view->height() + insets.height())) { - near_views->insert(view); - } - } -} - -void RootView::SendMouseExitedNear() { - if (near_views_.empty()) - return; - - MouseEvent exited_near_event(Event::ET_MOUSE_EXITED_NEAR, 0, 0, 0); - for (std::set<View*>::const_iterator i = near_views_.begin(); - i != near_views_.end(); ++i) { - (*i)->OnMouseExitedNear(exited_near_event); - } - - near_views_.clear(); -} - } // namespace views diff --git a/views/widget/root_view.h b/views/widget/root_view.h index 280742f..4d40b21 100644 --- a/views/widget/root_view.h +++ b/views/widget/root_view.h @@ -5,7 +5,6 @@ #ifndef VIEWS_WIDGET_ROOT_VIEW_H_ #define VIEWS_WIDGET_ROOT_VIEW_H_ -#include <set> #include <string> #include "base/ref_counted.h" @@ -210,10 +209,6 @@ class RootView : public View, void RegisterViewForVisibleBoundsNotification(View* view); void UnregisterViewForVisibleBoundsNotification(View* view); - // Registers/unregisters the View for mouse near events. - void RegisterViewForNearNotification(View* view); - void UnregisterViewForNearNotification(View* view); - // Returns the next focusable view or view containing a FocusTraversable (NULL // if none was found), starting at the starting_view. // check_starting_view, can_go_up and can_go_down controls the traversal of @@ -255,15 +250,6 @@ class RootView : public View, // Sets the current cursor, or resets it to the last one if NULL is provided. void SetActiveCursor(gfx::NativeCursor cursor); - // Returns in |near_views| the set of views registered for mouse near events - // that overlap with the location of the specified event. - void GetViewsRegisteredForNearNotification(const MouseEvent& e, - std::set<View*>* near_views); - - // Sends OnMouseExitedNear to the set of views the mouse is near and empties - // the set. - void SendMouseExitedNear(); - // The view currently handing down - drag - up View* mouse_pressed_handler_; @@ -339,16 +325,6 @@ class RootView : public View, bool is_processing_paint_; #endif - // Set of views registered for mouse near events. - // NOTE: because views registered for near mouse events can overlap other - // views and extend outside the bounds of themselves and ancestors we store - // the registered views here and treat them separately. This is generally ok - // as there are a small set of views registered for near notification. - std::set<View*> registered_near_views_; - - // Set of views the mouse is currently near. - std::set<View*> near_views_; - DISALLOW_COPY_AND_ASSIGN(RootView); }; |