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

Side by Side Diff: components/exo/pointer.cc

Issue 2944063002: exo: Fix cursor scaling for 1.25 DSF (Closed)
Patch Set: Rebase Created 3 years, 6 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
« no previous file with comments | « components/exo/pointer.h ('k') | ui/display/manager/managed_display_info.h » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/exo/pointer.h" 5 #include "components/exo/pointer.h"
6 6
7 #include <algorithm>
8 #include <numeric> 7 #include <numeric>
8 #include <tuple>
9 #include <utility> 9 #include <utility>
10 10
11 #include "ash/public/cpp/shell_window_ids.h" 11 #include "ash/public/cpp/shell_window_ids.h"
12 #include "cc/output/copy_output_request.h" 12 #include "cc/output/copy_output_request.h"
13 #include "cc/output/copy_output_result.h" 13 #include "cc/output/copy_output_result.h"
14 #include "components/exo/pointer_delegate.h" 14 #include "components/exo/pointer_delegate.h"
15 #include "components/exo/pointer_stylus_delegate.h" 15 #include "components/exo/pointer_stylus_delegate.h"
16 #include "components/exo/surface.h" 16 #include "components/exo/surface.h"
17 #include "components/exo/wm_helper.h" 17 #include "components/exo/wm_helper.h"
18 #include "ui/aura/client/cursor_client.h" 18 #include "ui/aura/client/cursor_client.h"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 UpdateCursor(); 265 UpdateCursor();
266 } 266 }
267 267
268 //////////////////////////////////////////////////////////////////////////////// 268 ////////////////////////////////////////////////////////////////////////////////
269 // WMHelper::DisplayConfigurationObserver overrides: 269 // WMHelper::DisplayConfigurationObserver overrides:
270 270
271 void Pointer::OnDisplayConfigurationChanged() { 271 void Pointer::OnDisplayConfigurationChanged() {
272 UpdatePointerSurface(surface_); 272 UpdatePointerSurface(surface_);
273 273
274 const auto& displays = display::Screen::GetScreen()->GetAllDisplays(); 274 const auto& displays = display::Screen::GetScreen()->GetAllDisplays();
275 capture_scale_ = std::accumulate( 275 using ScalePair = std::pair<float, float>;
276 displays.begin(), displays.end(), 1.0f, 276 std::tie(capture_scale_, capture_ratio_) = std::accumulate(
reveman 2017/06/19 22:20:39 heh, cool; but I think you've crossed the line to
Dominik Laskowski 2017/06/20 15:52:35 Yeah, even the original was pushing it. Done.
277 [](float scale, const display::Display& display) -> float { 277 displays.begin(), displays.end(), ScalePair(1.0f, 1.0f),
278 [](const ScalePair& pair, const display::Display& display) -> ScalePair {
278 const auto& info = 279 const auto& info =
279 WMHelper::GetInstance()->GetDisplayInfo(display.id()); 280 WMHelper::GetInstance()->GetDisplayInfo(display.id());
280 return std::max(scale, info.device_scale_factor()); 281 return info.device_scale_factor() > pair.first
282 ? ScalePair(info.device_scale_factor(),
283 info.GetDensityRatio())
284 : pair;
281 }); 285 });
282 } 286 }
283 287
284 //////////////////////////////////////////////////////////////////////////////// 288 ////////////////////////////////////////////////////////////////////////////////
285 // SurfaceDelegate overrides: 289 // SurfaceDelegate overrides:
286 290
287 void Pointer::OnSurfaceCommit() { 291 void Pointer::OnSurfaceCommit() {
288 surface_->CheckIfSurfaceHierarchyNeedsCommitToNewSurfaces(); 292 surface_->CheckIfSurfaceHierarchyNeedsCommitToNewSurfaces();
289 surface_->CommitSurfaceHierarchy(); 293 surface_->CommitSurfaceHierarchy();
290 294
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 UpdateCursor(); 386 UpdateCursor();
383 } 387 }
384 388
385 void Pointer::UpdateCursor() { 389 void Pointer::UpdateCursor() {
386 DCHECK(focus_); 390 DCHECK(focus_);
387 391
388 if (cursor_bitmap_.drawsNothing()) { 392 if (cursor_bitmap_.drawsNothing()) {
389 cursor_ = ui::CursorType::kNone; 393 cursor_ = ui::CursorType::kNone;
390 } else { 394 } else {
391 SkBitmap bitmap = cursor_bitmap_; 395 SkBitmap bitmap = cursor_bitmap_;
392 gfx::Point hotspot = gfx::ScaleToFlooredPoint(hotspot_, capture_scale_); 396 gfx::Point hotspot = gfx::ScaleToFlooredPoint(hotspot_, capture_ratio_);
393 397
394 auto* helper = WMHelper::GetInstance(); 398 auto* helper = WMHelper::GetInstance();
395 const display::Display& display = helper->GetCursorDisplay(); 399 const display::Display& display = helper->GetCursorDisplay();
396 float scale = helper->GetDisplayInfo(display.id()).device_scale_factor() / 400 float scale =
397 capture_scale_; 401 helper->GetDisplayInfo(display.id()).GetDensityRatio() / capture_ratio_;
398 402
399 if (helper->GetCursorSet() == ui::CURSOR_SET_LARGE) 403 if (helper->GetCursorSet() == ui::CURSOR_SET_LARGE)
400 scale *= kLargeCursorScale; 404 scale *= kLargeCursorScale;
401 405
402 ui::ScaleAndRotateCursorBitmapAndHotpoint(scale, display.rotation(), 406 ui::ScaleAndRotateCursorBitmapAndHotpoint(scale, display.rotation(),
403 &bitmap, &hotspot); 407 &bitmap, &hotspot);
404 408
405 ui::PlatformCursor platform_cursor; 409 ui::PlatformCursor platform_cursor;
406 #if defined(USE_OZONE) 410 #if defined(USE_OZONE)
407 // TODO(reveman): Add interface for creating cursors from GpuMemoryBuffers 411 // TODO(reveman): Add interface for creating cursors from GpuMemoryBuffers
(...skipping 17 matching lines...) Expand all
425 if (!root_window) 429 if (!root_window)
426 return; 430 return;
427 431
428 aura::client::CursorClient* cursor_client = 432 aura::client::CursorClient* cursor_client =
429 aura::client::GetCursorClient(root_window); 433 aura::client::GetCursorClient(root_window);
430 if (cursor_client) 434 if (cursor_client)
431 cursor_client->SetCursor(cursor_); 435 cursor_client->SetCursor(cursor_);
432 } 436 }
433 437
434 } // namespace exo 438 } // namespace exo
OLDNEW
« no previous file with comments | « components/exo/pointer.h ('k') | ui/display/manager/managed_display_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698