| OLD | NEW | 
|     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |     1 // Copyright (c) 2012 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/views/tabs/tab_drag_controller.h" |     5 #include "chrome/browser/ui/views/tabs/tab_drag_controller.h" | 
|     6  |     6  | 
|     7 #include <math.h> |     7 #include <math.h> | 
|     8 #include <set> |     8 #include <set> | 
|     9  |     9  | 
|    10 #include "base/auto_reset.h" |    10 #include "base/auto_reset.h" | 
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   191 // static |   191 // static | 
|   192 const int TabDragController::kTouchVerticalDetachMagnetism = 50; |   192 const int TabDragController::kTouchVerticalDetachMagnetism = 50; | 
|   193  |   193  | 
|   194 // static |   194 // static | 
|   195 const int TabDragController::kVerticalDetachMagnetism = 15; |   195 const int TabDragController::kVerticalDetachMagnetism = 15; | 
|   196  |   196  | 
|   197 TabDragController::TabDragController() |   197 TabDragController::TabDragController() | 
|   198     : event_source_(EVENT_SOURCE_MOUSE), |   198     : event_source_(EVENT_SOURCE_MOUSE), | 
|   199       source_tabstrip_(NULL), |   199       source_tabstrip_(NULL), | 
|   200       attached_tabstrip_(NULL), |   200       attached_tabstrip_(NULL), | 
|   201       screen_(NULL), |  | 
|   202       host_desktop_type_(chrome::HOST_DESKTOP_TYPE_NATIVE), |   201       host_desktop_type_(chrome::HOST_DESKTOP_TYPE_NATIVE), | 
|   203       can_release_capture_(true), |   202       can_release_capture_(true), | 
|   204       offset_to_width_ratio_(0), |   203       offset_to_width_ratio_(0), | 
|   205       old_focused_view_id_( |   204       old_focused_view_id_( | 
|   206           views::ViewStorage::GetInstance()->CreateStorageID()), |   205           views::ViewStorage::GetInstance()->CreateStorageID()), | 
|   207       last_move_screen_loc_(0), |   206       last_move_screen_loc_(0), | 
|   208       started_drag_(false), |   207       started_drag_(false), | 
|   209       active_(true), |   208       active_(true), | 
|   210       source_tab_index_(std::numeric_limits<size_t>::max()), |   209       source_tab_index_(std::numeric_limits<size_t>::max()), | 
|   211       initial_move_(true), |   210       initial_move_(true), | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   256     const gfx::Point& mouse_offset, |   255     const gfx::Point& mouse_offset, | 
|   257     int source_tab_offset, |   256     int source_tab_offset, | 
|   258     const ui::ListSelectionModel& initial_selection_model, |   257     const ui::ListSelectionModel& initial_selection_model, | 
|   259     MoveBehavior move_behavior, |   258     MoveBehavior move_behavior, | 
|   260     EventSource event_source) { |   259     EventSource event_source) { | 
|   261   DCHECK(!tabs.empty()); |   260   DCHECK(!tabs.empty()); | 
|   262   DCHECK(std::find(tabs.begin(), tabs.end(), source_tab) != tabs.end()); |   261   DCHECK(std::find(tabs.begin(), tabs.end(), source_tab) != tabs.end()); | 
|   263   source_tabstrip_ = source_tabstrip; |   262   source_tabstrip_ = source_tabstrip; | 
|   264   was_source_maximized_ = source_tabstrip->GetWidget()->IsMaximized(); |   263   was_source_maximized_ = source_tabstrip->GetWidget()->IsMaximized(); | 
|   265   was_source_fullscreen_ = source_tabstrip->GetWidget()->IsFullscreen(); |   264   was_source_fullscreen_ = source_tabstrip->GetWidget()->IsFullscreen(); | 
|   266   screen_ = gfx::Screen::GetScreenFor( |  | 
|   267       source_tabstrip->GetWidget()->GetNativeView()); |  | 
|   268   host_desktop_type_ = chrome::GetHostDesktopTypeForNativeView( |   265   host_desktop_type_ = chrome::GetHostDesktopTypeForNativeView( | 
|   269       source_tabstrip->GetWidget()->GetNativeView()); |   266       source_tabstrip->GetWidget()->GetNativeView()); | 
|   270   // Do not release capture when transferring capture between widgets on: |   267   // Do not release capture when transferring capture between widgets on: | 
|   271   // - Desktop Linux |   268   // - Desktop Linux | 
|   272   //     Mouse capture is not synchronous on desktop Linux. Chrome makes |   269   //     Mouse capture is not synchronous on desktop Linux. Chrome makes | 
|   273   //     transferring capture between widgets without releasing capture appear |   270   //     transferring capture between widgets without releasing capture appear | 
|   274   //     synchronous on desktop Linux, so use that. |   271   //     synchronous on desktop Linux, so use that. | 
|   275   // - Ash |   272   // - Ash | 
|   276   //     Releasing capture on Ash cancels gestures so avoid it. |   273   //     Releasing capture on Ash cancels gestures so avoid it. | 
|   277 #if defined(OS_LINUX) |   274 #if defined(OS_LINUX) | 
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   475   views::View* first_tab = source_tabstrip_->tab_at(0); |   472   views::View* first_tab = source_tabstrip_->tab_at(0); | 
|   476   views::View::ConvertPointToWidget(first_tab, &first_source_tab_point_); |   473   views::View::ConvertPointToWidget(first_tab, &first_source_tab_point_); | 
|   477   window_create_point_ = first_source_tab_point_; |   474   window_create_point_ = first_source_tab_point_; | 
|   478   window_create_point_.Offset(mouse_offset_.x(), mouse_offset_.y()); |   475   window_create_point_.Offset(mouse_offset_.x(), mouse_offset_.y()); | 
|   479 } |   476 } | 
|   480  |   477  | 
|   481 gfx::Point TabDragController::GetWindowCreatePoint( |   478 gfx::Point TabDragController::GetWindowCreatePoint( | 
|   482     const gfx::Point& origin) const { |   479     const gfx::Point& origin) const { | 
|   483   // If the cursor is outside the monitor area, move it inside. For example, |   480   // If the cursor is outside the monitor area, move it inside. For example, | 
|   484   // dropping a tab onto the task bar on Windows produces this situation. |   481   // dropping a tab onto the task bar on Windows produces this situation. | 
|   485   gfx::Rect work_area = screen_->GetDisplayNearestPoint(origin).work_area(); |   482   gfx::Rect work_area = | 
 |   483       gfx::Screen::GetScreen()->GetDisplayNearestPoint(origin).work_area(); | 
|   486   gfx::Point create_point(origin); |   484   gfx::Point create_point(origin); | 
|   487   if (!work_area.IsEmpty()) { |   485   if (!work_area.IsEmpty()) { | 
|   488     if (create_point.x() < work_area.x()) |   486     if (create_point.x() < work_area.x()) | 
|   489       create_point.set_x(work_area.x()); |   487       create_point.set_x(work_area.x()); | 
|   490     else if (create_point.x() > work_area.right()) |   488     else if (create_point.x() > work_area.right()) | 
|   491       create_point.set_x(work_area.right()); |   489       create_point.set_x(work_area.right()); | 
|   492     if (create_point.y() < work_area.y()) |   490     if (create_point.y() < work_area.y()) | 
|   493       create_point.set_y(work_area.y()); |   491       create_point.set_y(work_area.y()); | 
|   494     else if (create_point.y() > work_area.bottom()) |   492     else if (create_point.y() > work_area.bottom()) | 
|   495       create_point.set_y(work_area.bottom()); |   493       create_point.set_y(work_area.bottom()); | 
| (...skipping 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1640 } |  1638 } | 
|  1641  |  1639  | 
|  1642 gfx::Rect TabDragController::CalculateDraggedBrowserBounds( |  1640 gfx::Rect TabDragController::CalculateDraggedBrowserBounds( | 
|  1643     TabStrip* source, |  1641     TabStrip* source, | 
|  1644     const gfx::Point& point_in_screen, |  1642     const gfx::Point& point_in_screen, | 
|  1645     std::vector<gfx::Rect>* drag_bounds) { |  1643     std::vector<gfx::Rect>* drag_bounds) { | 
|  1646   gfx::Point center(0, source->height() / 2); |  1644   gfx::Point center(0, source->height() / 2); | 
|  1647   views::View::ConvertPointToWidget(source, ¢er); |  1645   views::View::ConvertPointToWidget(source, ¢er); | 
|  1648   gfx::Rect new_bounds(source->GetWidget()->GetRestoredBounds()); |  1646   gfx::Rect new_bounds(source->GetWidget()->GetRestoredBounds()); | 
|  1649  |  1647  | 
|  1650   gfx::Rect work_area = |  1648   gfx::Rect work_area = gfx::Screen::GetScreen() | 
|  1651       screen_->GetDisplayNearestPoint(last_point_in_screen_).work_area(); |  1649                             ->GetDisplayNearestPoint(last_point_in_screen_) | 
 |  1650                             .work_area(); | 
|  1652   if (new_bounds.size().width() >= work_area.size().width() && |  1651   if (new_bounds.size().width() >= work_area.size().width() && | 
|  1653       new_bounds.size().height() >= work_area.size().height()) { |  1652       new_bounds.size().height() >= work_area.size().height()) { | 
|  1654     new_bounds = work_area; |  1653     new_bounds = work_area; | 
|  1655     new_bounds.Inset(kMaximizedWindowInset, kMaximizedWindowInset, |  1654     new_bounds.Inset(kMaximizedWindowInset, kMaximizedWindowInset, | 
|  1656                      kMaximizedWindowInset, kMaximizedWindowInset); |  1655                      kMaximizedWindowInset, kMaximizedWindowInset); | 
|  1657     // Behave as if the |source| was maximized at the start of a drag since this |  1656     // Behave as if the |source| was maximized at the start of a drag since this | 
|  1658     // is consistent with a browser window creation logic in case of windows |  1657     // is consistent with a browser window creation logic in case of windows | 
|  1659     // that are as large as the |work_area|. |  1658     // that are as large as the |work_area|. | 
|  1660     was_source_maximized_ = true; |  1659     was_source_maximized_ = true; | 
|  1661   } |  1660   } | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1775     gfx::PointF touch_point_f; |  1774     gfx::PointF touch_point_f; | 
|  1776     bool got_touch_point = ui::GestureRecognizer::Get()-> |  1775     bool got_touch_point = ui::GestureRecognizer::Get()-> | 
|  1777         GetLastTouchPointForTarget(widget_window, &touch_point_f); |  1776         GetLastTouchPointForTarget(widget_window, &touch_point_f); | 
|  1778     CHECK(got_touch_point); |  1777     CHECK(got_touch_point); | 
|  1779     gfx::Point touch_point = gfx::ToFlooredPoint(touch_point_f); |  1778     gfx::Point touch_point = gfx::ToFlooredPoint(touch_point_f); | 
|  1780     wm::ConvertPointToScreen(widget_window->GetRootWindow(), &touch_point); |  1779     wm::ConvertPointToScreen(widget_window->GetRootWindow(), &touch_point); | 
|  1781     return touch_point; |  1780     return touch_point; | 
|  1782   } |  1781   } | 
|  1783 #endif |  1782 #endif | 
|  1784  |  1783  | 
|  1785   return screen_->GetCursorScreenPoint(); |  1784   return gfx::Screen::GetScreen()->GetCursorScreenPoint(); | 
|  1786 } |  1785 } | 
|  1787  |  1786  | 
|  1788 gfx::Vector2d TabDragController::GetWindowOffset( |  1787 gfx::Vector2d TabDragController::GetWindowOffset( | 
|  1789     const gfx::Point& point_in_screen) { |  1788     const gfx::Point& point_in_screen) { | 
|  1790   TabStrip* owning_tabstrip = attached_tabstrip_ ? |  1789   TabStrip* owning_tabstrip = attached_tabstrip_ ? | 
|  1791       attached_tabstrip_ : source_tabstrip_; |  1790       attached_tabstrip_ : source_tabstrip_; | 
|  1792   views::View* toplevel_view = owning_tabstrip->GetWidget()->GetContentsView(); |  1791   views::View* toplevel_view = owning_tabstrip->GetWidget()->GetContentsView(); | 
|  1793  |  1792  | 
|  1794   gfx::Point point = point_in_screen; |  1793   gfx::Point point = point_in_screen; | 
|  1795   views::View::ConvertPointFromScreen(toplevel_view, &point); |  1794   views::View::ConvertPointFromScreen(toplevel_view, &point); | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|  1818        it != browser_list->end(); ++it) { |  1817        it != browser_list->end(); ++it) { | 
|  1819     if ((*it)->tab_strip_model()->empty()) |  1818     if ((*it)->tab_strip_model()->empty()) | 
|  1820       exclude.insert((*it)->window()->GetNativeWindow()); |  1819       exclude.insert((*it)->window()->GetNativeWindow()); | 
|  1821   } |  1820   } | 
|  1822 #endif |  1821 #endif | 
|  1823   return GetLocalProcessWindowAtPoint(host_desktop_type_, |  1822   return GetLocalProcessWindowAtPoint(host_desktop_type_, | 
|  1824                                       screen_point, |  1823                                       screen_point, | 
|  1825                                       exclude); |  1824                                       exclude); | 
|  1826  |  1825  | 
|  1827 } |  1826 } | 
| OLD | NEW |