feat(sdk): 绘制期通用clip + view递归/on_event接线 (agent-195) — ①栈式clip rect(g_clip_stack[16]), 所有写像素原语过clip, meow_widget_draw push/pop控件矩形(含W_CUSTOM, 根治越界脏区), IME/模态顶层全屏不受影响 ②view enter/leave递归children + meow_view_dispatch_event(z降序子>父命中即消费); hello App层显式驱动退役
meow_ui.a→da4d3a7d; hello→c655ba43; 宿主4套件全PASS(含clip越界断言+view递归断言) 出入: W_SLIDER拇指在max处被裁(既有几何瑕疵可见化,待修); on_draw祖先已进入即画
This commit is contained in:
1 parent
b2e7cc8c70
commit
32a6a8ed1e
14 files changed
+257
-44
No files matched your search
@@ -1204,6 +1204,10 @@ int meow_switch_get(meow_widget *w) { return w && w->type == W_SWITCH ? w->on :
|
||||
void meow_widget_draw(meow_widget *w)
|
||||
{
|
||||
if (!w) return;
|
||||
/* 绘制期裁剪(§3):把绘制 clip 设为该控件矩形,画完恢复——任何控件(含 W_CUSTOM
|
||||
* 自定义画布)不可能画出自身边界,从根上杜绝越界脏区。可嵌套(W_LAYOUT/W_CARD 递归
|
||||
* 子控件会再 push 子控件矩形);顶层 clip=全屏,故 IME/模态直绘不受影响。 */
|
||||
meow_gfx_clip_push(w->x, w->y, w->w, w->h);
|
||||
const meow_theme *th = meow_theme_get();
|
||||
int disabled = widget_disabled(w);
|
||||
|
||||
@@ -1616,4 +1620,5 @@ void meow_widget_draw(meow_widget *w)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
meow_gfx_clip_pop(); /* 恢复进入前的 clip(嵌套:回到父控件矩形/全屏) */
|
||||
}
|
||||
Reference in new issue
Block a user