| Index: ui/ozone/platform/dri/dri_cursor.cc
|
| diff --git a/ui/ozone/platform/dri/dri_cursor.cc b/ui/ozone/platform/dri/dri_cursor.cc
|
| index a6fe5fe0f71f8f8091cf1f1788d30410430df571..8314ed79d0f0c225062bc021e518daf38ab8d469 100644
|
| --- a/ui/ozone/platform/dri/dri_cursor.cc
|
| +++ b/ui/ozone/platform/dri/dri_cursor.cc
|
| @@ -9,15 +9,17 @@
|
| #include "ui/gfx/geometry/point_conversions.h"
|
| #include "ui/gfx/geometry/point_f.h"
|
| #include "ui/ozone/platform/dri/dri_surface_factory.h"
|
| +#include "ui/ozone/platform/dri/dri_window.h"
|
| +#include "ui/ozone/platform/dri/dri_window_manager.h"
|
| #include "ui/ozone/platform/dri/hardware_cursor_delegate.h"
|
|
|
| namespace ui {
|
|
|
| -DriCursor::DriCursor(HardwareCursorDelegate* hardware) : hardware_(hardware) {
|
| - // TODO(dnicoara) Assume the first widget since at this point there are no
|
| - // widgets initialized.
|
| - cursor_window_ = DriSurfaceFactory::kDefaultWidgetHandle;
|
| - cursor_location_ = gfx::PointF(2560 / 2, 1700 / 2); // TODO(spang): Argh!
|
| +DriCursor::DriCursor(HardwareCursorDelegate* hardware,
|
| + DriWindowManager* window_manager)
|
| + : hardware_(hardware),
|
| + window_manager_(window_manager),
|
| + cursor_window_(DriSurfaceFactory::kDefaultWidgetHandle) {
|
| }
|
|
|
| DriCursor::~DriCursor() {
|
| @@ -25,6 +27,7 @@ DriCursor::~DriCursor() {
|
|
|
| void DriCursor::SetCursor(gfx::AcceleratedWidget widget,
|
| PlatformCursor platform_cursor) {
|
| + DCHECK_NE(widget, gfx::kNullAcceleratedWidget);
|
| scoped_refptr<BitmapCursorOzone> cursor =
|
| BitmapCursorFactoryOzone::GetBitmapCursor(platform_cursor);
|
| if (cursor_ == cursor || cursor_window_ != widget)
|
| @@ -35,7 +38,8 @@ void DriCursor::SetCursor(gfx::AcceleratedWidget widget,
|
| }
|
|
|
| void DriCursor::ShowCursor() {
|
| - if (cursor_.get())
|
| + DCHECK_NE(cursor_window_, gfx::kNullAcceleratedWidget);
|
| + if (cursor_.get())
|
| hardware_->SetHardwareCursor(cursor_window_,
|
| cursor_->bitmaps(),
|
| bitmap_location(),
|
| @@ -45,19 +49,24 @@ void DriCursor::ShowCursor() {
|
| }
|
|
|
| void DriCursor::HideCursor() {
|
| + DCHECK_NE(cursor_window_, gfx::kNullAcceleratedWidget);
|
| hardware_->SetHardwareCursor(
|
| cursor_window_, std::vector<SkBitmap>(), gfx::Point(), 0);
|
| }
|
|
|
| void DriCursor::MoveCursorTo(gfx::AcceleratedWidget widget,
|
| const gfx::PointF& location) {
|
| - if (widget != cursor_window_)
|
| + if (widget != cursor_window_ && cursor_window_ != gfx::kNullAcceleratedWidget)
|
| HideCursor();
|
|
|
| cursor_window_ = widget;
|
| cursor_location_ = location;
|
|
|
| - gfx::Size size = gfx::Size(2560, 1700); // TODO(spang): Fix.
|
| + if (cursor_window_ == gfx::kNullAcceleratedWidget)
|
| + return;
|
| +
|
| + DriWindow* window = window_manager_->GetWindow(cursor_window_);
|
| + const gfx::Size& size = window->GetBounds().size();
|
| cursor_location_.SetToMax(gfx::PointF(0, 0));
|
| cursor_location_.SetToMin(gfx::PointF(size.width(), size.height()));
|
|
|
|
|