Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/panels/panel_browser_view.h" | 5 #include "chrome/browser/ui/panels/panel_browser_view.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/ui/panels/panel.h" | 8 #include "chrome/browser/ui/panels/panel.h" |
| 9 #include "chrome/browser/ui/panels/panel_browser_frame_view.h" | 9 #include "chrome/browser/ui/panels/panel_browser_frame_view.h" |
| 10 #include "chrome/browser/ui/panels/panel_manager.h" | 10 #include "chrome/browser/ui/panels/panel_manager.h" |
| 11 #include "chrome/browser/ui/views/frame/browser_frame.h" | 11 #include "chrome/browser/ui/views/frame/browser_frame.h" |
| 12 #include "grit/chromium_strings.h" | 12 #include "grit/chromium_strings.h" |
| 13 #include "ui/base/animation/slide_animation.h" | 13 #include "ui/base/animation/slide_animation.h" |
| 14 #include "ui/base/l10n/l10n_util.h" | 14 #include "ui/base/l10n/l10n_util.h" |
| 15 #include "views/widget/widget.h" | 15 #include "views/widget/widget.h" |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 // This value is experimental and subjective. | 18 // This value is experimental and subjective. |
| 19 const int kSetBoundsAnimationMs = 200; | 19 const int kSetBoundsAnimationMs = 200; |
| 20 | |
| 21 // The panel can be fully minimized to 3-pixel lines. | |
| 22 const int kFullyMinimizedHeight = 3; | |
| 20 } | 23 } |
| 21 | 24 |
| 22 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, | 25 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, |
| 23 const gfx::Rect& bounds) { | 26 const gfx::Rect& bounds) { |
| 24 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds); | 27 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds); |
| 25 (new BrowserFrame(view))->InitBrowserFrame(); | 28 BrowserFrame* frame = new BrowserFrame(view); |
| 29 frame->set_frame_type(views::Widget::FRAME_TYPE_FORCE_CUSTOM); | |
|
jennb
2011/06/27 23:18:02
Curious - why did set_frame_type have to be moved
jianli
2011/06/29 01:28:12
Not needed now. Reverted.
| |
| 30 frame->InitBrowserFrame(); | |
| 26 return view; | 31 return view; |
| 27 } | 32 } |
| 28 | 33 |
| 29 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, | 34 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, |
| 30 const gfx::Rect& bounds) | 35 const gfx::Rect& bounds) |
| 31 : BrowserView(browser), | 36 : BrowserView(browser), |
| 32 panel_(panel), | 37 panel_(panel), |
| 33 bounds_(bounds), | 38 bounds_(bounds), |
| 34 original_height_(bounds.height()), | 39 original_height_(bounds.height()), |
| 35 minimized_(false), | 40 expand_state_(FULLY_RESTORED), |
| 36 closed_(false), | 41 closed_(false), |
| 37 focused_(false), | 42 focused_(false), |
| 38 mouse_pressed_(false), | 43 mouse_pressed_(false), |
| 39 mouse_dragging_(false) { | 44 mouse_dragging_(false) { |
| 40 } | 45 } |
| 41 | 46 |
| 42 PanelBrowserView::~PanelBrowserView() { | 47 PanelBrowserView::~PanelBrowserView() { |
| 43 } | 48 } |
| 44 | 49 |
| 45 void PanelBrowserView::Init() { | 50 void PanelBrowserView::Init() { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 146 | 151 |
| 147 gfx::Rect PanelBrowserView::GetPanelBounds() const { | 152 gfx::Rect PanelBrowserView::GetPanelBounds() const { |
| 148 return bounds_; | 153 return bounds_; |
| 149 } | 154 } |
| 150 | 155 |
| 151 void PanelBrowserView::SetPanelBounds(const gfx::Rect& bounds) { | 156 void PanelBrowserView::SetPanelBounds(const gfx::Rect& bounds) { |
| 152 SetBounds(bounds); | 157 SetBounds(bounds); |
| 153 } | 158 } |
| 154 | 159 |
| 155 void PanelBrowserView::MinimizePanel() { | 160 void PanelBrowserView::MinimizePanel() { |
| 156 if (minimized_) | 161 if (expand_state_ == FULLY_MINIMIZED) |
| 157 return; | 162 return; |
| 163 expand_state_ = FULLY_MINIMIZED; | |
| 158 | 164 |
| 159 minimized_ = true; | 165 AdjustHeight(kFullyMinimizedHeight); |
| 160 gfx::Rect bounds = GetPanelBounds(); | |
| 161 original_height_ = bounds.height(); | |
| 162 bounds.set_height(GetFrameView()->NonClientTopBorderHeight()); | |
| 163 bounds.set_y(bounds.y() + original_height_ - bounds.height()); | |
| 164 SetPanelBounds(bounds); | |
| 165 } | 166 } |
| 166 | 167 |
| 167 void PanelBrowserView::RestorePanel() { | 168 void PanelBrowserView::RestorePanel(bool titlebar_only) { |
| 168 if (!minimized_) | 169 if (titlebar_only) { |
| 169 return; | 170 // It is not allowed to "restore" from full height to titlebar height. |
| 170 | 171 if (expand_state_ != FULLY_MINIMIZED) |
|
jennb
2011/06/27 23:18:02
Should this be a DCHECK instead?
jianli
2011/06/29 01:28:12
Not needed due to logic change.
| |
| 171 minimized_ = false; | 172 return; |
| 172 gfx::Rect bounds = GetPanelBounds(); | 173 expand_state_ = TITLEBAR_RESTORED; |
| 173 bounds.set_y(bounds.y() - original_height_ + bounds.height()); | 174 AdjustHeight(GetFrameView()->NonClientTopBorderHeight()); |
| 174 bounds.set_height(original_height_); | 175 } else { |
| 175 SetPanelBounds(bounds); | 176 if (expand_state_ == FULLY_RESTORED) |
| 177 return; | |
| 178 expand_state_ = FULLY_RESTORED; | |
| 179 AdjustHeight(original_height_); | |
| 180 } | |
| 176 } | 181 } |
| 177 | 182 |
| 178 void PanelBrowserView::ClosePanel() { | 183 void PanelBrowserView::ClosePanel() { |
| 179 Close(); | 184 Close(); |
| 180 } | 185 } |
| 181 | 186 |
| 182 void PanelBrowserView::ActivatePanel() { | 187 void PanelBrowserView::ActivatePanel() { |
| 183 Activate(); | 188 Activate(); |
| 184 } | 189 } |
| 185 | 190 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 mouse_pressed_ = false; | 267 mouse_pressed_ = false; |
| 263 | 268 |
| 264 if (!mouse_dragging_) | 269 if (!mouse_dragging_) |
| 265 cancelled = true; | 270 cancelled = true; |
| 266 mouse_dragging_ = false; | 271 mouse_dragging_ = false; |
| 267 panel_->manager()->EndDragging(cancelled); | 272 panel_->manager()->EndDragging(cancelled); |
| 268 return true; | 273 return true; |
| 269 } | 274 } |
| 270 | 275 |
| 271 void PanelBrowserView::MinimizeOrRestore() { | 276 void PanelBrowserView::MinimizeOrRestore() { |
| 272 if (minimized_) | 277 if (expand_state_ != FULLY_RESTORED) |
| 273 panel_->Restore(); | 278 panel_->manager()->Restore(panel_.get(), false); |
| 274 else | 279 else |
| 275 panel_->Minimize(); | 280 panel_->manager()->Minimize(panel_.get()); |
| 276 } | 281 } |
| 282 | |
| 283 void PanelBrowserView::AdjustHeight(int height) { | |
| 284 gfx::Rect bounds = bounds_; | |
| 285 bounds.set_y(bounds.y() + bounds.height() - height); | |
| 286 bounds.set_height(height); | |
| 287 SetBounds(bounds); | |
| 288 } | |
| OLD | NEW |