Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_browser_view.cc |
| diff --git a/chrome/browser/ui/panels/panel_browser_view.cc b/chrome/browser/ui/panels/panel_browser_view.cc |
| index fe84d774019a734c6e51613234fe1040956c6771..65271a2e55514634cb5b35130e81c5faf868d6b0 100644 |
| --- a/chrome/browser/ui/panels/panel_browser_view.cc |
| +++ b/chrome/browser/ui/panels/panel_browser_view.cc |
| @@ -381,8 +381,12 @@ PanelBrowserFrameView* PanelBrowserView::GetFrameView() const { |
| } |
| bool PanelBrowserView::OnTitlebarMousePressed(const gfx::Point& location) { |
| + // |location| is in the view's coordinate system. Convert it to the screen |
| + // coordinate system. |
| + mouse_location_ = location; |
| + views::View::ConvertPointToScreen(this, &mouse_location_); |
| + |
| mouse_pressed_ = true; |
| - mouse_pressed_point_ = location; |
| mouse_pressed_time_ = base::TimeTicks::Now(); |
| mouse_dragging_state_ = NO_DRAGGING; |
| return true; |
| @@ -392,8 +396,15 @@ bool PanelBrowserView::OnTitlebarMouseDragged(const gfx::Point& location) { |
| if (!mouse_pressed_) |
| return false; |
| - int delta_x = location.x() - mouse_pressed_point_.x(); |
| - int delta_y = location.y() - mouse_pressed_point_.y(); |
| + gfx::Point last_mouse_location = mouse_location_; |
| + |
| + // |location| is in the view's coordinate system. Convert it to the screen |
| + // coordinate system. |
| + mouse_location_ = location; |
|
Dmitry Titov
2011/11/12 01:34:54
The way it's written it can easily look like mixin
jianli
2011/11/15 19:26:24
'location' is passed by const reference. So I can'
|
| + views::View::ConvertPointToScreen(this, &mouse_location_); |
| + |
| + int delta_x = mouse_location_.x() - last_mouse_location.x(); |
| + int delta_y = mouse_location_.y() - last_mouse_location.y(); |
| if (mouse_dragging_state_ == NO_DRAGGING && |
| ExceededDragThreshold(delta_x, delta_y)) { |
| // When a drag begins, we do not want to the client area to still receive |
| @@ -505,12 +516,14 @@ void NativePanelTestingWin::ReleaseMouseButtonTitlebar() { |
| } |
| void NativePanelTestingWin::DragTitlebar(int delta_x, int delta_y) { |
| - // TODO(jianli): Need a comment here that explains why we use |
| - // mouse_pressed_point_ and not current bounds as obtained by |
| - // GetRestoredBounds(). http://crbug.com/102730 |
| - panel_browser_view_->OnTitlebarMouseDragged(gfx::Point( |
| - panel_browser_view_->mouse_pressed_point_.x() + delta_x, |
| - panel_browser_view_->mouse_pressed_point_.y() + delta_y)); |
| + gfx::Point new_mouse_location = panel_browser_view_->mouse_location_; |
| + new_mouse_location.Offset(delta_x, delta_y); |
| + |
| + // Convert from the screen coordinate system to the view's coordinate system |
| + // since OnTitlebarMouseDragged takes the point in the latter. |
| + views::View::ConvertPointToView(NULL, panel_browser_view_, |
| + &new_mouse_location); |
| + panel_browser_view_->OnTitlebarMouseDragged(new_mouse_location); |
| } |
| void NativePanelTestingWin::CancelDragTitlebar() { |