Kaynağa Gözat

CatDog: Switch to new mouse-tracking method

Ben Wiederhake 3 yıl önce
ebeveyn
işleme
f717008bde

+ 4 - 14
Userland/Demos/CatDog/CatDog.cpp

@@ -7,7 +7,6 @@
 #include "CatDog.h"
 #include "CatDog.h"
 #include <LibGUI/Painter.h>
 #include <LibGUI/Painter.h>
 #include <LibGUI/Window.h>
 #include <LibGUI/Window.h>
-#include <LibGUI/WindowServerConnection.h>
 
 
 void CatDog::timer_event(Core::TimerEvent&)
 void CatDog::timer_event(Core::TimerEvent&)
 {
 {
@@ -105,13 +104,14 @@ void CatDog::paint_event(GUI::PaintEvent& event)
     painter.blit(Gfx::IntPoint(0, 0), *m_curr_bmp, m_curr_bmp->rect());
     painter.blit(Gfx::IntPoint(0, 0), *m_curr_bmp, m_curr_bmp->rect());
 }
 }
 
 
-void CatDog::mousemove_event(GUI::MouseEvent& event)
+void CatDog::track_mouse_move(Gfx::IntPoint const& point)
 {
 {
     if (!m_roaming)
     if (!m_roaming)
         return;
         return;
-    if (m_temp_pos == event.position())
+    Gfx::IntPoint relative_point = point - window()->position();
+    if (m_temp_pos == relative_point)
         return;
         return;
-    m_temp_pos = event.position();
+    m_temp_pos = relative_point;
     m_timer.start();
     m_timer.start();
     if (m_sleeping) {
     if (m_sleeping) {
         m_curr_bmp = m_alert;
         m_curr_bmp = m_alert;
@@ -128,16 +128,6 @@ void CatDog::mousedown_event(GUI::MouseEvent& event)
         on_click();
         on_click();
 }
 }
 
 
-void CatDog::track_cursor_globally()
-{
-    VERIFY(window());
-    auto window_id = window()->window_id();
-    VERIFY(window_id >= 0);
-
-    set_global_cursor_tracking(true);
-    GUI::WindowServerConnection::the().async_set_global_cursor_tracking(window_id, true);
-}
-
 void CatDog::context_menu_event(GUI::ContextMenuEvent& event)
 void CatDog::context_menu_event(GUI::ContextMenuEvent& event)
 {
 {
     if (on_context_menu_request)
     if (on_context_menu_request)

+ 4 - 3
Userland/Demos/CatDog/CatDog.h

@@ -6,22 +6,23 @@
 
 
 #include <LibCore/ElapsedTimer.h>
 #include <LibCore/ElapsedTimer.h>
 #include <LibGUI/Menu.h>
 #include <LibGUI/Menu.h>
+#include <LibGUI/MouseTracker.h>
 #include <LibGUI/Widget.h>
 #include <LibGUI/Widget.h>
 #include <unistd.h>
 #include <unistd.h>
 
 
 #pragma once
 #pragma once
 
 
-class CatDog final : public GUI::Widget {
+class CatDog final : public GUI::Widget
+    , GUI::MouseTracker {
     C_OBJECT(CatDog);
     C_OBJECT(CatDog);
 
 
 public:
 public:
     virtual void timer_event(Core::TimerEvent&) override;
     virtual void timer_event(Core::TimerEvent&) override;
     virtual void paint_event(GUI::PaintEvent& event) override;
     virtual void paint_event(GUI::PaintEvent& event) override;
-    virtual void mousemove_event(GUI::MouseEvent& event) override;
+    virtual void track_mouse_move(Gfx::IntPoint const& point) override;
     virtual void mousedown_event(GUI::MouseEvent& event) override;
     virtual void mousedown_event(GUI::MouseEvent& event) override;
     virtual void context_menu_event(GUI::ContextMenuEvent& event) override;
     virtual void context_menu_event(GUI::ContextMenuEvent& event) override;
 
 
-    void track_cursor_globally();
     void start_the_timer() { m_timer.start(); }
     void start_the_timer() { m_timer.start(); }
 
 
     Function<void()> on_click;
     Function<void()> on_click;

+ 0 - 1
Userland/Demos/CatDog/main.cpp

@@ -59,7 +59,6 @@ int main(int argc, char** argv)
     context_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
     context_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
 
     window->show();
     window->show();
-    catdog_widget.track_cursor_globally();
     catdog_widget.start_timer(250, Core::TimerShouldFireWhenNotVisible::Yes);
     catdog_widget.start_timer(250, Core::TimerShouldFireWhenNotVisible::Yes);
     catdog_widget.start_the_timer(); // timer for "mouse sleep detection"
     catdog_widget.start_the_timer(); // timer for "mouse sleep detection"