feat: 汉字每日打卡优化
This commit is contained in:
@@ -52,11 +52,13 @@ export function getRandomEncouragementPhrase(): string {
|
||||
* @param ctx 微信小程序 Canvas 绘制上下文
|
||||
* @param rect 目标 Section 的位置与宽高信息
|
||||
* @param title 标题文本,如 “每日打卡” 或 “拼音每日一练”
|
||||
* @param options.centerMeta 是否将 “月/日/姓名” 元信息行整体水平居中(默认 false,保持原左侧布局)
|
||||
*/
|
||||
export function drawSectionHeader(
|
||||
ctx: RenderingContext,
|
||||
rect: { x: number; y: number; w: number; h: number },
|
||||
title: string,
|
||||
options?: { centerMeta?: boolean },
|
||||
): void {
|
||||
const cx = rect.x + rect.w / 2;
|
||||
const titleY = rect.y + SECTION_PADDING_TOP + 12;
|
||||
@@ -74,21 +76,30 @@ export function drawSectionHeader(
|
||||
canvasCtx.font = '20px serif';
|
||||
canvasCtx.fillText(title, cx, titleY);
|
||||
|
||||
// 元信息行布局:原始版本以 rect.x 为基准(左侧偏移 40~248,宽 208)
|
||||
// 当 centerMeta=true 时,整体水平居中到 rect 中部,仅影响调用方显式开启的场景
|
||||
const META_BLOCK_WIDTH = 208;
|
||||
const META_BASE_OFFSET = 40;
|
||||
const metaLeft = options?.centerMeta
|
||||
? rect.x + (rect.w - META_BLOCK_WIDTH) / 2
|
||||
: rect.x + META_BASE_OFFSET;
|
||||
const offset = (n: number) => metaLeft + (n - META_BASE_OFFSET);
|
||||
|
||||
canvasCtx.font = '12px serif';
|
||||
canvasCtx.fillText('月', rect.x + 76, metaY);
|
||||
canvasCtx.fillText('日', rect.x + 122, metaY);
|
||||
canvasCtx.fillText('姓名:', rect.x + 176, metaY);
|
||||
canvasCtx.fillText('月', offset(76), metaY);
|
||||
canvasCtx.fillText('日', offset(122), metaY);
|
||||
canvasCtx.fillText('姓名:', offset(176), metaY);
|
||||
|
||||
canvasCtx.strokeStyle = '#8E897E';
|
||||
canvasCtx.lineWidth = 1;
|
||||
canvasCtx.setLineDash([]);
|
||||
canvasCtx.beginPath();
|
||||
canvasCtx.moveTo(rect.x + 40, metaUnderlineY);
|
||||
canvasCtx.lineTo(rect.x + 68, metaUnderlineY);
|
||||
canvasCtx.moveTo(rect.x + 85, metaUnderlineY);
|
||||
canvasCtx.lineTo(rect.x + 113, metaUnderlineY);
|
||||
canvasCtx.moveTo(rect.x + 195, metaUnderlineY);
|
||||
canvasCtx.lineTo(rect.x + 248, metaUnderlineY);
|
||||
canvasCtx.moveTo(offset(40), metaUnderlineY);
|
||||
canvasCtx.lineTo(offset(68), metaUnderlineY);
|
||||
canvasCtx.moveTo(offset(85), metaUnderlineY);
|
||||
canvasCtx.lineTo(offset(113), metaUnderlineY);
|
||||
canvasCtx.moveTo(offset(195), metaUnderlineY);
|
||||
canvasCtx.lineTo(offset(248), metaUnderlineY);
|
||||
canvasCtx.stroke();
|
||||
|
||||
canvasCtx.restore();
|
||||
|
||||
Reference in New Issue
Block a user