diff options
author | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-18 16:58:00 +0000 |
---|---|---|
committer | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-18 16:58:00 +0000 |
commit | 5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a (patch) | |
tree | 08d360eaddc677fe81611286541eb50b19708947 /chrome/browser/ui/panels | |
parent | 1b5ffa6a5a0e5c33a8e4b97d2bef5d00c8759956 (diff) | |
download | chromium_src-5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a.zip chromium_src-5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a.tar.gz chromium_src-5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a.tar.bz2 |
Some fixes to panel support on Windows:
1) Do not minimize the panel in title-only state regardless current mouse position when the panel is being dragged.
2) Do not hide controls when panel is minimized.
3) Do not use the bold font for focused panel.
4) Change bounds animation time to shorter value per discussion.
BUG=none
TEST=browser tests
Review URL: http://codereview.chromium.org/7677001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97321 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/panels')
-rw-r--r-- | chrome/browser/ui/panels/panel.cc | 5 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_browser_frame_view.cc | 45 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_browser_frame_view.h | 5 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_browser_view.cc | 11 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_browser_view_browsertest.cc | 23 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_manager.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_manager.h | 1 |
7 files changed, 54 insertions, 40 deletions
diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc index 450eee5..c4e13cd 100644 --- a/chrome/browser/ui/panels/panel.cc +++ b/chrome/browser/ui/panels/panel.cc @@ -62,6 +62,11 @@ bool Panel::ShouldBringUpTitlebar(int mouse_x, int mouse_y) const { if (expansion_state_ == Panel::EXPANDED) return false; + // If the panel is showing titlebar only, we want to keep it up when it is + // being dragged. + if (expansion_state_ == Panel::TITLE_ONLY && manager()->is_dragging_panel()) + return true; + // Let the native panel decide. return native_panel_->ShouldBringUpPanelTitlebar(mouse_x, mouse_y); } diff --git a/chrome/browser/ui/panels/panel_browser_frame_view.cc b/chrome/browser/ui/panels/panel_browser_frame_view.cc index 07a288c..88f1705 100644 --- a/chrome/browser/ui/panels/panel_browser_frame_view.cc +++ b/chrome/browser/ui/panels/panel_browser_frame_view.cc @@ -51,6 +51,9 @@ const int kIconSize = 16; // The spacing in pixels between buttons or the button and the adjacent control. const int kButtonSpacing = 6; +// The panel can be minimized to 3-pixel lines. +const int kMinimizedPanelHeight = 3; + // Colors used in painting the titlebar for drawing attention. const SkColor kBackgroundColorForAttention = 0xfffa983a; const SkColor kTitleTextColorForAttention = SK_ColorWHITE; @@ -100,8 +103,7 @@ ButtonResources settings_button_resources; ButtonResources close_button_resources; EdgeResources frame_edges; EdgeResources client_edges; -gfx::Font* active_font = NULL; -gfx::Font* inactive_font = NULL; +gfx::Font* title_font = NULL; SkBitmap* background_bitmap_for_attention = NULL; void LoadImageResources() { @@ -131,8 +133,7 @@ void EnsureResourcesInitialized() { resources_initialized = true; ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - active_font = new gfx::Font(rb.GetFont(ResourceBundle::BoldFont)); - inactive_font = new gfx::Font(rb.GetFont(ResourceBundle::BaseFont)); + title_font = new gfx::Font(rb.GetFont(ResourceBundle::BaseFont)); // Creates a bitmap of the specified color. background_bitmap_for_attention = new SkBitmap(); @@ -355,15 +356,6 @@ gfx::Size PanelBrowserFrameView::GetMinimumSize() { } void PanelBrowserFrameView::Layout() { - // If the panel height is smaller than the title-bar height, as in minimized - // case, we hide all controls. - bool is_control_visible = height() >= kTitlebarHeight; - close_button_->SetVisible(is_control_visible); - settings_button_->SetVisible( - is_control_visible && is_settings_button_visible_); - title_icon_->SetVisible(is_control_visible); - title_label_->SetVisible(is_control_visible); - // Layout the close button. gfx::Size close_button_size = close_button_->GetPreferredSize(); close_button_->SetBounds( @@ -561,6 +553,10 @@ int PanelBrowserFrameView::NonClientTopBorderHeight() const { return kFrameBorderThickness + kTitlebarHeight + kClientEdgeThickness; } +int PanelBrowserFrameView::MinimizedPanelHeight() { + return kMinimizedPanelHeight; +} + SkColor PanelBrowserFrameView::GetTitleColor(PaintState paint_state) const { switch (paint_state) { case PAINT_AS_INACTIVE: @@ -576,17 +572,8 @@ SkColor PanelBrowserFrameView::GetTitleColor(PaintState paint_state) const { } } -gfx::Font* PanelBrowserFrameView::GetTitleFont(PaintState paint_state) const { - switch (paint_state) { - case PAINT_AS_INACTIVE: - case PAINT_FOR_ATTENTION: - return inactive_font; - case PAINT_AS_ACTIVE: - return active_font; - default: - NOTREACHED(); - return NULL; - } +gfx::Font* PanelBrowserFrameView::GetTitleFont() const { + return title_font; } SkBitmap* PanelBrowserFrameView::GetFrameTheme(PaintState paint_state) const { @@ -612,7 +599,7 @@ void PanelBrowserFrameView::UpdateControlStyles(PaintState paint_state) { SkColor title_color = GetTitleColor(paint_state_); title_label_->SetColor(title_color); - title_label_->SetFont(*GetTitleFont(paint_state_)); + title_label_->SetFont(*GetTitleFont()); close_button_->SetBackground(title_color, close_button_resources.normal_image, @@ -625,6 +612,10 @@ void PanelBrowserFrameView::PaintFrameBorder(gfx::Canvas* canvas) { // Draw the theme frame. canvas->TileImageInt(*theme_frame, 0, 0, width(), height()); + // No need to paint other stuff if panel is minimized. + if (height() <= kMinimizedPanelHeight) + return; + // Draw the top border. canvas->DrawBitmapInt(*(frame_edges.top_left), 0, 0); canvas->TileImageInt( @@ -667,6 +658,10 @@ void PanelBrowserFrameView::PaintFrameBorder(gfx::Canvas* canvas) { void PanelBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) { int client_area_top = client_view_bounds_.y(); + // No need to paint other stuff if panel is minimized. + if (height() <= kMinimizedPanelHeight) + return; + // Draw the top edge. int top_edge_y = client_area_top - client_edges.top->height(); canvas->DrawBitmapInt( diff --git a/chrome/browser/ui/panels/panel_browser_frame_view.h b/chrome/browser/ui/panels/panel_browser_frame_view.h index 9035bb1..16b7efa 100644 --- a/chrome/browser/ui/panels/panel_browser_frame_view.h +++ b/chrome/browser/ui/panels/panel_browser_frame_view.h @@ -43,6 +43,9 @@ class PanelBrowserFrameView : public BrowserNonClientFrameView, // frame, any title area, and any connected client edge. int NonClientTopBorderHeight() const; + // Returns the height of the panel in minimized state. + static int MinimizedPanelHeight(); + protected: // Overridden from BrowserNonClientFrameView: virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const OVERRIDE; @@ -153,7 +156,7 @@ class PanelBrowserFrameView : public BrowserNonClientFrameView, // Retrieves the drawing metrics based on the current painting state. SkColor GetTitleColor(PaintState paint_state) const; - gfx::Font* GetTitleFont(PaintState paint_state) const; + gfx::Font* GetTitleFont() const; SkBitmap* GetFrameTheme(PaintState paint_state) const; // Make settings button visible if either of the conditions is met: diff --git a/chrome/browser/ui/panels/panel_browser_view.cc b/chrome/browser/ui/panels/panel_browser_view.cc index 05685d7..92e1246 100644 --- a/chrome/browser/ui/panels/panel_browser_view.cc +++ b/chrome/browser/ui/panels/panel_browser_view.cc @@ -17,10 +17,7 @@ namespace { // This value is experimental and subjective. -const int kSetBoundsAnimationMs = 200; - -// The panel can be fully minimized to 3-pixel lines. -const int kFullyMinimizedHeight = 3; +const int kSetBoundsAnimationMs = 180; // Delay before click-to-minimize is allowed after the attention has been // cleared. @@ -196,7 +193,7 @@ void PanelBrowserView::OnPanelExpansionStateChanged( height = GetFrameView()->NonClientTopBorderHeight(); break; case Panel::MINIMIZED: - height = kFullyMinimizedHeight; + height = PanelBrowserFrameView::MinimizedPanelHeight(); // Start the mouse watcher so that we can bring up the minimized panels. // TODO(jianli): Need to support mouse watching in ChromeOS. @@ -356,7 +353,9 @@ bool PanelBrowserView::OnTitlebarMouseReleased() { } bool PanelBrowserView::OnTitlebarMouseCaptureLost() { - return EndDragging(true); + if (mouse_dragging_) + return EndDragging(true); + return true; } bool PanelBrowserView::EndDragging(bool cancelled) { diff --git a/chrome/browser/ui/panels/panel_browser_view_browsertest.cc b/chrome/browser/ui/panels/panel_browser_view_browsertest.cc index 9ed5f22..9fe9db7 100644 --- a/chrome/browser/ui/panels/panel_browser_view_browsertest.cc +++ b/chrome/browser/ui/panels/panel_browser_view_browsertest.cc @@ -219,11 +219,6 @@ class PanelBrowserViewTest : public InProcessBrowserTest { EXPECT_TRUE(IsMouseWatcherStarted()); EXPECT_FALSE(panel1->IsActive()); WaitTillBoundsAnimationFinished(browser_view1); - // TODO(jianli): Enable the following checks after the patch to support - // minimizing window to 3-pixel line is landed. - //EXPECT_FALSE(frame_view1->close_button_->IsVisible()); - //EXPECT_FALSE(frame_view1->title_icon_->IsVisible()); - //EXPECT_FALSE(frame_view1->title_label_->IsVisible()); panel1->SetExpansionState(Panel::TITLE_ONLY); EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state()); @@ -288,6 +283,18 @@ class PanelBrowserViewTest : public InProcessBrowserTest { EXPECT_FALSE(panel_manager->ShouldBringUpTitlebarForAllMinimizedPanels( 0, 0)); + // Test that the panel in title-only state should not be minimized + // regardless of the current mouse position when the panel is being dragged. + panel1->SetExpansionState(Panel::TITLE_ONLY); + EXPECT_FALSE(panel_manager->ShouldBringUpTitlebarForAllMinimizedPanels( + 0, 0)); + browser_view1->OnTitlebarMousePressed(panel1->GetBounds().origin()); + browser_view1->OnTitlebarMouseDragged( + panel1->GetBounds().origin().Subtract(gfx::Point(5, 5))); + EXPECT_TRUE(panel_manager->ShouldBringUpTitlebarForAllMinimizedPanels( + 0, 0)); + browser_view1->OnTitlebarMouseReleased(); + panel1->Close(); EXPECT_TRUE(IsMouseWatcherStarted()); panel2->Close(); @@ -406,10 +413,10 @@ IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreatePanel) { // Validate that the controls should be updated when the activation state is // changed. frame_view->UpdateControlStyles(PanelBrowserFrameView::PAINT_AS_ACTIVE); - gfx::Font title_label_font1 = frame_view->title_label_->font(); + SkColor title_label_color1 = frame_view->title_label_->GetColor(); frame_view->UpdateControlStyles(PanelBrowserFrameView::PAINT_AS_INACTIVE); - gfx::Font title_label_font2 = frame_view->title_label_->font(); - EXPECT_NE(title_label_font1.GetStyle(), title_label_font2.GetStyle()); + SkColor title_label_color2 = frame_view->title_label_->GetColor(); + EXPECT_NE(title_label_color1, title_label_color2); browser_view->panel()->Close(); } diff --git a/chrome/browser/ui/panels/panel_manager.cc b/chrome/browser/ui/panels/panel_manager.cc index c871780..f19422f 100644 --- a/chrome/browser/ui/panels/panel_manager.cc +++ b/chrome/browser/ui/panels/panel_manager.cc @@ -356,3 +356,7 @@ void PanelManager::RemoveAll() { iter != panels_.rend(); ++iter) (*iter)->Close(); } + +bool PanelManager::is_dragging_panel() const { + return dragging_panel_index_ != kInvalidPanelIndex; +} diff --git a/chrome/browser/ui/panels/panel_manager.h b/chrome/browser/ui/panels/panel_manager.h index d950880..1ece64e 100644 --- a/chrome/browser/ui/panels/panel_manager.h +++ b/chrome/browser/ui/panels/panel_manager.h @@ -46,6 +46,7 @@ class PanelManager { void BringUpOrDownTitlebarForAllMinimizedPanels(bool bring_up); int num_panels() const { return panels_.size(); } + bool is_dragging_panel() const; private: friend class PanelBrowserTest; |