feat: E1002 宽版用量配色改三档绿/黑/红+今日实时与近7天版式重做
- 用量与 pace 配色由「红/黑」二档、黄「注意」档,改为绿(健康)/黑(正常)/红(危险)三档,新增 USAGE_OK/PACE_TOL 阈值,去掉黄色进度条 - Claude/ChatGPT 用量行标签改用 statusline 同款长标签(all 5h/fable 7d 等) - 今日实时区块改为指标名角标+数值与环比同比整组居中;近7天区块改为真实数据表(取30天趋势缓存最后7天),不画折线 - renderer.py 抽出 _cmp_at/_pace_color 钩子+新增 F36 字体供宽版复用;CLAUDE.md 同步版式与配置项说明 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
25
renderer.py
25
renderer.py
@@ -41,6 +41,7 @@ class DashboardRenderer:
|
||||
self.F13 = ImageFont.truetype(font_path, 13 * k) # 5h/7d 与 pace 用;接近原生 12px,畸变很小
|
||||
self.F16 = ImageFont.truetype(font_path, 16 * k) # 非整数倍(1.33x):靠 fontmode='1' 保持纯色,笔画略不均可接受
|
||||
self.F24 = ImageFont.truetype(font_path, 24 * k)
|
||||
self.F36 = ImageFont.truetype(font_path, 36 * k) # 3 倍整数缩放,仍锐利;宽版今日实时数值用
|
||||
self.F48 = ImageFont.truetype(font_path, 48 * k)
|
||||
|
||||
# ---------- 基础绘制工具 ----------
|
||||
@@ -94,13 +95,23 @@ class DashboardRenderer:
|
||||
self.d.polygon(pts, fill=fill)
|
||||
|
||||
# ---------- 组件 ----------
|
||||
def _cmp_line(self, cx, y, label, pair, fg=BLACK):
|
||||
"""环比/同比一行:标签 + 涨跌三角 + 数值,整体居中。direction 为 None 时不画三角。"""
|
||||
def _cmp_w(self, label, pair):
|
||||
"""环比/同比一行的总宽度(标签 + 间隙 + 三角 + 数值),供居中/右对齐排布。"""
|
||||
direction, val = pair
|
||||
k = self.k
|
||||
lw = self._tw(label, self.F12); gap = 5 * k; nw = self._tw(val, self.F12)
|
||||
trw, tgap = (8 * k, 4 * k) if direction else (0, 0)
|
||||
x = cx - (lw + gap + trw + tgap + nw) / 2
|
||||
return self._tw(label, self.F12) + 5 * k + trw + tgap + self._tw(val, self.F12)
|
||||
|
||||
def _cmp_line(self, cx, y, label, pair, fg=BLACK):
|
||||
"""环比/同比一行:标签 + 涨跌三角 + 数值,整体居中于 cx。direction 为 None 时不画三角。"""
|
||||
self._cmp_at(cx - self._cmp_w(label, pair) / 2, y, label, pair, fg)
|
||||
|
||||
def _cmp_at(self, x, y, label, pair, fg=BLACK):
|
||||
"""环比/同比一行,左对齐于 x(宽版把它放在数值右侧时用)。"""
|
||||
direction, val = pair
|
||||
k = self.k
|
||||
lw = self._tw(label, self.F12); gap = 5 * k
|
||||
trw, tgap = (8 * k, 4 * k) if direction else (0, 0)
|
||||
self.text(x, y, label, self.F12, fill=fg); x += lw + gap
|
||||
# 方向语义配色(红涨):涨 → 箭头与百分比数值一起红;跌/无 → 黑(标签始终黑)
|
||||
up = direction == "up"
|
||||
@@ -140,7 +151,7 @@ class DashboardRenderer:
|
||||
"""时间维度对比(pace = 用量% − 时间%):>0 超前↑红;<0 节余↓黑;=0 持平。
|
||||
数值(F13)两位补零、右端对齐 xr,小三角(6)紧贴其左;均竖直居中 cy。返回整体宽度供左侧定位。"""
|
||||
up = diff > 0
|
||||
color = RED if up else BLACK
|
||||
color = self._pace_color(diff)
|
||||
txt = f"{abs(int(diff)):02d}"
|
||||
tw = self._tw(txt, self.F13)
|
||||
self._mid(xr, cy, txt, self.F13, fill=color, bold=self.k, align="r")
|
||||
@@ -185,6 +196,10 @@ class DashboardRenderer:
|
||||
c = RED if (ok and pct >= warn) else BLACK
|
||||
return c, c, c
|
||||
|
||||
def _pace_color(self, diff):
|
||||
"""pace(用量% − 时间%)配色钩子。三色版:>0 超前红,否则黑。"""
|
||||
return RED if diff > 0 else BLACK
|
||||
|
||||
def _loc_pin(self, x, y, w=8, fg=BLACK, bg=WHITE):
|
||||
"""定位图标:实心水滴(圆头+尖尾) + 白色挖孔,1-bit 下轮廓清晰。
|
||||
(x,y) 为头部圆左上角,w 为头径,总高约 w*1.5。"""
|
||||
|
||||
Reference in New Issue
Block a user