From 41c25aac6384e6e429a51ace166fffcf219efeca Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Mon, 12 Oct 2026 15:23:19 +0300 Subject: Unify surface input queue, frame clock, and optimize scaling and timers --- include/yasl/yasl.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/yasl/yasl.h b/include/yasl/yasl.h index 77666f8..df94800 100644 --- a/include/yasl/yasl.h +++ b/include/yasl/yasl.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "yasl/timing.h" @@ -52,17 +53,20 @@ struct yasl_rect2i { static inline int yasl_scale_to_device(double logical, uint32_t scale_120) { if (!scale_120 || !(logical >= -DBL_MAX && logical <= DBL_MAX)) return 0; - double px = logical * ((double)scale_120 / YASL_SCALE_UNIT); + double px = (scale_120 == YASL_SCALE_UNIT) ? logical : (logical * ((double)scale_120 / YASL_SCALE_UNIT)); if (px >= INT_MAX) return INT_MAX; if (px <= INT_MIN) return INT_MIN; - return (int)(px < 0 ? px - 0.5 : px + 0.5); + return (int)(px + copysign(0.5, px)); } static inline int yasl_scale_to_logical(int device, uint32_t scale_120) { if (!scale_120) return 0; + if (scale_120 == YASL_SCALE_UNIT) return device; int64_t px = (int64_t)device * YASL_SCALE_UNIT; - px = (px + (px < 0 ? -(int64_t)(scale_120 / 2) : scale_120 / 2)) / scale_120; + int64_t half = (int64_t)(scale_120 / 2); + int64_t bias = (px < 0) ? -half : half; + px = (px + bias) / scale_120; if (px > INT_MAX) return INT_MAX; if (px < INT_MIN) return INT_MIN; return (int)px; -- cgit v1.2.3