fix(window): 标题栏按钮保持方角,仅按窗口圆角裁剪
上一版把 WIN11 关闭按钮红底做了内收 + 按钮圆角,不符合预期: 窗口是全圆角,但按钮本身应当是方角,唯一需要丢弃的是与窗口 右上圆角重合的那部分像素。 - WIN11 关闭按钮红底恢复整块矩形,仅用 _window_round_keep 丢弃窗口圆角外像素 - WIN7/WINXP 按钮底色同样改为方角(r=0),仍做窗口轮廓裁剪 - 按钮命中区域保持不变(仍是完整方角矩形)
This commit is contained in:
1 parent
8dc806e7e2
commit
845633773b
1 file changed
+5
-4
@@ -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))
|
||||
|
||||
Reference in new issue
Block a user