| 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_window_gtk.h" | 5 #include "chrome/browser/ui/panels/panel_browser_window_gtk.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "chrome/browser/ui/browser_list.h" | 8 #include "chrome/browser/ui/browser_list.h" |
| 9 #include "chrome/browser/ui/panels/panel.h" | 9 #include "chrome/browser/ui/panels/panel.h" |
| 10 #include "chrome/browser/ui/panels/panel_manager.h" | 10 #include "chrome/browser/ui/panels/panel_manager.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 BrowserWindowGtk::OnSizeChanged(width, height); | 140 BrowserWindowGtk::OnSizeChanged(width, height); |
| 141 | 141 |
| 142 if (window_size_known_) | 142 if (window_size_known_) |
| 143 return; | 143 return; |
| 144 | 144 |
| 145 window_size_known_ = true; | 145 window_size_known_ = true; |
| 146 int top = bounds_.bottom() - height; | 146 int top = bounds_.bottom() - height; |
| 147 int left = bounds_.right() - width; | 147 int left = bounds_.right() - width; |
| 148 | 148 |
| 149 gtk_window_move(window_, left, top); | 149 gtk_window_move(window_, left, top); |
| 150 StartBoundsAnimation(bounds_, gfx::Rect(left, top, width, height)); | 150 StartBoundsAnimation(gfx::Rect(left, top, width, height), bounds_); |
| 151 panel_->OnWindowSizeAvailable(); | 151 panel_->OnWindowSizeAvailable(); |
| 152 | 152 |
| 153 content::NotificationService::current()->Notify( | 153 content::NotificationService::current()->Notify( |
| 154 chrome::NOTIFICATION_PANEL_WINDOW_SIZE_KNOWN, | 154 chrome::NOTIFICATION_PANEL_WINDOW_SIZE_KNOWN, |
| 155 content::Source<Panel>(panel_.get()), | 155 content::Source<Panel>(panel_.get()), |
| 156 content::NotificationService::NoDetails()); | 156 content::NotificationService::NoDetails()); |
| 157 } | 157 } |
| 158 | 158 |
| 159 bool PanelBrowserWindowGtk::UseCustomFrame() { | 159 bool PanelBrowserWindowGtk::UseCustomFrame() { |
| 160 // We always use custom frame for panels. | 160 // We always use custom frame for panels. |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 return gfx::Size(window_size.width() - frame.width(), | 415 return gfx::Size(window_size.width() - frame.width(), |
| 416 window_size.height() - frame.height()); | 416 window_size.height() - frame.height()); |
| 417 } | 417 } |
| 418 | 418 |
| 419 int PanelBrowserWindowGtk::TitleOnlyHeight() const { | 419 int PanelBrowserWindowGtk::TitleOnlyHeight() const { |
| 420 return titlebar_widget()->allocation.height; | 420 return titlebar_widget()->allocation.height; |
| 421 } | 421 } |
| 422 | 422 |
| 423 void PanelBrowserWindowGtk::StartBoundsAnimation( | 423 void PanelBrowserWindowGtk::StartBoundsAnimation( |
| 424 const gfx::Rect& from_bounds, const gfx::Rect& to_bounds) { | 424 const gfx::Rect& from_bounds, const gfx::Rect& to_bounds) { |
| 425 animation_start_bounds_ = from_bounds; | 425 if (bounds_animator_.get() && bounds_animator_->is_animating()) { |
| 426 animation_start_bounds_ = last_animation_progressed_bounds_; |
| 427 } else { |
| 428 animation_start_bounds_ = from_bounds; |
| 429 } |
| 426 | 430 |
| 427 bounds_animator_.reset(new PanelSlideAnimation( | 431 bounds_animator_.reset(new PanelSlideAnimation( |
| 428 this, panel_.get(), from_bounds, to_bounds)); | 432 this, panel_.get(), from_bounds, to_bounds)); |
| 433 |
| 429 bounds_animator_->Show(); | 434 bounds_animator_->Show(); |
| 435 last_animation_progressed_bounds_ = animation_start_bounds_; |
| 430 } | 436 } |
| 431 | 437 |
| 432 bool PanelBrowserWindowGtk::IsAnimatingBounds() const { | 438 bool PanelBrowserWindowGtk::IsAnimatingBounds() const { |
| 433 return bounds_animator_.get() && bounds_animator_->is_animating(); | 439 return bounds_animator_.get() && bounds_animator_->is_animating(); |
| 434 } | 440 } |
| 435 | 441 |
| 436 void PanelBrowserWindowGtk::WillProcessEvent(GdkEvent* event) { | 442 void PanelBrowserWindowGtk::WillProcessEvent(GdkEvent* event) { |
| 437 // Nothing to do. | 443 // Nothing to do. |
| 438 } | 444 } |
| 439 | 445 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 // - Say you minimize the window to 100x3 and move it to 900,997 to keep it | 505 // - Say you minimize the window to 100x3 and move it to 900,997 to keep it |
| 500 // anchored to the bottom. | 506 // anchored to the bottom. |
| 501 // - resize is an async operation and the window manager will decide that | 507 // - resize is an async operation and the window manager will decide that |
| 502 // the move will take the window off screen and it won't honor the | 508 // the move will take the window off screen and it won't honor the |
| 503 // request. | 509 // request. |
| 504 // - When resize finally happens, you'll have a 100x3 window a x,y=900,900. | 510 // - When resize finally happens, you'll have a 100x3 window a x,y=900,900. |
| 505 bool move = (animation_start_bounds_.bottom() != bounds_.bottom()) || | 511 bool move = (animation_start_bounds_.bottom() != bounds_.bottom()) || |
| 506 (animation_start_bounds_.right() != bounds_.right()); | 512 (animation_start_bounds_.right() != bounds_.right()); |
| 507 if (move) | 513 if (move) |
| 508 gtk_window_move(window_, new_bounds.x(), new_bounds.y()); | 514 gtk_window_move(window_, new_bounds.x(), new_bounds.y()); |
| 515 |
| 516 last_animation_progressed_bounds_ = new_bounds; |
| 509 } | 517 } |
| 510 | 518 |
| 511 void PanelBrowserWindowGtk::CreateDragWidget() { | 519 void PanelBrowserWindowGtk::CreateDragWidget() { |
| 512 DCHECK(!drag_widget_); | 520 DCHECK(!drag_widget_); |
| 513 drag_widget_ = gtk_invisible_new(); | 521 drag_widget_ = gtk_invisible_new(); |
| 514 g_signal_connect_after(drag_widget_, "drag-begin", | 522 g_signal_connect_after(drag_widget_, "drag-begin", |
| 515 G_CALLBACK(OnDragBeginThunk), this); | 523 G_CALLBACK(OnDragBeginThunk), this); |
| 516 g_signal_connect(drag_widget_, "drag-failed", | 524 g_signal_connect(drag_widget_, "drag-failed", |
| 517 G_CALLBACK(OnDragFailedThunk), this); | 525 G_CALLBACK(OnDragFailedThunk), this); |
| 518 g_signal_connect(drag_widget_, "button-release-event", | 526 g_signal_connect(drag_widget_, "button-release-event", |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 } | 769 } |
| 762 } | 770 } |
| 763 | 771 |
| 764 bool NativePanelTestingGtk::IsWindowSizeKnown() const { | 772 bool NativePanelTestingGtk::IsWindowSizeKnown() const { |
| 765 return panel_browser_window_gtk_->window_size_known_; | 773 return panel_browser_window_gtk_->window_size_known_; |
| 766 } | 774 } |
| 767 | 775 |
| 768 bool NativePanelTestingGtk::IsAnimatingBounds() const { | 776 bool NativePanelTestingGtk::IsAnimatingBounds() const { |
| 769 return panel_browser_window_gtk_->IsAnimatingBounds(); | 777 return panel_browser_window_gtk_->IsAnimatingBounds(); |
| 770 } | 778 } |
| OLD | NEW |