#undef CLAMP // FIXME: Fix in libucw?
#define CLAMP(x,min,max) ({ typeof(x) _t=x; (_t < min) ? min : (_t > max) ? max : _t; }) /** Clip a number @x to interval [@min,@max] **/
+static struct symbolizer symbolizer_disabled = {
+ .name = "disabled",
+};
+
static struct symbolizer *symbolizers[] = {
[SYMBOLIZER_INVALID] = NULL,
[SYMBOLIZER_POINT] = &symbolizer_point,
[SYMBOLIZER_AREA] = &symbolizer_area,
[SYMBOLIZER_TEXT] = &symbolizer_text,
[SYMBOLIZER_LINEIMG] = &symbolizer_lineimg,
+ [SYMBOLIZER_DISABLED] = &symbolizer_disabled,
};
struct mempool *sym_mp;
ASSERT(sym->type && sym->type < SYMBOLIZER_MAX);
if (debug_dump_symbols)
printf("Drawing symbol <%s> at z-index %u for %s\n", symbolizers[sym->type]->name, zindex, STK_OSM_NAME(sym->o));
- symbolizers[sym->type]->draw(sym, svg);
+ if (symbolizers[sym->type]->draw)
+ symbolizers[sym->type]->draw(sym, svg);
}
void sym_draw_all(struct svg *svg)
for (uns i = 0; i < GARY_SIZE(sym_planned); i++)
sym_draw(sym_planned[i].sym, sym_planned[i].zindex, svg);
}
+
+void sym_for_all_planned(void (*callback)(struct symbol *s))
+{
+ for (uns i = 0; i < GARY_SIZE(sym_planned); i++)
+ callback(sym_planned[i].sym);
+}
+
+bool sym_same_attrs_p(struct symbol *x, struct symbol *y)
+{
+ if (x->type != y->type)
+ return 0;
+
+ if (!symbolizers[x->type]->same_p)
+ return 0;
+
+ return (*symbolizers[x->type]->same_p)(x, y);
+}
+
+void sym_disable(struct symbol *sym)
+{
+ sym->type = SYMBOLIZER_DISABLED;
+}