feat(sdk): 中文拼音输入法落地 (agent-229, 设计稿 IME_PINYIN_DESIGN.md) — 静态表词库(403音节+329词,rodata ~20.5KB,零堆)+引擎(meow_pinyin.c,音节切分DFS+联想)+SDK集成(MEOW_IME_PINYIN尾部追加零ABI破坏,组合条+候选栏+翻页+中英切换,英文零回归)

meow_ui.a→a7a9043e; hello/files/ncm重链已部署; test_pinyin 5项全过+test_ime_fix零回归
This commit is contained in:
MeowOS committed 2026-08-31 18:34:51 +08:00
1 parent 265ae37dbd
commit 0003097936
2 files changed
+12 -2

No files matched your search

BIN
View File
Binary file not shown.
+12 -2
View File
@@ -50,7 +50,7 @@ static int g_drag_page_delta = 0; /* 页面拖拽累计位移(节流重建,
* 列表态 list/list_sel 已迁 ui/demo/list/list.c(列表区 CONTAINER 子视图)持有;
* 进度语义值 prog 已上收 logic/state.c(logic_prog_*)。 */
static struct {
int sw_on; int slider; char tf[32];
int sw_on; int slider; char tf[32]; char tf_py[32];
int ck; int r1, r2; int btn[5]; int card; int tab;
} g_ds = { .sw_on = 1, .slider = 40, .r1 = 1, .tab = 1 };
@@ -77,7 +77,8 @@ static meow_widget *g_dbtn_b[5]; static rect_t r_btn[5]; /* Button 五型 */
static meow_widget *g_dbtn_d; /* DISABLED 按钮(禁用不命中,无需 rect) */
static meow_widget *g_dsw; static rect_t r_dsw; /* Switch */
static meow_widget *g_dslider; static rect_t r_slider, r_slider_txt; /* Slider + 值文本 */
static meow_widget *g_dtf; static rect_t r_dtf; /* TextField */
static meow_widget *g_dtf; static rect_t r_dtf; /* TextField (英文) */
static meow_widget *g_dtf_py; static rect_t r_dtf_py; /* TextField (拼音 IME 演示) */
static meow_widget *g_dcb; static rect_t r_dcb; /* Checkbox */
static meow_widget *g_dr1, *g_dr2; rect_t r_dr1, r_dr2; /* Radio 单选组 */
static meow_widget *g_dprl; static rect_t r_prl; /* ProgressBar 线性 */
@@ -197,6 +198,8 @@ static void demo_build_at(int scroll)
demo_draw_slider_val, NULL);
r_dtf = RX(DCL_X, SY(yb), DFW, 44); g_dtf = meow_textfield_create(r_dtf.x, r_dtf.y, r_dtf.w, r_dtf.h, "Type here...", g_ds.tf, 32, MEOW_IME_ASCII); SLOT(g_dtf, r_dtf.x, r_dtf.y, r_dtf.w, r_dtf.h); yb += 54;
/* 拼音演示:MEOW_IME_PINYIN,输入「nihao」出候选「你好」上屏 */
r_dtf_py = RX(DCL_X, SY(yb), DFW, 44); g_dtf_py = meow_textfield_create(r_dtf_py.x, r_dtf_py.y, r_dtf_py.w, r_dtf_py.h, "拼音: nihao", g_ds.tf_py, 32, MEOW_IME_PINYIN); SLOT(g_dtf_py, r_dtf_py.x, r_dtf_py.y, r_dtf_py.w, r_dtf_py.h); yb += 54;
r_dcb = RX(DCL_X, SY(yb), 34, 34); g_dcb = meow_checkbox_create(r_dcb.x, r_dcb.y); SLOT(g_dcb, r_dcb.x, r_dcb.y, r_dcb.w, r_dcb.h);
r_dr1 = RX(DCR_X, SY(yb), 34, 34); g_dr1 = meow_radio_create(r_dr1.x, r_dr1.y); SLOT(g_dr1, r_dr1.x, r_dr1.y, r_dr1.w, r_dr1.h);
@@ -311,6 +314,13 @@ static int demo_content_tap(int x, int y)
meow_ui_invalidate(r_dtf.x, r_dtf.y, r_dtf.w, r_dtf.h);
return 1;
}
if (meow_widget_hit(g_dtf_py, x, y)) {
meow_textfield_activate(g_dtf_py); /* 拼音 IME */
strncpy(g_ds.tf_py, meow_textfield_text(g_dtf_py), sizeof g_ds.tf_py - 1);
g_ds.tf_py[sizeof g_ds.tf_py - 1] = 0;
meow_ui_invalidate(r_dtf_py.x, r_dtf_py.y, r_dtf_py.w, r_dtf_py.h);
return 1;
}
if (meow_widget_hit(g_dcard_btn, x, y)) { d_toggle_sel(g_dcard_btn, r_cardbtn); g_ds.card = meow_widget_selected(g_dcard_btn); return 1; }
if (g_dtab) {
int t = meow_tabbar_hit(g_dtab, x, y);