Files
MeowOS-SDK/tuku/logic/reader.h
T
AskaEth ff97f3cee7 feat(tuku): M7 条漫模式与续读——模式一键切换/每册记忆、视口±1 懒解码、滑块跳页、册间衔接
- 条漫:meow_scroll 跟手+fling,按滚动位置懒解码视口±1 页(驻留上限 4 页);
  排版用 mr_book_meta 累加适宽高度(nav.c 纯逻辑,宿主可测)
- 模式:阅读 chrome 图标一键切翻页/条漫;每册模式与 last page 经 meow_config 持久化
  (reader.mode/page.<FNV1a64(册路径)>),重进该册恢复模式与页码
- 续读:离开/翻页/滚动停止节流落盘;书库扫描给含图册副标题追加「· 续读 Pn」
- 册间衔接:末页前进→同父目录下一含图册首页,首页后退→上一册末页;无相邻册轻提示不退出
- 跳页:chrome 内 meow_slider,目标页预解码完成后落位(2.5s 超时降级提示)
- 解码:改走 M12 预算解码 meow_img_load_file_dim;超大 PNG/BMP 先 probe 预判,
  超 40MiB 原始 RGBA 跳过并显示「图片无法显示」,12MiB 以上记 WARN(如实保留残余风险)
- 测试:新增条漫排版/跳页状态/模式续读持久化/册间边界宿主测试,以及真实 SDK 源码树上的
  阅读器集成测试(模式切换/跳页落位/续读/跨册),test/run_webtoon_tests.sh 一键运行
2026-11-04 21:49:33 +08:00

55 lines
2.6 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.
/* logic/reader.h — 阅读器纯逻辑接缝(M4 填充实现,M3 先落状态 API;M7 追加模式与每册续读状态)。
*
* 阅读方向默认 RTL(日式漫画从右往左翻);设置页/阅读器可切 LTR。
* 阅读模式(翻页/条漫)与每册 last page 走 meow_config 持久化,键含册标识。
* 本模块保持纯 C(不 include meow_ui.h),宿主可直接测。
*/
#ifndef MR_READER_H
#define MR_READER_H
#ifdef __cplusplus
extern "C" {
#endif
#define MR_DIR_RTL 1 /* 默认:右到左(日漫) */
#define MR_DIR_LTR 0 /* 左到右 */
int mr_reader_get_direction(void);
/* 只接受 MR_DIR_RTL / MR_DIR_LTR;其它值忽略(保持原方向)。 */
void mr_reader_set_direction(int dir);
/* ============================================================ */
/* 阅读模式(M7):左右翻页 / 条漫竖向连续滚动 */
/* ============================================================ */
#define MR_MODE_PAGED 0 /* 左右翻页(默认) */
#define MR_MODE_WEBTOON 1 /* 条漫:垂直连续滚动 */
int mr_mode_valid(int mode);
const char *mr_mode_name(int mode); /* "paged" / "webtoon"(配置值;非法按 paged) */
int mr_mode_parse(const char *s); /* -1=未知 */
/* ============================================================ */
/* 每册续读状态(last page + mode,meow_config 持久化) */
/* ------------------------------------------------------------
* 键 = reader.<field>.<FNV-1a64(规范化目录路径)>:同一册(同一目录)跨启动恢复,
* 不同册互不影响;目录改名/移动视为新册。写失败只 WARN(best-effort,不阻断阅读)。
* 依赖:只 include 配置/日志两个模块头,宿主测试用 settings_reader_stub 顶替。
* ============================================================ */
#define MR_CONT_PATH_MAX 512 /* 册路径规范化的本地缓冲(同 MR_PATH_MAX 口径) */
#define MR_CONT_PAGE_MAX 1000000 /* 配置里 last page 的合理上限(防坏值) */
int mr_cont_key(const char *dir, const char *field, char *out, int outsz);
int mr_cont_get_mode(const char *dir, int def);
void mr_cont_set_mode(const char *dir, int mode);
int mr_cont_get_page(const char *dir, int def);
void mr_cont_set_page(const char *dir, int page);
/* 一次写 page+mode(尽最大努力,两键分别尝试)。 */
void mr_cont_save(const char *dir, int page, int mode);
/* 书库行续读角标:1=写入 "续读 P5"(page>0 才有记录);0=无。 */
int mr_cont_badge(const char *dir, char *out, int outsz);
#ifdef __cplusplus
}
#endif
#endif /* MR_READER_H */