From bcfd61298911d72dd2391bb0b6d956205309e6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E9=98=B3?= <91933474+XiangYyang@users.noreply.github.com> Date: Thu, 14 Dec 2023 01:19:06 +0800 Subject: [PATCH] Rendering colored texts in schematic viewer (#70) * add: rendering colored text in sch viewer * add: rendering colored property text in sch viewer --- src/kicad/common.ts | 1 + src/viewers/schematic/painter.ts | 45 ++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/kicad/common.ts b/src/kicad/common.ts index 89842a1..da4f2b8 100644 --- a/src/kicad/common.ts +++ b/src/kicad/common.ts @@ -263,6 +263,7 @@ export class Font { P.atom("bold"), P.atom("italic"), P.pair("line_spacing", T.number), + P.color(), ), ); diff --git a/src/viewers/schematic/painter.ts b/src/viewers/schematic/painter.ts index 47672a1..16732be 100644 --- a/src/viewers/schematic/painter.ts +++ b/src/viewers/schematic/painter.ts @@ -317,7 +317,14 @@ class TextPainter extends SchematicItemPainter { schtext.apply_at(t.at); schtext.apply_effects(t.effects); - schtext.attributes.color = this.dim_if_needed(this.theme.note); + const font_color = t.effects.font.color; + if (font_color.is_transparent_black) { + // The color was not specified. + const text_color = this.theme.note; + schtext.attributes.color = this.dim_if_needed(text_color); + } else { + schtext.attributes.color = this.dim_if_needed(font_color); + } this.gfx.state.push(); StrokeFont.default().draw( @@ -347,22 +354,28 @@ class PropertyPainter extends SchematicItemPainter { color = this.theme.sheet_fields; } - switch (p.name) { - case "Reference": - color = this.theme.reference; - break; - case "Value": - color = this.theme.value; - break; - case "Sheet name": - color = this.theme.sheet_name; - break; - case "Sheet file": - color = this.theme.sheet_filename; - break; - } + const font_color = p.effects.font.color; + if (font_color.is_transparent_black) { + // The color was not specified. + switch (p.name) { + case "Reference": + color = this.theme.reference; + break; + case "Value": + color = this.theme.value; + break; + case "Sheet name": + color = this.theme.sheet_name; + break; + case "Sheet file": + color = this.theme.sheet_filename; + break; + } - color = this.dim_if_needed(color); + color = this.dim_if_needed(color); + } else { + color = this.dim_if_needed(font_color); + } const parent = p.parent as schematic_items.SchematicSymbol; const transform = this.view_painter.current_symbol_transform;