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

Unified Diff: components/exo/pointer.cc

Issue 2071553002: Initial support of large mouse cursor on Exosphere (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 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 side-by-side diff with in-line comments
Download patch
Index: components/exo/pointer.cc
diff --git a/components/exo/pointer.cc b/components/exo/pointer.cc
index 6c0c6482e26e753e6a00c62e76cb684625c378c3..e8a440b71a0a9874398dbf2eb9d8b881b8c377a9 100644
--- a/components/exo/pointer.cc
+++ b/components/exo/pointer.cc
@@ -39,7 +39,13 @@ Pointer::Pointer(PointerDelegate* delegate)
surface_(nullptr),
focus_(nullptr),
cursor_scale_(1.0f) {
- ash::Shell::GetInstance()->AddPreTargetHandler(this);
+ ash::Shell* ash_shell = ash::Shell::GetInstance();
reveman 2016/06/15 17:48:30 nit: not sure this temporary variable is needed bu
+ ash_shell->AddPreTargetHandler(this);
+
+ wm::CursorManager* cursor_manager = ash_shell->cursor_manager();
+ DCHECK(cursor_manager);
+ cursor_manager->AddObserver(this);
+ use_large_cursor_ = (cursor_manager->GetCursorSet() == ui::CURSOR_SET_LARGE);
}
Pointer::~Pointer() {
@@ -52,6 +58,9 @@ Pointer::~Pointer() {
}
if (widget_)
widget_->CloseNow();
+
+ DCHECK(ash::Shell::GetInstance()->cursor_manager());
+ ash::Shell::GetInstance()->cursor_manager()->RemoveObserver(this);
ash::Shell::GetInstance()->RemovePreTargetHandler(this);
}
@@ -211,21 +220,7 @@ void Pointer::OnMouseEvent(ui::MouseEvent* event) {
widget_->GetNativeWindow()->SetBounds(bounds);
}
- // Update cursor scale if the effective UI scale has changed since last
- // mouse event.
- display::Display display =
- display::Screen::GetScreen()->GetDisplayNearestWindow(
- widget_->GetNativeWindow());
- float ui_scale = ash::Shell::GetInstance()
- ->display_manager()
- ->GetDisplayInfo(display.id())
- .GetEffectiveUIScale();
- if (ui_scale != cursor_scale_) {
- gfx::Transform transform;
- transform.Scale(ui_scale, ui_scale);
- widget_->GetNativeWindow()->SetTransform(transform);
- cursor_scale_ = ui_scale;
- }
+ ResetCursor();
} else {
if (widget_ && widget_->IsVisible())
widget_->Hide();
@@ -236,6 +231,11 @@ void Pointer::OnScrollEvent(ui::ScrollEvent* event) {
OnMouseEvent(event);
}
+void Pointer::OnCursorSetChanged(ui::CursorSetType cursor_set) {
+ use_large_cursor_ = (cursor_set == ui::CURSOR_SET_LARGE);
+ ResetCursor();
+}
+
////////////////////////////////////////////////////////////////////////////////
// SurfaceDelegate overrides:
@@ -294,4 +294,29 @@ Surface* Pointer::GetEffectiveTargetForEvent(ui::Event* event) const {
return delegate_->CanAcceptPointerEventsForSurface(target) ? target : nullptr;
}
+void Pointer::ResetCursor() {
+ if (!focus_)
+ return;
+
+ // Update cursor scale if the effective UI scale has changed.
+ display::Display display =
+ display::Screen::GetScreen()->GetDisplayNearestWindow(
+ widget_->GetNativeWindow());
+ float ui_scale = ash::Shell::GetInstance()
+ ->display_manager()
+ ->GetDisplayInfo(display.id())
+ .GetEffectiveUIScale();
+
+ // TODO(yoshiki): Use large cursor asset instead of scaling.
reveman 2016/06/15 17:48:30 nit: Remove this TODO as we should still apply the
+ if (use_large_cursor_)
+ ui_scale *= 2;
+
+ if (ui_scale != cursor_scale_) {
+ gfx::Transform transform;
+ transform.Scale(ui_scale, ui_scale);
+ widget_->GetNativeWindow()->SetTransform(transform);
+ cursor_scale_ = ui_scale;
+ }
+}
+
} // namespace exo

Powered by Google App Engine
This is Rietveld 408576698