Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: chrome/browser/ui/views/tabs/window_finder_win.cc

Issue 256923002: Fixed tab dragging which was broken on high DPI windows for scales other than 100%. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/app_list/views/apps_grid_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/window_finder.h" 5 #include "chrome/browser/ui/views/tabs/window_finder.h"
6 6
7 #include "base/win/scoped_gdi_object.h" 7 #include "base/win/scoped_gdi_object.h"
8 #include "base/win/windows_version.h" 8 #include "base/win/windows_version.h"
9 #include "ui/aura/window.h" 9 #include "ui/aura/window.h"
10 #include "ui/gfx/screen.h" 10 #include "ui/gfx/screen.h"
11 #include "ui/gfx/win/dpi.h"
11 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h" 12 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
12 #include "ui/views/win/hwnd_util.h" 13 #include "ui/views/win/hwnd_util.h"
13 14
14 #if defined(USE_ASH) 15 #if defined(USE_ASH)
15 aura::Window* GetLocalProcessWindowAtPointAsh( 16 aura::Window* GetLocalProcessWindowAtPointAsh(
16 const gfx::Point& screen_point, 17 const gfx::Point& screen_point,
17 const std::set<aura::Window*>& ignore); 18 const std::set<aura::Window*>& ignore);
18 #endif 19 #endif
19 20
20 namespace { 21 namespace {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 152
152 // Helper class to determine if a particular point contains a window from our 153 // Helper class to determine if a particular point contains a window from our
153 // process. 154 // process.
154 class LocalProcessWindowFinder : public BaseWindowFinder { 155 class LocalProcessWindowFinder : public BaseWindowFinder {
155 public: 156 public:
156 // Returns the hwnd from our process at screen_loc that is not obscured by 157 // Returns the hwnd from our process at screen_loc that is not obscured by
157 // another window. Returns NULL otherwise. 158 // another window. Returns NULL otherwise.
158 static gfx::NativeWindow GetProcessWindowAtPoint( 159 static gfx::NativeWindow GetProcessWindowAtPoint(
159 const gfx::Point& screen_loc, 160 const gfx::Point& screen_loc,
160 const std::set<HWND>& ignore) { 161 const std::set<HWND>& ignore) {
161 LocalProcessWindowFinder finder(screen_loc, ignore); 162 gfx::Point screen_loc_in_pixels = gfx::win::DIPToScreenPoint(screen_loc);
163 LocalProcessWindowFinder finder(screen_loc_in_pixels, ignore);
sky 2014/04/28 13:44:48 Can we make LocalProcessWindowFinder and TopMostFi
ananta 2014/04/28 18:13:08 Done. Changed to continue passing in screen coordi
162 // Windows 8 has a window that appears first in the list of iterated 164 // Windows 8 has a window that appears first in the list of iterated
163 // windows, yet is not visually on top of everything. 165 // windows, yet is not visually on top of everything.
164 // TODO(sky): figure out a better way to ignore this window. 166 // TODO(sky): figure out a better way to ignore this window.
165 if (finder.result_ && 167 if (finder.result_ &&
166 ((base::win::OSInfo::GetInstance()->version() >= 168 ((base::win::OSInfo::GetInstance()->version() >=
167 base::win::VERSION_WIN8) || 169 base::win::VERSION_WIN8) ||
168 TopMostFinder::IsTopMostWindowAtPoint(finder.result_, screen_loc, 170 TopMostFinder::IsTopMostWindowAtPoint(finder.result_,
171 screen_loc_in_pixels,
169 ignore))) { 172 ignore))) {
170 return views::DesktopWindowTreeHostWin::GetContentWindowForHWND( 173 return views::DesktopWindowTreeHostWin::GetContentWindowForHWND(
171 finder.result_); 174 finder.result_);
172 } 175 }
173 return NULL; 176 return NULL;
174 } 177 }
175 178
176 protected: 179 protected:
177 virtual bool ShouldStopIterating(HWND hwnd) { 180 virtual bool ShouldStopIterating(HWND hwnd) {
178 RECT r; 181 RECT r;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 chrome::HostDesktopType host_desktop_type, 223 chrome::HostDesktopType host_desktop_type,
221 const gfx::Point& screen_point, 224 const gfx::Point& screen_point,
222 const std::set<aura::Window*>& ignore) { 225 const std::set<aura::Window*>& ignore) {
223 #if defined(USE_ASH) 226 #if defined(USE_ASH)
224 if (host_desktop_type == chrome::HOST_DESKTOP_TYPE_ASH) 227 if (host_desktop_type == chrome::HOST_DESKTOP_TYPE_ASH)
225 return GetLocalProcessWindowAtPointAsh(screen_point, ignore); 228 return GetLocalProcessWindowAtPointAsh(screen_point, ignore);
226 #endif 229 #endif
227 return LocalProcessWindowFinder::GetProcessWindowAtPoint( 230 return LocalProcessWindowFinder::GetProcessWindowAtPoint(
228 screen_point, RemapIgnoreSet(ignore)); 231 screen_point, RemapIgnoreSet(ignore));
229 } 232 }
OLDNEW
« no previous file with comments | « no previous file | ui/app_list/views/apps_grid_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698