Files
MeowOS-For-R3P2/patch_v2/meow_launcherd/test_menu_row_gap.c
T

68 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* meow_launcherd/test_menu_row_gap.c — 宿主验证:主界面列表模式圆角卡列表项外边距
* (item margin/gap)几何。纯整数运算,不链 SDK / 不开设备:
* gcc test_menu_row_gap.c -o test_menu_row_gap && ./test_menu_row_gap
*
* 断言集(对应「相邻 item 顶之间 = item 高 + gap」的可见形式):
* ① 相邻卡顶间距 = MENU_LIST_ROW_H(= 卡高 + gap;SDK 行距不变);
* ② 卡片间可见外距 = MENU_LIST_ROW_GAP;
* ③ 卡在其行高内上下对称内缩 → 内容(按行高垂直居中)落卡中心;
* ④ 滚动偏移只整体平移,不改变上述间距/对称。
*
* 几何公式与 patch_v2/meow_launcherd/main_menu.c 的 menu_row_card_y/menu_row_card_h 同源:
* 卡顶 = 行顶 + gap/2;卡高 = 行高 - gap。
*/
#include <stdio.h>
#include <assert.h>
#define MENU_LIST_ROW_H 60 /* 行距(SDK listview item_h,不变) */
#define MENU_LIST_ROW_GAP 8
/* 与 main_menu.c menu_row_card_y / menu_row_card_h 同源(上下对称内缩)。 */
static int menu_row_card_y(int row_top) { return row_top + MENU_LIST_ROW_GAP / 2; }
static int menu_row_card_h(int h) { return h - MENU_LIST_ROW_GAP; }
/* 行顶 = list_y + idx*item(SDK listview 布局:行距=item)。 */
static int row_top(int idx, int item, int list_y, int off) { return list_y + idx * item - off; }
int main(void)
{
const int item = MENU_LIST_ROW_H;
const int gap = MENU_LIST_ROW_GAP;
const int list_y = 100;
int y0 = menu_row_card_y(row_top(0, item, list_y, 0));
int y1 = menu_row_card_y(row_top(1, item, list_y, 0));
int h = menu_row_card_h(item);
/* ① 卡相对行顶对称内缩 gap/2;卡高=item-gap;卡高+gap=item */
assert(y0 == list_y + gap / 2);
assert(h == item - gap);
assert(h + gap == item);
/* ① 相邻卡顶间距 = item(顶到顶 = 卡高 + gap) */
assert(y1 - y0 == item);
/* ② 卡片间可见外距 = gap(卡 0 底 到 卡 1 顶) */
assert(y1 - (y0 + h) == gap);
/* ③ 卡中心 == 行中心(内容按行高居中 → 落卡中心) */
assert(y0 - gap / 2 + item / 2 == y0 + h / 2);
/* 上行底到卡底 = gap/2(下对称) */
assert((list_y + item) - (y0 + h) == gap / 2);
/* ④ 滚动偏移只平移,不改变间距/对称(任意 off) */
for (int off = 0; off <= 2 * item; off += item / 2) {
int r2 = row_top(2, item, list_y, off);
int r3 = row_top(3, item, list_y, off);
int a2 = menu_row_card_y(r2);
int a3 = menu_row_card_y(r3);
assert(a3 - a2 == item);
assert(a3 - (a2 + h) == gap);
assert(a2 - r2 == gap / 2);
assert((r2 + item) - (a2 + h) == gap / 2);
}
printf("PASS menu_row_gap=%d card_h=%d top2top=%d visible_gap=%d symmetric=1\n",
gap, h, item, gap);
return 0;
}