]> mj.ucw.cz Git - leo.git/blobdiff - sym.c
Parametrized drawing of map scale
[leo.git] / sym.c
diff --git a/sym.c b/sym.c
index 00d89416b3e798d4ce3f16405e2d420847771aaa..6a1436437dd4c96961b6db48ce234635d89548c0 100644 (file)
--- a/sym.c
+++ b/sym.c
@@ -1,7 +1,7 @@
 /*
  *     Hic Est Leo -- Symbols
  *
- *     (c) 2014 Martin Mares <mj@ucw.cz>
+ *     (c) 2014--2015 Martin Mares <mj@ucw.cz>
  */
 
 #include <ucw/lib.h>
@@ -19,7 +19,7 @@
 #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,
@@ -27,6 +27,7 @@ static struct symbolizer *symbolizers[] = {
   [SYMBOLIZER_AREA] = &symbolizer_area,
   [SYMBOLIZER_TEXT] = &symbolizer_text,
   [SYMBOLIZER_LINEIMG] = &symbolizer_lineimg,
+  [SYMBOLIZER_SCALE] = &symbolizer_scale,
 };
 
 struct mempool *sym_mp;
@@ -118,11 +119,20 @@ z_index_t sym_zindex(struct osm_object *o, struct style_info *si, double default
 
 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);
+       }
     }
 }