Merge pull request #318 from KassiaL/fix/scroll-jitter-extrozone-android-60hz

Fix scroll jitter in extro zone on Android 60Hz displays
This commit is contained in:
Maksim Tuprikov
2025-10-13 20:23:23 +03:00
committed by GitHub

View File

@@ -578,27 +578,34 @@ function M:_check_soft_zone()
local target = self.target_position local target = self.target_position
local border = self.available_pos local border = self.available_pos
local speed = self.style.BACK_SPEED local speed = self.style.BACK_SPEED
local affected = false
-- Right border (minimum x) -- Right border (minimum x)
if target.x < border.x then if target.x < border.x then
local step = math.max(math.abs(target.x - border.x) * speed, 1) local step = math.max(math.abs(target.x - border.x) * speed, 1)
target.x = helper.step(target.x, border.x, step) target.x = helper.step(target.x, border.x, step)
affected = true
end end
-- Left border (maximum x) -- Left border (maximum x)
if target.x > border.z then if target.x > border.z then
local step = math.max(math.abs(target.x - border.z) * speed, 1) local step = math.max(math.abs(target.x - border.z) * speed, 1)
target.x = helper.step(target.x, border.z, step) target.x = helper.step(target.x, border.z, step)
affected = true
end end
-- Top border (maximum y) -- Top border (maximum y)
if target.y < border.y then if target.y < border.y then
local step = math.max(math.abs(target.y - border.y) * speed, 1) local step = math.max(math.abs(target.y - border.y) * speed, 1)
target.y = helper.step(target.y, border.y, step) target.y = helper.step(target.y, border.y, step)
affected = true
end end
-- Bot border (minimum y) -- Bot border (minimum y)
if target.y > border.w then if target.y > border.w then
local step = math.max(math.abs(target.y - border.w) * speed, 1) local step = math.max(math.abs(target.y - border.w) * speed, 1)
target.y = helper.step(target.y, border.w, step) target.y = helper.step(target.y, border.w, step)
affected = true
end end
return affected
end end
@@ -728,7 +735,10 @@ function M:_update_free_scroll(dt)
-- Inertion friction -- Inertion friction
self.inertion = self.inertion * self.style.FRICT self.inertion = self.inertion * self.style.FRICT
self:_check_soft_zone() local affected = self:_check_soft_zone()
if affected then
self.inertion = vmath.vector3(0, 0, 0)
end
if self.position.x ~= target.x or self.position.y ~= target.y then if self.position.x ~= target.x or self.position.y ~= target.y then
self:_set_scroll_position(target.x, target.y) self:_set_scroll_position(target.x, target.y)
end end