feat: M6.10–M6.19 批量收编 + M6.19 推卡验收
- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘) - OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复 - ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640 - 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫) - 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
This commit is contained in:
1 parent
c2ee7626a4
commit
3d70a3dd2c
176 files changed
+15507
-597
No files matched your search
@@ -24,7 +24,8 @@ struct rd_book {
|
||||
char path[400];
|
||||
char font[400];
|
||||
char base[256];
|
||||
const char *encname;
|
||||
const char *encname; /* TXT 有效编码可读名(含覆盖后);非 TXT = "" */
|
||||
rd_enc_t enc; /* TXT 有效编码;非 TXT = RD_ENC_UTF8 */
|
||||
rdft *ft;
|
||||
rd_src *src;
|
||||
rd_fmt_t fmt;
|
||||
@@ -44,21 +45,22 @@ struct rd_book {
|
||||
int seg_cache_idx;
|
||||
};
|
||||
|
||||
static const char *fmt_encname(rd_fmt_t f, const char *path)
|
||||
/* 编码枚举 → 可读名(R3:Big5 正确解码后名实相符)。 */
|
||||
static const char *enc_to_name(rd_enc_t enc)
|
||||
{
|
||||
if (f == RD_FMT_TXT) {
|
||||
rdtxt_info info;
|
||||
if (rdtxt_probe(path, &info) == 0) {
|
||||
switch (info.enc) {
|
||||
case RD_ENC_UTF8: return "UTF-8";
|
||||
case RD_ENC_UTF16LE: return "UTF-16LE";
|
||||
case RD_ENC_UTF16BE: return "UTF-16BE";
|
||||
case RD_ENC_GB18030: return "GB18030";
|
||||
case RD_ENC_BIG5: return "Big5(按GB18030)";
|
||||
case RD_ENC_ASCII: return "ASCII";
|
||||
}
|
||||
}
|
||||
switch (enc) {
|
||||
case RD_ENC_UTF8: return "UTF-8";
|
||||
case RD_ENC_UTF16LE: return "UTF-16LE";
|
||||
case RD_ENC_UTF16BE: return "UTF-16BE";
|
||||
case RD_ENC_GB18030: return "GB18030";
|
||||
case RD_ENC_BIG5: return "Big5";
|
||||
case RD_ENC_ASCII: return "ASCII";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
static const char *fmt_encname(rd_fmt_t f, rd_enc_t enc)
|
||||
{
|
||||
if (f == RD_FMT_TXT) return enc_to_name(enc);
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -169,7 +171,10 @@ int rd_book_open(rd_book **b, const char *path, const char *font_path,
|
||||
|
||||
if (rd_src_open(&x->src, path) != 0) goto close;
|
||||
x->fmt = rd_src_fmt(x->src);
|
||||
x->encname = fmt_encname(x->fmt, path);
|
||||
x->enc = RD_ENC_UTF8;
|
||||
rd_enc_t tmp_enc = RD_ENC_UTF8;
|
||||
if (rd_src_txt_enc(x->src, &tmp_enc) == 0) x->enc = tmp_enc;
|
||||
x->encname = fmt_encname(x->fmt, x->enc);
|
||||
x->is_img = (x->fmt == RD_FMT_CBZ);
|
||||
|
||||
if (!x->is_img) {
|
||||
@@ -210,6 +215,7 @@ int rd_book_font(rd_book *b) { return b ? b->fs : 0; }
|
||||
int rd_book_ls(rd_book *b) { return b ? b->ls : 0; }
|
||||
int rd_book_is_image(rd_book *b) { return b ? b->is_img : 0; }
|
||||
const char *rd_book_encname(const rd_book *b) { return b ? (b->encname ? b->encname : "") : ""; }
|
||||
rd_enc_t rd_book_enc_get(const rd_book *b) { return b ? b->enc : RD_ENC_UTF8; }
|
||||
|
||||
void rd_book_geom(rd_book *b, int *fs, int *ls, int *pw, int *ph, int *mx, int *my, int *top)
|
||||
{
|
||||
@@ -225,6 +231,28 @@ void rd_book_geom(rd_book *b, int *fs, int *ls, int *pw, int *ph, int *mx, int *
|
||||
const char *rd_book_basename(const rd_book *b) { return b ? b->base : ""; }
|
||||
const char *rd_book_path(const rd_book *b) { return b ? b->path : ""; }
|
||||
|
||||
/* R3:TXT 编码切换——重开 src(带覆盖编码)、重建页索引、回锚当前页。非 TXT/CBZ 返回 -1。
|
||||
* 事务式:先开新 src 成功才换(失败保留旧 src,书仍可用,返回负值)。 */
|
||||
int rd_book_set_enc(rd_book *b, rd_enc_t enc)
|
||||
{
|
||||
if (!b || b->is_img || b->fmt != RD_FMT_TXT) return -1;
|
||||
if (enc == b->enc) return b->cur; /* 同编码,无需重建 */
|
||||
int seg; int32_t ch;
|
||||
rd_book_anchor(b, &seg, &ch);
|
||||
|
||||
rd_src *ns = NULL;
|
||||
if (rd_src_open_with_enc(&ns, b->path, &enc) != 0) return -2; /* 旧 src 未动 */
|
||||
rd_src_free(b->src); b->src = ns; /* 换新 */
|
||||
b->enc = enc;
|
||||
b->encname = fmt_encname(b->fmt, b->enc);
|
||||
|
||||
/* 重建索引(复用现值 fs/ls/content_*),再回锚 */
|
||||
free(b->segs); free(b->pages); b->segs = NULL; b->pages = NULL;
|
||||
b->nsegs = b->npages = 0;
|
||||
if (build_index(b) != 0) return -3; /* 新 src 有效但索引空 → 渲染返回 -1,安全降级 */
|
||||
return rd_book_jump_to_anchor(b, seg, ch, b->fs, b->ls);
|
||||
}
|
||||
|
||||
void rd_book_anchor(rd_book *b, int *seg, int32_t *ch)
|
||||
{
|
||||
if (!b || b->npages <= 0) { if (seg) *seg = 0; if (ch) *ch = 0; return; }
|
||||
@@ -243,6 +271,15 @@ int rd_book_turn(rd_book *b, int delta)
|
||||
return np;
|
||||
}
|
||||
|
||||
int rd_book_set_page(rd_book *b, int page)
|
||||
{
|
||||
if (!b || b->npages <= 0) return 0;
|
||||
if (page < 0) page = 0;
|
||||
if (page >= b->npages) page = b->npages - 1;
|
||||
b->cur = page;
|
||||
return page;
|
||||
}
|
||||
|
||||
/* ---- 文本页渲染(FreeType 字形 → 全屏 565) ---- */
|
||||
static int render_text_page(rd_book *b, int page_no, uint16_t *out, int pitch, uint16_t bg565, uint16_t fg565)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user