| 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_cocoa.h" | 5 #include "chrome/browser/ui/panels/panel_browser_window_cocoa.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
| 9 #include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h" | 9 #include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h" |
| 10 #import "chrome/browser/ui/cocoa/browser_window_utils.h" | 10 #import "chrome/browser/ui/cocoa/browser_window_utils.h" |
| 11 #include "chrome/browser/ui/panels/panel.h" | 11 #include "chrome/browser/ui/panels/panel.h" |
| 12 #include "chrome/browser/ui/panels/panel_manager.h" | 12 #include "chrome/browser/ui/panels/panel_manager.h" |
| 13 #include "chrome/browser/ui/panels/panel_mouse_watcher.h" |
| 13 #import "chrome/browser/ui/panels/panel_titlebar_view_cocoa.h" | 14 #import "chrome/browser/ui/panels/panel_titlebar_view_cocoa.h" |
| 14 #import "chrome/browser/ui/panels/panel_window_controller_cocoa.h" | 15 #import "chrome/browser/ui/panels/panel_window_controller_cocoa.h" |
| 15 #include "content/common/native_web_keyboard_event.h" | 16 #include "content/common/native_web_keyboard_event.h" |
| 16 | 17 |
| 17 namespace { | 18 namespace { |
| 18 | 19 |
| 19 // Use this instead of 0 for minimum size of a window when doing opening and | 20 // Use this instead of 0 for minimum size of a window when doing opening and |
| 20 // closing animations, since OSX window manager does not like 0-sized windows | 21 // closing animations, since OSX window manager does not like 0-sized windows |
| 21 // (according to avi@). | 22 // (according to avi@). |
| 22 const int kMinimumWindowSize = 1; | 23 const int kMinimumWindowSize = 1; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 51 : browser_(browser), | 52 : browser_(browser), |
| 52 panel_(panel), | 53 panel_(panel), |
| 53 bounds_(bounds), | 54 bounds_(bounds), |
| 54 restored_height_(bounds.height()), | 55 restored_height_(bounds.height()), |
| 55 is_shown_(false), | 56 is_shown_(false), |
| 56 has_find_bar_(false) { | 57 has_find_bar_(false) { |
| 57 controller_ = [[PanelWindowControllerCocoa alloc] initWithBrowserWindow:this]; | 58 controller_ = [[PanelWindowControllerCocoa alloc] initWithBrowserWindow:this]; |
| 58 } | 59 } |
| 59 | 60 |
| 60 PanelBrowserWindowCocoa::~PanelBrowserWindowCocoa() { | 61 PanelBrowserWindowCocoa::~PanelBrowserWindowCocoa() { |
| 62 PanelMouseWatcher* watcher = PanelMouseWatcher::GetInstance(); |
| 63 if (watcher->IsSubscribed(this)) |
| 64 watcher->RemoveSubscriber(this); |
| 61 } | 65 } |
| 62 | 66 |
| 63 bool PanelBrowserWindowCocoa::isClosed() { | 67 bool PanelBrowserWindowCocoa::isClosed() { |
| 64 return !controller_; | 68 return !controller_; |
| 65 } | 69 } |
| 66 | 70 |
| 67 void PanelBrowserWindowCocoa::ShowPanel() { | 71 void PanelBrowserWindowCocoa::ShowPanel() { |
| 68 if (isClosed()) | 72 if (isClosed()) |
| 69 return; | 73 return; |
| 70 | 74 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 // Store the expanded height for subsequent minimize/restore operations. | 106 // Store the expanded height for subsequent minimize/restore operations. |
| 103 if (panel_->expansion_state() == Panel::EXPANDED) | 107 if (panel_->expansion_state() == Panel::EXPANDED) |
| 104 restored_height_ = NSHeight(frame); | 108 restored_height_ = NSHeight(frame); |
| 105 } | 109 } |
| 106 | 110 |
| 107 void PanelBrowserWindowCocoa::OnPanelExpansionStateChanged( | 111 void PanelBrowserWindowCocoa::OnPanelExpansionStateChanged( |
| 108 Panel::ExpansionState expansion_state) { | 112 Panel::ExpansionState expansion_state) { |
| 109 int height; // New height of the Panel in screen coordinates. | 113 int height; // New height of the Panel in screen coordinates. |
| 110 switch (expansion_state) { | 114 switch (expansion_state) { |
| 111 case Panel::EXPANDED: | 115 case Panel::EXPANDED: |
| 116 PanelMouseWatcher::GetInstance()->RemoveSubscriber(this); |
| 112 height = restored_height_; | 117 height = restored_height_; |
| 113 break; | 118 break; |
| 114 case Panel::TITLE_ONLY: | 119 case Panel::TITLE_ONLY: |
| 115 height = [controller_ titlebarHeightInScreeenCoordinates]; | 120 height = [controller_ titlebarHeightInScreeenCoordinates]; |
| 116 break; | 121 break; |
| 117 case Panel::MINIMIZED: | 122 case Panel::MINIMIZED: |
| 118 height = 3; // TODO(dimich) merge with GTK patch which defines it better. | 123 PanelMouseWatcher::GetInstance()->AddSubscriber(this); |
| 124 height = PanelManager::minimized_panel_height(); |
| 119 break; | 125 break; |
| 120 default: | 126 default: |
| 121 NOTREACHED(); | 127 NOTREACHED(); |
| 122 height = restored_height_; | 128 height = restored_height_; |
| 123 break; | 129 break; |
| 124 } | 130 } |
| 125 | 131 |
| 126 int bottom = panel_->manager()->GetBottomPositionForExpansionState( | 132 int bottom = panel_->manager()->GetBottomPositionForExpansionState( |
| 127 expansion_state); | 133 expansion_state); |
| 128 // This math is in platform-independent screen coordinates (inverted), | 134 // This math is in platform-independent screen coordinates (inverted), |
| 129 // because it's what SetPanelBounds expects. | 135 // because it's what SetPanelBounds expects. |
| 130 gfx::Rect bounds = bounds_; | 136 gfx::Rect bounds = bounds_; |
| 131 bounds.set_y(bottom - height); | 137 bounds.set_y(bottom - height); |
| 132 bounds.set_height(height); | 138 bounds.set_height(height); |
| 133 SetPanelBounds(bounds); | 139 SetPanelBounds(bounds); |
| 134 } | 140 } |
| 135 | 141 |
| 142 // Coordinates are in gfx coordinate system (screen, with 0,0 at the top left). |
| 136 bool PanelBrowserWindowCocoa::ShouldBringUpPanelTitlebar(int mouse_x, | 143 bool PanelBrowserWindowCocoa::ShouldBringUpPanelTitlebar(int mouse_x, |
| 137 int mouse_y) const { | 144 int mouse_y) const { |
| 138 NOTIMPLEMENTED(); | 145 return bounds_.x() <= mouse_x && mouse_x <= bounds_.right() && |
| 139 return false; | 146 mouse_y >= bounds_.y(); |
| 140 } | 147 } |
| 141 | 148 |
| 142 void PanelBrowserWindowCocoa::ClosePanel() { | 149 void PanelBrowserWindowCocoa::ClosePanel() { |
| 143 if (isClosed()) | 150 if (isClosed()) |
| 144 return; | 151 return; |
| 145 | 152 |
| 146 NSWindow* window = [controller_ window]; | 153 NSWindow* window = [controller_ window]; |
| 147 [window performClose:controller_]; | 154 [window performClose:controller_]; |
| 148 } | 155 } |
| 149 | 156 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 PanelBrowserWindowCocoa* native_panel_window_; | 300 PanelBrowserWindowCocoa* native_panel_window_; |
| 294 }; | 301 }; |
| 295 | 302 |
| 296 // static | 303 // static |
| 297 NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) { | 304 NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) { |
| 298 return new NativePanelTestingCocoa(native_panel); | 305 return new NativePanelTestingCocoa(native_panel); |
| 299 } | 306 } |
| 300 | 307 |
| 301 // static | 308 // static |
| 302 PanelMouseWatcher* NativePanelTesting::GetPanelMouseWatcherInstance() { | 309 PanelMouseWatcher* NativePanelTesting::GetPanelMouseWatcherInstance() { |
| 303 return NULL; | 310 return PanelMouseWatcher::GetInstance(); |
| 304 } | 311 } |
| 305 | 312 |
| 306 NativePanelTestingCocoa::NativePanelTestingCocoa(NativePanel* native_panel) | 313 NativePanelTestingCocoa::NativePanelTestingCocoa(NativePanel* native_panel) |
| 307 : native_panel_window_(static_cast<PanelBrowserWindowCocoa*>(native_panel)) { | 314 : native_panel_window_(static_cast<PanelBrowserWindowCocoa*>(native_panel)) { |
| 308 } | 315 } |
| 309 | 316 |
| 310 PanelTitlebarViewCocoa* NativePanelTestingCocoa::titlebar() { | 317 PanelTitlebarViewCocoa* NativePanelTestingCocoa::titlebar() { |
| 311 return [native_panel_window_->controller_ titlebarView]; | 318 return [native_panel_window_->controller_ titlebarView]; |
| 312 } | 319 } |
| 313 | 320 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 325 } | 332 } |
| 326 | 333 |
| 327 void NativePanelTestingCocoa::CancelDragTitlebar() { | 334 void NativePanelTestingCocoa::CancelDragTitlebar() { |
| 328 [titlebar() cancelDragTitlebar]; | 335 [titlebar() cancelDragTitlebar]; |
| 329 } | 336 } |
| 330 | 337 |
| 331 void NativePanelTestingCocoa::FinishDragTitlebar() { | 338 void NativePanelTestingCocoa::FinishDragTitlebar() { |
| 332 [titlebar() finishDragTitlebar]; | 339 [titlebar() finishDragTitlebar]; |
| 333 } | 340 } |
| 334 | 341 |
| 342 // TODO(dimich) this method is platform-independent. Reuse it. |
| 335 void NativePanelTestingCocoa::SetMousePositionForMinimizeRestore( | 343 void NativePanelTestingCocoa::SetMousePositionForMinimizeRestore( |
| 336 const gfx::Point& hover_point) { | 344 const gfx::Point& hover_point) { |
| 337 NOTIMPLEMENTED(); | 345 PanelMouseWatcher::GetInstance()->HandleMouseMovement(hover_point); |
| 346 MessageLoopForUI::current()->RunAllPending(); |
| 338 } | 347 } |
| 339 | 348 |
| 340 int NativePanelTestingCocoa::TitleOnlyHeight() const { | 349 int NativePanelTestingCocoa::TitleOnlyHeight() const { |
| 341 NOTIMPLEMENTED(); | 350 return [native_panel_window_->controller_ titlebarHeightInScreeenCoordinates]; |
| 342 return -1; | |
| 343 } | 351 } |
| OLD | NEW |