/*
* Hic Est Leo -- Symbols
*
- * (c) 2014 Martin Mares <mj@ucw.cz>
+ * (c) 2014--2015 Martin Mares <mj@ucw.cz>
*/
#include <ucw/lib.h>
#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 *symbolizers[] = {
+static struct symbolizer *symbolizers[SYMBOLIZER_MAX] = {
[SYMBOLIZER_INVALID] = NULL,
[SYMBOLIZER_POINT] = &symbolizer_point,
[SYMBOLIZER_ICON] = &symbolizer_icon,
[SYMBOLIZER_AREA] = &symbolizer_area,
[SYMBOLIZER_TEXT] = &symbolizer_text,
[SYMBOLIZER_LINEIMG] = &symbolizer_lineimg,
+ [SYMBOLIZER_SCALE] = &symbolizer_scale,
};
struct mempool *sym_mp;
void sym_from_style(struct osm_object *o, struct style_results *sr, struct svg *svg)
{
+ osm_val_t special = osm_obj_find_tag(o, KEY_LEO_SPECIAL);
+ if (special)
+ style_enable_default_layer(sr);
+
for (uns i=0; i < sr->num_active_layers; i++)
{
for (uns j = SYMBOLIZER_INVALID + 1; j < SYMBOLIZER_MAX; j++)
- if (symbolizers[j]->gen)
- (symbolizers[j]->gen)(o, sr->layers[sr->active_layers[i]], svg);
+ {
+ struct symbolizer *sy = symbolizers[j];
+ // Either a generic symbolizer with a generic object,
+ // or a special symbolizer with its special object.
+ if (sy->special == special && sy->gen)
+ (sy->gen)(o, sr->layers[sr->active_layers[i]], svg);
+ }
}
}