=== modified file 'include/server/mir/graphics/cursor.h' --- include/server/mir/graphics/cursor.h 2013-05-01 00:10:38 +0000 +++ include/server/mir/graphics/cursor.h 2013-07-30 20:03:44 +0000 @@ -32,6 +32,7 @@ public: virtual void set_image(void const* raw_argb, geometry::Size size) = 0; virtual void move_to(geometry::Point position) = 0; + virtual void set_hotspot(geometry::Point hotspot) = 0; protected: Cursor() = default; === modified file 'src/server/graphics/gbm/gbm_cursor.cpp' --- src/server/graphics/gbm/gbm_cursor.cpp 2013-07-11 16:54:41 +0000 +++ src/server/graphics/gbm/gbm_cursor.cpp 2013-07-30 19:50:17 +0000 @@ -81,10 +81,15 @@ } } +void mir::graphics::gbm::GBMCursor::set_hotspot(geometry::Point point) +{ + hotspot = geometry::Displacement(point.x.as_int(),point.y.as_int()); +} + void mgg::GBMCursor::move_to(geometry::Point position) { - output_container.for_each_output([&](KMSOutput& output) { output.move_cursor(position); }); - current_position = position; + output_container.for_each_output([&](KMSOutput& output) { output.move_cursor(position - hotspot); }); + current_position = position - hotspot; } void mgg::GBMCursor::show_at_last_known_position() === modified file 'src/server/graphics/gbm/gbm_cursor.h' --- src/server/graphics/gbm/gbm_cursor.h 2013-05-13 09:23:04 +0000 +++ src/server/graphics/gbm/gbm_cursor.h 2013-07-30 20:04:40 +0000 @@ -21,6 +21,7 @@ #define MIR_GRAPHICS_GBM_GBM_CURSOR_H_ #include "mir/graphics/cursor.h" +#include "mir/geometry/displacement.h" #include #include @@ -44,7 +45,7 @@ ~GBMCursor() noexcept; void set_image(const void* raw_argb, geometry::Size size); - + void set_hotspot(geometry::Point point); void move_to(geometry::Point position); void show_at_last_known_position(); @@ -53,7 +54,7 @@ private: KMSOutputContainer const& output_container; geometry::Point current_position; - + geometry::Displacement hotspot; struct GBMBOWrapper { GBMBOWrapper(GBMPlatform& platform);