hello f45ba051→c06b3b4f; mipsel -Wall -Wextra 0 warning; 宿主 P1c/P2/P3+widgets 全 PASS 出入(诚实): view on_draw/on_event 路径暂未启用(注册表直绘已覆盖, on_draw 双画风险), 留批③实测; home/full 仍手绘未迁注册表
39 lines
918 B
C
39 lines
918 B
C
/* logic/state.c — 计数业务态(taps/secs)+ 可选推送监听器(biz→UI)。
|
|
*
|
|
* 纯 C(无 meow_ui.h 依赖):状态 + getter/setter + 监听器。UI 经 logic_taps_bump()/
|
|
* logic_secs_add() 改状态;业务改后触发监听器(若已注册)通知 UI 刷新——契约 ①②(§B.1)。
|
|
*/
|
|
#include "logic.h"
|
|
#include <stddef.h>
|
|
|
|
static int g_taps = 0;
|
|
static int g_secs = 0;
|
|
static logic_listener_fn g_listener = NULL;
|
|
static void *g_listener_ctx = NULL;
|
|
|
|
int logic_taps_get(void)
|
|
{
|
|
return g_taps;
|
|
}
|
|
void logic_taps_bump(void)
|
|
{
|
|
g_taps++;
|
|
if (g_listener) g_listener(LOGIC_EV_TAPS, g_listener_ctx);
|
|
}
|
|
|
|
int logic_secs_get(void)
|
|
{
|
|
return g_secs;
|
|
}
|
|
void logic_secs_add(int n)
|
|
{
|
|
g_secs += n;
|
|
if (g_listener) g_listener(LOGIC_EV_SECS, g_listener_ctx);
|
|
}
|
|
|
|
void logic_set_listener(logic_listener_fn cb, void *ctx)
|
|
{
|
|
g_listener = cb;
|
|
g_listener_ctx = ctx;
|
|
}
|