diff options
Diffstat (limited to 'chrome/browser/chromeos/compact_location_bar_host.cc')
-rw-r--r-- | chrome/browser/chromeos/compact_location_bar_host.cc | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/chrome/browser/chromeos/compact_location_bar_host.cc b/chrome/browser/chromeos/compact_location_bar_host.cc deleted file mode 100644 index 7ed66e3..0000000 --- a/chrome/browser/chromeos/compact_location_bar_host.cc +++ /dev/null @@ -1,293 +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 "chrome/browser/chromeos/compact_location_bar_host.h" - -#include <algorithm> - -#include "app/slide_animation.h" -#include "base/i18n/rtl.h" -#include "base/keyboard_codes.h" -#include "chrome/browser/browser.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/compact_location_bar_view.h" -#include "chrome/browser/find_bar_controller.h" -#include "chrome/browser/renderer_host/render_view_host.h" -#include "chrome/browser/tab_contents/tab_contents.h" -#include "chrome/browser/tab_contents/tab_contents_view.h" -#include "chrome/browser/view_ids.h" -#include "chrome/browser/views/bookmark_bar_view.h" -#include "chrome/browser/views/find_bar_view.h" -#include "chrome/browser/views/frame/browser_view.h" -#include "chrome/browser/views/tabs/base_tab_strip.h" -#include "views/controls/scrollbar/native_scroll_bar.h" -#include "views/focus/external_focus_tracker.h" -#include "views/focus/view_storage.h" -#include "views/widget/root_view.h" -#include "views/widget/widget.h" - -namespace chromeos { -const int kDefaultLocationBarWidth = 300; -const int kHideTimeoutInSeconds = 2; - -// An mouse event observer to detect a mouse click on -// BrowserView's content area and hide the location bar. -class MouseObserver : public MessageLoopForUI::Observer { - public: - MouseObserver(CompactLocationBarHost* host, ::BrowserView* view) - : host_(host), - browser_view_(view) { - top_level_window_ = browser_view_->GetWidget()->GetNativeView()->window; - } - - // MessageLoopForUI::Observer overrides. - virtual void WillProcessEvent(GdkEvent* event) {} - virtual void DidProcessEvent(GdkEvent* event) { - // Hide the location bar iff the mouse is pressed on the - // BrowserView's content area. - if (event->type == GDK_BUTTON_PRESS && - GDK_IS_WINDOW(event->any.window) && - top_level_window_ == gdk_window_get_toplevel(event->any.window) && - HitContentArea(event)) { - host_->Hide(true); - } - } - - private: - // Tests if the event occured on the content area, using - // root window's coordinates. - bool HitContentArea(GdkEvent* event) { - gfx::Point p(event->button.x_root, event->button.y_root); - // First, exclude the location bar as it's shown on top of - // content area. - if (HitOnScreen(host_->GetClbView(), p)) { - return false; - } - // Treat the bookmark as a content area when it in detached mode. - if (browser_view_->GetBookmarkBarView()->IsDetached() && - browser_view_->IsBookmarkBarVisible() && - HitOnScreen(browser_view_->GetBookmarkBarView(), p)) { - return true; - } - if (HitOnScreen(browser_view_->GetContentsView(), - p)) { - return true; - } - return false; - } - - // Tests if |p| in the root window's coordinate is within the |view|'s bound. - bool HitOnScreen(const views::View* view, const gfx::Point& p) { - gfx::Point origin(0, 0); - views::View::ConvertPointToScreen(view, &origin); - gfx::Rect new_bounds(origin, view->size()); - return new_bounds.Contains(p); - } - - CompactLocationBarHost* host_; - ::BrowserView* browser_view_; - GdkWindow* top_level_window_; - - DISALLOW_COPY_AND_ASSIGN(MouseObserver); -}; - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost, public: - -CompactLocationBarHost::CompactLocationBarHost(::BrowserView* browser_view) - : DropdownBarHost(browser_view), - current_tab_model_index_(-1) { - auto_hide_timer_.reset(new base::OneShotTimer<CompactLocationBarHost>()); - mouse_observer_.reset(new MouseObserver(this, browser_view)); - Init(new CompactLocationBarView(this)); -} - -CompactLocationBarHost::~CompactLocationBarHost() { - browser_view()->browser()->tabstrip_model()->RemoveObserver(this); - MessageLoopForUI::current()->RemoveObserver(mouse_observer_.get()); -} - -void CompactLocationBarHost::StartAutoHideTimer() { - if (!host()->IsVisible()) - return; - if (auto_hide_timer_->IsRunning()) { - // Restart the timer. - auto_hide_timer_->Reset(); - } else { - auto_hide_timer_->Start(base::TimeDelta::FromSeconds(kHideTimeoutInSeconds), - this, &CompactLocationBarHost::HideCallback); - } -} - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost, views::AcceleratorTarget implementation: - -bool CompactLocationBarHost::AcceleratorPressed( - const views::Accelerator& accelerator) { - Hide(true); - return false; -} - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost, views::DropdownBarHost implementation: - -gfx::Rect CompactLocationBarHost::GetDialogPosition( - gfx::Rect avoid_overlapping_rect) { - DCHECK_GE(current_tab_model_index_, 0); - gfx::Rect new_pos = GetBoundsUnderTab(current_tab_model_index_); - - if (animation_offset() > 0) - new_pos.Offset(0, std::min(0, -animation_offset())); - return new_pos; -} - -void CompactLocationBarHost::SetDialogPosition(const gfx::Rect& new_pos, - bool no_redraw) { - if (new_pos.IsEmpty()) - return; - - // Make sure the window edges are clipped to just the visible region. We need - // to do this before changing position, so that when we animate the closure - // of it it doesn't look like the window crumbles into the toolbar. - UpdateWindowEdges(new_pos); - - // TODO(oshima): Animate the window clipping like find-bar. - SetWidgetPositionNative(new_pos, no_redraw); -} - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost, views::TabStripModelObserver implementation: - -void CompactLocationBarHost::TabInsertedAt(TabContents* contents, - int index, - bool foreground) { - Hide(false); - // TODO(oshima): Consult UX team if we should show the location bar. -} - -void CompactLocationBarHost::TabClosingAt(TabContents* contents, int index) { - if (IsCurrentTabIndex(index)) { - Hide(false); - } else { - // TODO(oshima): We need to relocate the compact navigation bar here, - // but the tabstrip does not have the ideal location yet - // because the tabs are animating at this time. Need to investigate - // the best way to handle this case. - } -} - -void CompactLocationBarHost::TabSelectedAt(TabContents* old_contents, - TabContents* new_contents, - int index, - bool user_gesture) { - if (user_gesture) { - // Show the compact location bar only when a user selected the tab. - Update(index, false, true); - } else { - Hide(false); - } -} - -void CompactLocationBarHost::TabMoved(TabContents* contents, - int from_index, - int to_index) { - Update(to_index, false, true); -} - -void CompactLocationBarHost::TabChangedAt(TabContents* contents, int index, - TabChangeType change_type) { - if (IsCurrentTabIndex(index) && IsVisible()) { - GetClbView()->Update(contents); - } -} - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost public: - -gfx::Rect CompactLocationBarHost::GetBoundsUnderTab(int model_index) const { - // Get the position of the left-bottom corner of the tab on the - // widget. The widget of the tab is same as the widget of the - // BrowserView which is the parent of the host. - BaseTabStrip* tabstrip = browser_view()->tabstrip(); - gfx::Rect bounds = - tabstrip->ideal_bounds(tabstrip->ModelIndexToTabIndex(model_index)); - gfx::Rect navbar_bounds(gfx::Point(bounds.x(), bounds.height()), - view()->GetPreferredSize()); - - // For RTL case x() defines tab right corner. - if (base::i18n::IsRTL()) - navbar_bounds.set_x(navbar_bounds.x() + bounds.width()); - navbar_bounds.set_x(navbar_bounds.x() + tabstrip->x()); - navbar_bounds.set_y(navbar_bounds.y() + tabstrip->y()); - - // The compact location bar must be smaller than browser_width. - int width = std::min(browser_view()->width(), - view()->GetPreferredSize().width()); - - // Try to center around the tab. - navbar_bounds.set_x(browser_view()->MirroredXCoordinateInsideView( - navbar_bounds.x()) - ((width - bounds.width()) / 2)); - - if (browser_view()->IsBookmarkBarVisible() && - !browser_view()->GetBookmarkBarView()->IsDetached()) { - // Adjust the location to create the illusion that the compact location bar - // is a part of boolmark bar. - // TODO(oshima): compact location bar does not have right background - // image yet, so -2 is tentative. Fix this once UI is settled. - navbar_bounds.set_y( - browser_view()->GetBookmarkBarView()->bounds().bottom() - 2); - } - return navbar_bounds.AdjustToFit(browser_view()->bounds()); -} - -void CompactLocationBarHost::Update(int model_index, - bool animate_x, - bool select_all) { - DCHECK_GE(model_index, 0); - if (IsCurrentTabIndex(model_index) && IsVisible()) { - return; - } - current_tab_model_index_ = model_index; - // Don't aminate if the bar is already shown. - bool animate = !animation()->IsShowing(); - Hide(false); - GetClbView()->Update(browser_view()->browser()->GetSelectedTabContents()); - GetClbView()->SetFocusAndSelection(select_all); - Show(animate && animate_x); -} - -void CompactLocationBarHost::CancelAutoHideTimer() { - auto_hide_timer_->Stop(); -} - -void CompactLocationBarHost::SetEnabled(bool enabled) { - if (enabled) { - browser_view()->browser()->tabstrip_model()->AddObserver(this); - } else { - browser_view()->browser()->tabstrip_model()->RemoveObserver(this); - } -} - -void CompactLocationBarHost::Show(bool a) { - MessageLoopForUI::current()->AddObserver(mouse_observer_.get()); - DropdownBarHost::Show(a); -} - -void CompactLocationBarHost::Hide(bool a) { - MessageLoopForUI::current()->RemoveObserver(mouse_observer_.get()); - DropdownBarHost::Hide(a); -} - -//////////////////////////////////////////////////////////////////////////////// -// CompactLocationBarHost private: - -CompactLocationBarView* CompactLocationBarHost::GetClbView() { - return static_cast<CompactLocationBarView*>(view()); -} - -bool CompactLocationBarHost::IsCurrentTabIndex(int index) { - return current_tab_model_index_ == index; -} - -} // namespace chromeos |