Public Access
Scroll speeds below 1 dot per second
scroll_speed is now a float (0.05-30 dots per second, e.g. 0.25 = one dot every 4 s). Page format 5; version 4 pages are converted, version 3 goes through version 4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1282d16c0b
commit
e0a89cec99
17 files changed
+148
-21
No files matched your search
@@ -1401,6 +1401,34 @@ static bool anyDot(const uint8_t *b, int x0, int x1)
|
||||
return false;
|
||||
}
|
||||
|
||||
void test_slow_scrolling_below_one_dot_per_second()
|
||||
{
|
||||
FakeResources res;
|
||||
DynamicPage page = scrollPage();
|
||||
page.elements[0].scroll_speed = 0.25f; // a dot every 4 s
|
||||
TEST_ASSERT_NULL(validatePage(page));
|
||||
uint8_t a[BITMAP_BYTES], b[BITMAP_BYTES];
|
||||
TEST_ASSERT_EQUAL(4000, renderPage(page, at(12, 0), 0, res, a));
|
||||
TEST_ASSERT_EQUAL(1, renderPage(page, at(12, 0), 3999, res, b));
|
||||
TEST_ASSERT_EQUAL(0, memcmp(a, b, BITMAP_BYTES)); // not moved yet
|
||||
TEST_ASSERT_EQUAL(4000, renderPage(page, at(12, 0), 4000, res, b));
|
||||
TEST_ASSERT_TRUE(memcmp(a, b, BITMAP_BYTES) != 0); // one dot on
|
||||
TEST_ASSERT_EQUAL(1500, renderPage(page, at(12, 0), 6500, res, b));
|
||||
|
||||
page.elements[0].scroll_speed = 0.3f; // 3333.3 ms per dot: no drift over a long time
|
||||
TEST_ASSERT_EQUAL(3334, renderPage(page, at(12, 0), 0, res, a));
|
||||
uint32_t t = 3000000000UL; // ~35 days of millis()
|
||||
uint32_t wait = renderPage(page, at(12, 0), t, res, a);
|
||||
TEST_ASSERT_TRUE(wait >= 1 && wait <= 3334);
|
||||
|
||||
page.elements[0].scroll_speed = 0.01f; // too slow
|
||||
TEST_ASSERT_NOT_NULL(validatePage(page));
|
||||
page.elements[0].scroll_speed = NAN;
|
||||
TEST_ASSERT_NOT_NULL(validatePage(page));
|
||||
page.elements[0].scroll_speed = 31;
|
||||
TEST_ASSERT_NOT_NULL(validatePage(page));
|
||||
}
|
||||
|
||||
void test_scrolling_text_moves_in_its_window()
|
||||
{
|
||||
FakeResources res;
|
||||
@@ -2297,6 +2325,7 @@ int main()
|
||||
RUN_TEST(test_bar_render);
|
||||
RUN_TEST(test_bar_validation);
|
||||
RUN_TEST(test_plex_user_placeholder);
|
||||
RUN_TEST(test_slow_scrolling_below_one_dot_per_second);
|
||||
|
||||
return UNITY_END();
|
||||
}
|
||||
Reference in new issue
Block a user