From 4e48908902e99e647091f47cee2bf8e7df2deabb Mon Sep 17 00:00:00 2001 From: Stefan Schippers Date: Sun, 30 Aug 2020 12:01:48 +0200 Subject: [PATCH] svg and pdf exports use custom layer colors as set in ~/.xschem/colors file if any. --- Changelog | 2 ++ src/xinit.c | 6 ------ src/xschem.tcl | 57 ++++++++++++++++++++++++++++---------------------- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/Changelog b/Changelog index a15acd29..9d2418c1 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,6 @@ 2.9.8 +- NO_CAIRO builds also use 'layer=' attribute to display text on custom layers. +- pdf and svg exports follow the enable_layer[] array to display/hide layers as does draw() - LCC function (Local Custom Cell): schematics (.sch) can be instantiated just like symbol (.sym) files in a parent schematic. - Open Recent menu entry to quickly open recent edited/saved files. diff --git a/src/xinit.c b/src/xinit.c index bf0c32e4..f171b7da 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -1079,12 +1079,6 @@ int Tcl_AppInit(Tcl_Interp *inter) my_strdup(44, &xschem_executable, get_file_path(xschem_executable)); dbg(1, "Tcl_AppInit(): resolved xschem_executable=%s\n", xschem_executable); - /* READ COLORS */ - my_snprintf(name, S(name), "%s/colors", user_conf_dir); - if(!stat(name, &buf)) { - source_tcl_file(name); - } - /* set global variables fetching data from tcl code 25122002 */ if(tclgetvar("dark_colorscheme")[0] == '1') dark_colorscheme = 1; else dark_colorscheme = 0; diff --git a/src/xschem.tcl b/src/xschem.tcl index 66401cb3..51a8ecce 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -1945,7 +1945,7 @@ proc edit_vi_netlist_prop {txtlabel} { } proc change_color {} { - global colors dark_colors light_colors dark_colorscheme cadlayers ctrl_down USER_CONF_DIR + global colors dark_colors light_colors dark_colorscheme cadlayers ctrl_down USER_CONF_DIR svg_colors ps_colors set n [xschem get rectcolor] if { $n < 0 || $n >=$cadlayers} return @@ -1963,7 +1963,12 @@ proc change_color {} { set dark_colors $cc } else { set light_colors $cc + regsub -all {\"} $cc {} ps_colors + regsub -all {#} $ps_colors {0x} ps_colors } + regsub -all {\"} $colors {} svg_colors + regsub -all {#} $svg_colors {0x} svg_colors + xschem change_colors set savedata "#### THIS FILE IS AUTOMATICALLY GENERATED BY XSCHEM, DO NOT EDIT.\n" set savedata "$savedata set cadlayers $cadlayers\n" @@ -3017,20 +3022,12 @@ if {!$rainbow_colors} { "#880088" "#00ff00" "#0000cc" "#666600" "#557755" "#aa2222" "#7ccc40" "#00ffcc" "#ce0097" "#d2d46b" "#ef6158" "#fdb200"} - set_ne dark_colors { "#000000" "#00ccee" "#3f3f3f" "#cccccc" "#88dd00" "#bb2200" "#00ccee" "#ff0000" "#ffff00" "#ffffff" "#ff00ff" "#00ff00" "#0000cc" "#aaaa00" "#aaccaa" "#ff7777" "#bfff81" "#00ffcc" "#ce0097" "#d2d46b" "#ef6158" "#fdb200"} - - set_ne ps_colors { - 0xffffff 0x0044ee 0xaaaaaa 0x222222 0x229900 - 0xbb2200 0x00ccee 0xff0000 0x888800 0x00aaaa - 0x880088 0x00ff00 0x0000cc 0x666600 0x557755 - 0xaa2222 0x7ccc40 0x00ffcc 0xce0097 0xd2d46b - 0xef6158 0xfdb200} } else { # rainbow colors for bitmapping # skip if colors defined in ~/.xschem 20121110 @@ -3045,7 +3042,6 @@ if {!$rainbow_colors} { "#e0a000" "#e0c000" "#e0e000" "#e0e020" "#e0e040" "#e0e060" "#e0e080" "#e0e0a0" "#e0e0c0" "#e0e0e0" } - # same colors as above ... set_ne dark_colors { "#000000" "#00ccee" "#3f3f3f" "#ffffff" "#88dd00" "#bb2200" "#0000e0" "#2000e0" "#4000e0" "#6000e0" @@ -3055,23 +3051,20 @@ if {!$rainbow_colors} { "#e0a000" "#e0c000" "#e0e000" "#e0e020" "#e0e040" "#e0e060" "#e0e080" "#e0e0a0" "#e0e0c0" "#e0e0e0" } - set_ne ps_colors { - 0x000000 0x0000ee 0x7f7f7f 0x000000 0x338800 - 0xbb2200 0x0000e0 0x2000e0 0x4000e0 0x6000e0 - 0x8000e0 0xa000e0 0xc000e0 0xe000e0 0xe000c0 - 0xe000a0 0xe00080 0xe00060 0xe00040 0xe00020 - 0xe00000 0xe02000 0xe04000 0xe06000 0xe08000 - 0xe0a000 0xe0c000 0xe0e000 0xe0e020 0xe0e040 - 0xe0e060 0xe0e080 0xe0e0a0 0xe0e0c0 0xe0e0e0 - } } +# for svg and pdf draw 20121108 +regsub -all {\"} $dark_colors {} svg_colors +regsub -all {#} $svg_colors {0x} svg_colors +regsub -all {\"} $light_colors {} ps_colors +regsub -all {#} $ps_colors {0x} ps_colors + ## pad missing colors with black for {set i 0} { $i<$cadlayers } { incr i} { set_ne enable_layer($i) 1 - foreach j { ps_colors light_colors dark_colors } { + foreach j { svg_colors ps_colors light_colors dark_colors } { if { ![string compare [lindex [set $j] $i] {} ] } { - if { ![string compare $j {ps_colors} ] } { + if { ![string compare $j {ps_colors} ] || ![string compare $j {svg_colors} ]} { lappend $j {0x000000} } else { lappend $j {#000000} @@ -3104,10 +3097,6 @@ if {$::OS == "Windows"} { set_ne copy_cell 0 -# for svg draw 20121108 -regsub -all {\"} $colors {} svg_colors -regsub -all {#} $svg_colors {0x} svg_colors - # recent files set recentfile {} if { [file exists $USER_CONF_DIR/recent_files] } { @@ -3705,6 +3694,24 @@ font configure Underline-Font -underline true -size 24 } } +# read custom colors +if { [file exists ${USER_CONF_DIR}/colors] } { + source ${USER_CONF_DIR}/colors +} + +if { [llength $dark_colors] < $cadlayers || [llength $light_colors] < $cadlayers } { + puts stderr { Warning: wrong number of configured layers in light_colors or dark_colors variables.} +} +if { $dark_colorscheme == 1} { + set colors $dark_colors +} else { + set colors $light_colors +} +regsub -all {\"} $light_colors {} ps_colors +regsub -all {#} $ps_colors {0x} ps_colors +regsub -all {\"} $colors {} svg_colors +regsub -all {#} $svg_colors {0x} svg_colors + if { $show_infowindow } { wm deiconify .infotext } foreach i $tcl_files {