From 53fef6873cd58df1abf081a163ba385f958d9120 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Tue, 28 Nov 2023 16:41:47 +1100 Subject: [PATCH] #138 truncate scaled dimensions to match wayland --- src/head.c | 5 +++-- tst/tst-head.c | 2 +- tst/tst-mode.c | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/head.c b/src/head.c index b69f9c4e..ebf2e211 100644 --- a/src/head.c +++ b/src/head.c @@ -186,8 +186,9 @@ void head_scaled_dimensions(struct Head *head) { head->scaled.height = head->desired.mode->width; } - head->scaled.height = (int32_t)((double)head->scaled.height * 256 / head->desired.scale + 0.5); - head->scaled.width = (int32_t)((double)head->scaled.width * 256 / head->desired.scale + 0.5); + // wayland truncates when calculating size so we do the same + head->scaled.height = (int32_t)((double)head->scaled.height * 256 / head->desired.scale); + head->scaled.width = (int32_t)((double)head->scaled.width * 256 / head->desired.scale); } struct Mode *head_find_mode(struct Head *head) { diff --git a/tst/tst-head.c b/tst/tst-head.c index af6171a0..46c7434e 100644 --- a/tst/tst-head.c +++ b/tst/tst-head.c @@ -169,7 +169,7 @@ void head_scaled_dimensions__calculated(void **state) { head_scaled_dimensions(&head); assert_int_equal(head.scaled.width, 33); - assert_int_equal(head.scaled.height, 67); + assert_int_equal(head.scaled.height, 66); // wayland truncates when calculating size } void head_find_mode__none(void **state) { diff --git a/tst/tst-mode.c b/tst/tst-mode.c index e231f171..4923f33e 100644 --- a/tst/tst-mode.c +++ b/tst/tst-mode.c @@ -142,6 +142,18 @@ void mode_user_mode__exact_hz_failed(void **state) { assert_ptr_equal(actual, slist_at(modes, 0)); } +void mode_dpi__(void **state) { + struct Head head = { .width_mm = 1000, .height_mm = 500, }; + struct Mode mode = { .width = 2000, .height = 1000, .head = &head }; + + // nice roundish number to prevent odd test fails + double expected = 50.8; + + double actual = mode_dpi(&mode); + + assert_double_equal(actual, expected, 0); +} + int main(void) { const struct CMUnitTest tests[] = { TEST(mode_mhz_to_hz_str__), @@ -157,6 +169,8 @@ int main(void) { TEST(mode_user_mode__failed), TEST(mode_user_mode__exact_hz_match), TEST(mode_user_mode__exact_hz_failed), + + TEST(mode_dpi__), }; return RUN(tests);