fix(sdk+launcher): 图标不渲染真根因(agent-219) — meow_ui_img.c scale_buf cover 采样把乘写成除(÷缩放比→采到源图左上角透明区,全丢); 改乘+居中裁剪偏移修正; 宿主旧测试用纯色图掩盖了该bug。+ main_menu App退出/结构变化重绘时 fb_pan_buf0_force 无条件pan回buffer0(防App翻页留buffer1致菜单残帧)

meow_ui.a→3e0ee8f7 launcher→9d0efc2f hello→9609ea6e files→90f5cf07 ncm→be8be221(均已上卡); 真机截图证据 .tmp/meowbug/fix1.png+fix_b2_after.png
This commit is contained in:
MeowOS committed 2026-08-31 15:42:24 +08:00
1 parent 05a19a9ea3
commit ab4da09e75
45 files changed
+1926 -147

No files matched your search

+40 -8
View File
@@ -64,12 +64,14 @@ enum {
MSG_PERF_RESULT = 0x0051, /* ↓ 聚合 JSON(perf/system 子集) */
MSG_POWER_ACTION = 0x0060, /* ↑ 电源/系统动作信号(专项服务 meow_svc_power) */
MSG_POWER_STATUS = 0x0061, /* ↓ 动作受理/结果 + 状态文本 */
/* ---- 【预留 · 本批不实现】picker:带返回值的跨 App 调用(M3 延伸,只留协议位)----
* 语义:App A 经 MSG_PICKER_CALL 请求 App B 弹一个 selector 并返回所选值(如文件/音轨
* 选择器)。属「跨 App 带返回值」调用,与单向业务通知(MSG_NOTIFY)不同;负载/应答结构
* 待 M3 延伸阶段定义(m_picker_call_t / m_picker_result_t),此处仅固定消息号与方向。 */
MSG_PICKER_CALL = 0x0070, /* ↑ 请求跨 App picker 调用(发起方 A → 持有方 B) */
MSG_PICKER_RESULT = 0x0071, /* ↓ picker 返回值(候选结果回 A) */
/* ---- picker:带返回值的跨 App 调用(M3 延伸,AMSD_DESIGN §6.2 二期已落地)----
* 语义:App A 经 MSG_PICKER_CALL 请求 App B 弹一个 selector 并返回所选值(如文件选择器)。
* amsd 为路由/决策者:它查 picker 表(app.json `picker.<action>=<chain>`)决定 handler App,
* 经 MSG_AMS_START(扩载荷含 picker 上下文)拉起 handler;handler 结果经 MSG_PICKER_RESULT
* 回传,launcher 转发 amsd 记录。属「跨 App 带返回值」调用。负载结构见下方
* m_picker_call_t / m_picker_result_t。 */
MSG_PICKER_CALL = 0x0070, /* ↑ 请求跨 App picker 调用(发起方 A → 持有方 B;→launcher→amsd) */
MSG_PICKER_RESULT = 0x0071, /* ↑ picker 返回值(候选结果回 A;→launcher→amsd) */
MSG_META = 0x0072, /* ↑ 媒体会话上报元数据/进度/状态(阶段 D 附录 B) */
MSG_PLAYCTL = 0x0073, /* ↓ 播放控制下发/↑ 控制器转发到最近活跃媒体会话 */
/* ---- amsd 控制(AMSD_DESIGN §4.2):amsd→launcher,申请拉起/终止某 App ----
@@ -326,15 +328,45 @@ typedef struct m_power_status {
/* ---- amsd 控制(AMSD_DESIGN §4.2)---- */
/* MSG_AMS_START →:请求 launcher 拉起某 App。app_id=包名(权威);activity 空=裸启动
* (launcher launch_app),非空=resolve_chain+launch_activity。 */
* (launcher launch_app),非空=resolve_chain+launch_activity。
* picker 上下文(二期):picker=1 时本次启动为「picker handler 调用」——launcher 注入 env
* MEOW_PICKER_ACTION/MEOW_PICKER_REQ_ID/MEOW_PICKER_CALLER 到子进程;handler App 据此进入
* picker 模式,选完后经 MSG_PICKER_RESULT 回传。 */
typedef struct m_ams_start {
char app_id[MEOW_APP_ID_MAX]; /* 32 */
char activity[MEOW_ACT_MAX]; /* 64;空=裸启动 */
} m_ams_start_t; /* 96 B */
uint32_t picker; /* 1=带 picker 上下文(注入 MEOW_PICKER_*) */
uint32_t picker_req_id; /* picker 请求号(回显到结果) */
char picker_action[24]; /* picker action(如 "pick_file");picker=0 忽略 */
char picker_caller[MEOW_APP_ID_MAX]; /* 32:发起方 app_id(""=系统/CLI) */
} m_ams_start_t; /* 160 B */
/* MSG_AMS_KILL →:请求 launcher 终止某 App(SIGTERM 语义,执行器=launcher)。 */
typedef struct m_ams_kill {
char app_id[MEOW_APP_ID_MAX]; /* 32 */
} m_ams_kill_t; /* 32 B */
/* ---- picker 负载(二期)---- */
/* MSG_PICKER_CALL ↑:发起跨 App picker 调用(App A → launcher → amsd 路由;或 amsd 内部)。
* caller=发起方 app_id(""=系统/CLI);req_id=调用方自填(结果/PICKER_RESULT 回显);
* action=要调用的 picker 类型(如 "pick_file");hint=初始目录等提示(空=缺省)。 */
typedef struct m_picker_call {
char caller[MEOW_APP_ID_MAX]; /* 32 */
uint32_t req_id; /* 调用方请求号 */
char action[24]; /* picker action */
char hint[128]; /* 提示(初始目录等);空=缺省 */
uint32_t flags; /* 预留 */
} m_picker_call_t; /* 192 B */
/* MSG_PICKER_RESULT ↑:picker 返回值(handler App → launcher → amsd)。caller/req_id/action
* 回显调用方;code=MEOW_OK/MEOW_ERR_*;value=返回项(路径/文本;空=用户取消)。 */
typedef struct m_picker_result {
char caller[MEOW_APP_ID_MAX]; /* 32:回显发起方(""=系统/CLI) */
uint32_t req_id; /* 回显请求号 */
char action[24]; /* 回显 action */
uint32_t code; /* MEOW_OK / MEOW_ERR_* */
char value[256]; /* 返回项(路径/文本);空=cancel */
} m_picker_result_t; /* 320 B */
#endif /* MEOW_IPC_H */