Skip to content

Commit

Permalink
Merge pull request #94022 from Riteo/a-fraction-of-the-work
Browse files Browse the repository at this point in the history
Wayland: Switch pointer position handling to doubles
  • Loading branch information
akien-mga committed Aug 21, 2024
2 parents 091212b + 2ff5011 commit 78f47ab
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
18 changes: 9 additions & 9 deletions platform/linuxbsd/wayland/wayland_thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1416,10 +1416,10 @@ void WaylandThread::_wl_pointer_on_motion(void *data, struct wl_pointer *wl_poin
PointerData &pd = ss->pointer_data_buffer;

// TODO: Scale only when sending the Wayland message.
pd.position.x = wl_fixed_to_int(surface_x);
pd.position.y = wl_fixed_to_int(surface_y);
pd.position.x = wl_fixed_to_double(surface_x);
pd.position.y = wl_fixed_to_double(surface_y);

pd.position = scale_vector2i(pd.position, window_state_get_scale_factor(ws));
pd.position *= window_state_get_scale_factor(ws);

pd.motion_time = time;
}
Expand Down Expand Up @@ -1532,7 +1532,7 @@ void WaylandThread::_wl_pointer_on_frame(void *data, struct wl_pointer *wl_point
mm->set_position(pd.position);
mm->set_global_position(pd.position);

Vector2i pos_delta = pd.position - old_pd.position;
Vector2 pos_delta = pd.position - old_pd.position;

if (old_pd.relative_motion_time != pd.relative_motion_time) {
uint32_t time_delta = pd.relative_motion_time - old_pd.relative_motion_time;
Expand Down Expand Up @@ -1649,7 +1649,7 @@ void WaylandThread::_wl_pointer_on_frame(void *data, struct wl_pointer *wl_point

// We have to set the last position pressed here as we can't take for
// granted what the individual events might have seen due to them not having
// a garaunteed order.
// a guaranteed order.
if (mb->is_pressed()) {
pd.last_pressed_position = pd.position;
}
Expand Down Expand Up @@ -2388,9 +2388,9 @@ void WaylandThread::_wp_tablet_tool_on_motion(void *data, struct zwp_tablet_tool

double scale_factor = window_state_get_scale_factor(ws);

td.position.x = wl_fixed_to_int(x);
td.position.y = wl_fixed_to_int(y);
td.position = scale_vector2i(td.position, scale_factor);
td.position.x = wl_fixed_to_double(x);
td.position.y = wl_fixed_to_double(y);
td.position *= scale_factor;

td.motion_time = OS::get_singleton()->get_ticks_msec();
}
Expand Down Expand Up @@ -2520,7 +2520,7 @@ void WaylandThread::_wp_tablet_tool_on_frame(void *data, struct zwp_tablet_tool_
mm->set_relative(td.position - old_td.position);
mm->set_relative_screen_position(mm->get_relative());

Vector2i pos_delta = td.position - old_td.position;
Vector2 pos_delta = td.position - old_td.position;
uint32_t time_delta = td.motion_time - old_td.motion_time;
mm->set_velocity((Vector2)pos_delta / time_delta);

Expand Down
8 changes: 4 additions & 4 deletions platform/linuxbsd/wayland/wayland_thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ class WaylandThread {
};

struct PointerData {
Point2i position;
Point2 position;
uint32_t motion_time = 0;

// Relative motion has its own optional event and so needs its own time.
Expand All @@ -305,7 +305,7 @@ class WaylandThread {
BitField<MouseButtonMask> pressed_button_mask;

MouseButton last_button_pressed = MouseButton::NONE;
Point2i last_pressed_position;
Point2 last_pressed_position;

// This is needed to check for a new double click every time.
bool double_click_begun = false;
Expand All @@ -325,14 +325,14 @@ class WaylandThread {
};

struct TabletToolData {
Point2i position;
Point2 position;
Vector2 tilt;
uint32_t pressure = 0;

BitField<MouseButtonMask> pressed_button_mask;

MouseButton last_button_pressed = MouseButton::NONE;
Point2i last_pressed_position;
Point2 last_pressed_position;

bool double_click_begun = false;

Expand Down

0 comments on commit 78f47ab

Please sign in to comment.