Index: trunk/src/examples/psu.lht =================================================================== --- trunk/src/examples/psu.lht (revision 1481) +++ trunk/src/examples/psu.lht (revision 1482) @@ -4,13 +4,13 @@ li:objects { ha:group.10 { li:objects { - ha:line.11 { x1=2000; y1=1000; x2=8000; y2=1000; pen=sym-decor; } - ha:line.12 { x1=2000; y1=1000; x2=2000; y2=3000; pen=sym-decor; } - ha:line.13 { x1=2000; y1=3000; x2=8000; y2=3000; pen=sym-decor; } - ha:line.14 { x1=8000; y1=1000; x2=8000; y2=3000; pen=sym-decor; } + ha:line.11 { x1=2000; y1=1000; x2=8000; y2=1000; stroke=sym-decor; } + ha:line.12 { x1=2000; y1=1000; x2=2000; y2=3000; stroke=sym-decor; } + ha:line.13 { x1=2000; y1=3000; x2=8000; y2=3000; stroke=sym-decor; } + ha:line.14 { x1=8000; y1=1000; x2=8000; y2=3000; stroke=sym-decor; } ha:group.20 { li:objects { - ha:line.1 { x1=0000; y1=2000; x2=2000; y2=2000; pen=terminal; } + ha:line.1 { x1=0000; y1=2000; x2=2000; y2=2000; stroke=terminal; } } ha:attrib { name=1 @@ -19,7 +19,7 @@ } ha:group.21 { li:objects { - ha:line.1 { x1=8000; y1=2000; x2=10000; y2=2000; pen=terminal; } + ha:line.1 { x1=8000; y1=2000; x2=10000; y2=2000; stroke=terminal; } } ha:attrib { name=2 @@ -72,8 +72,8 @@ ha:group.30 { li:objects { - ha:line.31 { x1=20000; y1=12000; x2=22000; y2=12000; pen=wire; } - ha:line.32 { x1=22000; y1=16000; x2=22000; y2=12000; pen=wire; } + ha:line.31 { x1=20000; y1=12000; x2=22000; y2=12000; stroke=wire; } + ha:line.32 { x1=22000; y1=16000; x2=22000; y2=12000; stroke=wire; } } ha:attrib { uid=xxxxx3 @@ -84,7 +84,7 @@ ha:group.50 { li:objects { - ha:line.51 { x1=21000; y1=16000; x2=21000; y2=13000; pen=wire; } + ha:line.51 { x1=21000; y1=16000; x2=21000; y2=13000; stroke=wire; } } ha:attrib { uid=xxxxx3 @@ -101,7 +101,7 @@ ha:line { x1=3000; y1=1000; x2=2000; y2=2000; } } pen = sheet-decor - fill = {#FFAAAA} + fill = wire } ha:connection.40 { Index: trunk/src/plugins/export_animator/export_animator.c =================================================================== --- trunk/src/plugins/export_animator/export_animator.c (revision 1481) +++ trunk/src/plugins/export_animator/export_animator.c (revision 1482) @@ -81,7 +81,7 @@ csch_coord_t x1 = l->inst.c.p1.x, y1 = l->inst.c.p1.y, x2 = l->inst.c.p2.x, y2 = l->inst.c.p2.y; int verts = 10; - pen = csch_pen_(h); + pen = csch_stroke_(h); if (pen == NULL) { csch_error("omitting object: invalid pen\n"); return; Index: trunk/src/plugins/io_lihata/read.c =================================================================== --- trunk/src/plugins/io_lihata/read.c (revision 1481) +++ trunk/src/plugins/io_lihata/read.c (revision 1482) @@ -370,18 +370,32 @@ return 0; } -static int parse_pen_ref(read_ctx_t *ctx, csch_chdr_t *obj, lht_node_t *subtree, int silent) +static int parse_pen_ref_(read_ctx_t *ctx, csch_chdr_t *obj, lht_node_t *subtree, int silent, int is_stroke) { - const lht_node_t *pn = lht_dom_hash_get(subtree, "pen"); + const lht_node_t *pn = lht_dom_hash_get(subtree, (is_stroke ? "stroke" : "fill")); if (pn == NULL) { if (!silent) error(subtree, ("missing pen\n")); return -1; } - obj->pen_name = csch_comm_str(ctx->sheet, pn->data.text.value, 1); + if (is_stroke) + obj->stroke_name = csch_comm_str(ctx->sheet, pn->data.text.value, 1); + else + obj->fill_name = csch_comm_str(ctx->sheet, pn->data.text.value, 1); return 0; } +static int parse_stroke(read_ctx_t *ctx, csch_chdr_t *obj, lht_node_t *subtree, int silent) +{ + return parse_pen_ref_(ctx, obj, subtree, silent, 1); +} + +static int parse_fill(read_ctx_t *ctx, csch_chdr_t *obj, lht_node_t *subtree, int silent) +{ + return parse_pen_ref_(ctx, obj, subtree, silent, 0); +} + + static int parse_line_fields(read_ctx_t *ctx, csch_line_t *line, lht_node_t *subtree) { if (parse_coord(ctx, &line->spec.p1.x, lht_dom_hash_get(subtree, "x1")) != 0) @@ -412,7 +426,7 @@ if (parse_line_fields(ctx, line, subtree) != 0) return -1; - return parse_pen_ref(ctx, &line->hdr, subtree, 0); + return parse_stroke(ctx, &line->hdr, subtree, 0); } static int parse_poly(read_ctx_t *ctx, csch_cgrp_t *parent, lht_node_t *subtree, csch_oid_t oid) @@ -458,17 +472,14 @@ } } - fill = lht_dom_hash_get(subtree, "fill"); - if (fill != NULL) { - if (parse_color(ctx, &poly->fill, fill) == 0) - poly->has_fill = 1; - } + if (parse_fill(ctx, &poly->hdr, subtree, 1) == 0) + poly->has_fill = 1; - if (parse_pen_ref(ctx, &poly->hdr, subtree, 1) == 0) - poly->has_pen = 1; + if (parse_stroke(ctx, &poly->hdr, subtree, 1) == 0) + poly->has_stroke = 1; - if (!poly->has_pen && !poly->has_fill) - error(subtree, ("invisible polygon: no pen, no fill; this is probably an error in your data\n")); + if (!poly->has_stroke && !poly->has_fill) + error(subtree, ("invisible polygon: no stroke, no fill; this is probably an error in your data\n")); return 0; } Index: trunk/src/plugins/io_lihata/write.c =================================================================== --- trunk/src/plugins/io_lihata/write.c (revision 1481) +++ trunk/src/plugins/io_lihata/write.c (revision 1482) @@ -122,10 +122,10 @@ static int lht_print_line(write_ctx_t *ctx, int indlev, char *parind, const csch_line_t *line) { - fprintf(ctx->f, " x1=%ld; y1=%ld; x2=%ld; y2=%ld; pen=%s; }\n", + fprintf(ctx->f, " x1=%ld; y1=%ld; x2=%ld; y2=%ld; stroke=%s; }\n", line->spec.p1.x, line->spec.p1.y, line->spec.p2.x, line->spec.p2.y, - line->hdr.pen_name.str); + line->hdr.stroke_name.str); return 0; } @@ -132,10 +132,10 @@ static int lht_print_arc(write_ctx_t *ctx, int indlev, char *parind, const csch_arc_t *arc) { TODO("save start and end"); - fprintf(ctx->f, " cx=%ld; cy=%ld; r=%ld; sang=%f; dang=%f; pen=%s; }\n", + fprintf(ctx->f, " cx=%ld; cy=%ld; r=%ld; sang=%f; dang=%f; stroke=%s; }\n", arc->spec.c.x, arc->spec.c.y, arc->spec.r, arc->spec.start, arc->spec.delta, - arc->hdr.pen_name.str); + arc->hdr.stroke_name.str); return 0; } Index: trunk/src/plugins/sch_dialogs/dlg_pref_color.c =================================================================== --- trunk/src/plugins/sch_dialogs/dlg_pref_color.c (revision 1481) +++ trunk/src/plugins/sch_dialogs/dlg_pref_color.c (revision 1482) @@ -280,9 +280,9 @@ tabdata->wpen[tabdata->npen++] = tabdata->walldeco = pen_box(ctx, all_deco, "ALL DECORATION PENS", NULL, NULL); tabdata->wpen[tabdata->npen++] = pen_box(ctx, "editor/style/tool_circle", "Circle tool", NULL, NULL); tabdata->wpen[tabdata->npen++] = pen_box(ctx, "editor/style/tool_line", "Line tool", NULL, NULL); - tabdata->wpen[tabdata->npen++] = pen_box(ctx, "editor/style/tool_rect", "Rectangle tool: outline (stroke)", "editor/style/tool_rect_has_pen", &w); + tabdata->wpen[tabdata->npen++] = pen_box(ctx, "editor/style/tool_rect", "Rect. tool: stroke", "editor/style/tool_rect_has_stroke", &w); tabdata->wenab[tabdata->nenab++] = w; - tabdata->wclr[tabdata->nclr++] = color_box(ctx, "editor/style/tool_rect_fill", "Rectangle tool: fill", "editor/style/tool_rect_has_fill", &w); + tabdata->wpen[tabdata->npen++] = pen_box(ctx, "editor/style/tool_rect_fill", "Rect. tool: fill", "editor/style/tool_rect_has_fill", &w); tabdata->wenab[tabdata->nenab++] = w; tabdata->decopen_max = tabdata->npen; RND_DAD_END(ctx->dlg); Index: trunk/src/plugins/std_tools/line_common.c =================================================================== --- trunk/src/plugins/std_tools/line_common.c (revision 1481) +++ trunk/src/plugins/std_tools/line_common.c (revision 1482) @@ -47,7 +47,7 @@ /* config */ csch_tool_line_dir_t dir; unsigned dir_temp_inv:1; - csch_cpen_t *pen, *junc_pen; + csch_cpen_t *stroke, *junc_stroke; /* statates */ csch_coord_t x1, y1, x2, y2; /* in cschem coords, not in screen coords */ @@ -160,7 +160,7 @@ { csch_sheet_t *sheet = (csch_sheet_t *)hl; csch_coord_t x1, y1, x2, y2; - rnd_coord_t ps = (csch_tool_line.pen == NULL) ? C2P(1000) : C2P(csch_tool_line.pen->size); + rnd_coord_t ps = (csch_tool_line.stroke == NULL) ? C2P(1000) : C2P(csch_tool_line.stroke->size); rnd_hid_set_line_cap(csch_crosshair_gc, rnd_cap_round); rnd_hid_set_line_width(csch_crosshair_gc, ps); @@ -205,11 +205,11 @@ line->spec.p2.x = x2; line->spec.p2.y = y2; TODO("refine pen passing"); - line->hdr.pen_name = csch_comm_str(sheet, csch_tool_line.pen->name, 1); + line->hdr.stroke_name = csch_comm_str(sheet, csch_tool_line.stroke->name, 1); csch_line_update(sheet, line, 1); } else { - csch_wirenet_draw(sheet, csch_comm_str(sheet, csch_tool_line.pen->name, 1), csch_comm_str(sheet, csch_tool_line.junc_pen->name, 1), x1, y1, x2, y2); + csch_wirenet_draw(sheet, csch_comm_str(sheet, csch_tool_line.stroke->name, 1), csch_comm_str(sheet, csch_tool_line.junc_stroke->name, 1), x1, y1, x2, y2); } } } Index: trunk/src/plugins/std_tools/tool_circle.c =================================================================== --- trunk/src/plugins/std_tools/tool_circle.c (revision 1481) +++ trunk/src/plugins/std_tools/tool_circle.c (revision 1482) @@ -29,7 +29,7 @@ typedef struct { int clicked; rnd_coord_t x, y, r; - csch_cpen_t *pen; + csch_cpen_t *stroke; } csch_tool_circle_t; static csch_tool_circle_t csch_tool_circle; @@ -38,7 +38,7 @@ { csch_tool_circle.clicked = 0; csch_tool_circle.r = 0; - csch_tool_circle.pen = NULL; + csch_tool_circle.stroke = NULL; } static void tool_circle_uninit(void) @@ -61,10 +61,10 @@ arc->spec.start = 0; arc->spec.delta = 360; - if (csch_tool_circle.pen == NULL) - csch_tool_circle.pen = CSCH_DIRECT_PEN(sheet, tool_circle); + if (csch_tool_circle.stroke == NULL) + csch_tool_circle.stroke = CSCH_DIRECT_PEN(sheet, tool_circle); - arc->hdr.pen_name = csch_comm_str(sheet, csch_tool_circle.pen->name, 1); + arc->hdr.stroke_name = csch_comm_str(sheet, csch_tool_circle.stroke->name, 1); csch_arc_update(sheet, arc, 1); csch_tool_circle.clicked = 0; @@ -91,10 +91,10 @@ double dx, dy; rnd_coord_t ps; - if (csch_tool_circle.pen == NULL) - csch_tool_circle.pen = CSCH_DIRECT_PEN(sheet, tool_circle); + if (csch_tool_circle.stroke == NULL) + csch_tool_circle.stroke = CSCH_DIRECT_PEN(sheet, tool_circle); - ps = (csch_tool_circle.pen == NULL) ? C2P(1000) : C2P(csch_tool_circle.pen->size); + ps = (csch_tool_circle.stroke == NULL) ? C2P(1000) : C2P(csch_tool_circle.stroke->size); dx = csch_tool_circle.x - P2C(csch_crosshair_x); dy = csch_tool_circle.y - P2C(csch_crosshair_y); Index: trunk/src/plugins/std_tools/tool_line.c =================================================================== --- trunk/src/plugins/std_tools/tool_line.c (revision 1481) +++ trunk/src/plugins/std_tools/tool_line.c (revision 1482) @@ -29,7 +29,7 @@ { line_init(); csch_tool_line.dir = CSCH_TOOL_LINEDIR_ALL; - csch_tool_line.pen = NULL; + csch_tool_line.stroke = NULL; } static void tool_line_uninit(void) @@ -46,8 +46,8 @@ if (line_release(hl)) { csch_sheet_t *sheet = (csch_sheet_t *)hl; TODO("when editing symbol, use the symbol deco style"); - if (csch_tool_line.pen == NULL) - csch_tool_line.pen = CSCH_DIRECT_PEN(sheet, tool_line); + if (csch_tool_line.stroke == NULL) + csch_tool_line.stroke = CSCH_DIRECT_PEN(sheet, tool_line); line_create_all(hl, &sheet->direct, 0); line_continue(hl); } @@ -63,8 +63,8 @@ { csch_sheet_t *sheet = (csch_sheet_t *)hl; TODO("when editing symbol, use the symbol deco style"); - if (csch_tool_line.pen == NULL) - csch_tool_line.pen = CSCH_DIRECT_PEN(sheet, tool_line); + if (csch_tool_line.stroke == NULL) + csch_tool_line.stroke = CSCH_DIRECT_PEN(sheet, tool_line); line_draw_attached(hl, &sheet->direct); } Index: trunk/src/plugins/std_tools/tool_rect.c =================================================================== --- trunk/src/plugins/std_tools/tool_rect.c (revision 1481) +++ trunk/src/plugins/std_tools/tool_rect.c (revision 1482) @@ -29,7 +29,7 @@ typedef struct { int clicked; rnd_coord_t x, y; - csch_cpen_t *pen; + csch_cpen_t *stroke, *fill; } csch_tool_rect_t; static csch_tool_rect_t csch_tool_rect; @@ -37,7 +37,8 @@ static void tool_rect_init(void) { csch_tool_rect.clicked = 0; - csch_tool_rect.pen = NULL; + csch_tool_rect.stroke = NULL; + csch_tool_rect.fill = NULL; } static void tool_rect_uninit(void) @@ -66,8 +67,10 @@ csch_cpoly_t *poly = (csch_cgrp_t *)csch_op_create(sheet, &sheet->direct, CSCH_CTYPE_POLY); rnd_coord_t x1, y1, x2, y2; - if (csch_tool_rect.pen == NULL) - csch_tool_rect.pen = CSCH_DIRECT_PEN(sheet, tool_rect); + if (csch_tool_rect.stroke == NULL) + csch_tool_rect.stroke = CSCH_DIRECT_PEN(sheet, tool_rect); + if (csch_tool_rect.fill == NULL) + csch_tool_rect.fill = CSCH_DIRECT_PEN(sheet, tool_rect_fill); x1 = csch_tool_rect.x; y1 = csch_tool_rect.y; @@ -79,9 +82,9 @@ new_line(sheet, poly, x2, y2, x2, y1); new_line(sheet, poly, x2, y1, x1, y1); - poly->hdr.pen_name = csch_comm_str(sheet, csch_tool_rect.pen->name, 1); - poly->has_pen = conf_core.editor.style.tool_rect_has_pen; - poly->fill = conf_core.editor.style.tool_rect_fill; + poly->hdr.stroke_name = csch_comm_str(sheet, csch_tool_rect.stroke->name, 1); + poly->has_stroke = conf_core.editor.style.tool_rect_has_stroke; + poly->hdr.fill_name = csch_comm_str(sheet, csch_tool_rect.fill->name, 1); poly->has_fill = conf_core.editor.style.tool_rect_has_fill; csch_poly_update(sheet, poly, 1); @@ -108,10 +111,12 @@ if (csch_tool_rect.clicked) { rnd_coord_t x1, y1, x2, y2, ps; - if (csch_tool_rect.pen == NULL) - csch_tool_rect.pen = CSCH_DIRECT_PEN(sheet, tool_rect); + if (csch_tool_rect.stroke == NULL) + csch_tool_rect.stroke = CSCH_DIRECT_PEN(sheet, tool_rect); + if (csch_tool_rect.fill == NULL) + csch_tool_rect.fill = CSCH_DIRECT_PEN(sheet, tool_rect_fill); - ps = (csch_tool_rect.pen == NULL) ? C2P(1000) : C2P(csch_tool_rect.pen->size); + ps = (csch_tool_rect.stroke == NULL) ? C2P(1000) : C2P(csch_tool_rect.stroke->size); x1 = C2P(csch_tool_rect.x); y1 = C2P(csch_tool_rect.y); x2 = csch_crosshair_x; Index: trunk/src/plugins/std_tools/tool_wirenet.c =================================================================== --- trunk/src/plugins/std_tools/tool_wirenet.c (revision 1481) +++ trunk/src/plugins/std_tools/tool_wirenet.c (revision 1482) @@ -29,8 +29,8 @@ { line_init(); csch_tool_line.dir = CSCH_TOOL_LINEDIR_HV; - csch_tool_line.pen = NULL; - csch_tool_line.junc_pen = NULL; + csch_tool_line.stroke = NULL; + csch_tool_line.junc_stroke = NULL; } static void tool_wirenet_uninit(void) @@ -46,9 +46,9 @@ { if (line_release(hl)) { csch_sheet_t *sheet = (csch_sheet_t *)hl; - if (csch_tool_line.pen == NULL) { - csch_tool_line.pen = CSCH_DIRECT_PEN(sheet, tool_wire); - csch_tool_line.junc_pen = CSCH_DIRECT_PEN(sheet, tool_wire_junction); + if (csch_tool_line.stroke == NULL) { + csch_tool_line.stroke = CSCH_DIRECT_PEN(sheet, tool_wire); + csch_tool_line.junc_stroke = CSCH_DIRECT_PEN(sheet, tool_wire_junction); } line_create_all(hl, &sheet->direct, 1); line_continue(hl); @@ -64,9 +64,9 @@ static void tool_wirenet_draw_attached(rnd_hidlib_t *hl) { csch_sheet_t *sheet = (csch_sheet_t *)hl; - if (csch_tool_line.pen == NULL) { - csch_tool_line.pen = CSCH_DIRECT_PEN(sheet, tool_wire); - csch_tool_line.junc_pen = CSCH_DIRECT_PEN(sheet, tool_wire_junction); + if (csch_tool_line.stroke == NULL) { + csch_tool_line.stroke = CSCH_DIRECT_PEN(sheet, tool_wire); + csch_tool_line.junc_stroke = CSCH_DIRECT_PEN(sheet, tool_wire_junction); } line_draw_attached(hl, &sheet->direct); } Index: trunk/src/sch-rnd/conf_core.h =================================================================== --- trunk/src/sch-rnd/conf_core.h (revision 1481) +++ trunk/src/sch-rnd/conf_core.h (revision 1482) @@ -48,9 +48,9 @@ RND_CFT_LIST tool_rect; /* pen preference for the rectangle tool; pick the first existing pen or if none existing the first item; used only if tool_rect_has_pen is true */ - RND_CFT_BOOLEAN tool_rect_has_pen; /* whether to stroke (use the pen to draw the outline) */ + RND_CFT_BOOLEAN tool_rect_has_stroke;/* whether to stroke (use the pen to draw the outline) */ RND_CFT_BOOLEAN tool_rect_has_fill; /* whether to fill (draw a filled polyogn using the fill color) */ - RND_CFT_COLOR tool_rect_fill; /* polygon fill color; used only if tool_rect_has_fill is true */ + RND_CFT_LIST tool_rect_fill; /* polygon fill color; used only if tool_rect_has_fill is true */ } style; } editor; const struct appearance { Index: trunk/src/sch-rnd/default.lht =================================================================== --- trunk/src/sch-rnd/default.lht (revision 1481) +++ trunk/src/sch-rnd/default.lht (revision 1482) @@ -25,8 +25,8 @@ ha:line { x1=80000; y1=20000; x2=0; y2=20000; } ha:line { x1=0; y1=20000; x2=0; y2=0; } } - pen = titlebox-frame; - fill = {#DDFFDD} + stroke = titlebox-frame; + fill = wire } } ha:attrib { Index: trunk/src/sch-rnd/draw.c =================================================================== --- trunk/src/sch-rnd/draw.c (revision 1481) +++ trunk/src/sch-rnd/draw.c (revision 1482) @@ -90,7 +90,7 @@ vtc0_uninit(&draw_poly_y); } -csch_inline void draw_layer_poly(draw_ctx_t *ctx, csch_cpoly_t *p, csch_cpen_t *pen, int selected) +csch_inline void draw_layer_poly(draw_ctx_t *ctx, csch_cpoly_t *p, csch_cpen_t *stroke, int selected) { long n; csch_coutline_t *o; @@ -97,7 +97,7 @@ if (p->has_fill) { - rnd_render->set_color(ctx->gc, selected ? &conf_core.appearance.color.selected : &p->fill); + rnd_render->set_color(ctx->gc, selected ? &conf_core.appearance.color.selected : &p->hdr.fill->color); draw_poly_reset(); for(n = 0, o = p->outline.array; n < p->outline.used; n++, o++) { switch(o->hdr.type) { @@ -113,10 +113,10 @@ rnd_render->fill_polygon(ctx->gc, draw_poly_x.used, draw_poly_x.array, draw_poly_y.array); } - if (p->has_pen) { - rnd_render->set_color(ctx->gc, selected ? &conf_core.appearance.color.selected : &pen->color); - rnd_hid_set_line_cap(ctx->gc, pen_cap(pen)); - rnd_hid_set_line_width(ctx->gc, C2P(pen->size)); + if (p->has_stroke) { + rnd_render->set_color(ctx->gc, selected ? &conf_core.appearance.color.selected : &stroke->color); + rnd_hid_set_line_cap(ctx->gc, pen_cap(stroke)); + rnd_hid_set_line_width(ctx->gc, C2P(stroke->size)); for(n = 0, o = p->outline.array; n < p->outline.used; n++, o++) { switch(o->hdr.type) { @@ -146,13 +146,13 @@ { draw_ctx_t *ctx = (draw_ctx_t *)ctx_; csch_chdr_t *obj = obj_; - csch_cpen_t *pen = csch_pen_(obj); + csch_cpen_t *stroke = csch_stroke_(obj); int sel = csch_chdr_is_selected(obj); switch(obj->type) { - case CSCH_CTYPE_LINE: draw_layer_line(ctx, (csch_line_t *)obj, pen, sel); break; - case CSCH_CTYPE_POLY: draw_layer_poly(ctx, (csch_cpoly_t *)obj, pen, sel); break; - case CSCH_CTYPE_ARC: draw_layer_arc(ctx, (csch_arc_t *)obj, pen, sel); break; + case CSCH_CTYPE_LINE: draw_layer_line(ctx, (csch_line_t *)obj, stroke, sel); break; + case CSCH_CTYPE_POLY: draw_layer_poly(ctx, (csch_cpoly_t *)obj, stroke, sel); break; + case CSCH_CTYPE_ARC: draw_layer_arc(ctx, (csch_arc_t *)obj, stroke, sel); break; } return csch_RTREE_DIR_FOUND_CONT; Index: trunk/src/sch-rnd/sch-rnd-conf.lht =================================================================== --- trunk/src/sch-rnd/sch-rnd-conf.lht (revision 1481) +++ trunk/src/sch-rnd/sch-rnd-conf.lht (revision 1482) @@ -35,8 +35,8 @@ li:tool_wire_junction { junction; } li:tool_rect { sheet-decor; decor;} - tool_rect_has_pen {true} - tool_rect_fill {#AAFFAA} + tool_rect_has_stroke {true} + li:tool_rect_fill { wire; } tool_rect_has_fill {true} }