Files
MeowOS-For-R3P2/patch_v2/sdk/meow_ui.h
T
AskaEth 54750a63c5 feat(sdk): SDK 矢量字(meow_ft_*,§10.1)——上收阅读器 FreeType 管线
问题:SDK 位图字库(meow_font)只有离散字号档位,全字形 atlas 稳态 17.3MiB
(27MB 整机装不下)→ 大字库/大字号必出豆腐。阅读器 R1/R2 的 FreeType 管线已真机验证
(MiSans OTF),本 commit 将其上收 SDK,让任意 App 用上无级字号 + CJK 全字形。

设计(追加式,与位图字库并存):
- meow_ui_ft.c(独立 .o):meow_ft_load/unload/loaded/text/width/line_height/
  ascender/descender/cache_set_slots/cache_slots/cache_used。底层按 READER_ENGINE_NOTES §5:
  FT_New_Face(path) 按需读文件(零整载 anon);灰阶 FT_LOAD_RENDER|NO_HINTING|TARGET_LIGHT;
  glyph LRU key=(px<<32)|cp,默认 512(~0.46MB),可配 256/1024;测宽不栅格化。
- meow_ui_gfx.c 只加两个薄封装 meow_gfx_ft_blend_px/dirty(写 back_buf + 标脏),
  使 meow_ui_ft.o 不引入新依赖——「不调 meow_ft_* 的 App 零增量」(freetype 不拉入,已验证)。
- 降级:加载失败/无卡 → meow_ft_loaded()==0 → meow_ft_text 自动改走 meow_ui_text(位图字库,
  5x7 兜底),绝不豆腐不崩;meow_ft_width/line_height 降级位图字库度量。
- FreeType 2.14.3 vendor 进 patch_v2/sdk/vendor/(gitignore)+ build_sdk.sh 可复现拉取+裁剪
  构建(-DFT_DISABLE_ZLIB/BZIP2/PNG/HARFBUZZ/BROTLI=TRUE,静态 musl),freetype .o 编入
  meow_ui.a,App 链接命令不变(meow_ui.a libz.a -lpthread)。

验证:
- 宿主 test_meow_ui_ft 5 项全 PASS(加载/渲染像素非空/宽度测量/LRU 淘汰/降级回退)。
- 全量 SDK 回归:widgets/sdk_fixes/dispatch/notif_gesture/overlay_suppress/listvirt/box/anim/
  scroll/ime_fix/pinyin/notif_open/sb_collapse/theme/notify_ipc/audio_host/vol/str/config/
  sdk_input_keys 全 PASS。
- 交叉 -Wall -Wextra 全 SDK TU 0 warning;qemu-mipsel 冒烟 PASS(mipsel FreeType 真光栅化)。
- meow_ui.a 新 md5 6ff5be9455f9e197b35fa120be012041(未重链不部署 App,四 App 免重链)。

MEOW_APP_SDK.md 补 §10.1 矢量字一节 + 公共头索引/§9 构建约定更新;.gitignore 忽略
patch_v2/sdk/vendor/ 与 test_meow_ui_ft 二进制。
2026-09-02 09:51:23 +08:00

76 lines
4.0 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_ui.h — MeowOS 应用框架 SDK 公共 API(B1)。
*
* 蓝本:MEOW_APP_SDK.md §3-§8。应用只调本头声明的 API;绝不 open/mmap/ioctl
* /dev/fb0、绝不 open /dev/input/event* —— 屏幕与输入由 meow_ui 接管。
*
* 约定:
* - 坐标 0,0 = 左上;所有颜色为 24-bit RGB(0xRRGGBB),内部转 RGB565。
* - 所有绘制先进离屏 back_buf,调用 meow_ui_flush()/flush_region() 才上屏。
* - 文本字号:28(标题/状态栏)、20(正文/按钮)。
*
* 与设计文档的偏差(实现期定案,见 MEOW_APP_SDK.md §12 更新):
* [D1] meow_ui_opts 由实现补充(宽/高覆写,0=自动读 /dev/fb0);文档只引用未定义。
* [D2] meow_list_create 的数据源回调签名由实现定案(文档留占位注释)。
* [D3] meow_img_blend 内部实现补充(见 meow_ui_internal.h),非公共 API 增量。
* [D4] 增加 meow_theme_defaults()/meow_theme_current() 便于脱机(无 settings 文件)使用。
*
* ------------------------------------------------------------------
* 公共头模块索引(按模块拆分,本头为**伞头**:只做 #include 聚合,不定义新 API):
*
* include/meow_ui_types.h 核心类型/常量(物理键 keycode、滑动方向、meow_widget/meow_img 句柄)
* include/meow_ui_draw.h 绘制层(§3)+ 时间(§7)+ 刷新率调度(§7.1)
* include/meow_ui_image.h 图片层(§4)
* include/meow_ui_theme.h 主题/配置(§8:meow_theme、MD3 色板、风格族)
* include/meow_ui_ime.h 输入法(§5.1:ASCII/NUM/PINYIN 软键盘)
* include/meow_ui_widgets.h 控件层(§5 + §5.8 基座 + §5.8.6 MD3 组件 + §5.5 W_LISTVIEW)
* include/meow_ui_input.h 输入层/生命周期(§6)+ 通用长按(§6.3)
* include/meow_ui_activity.h Activity 栈 + 三层控件模型(§6.1)
* include/meow_ui_zorder.h 绘制物注册表 / z 序 / 区域重画(§6.2)
* include/meow_ui_statusbar.h 全局状态栏 / 全屏(§3.1)
* include/meow_ui_dialog.h 模态 Dialog / BottomSheet(§5.8.6)
* include/meow_ui_log.h 应用日志(§9)
* include/meow_ui_notify.h 应用通知(§9.1)
* include/meow_ui_config.h 应用配置读写(§9.2)
* include/meow_ui_font.h 字体列表(§5.7)+ 字体分层(§10)+ 矢量字 meow_ft_*(§10.1)
* include/meow_ui_audio.h 独占音频客户端(§11)
* include/meow_ui_box.h 线性布局引擎(§12.1:meow_box,固定/weight/wrap/对齐/嵌套)
* include/meow_ui_anim.h 动画基座+UI 节拍器(§12.2:tween/easing/池+脏区联动)
* include/meow_ui_scroll.h 滚动物理(§12.3:速度跟踪/fling/边界回弹/snap)
* include/meow_ui_str.h 字符串资源/i18n(§13:meow_str/meow_strf/meow_str_set_locale)
*
* 其余模块头(非伞头、App 按需显式 include,均保持不动):
* meow_ui_view.h / meow_ui_nav.h / meow_ui_media.h / meow_ui_sys.h / meow_ui_vol.h
* ------------------------------------------------------------------
*
* 拆分不改变任何 API 名称/类型/宏(-Wall -Wextra 0 warning,既有 App 零改动)。
*/
#ifndef MEOW_UI_H
#define MEOW_UI_H
#include <stdint.h>
#include <stddef.h>
#include "include/meow_ui_types.h"
#include "include/meow_ui_draw.h"
#include "include/meow_ui_image.h"
#include "include/meow_ui_ime.h"
#include "include/meow_ui_input.h"
#include "include/meow_ui_activity.h"
#include "include/meow_ui_zorder.h"
#include "include/meow_ui_statusbar.h"
#include "include/meow_ui_theme.h"
#include "include/meow_ui_widgets.h"
#include "include/meow_ui_dialog.h"
#include "include/meow_ui_log.h"
#include "include/meow_ui_notify.h"
#include "include/meow_ui_config.h"
#include "include/meow_ui_font.h"
#include "include/meow_ui_audio.h"
#include "include/meow_ui_box.h"
#include "include/meow_ui_anim.h"
#include "include/meow_ui_scroll.h"
#include "include/meow_ui_str.h"
#endif /* MEOW_UI_H */