From 845633773b2ce664f6d844cc61dbe1bdc5a42606 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 27 Oct 2026 13:25:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(window):=20=E6=A0=87=E9=A2=98=E6=A0=8F?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E4=BF=9D=E6=8C=81=E6=96=B9=E8=A7=92=EF=BC=8C?= =?UTF-8?q?=E4=BB=85=E6=8C=89=E7=AA=97=E5=8F=A3=E5=9C=86=E8=A7=92=E8=A3=81?= =?UTF-8?q?=E5=89=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一版把 WIN11 关闭按钮红底做了内收 + 按钮圆角,不符合预期: 窗口是全圆角,但按钮本身应当是方角,唯一需要丢弃的是与窗口 右上圆角重合的那部分像素。 - WIN11 关闭按钮红底恢复整块矩形,仅用 _window_round_keep 丢弃窗口圆角外像素 - WIN7/WINXP 按钮底色同样改为方角(r=0),仍做窗口轮廓裁剪 - 按钮命中区域保持不变(仍是完整方角矩形) --- Apps/Explorer/desk_server.vp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Apps/Explorer/desk_server.vp b/Apps/Explorer/desk_server.vp index d0a6264..32613ec 100644 --- a/Apps/Explorer/desk_server.vp +++ b/Apps/Explorer/desk_server.vp @@ -1053,7 +1053,8 @@ class DeskServer: if rx < 0 or rx >= s.w or ry < 0 or ry >= s.h: return 0 return self._round_keep(rx, ry, s.w, s.h, WIN_RADIUS) - # 关闭键底色:按钮自身圆角 + 窗口圆角双重裁剪,避免 WIN11 右上角红块溢出 + # 标题栏按钮底色:按需做按钮圆角(r=0 即方角)+ 窗口圆角裁剪, + # 保证按钮本身是方的,只有与窗口圆角重合的角被丢弃。 def _close_fill_row(self, s: desk.WinSlot*, bx: int, by: int, bw: int, bh: int, yy: int, col: uint32, r: int): lry: int = yy - by if lry < 0 or lry >= bh: return @@ -1089,7 +1090,7 @@ class DeskServer: base_col2: uint32 = self.rgb(uint32(200), uint32(50), uint32(50)) if hovered != 0: base_col2 = self.rgb(uint32(220), uint32(60), uint32(60)) if pressed != 0: base_col2 = self.rgb(uint32(140), uint32(25), uint32(25)) - self._close_fill_row(s, bx, by, bw, bh, yy, base_col2, 3) + self._close_fill_row(s, bx, by, bw, bh, yy, base_col2, 0) x_col = self.rgb(uint32(255), uint32(255), uint32(255)) else: x_col = self.rgb(uint32(150), uint32(150), uint32(150)) @@ -1098,8 +1099,8 @@ class DeskServer: bg: uint32 = self.rgb(uint32(200), uint32(50), uint32(50)) if pressed != 0: bg = self.rgb(uint32(140), uint32(25), uint32(25)) if style == STYLE_WIN11: - # 圆角样式:向内收 2px,按钮自身圆角 + 窗口右上角圆角双重裁剪 - self._close_fill_row(s, bx + 2, by + 2, bw - 4, bh - 4, yy, bg, 3) + # 按钮本身保持方角;只丢弃窗口圆角轮廓之外的部分 + self._close_fill_row(s, bx, by, bw, bh, yy, bg, 0) else: self.row_fill(bx, yy, bw, bg) x_col = self.rgb(uint32(255), uint32(255), uint32(255))