feat: E1002 顶部时钟改 F84+用量行 12px 三档配色、标签右对齐
- 顶部时钟 F48→F84 占满 A 段,星期/日期移到时钟右侧并与基线对齐 - 用量行:标签常规字重右对齐贴进度条,百分比与 pace 数字 12px 粗体 - 配色:进度条/边框/百分比同色,用量与 pace 各自三档绿/黑/红、独立取色 (曾按要求加过黄档,同日被否并移除) - 用量块标题右侧「快照」改为「上次更新」,与今日实时统一 - 今日实时标题与指标名间距加大 4px - 基类抽出 PCT_TRACK / LABEL_BOLD / LABEL_ALIGN / FPACE 供宽版覆写, 400×300 小屏输出逐像素不变 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
23
renderer.py
23
renderer.py
@@ -31,6 +31,14 @@ BLACK, WHITE, RED = (0, 0, 0), (255, 255, 255), (255, 0, 0)
|
||||
|
||||
|
||||
class DashboardRenderer:
|
||||
# 百分比数字的字符间距(px,乘 k):F16 为 16/12x 非整数倍缩放,数字墨迹无侧边距、相邻紧贴,需手动加距;
|
||||
# 子类若把百分比换成原生 12px 字号(宽版),字形自带侧边距,应覆写为 0。
|
||||
PCT_TRACK = 2
|
||||
# 用量行左标签的字重与对齐:三色版 粗体、左对齐(贴 x0);宽版覆写为 常规字重、右对齐(贴进度条左侧留 LABEL_GAP)。
|
||||
LABEL_BOLD = True
|
||||
LABEL_ALIGN = "l"
|
||||
LABEL_GAP = 8
|
||||
|
||||
def __init__(self, font_path=config.FONT_PATH, size=(config.WIDTH, config.HEIGHT), k=1):
|
||||
"""k:整体缩放系数(整数)。k=1 为 400x300 原版;k=2 供 800x480 设备(reTerminal E1002)复用组件:
|
||||
字体按 k 倍创建(点阵字体整数倍最锐利),组件内的像素常量一律乘 k,故各组件在两种尺寸下形态一致。
|
||||
@@ -40,6 +48,7 @@ class DashboardRenderer:
|
||||
self.F12 = ImageFont.truetype(font_path, 12 * k)
|
||||
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.FPACE = self.F13 # pace 数值字体;与标签解耦,宽版把它换成 24px 而标签仍 12px
|
||||
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)
|
||||
@@ -149,12 +158,12 @@ class DashboardRenderer:
|
||||
|
||||
def _pace(self, xr, cy, diff):
|
||||
"""时间维度对比(pace = 用量% − 时间%):>0 超前↑红;<0 节余↓黑;=0 持平。
|
||||
数值(F13)两位补零、右端对齐 xr,小三角(6)紧贴其左;均竖直居中 cy。返回整体宽度供左侧定位。"""
|
||||
数值(FPACE,默认 F13)两位补零、右端对齐 xr,小三角(6)紧贴其左;均竖直居中 cy。返回整体宽度供左侧定位。"""
|
||||
up = diff > 0
|
||||
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")
|
||||
tw = self._tw(txt, self.FPACE)
|
||||
self._mid(xr, cy, txt, self.FPACE, fill=color, bold=self.k, align="r")
|
||||
if diff == 0:
|
||||
return tw
|
||||
TRI_GAP, TRI = 4 * self.k, 6 * self.k
|
||||
@@ -173,9 +182,13 @@ class DashboardRenderer:
|
||||
k = self.k
|
||||
LABEL_W = 26 * k if label_w is None else label_w
|
||||
G1, G2, H = 13 * k, 8 * k, 15 * k # G1 进度条↔百分比、G2 百分比↔pace(视觉约 12/11)
|
||||
PCT_TRACK = 2 * k # F16(16/12x 非整数倍缩放)数字墨迹无侧边距、紧贴,手动加字符间距
|
||||
PCT_TRACK = self.PCT_TRACK * k # 见类属性 PCT_TRACK
|
||||
cy = y + 10 * k # 行竖直中心
|
||||
self._mid(x0, cy, bar["k"], self.F13, bold=k) # 左标签 F13
|
||||
lb = k if self.LABEL_BOLD else 0 # 左标签 F13
|
||||
if self.LABEL_ALIGN == "r":
|
||||
self._mid(x0 + LABEL_W - self.LABEL_GAP * k, cy, bar["k"], self.F13, bold=lb, align="r")
|
||||
else:
|
||||
self._mid(x0, cy, bar["k"], self.F13, bold=lb)
|
||||
# 右侧从右往左:pace(最右) → 百分比 → 进度条
|
||||
pct_r = x1
|
||||
if ok and "time_pct" in bar:
|
||||
|
||||
Reference in New Issue
Block a user