X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=sym-text.c;h=8acfe4b0a1565683b658173c6a49da8b413c61ec;hb=refs%2Fheads%2Flabelling;hp=6622fd61fbd2b56b9c769b6be16484a7d2f10a07;hpb=3eccb27b874cf751c7c807ce444b8bcb37ecf768;p=leo.git diff --git a/sym-text.c b/sym-text.c index 6622fd6..8acfe4b 100644 --- a/sym-text.c +++ b/sym-text.c @@ -17,7 +17,6 @@ #include "osm.h" #include "sym.h" #include "map.h" - #include "labeller.h" /*** Fonts ***/ @@ -225,10 +224,26 @@ static void prepare_text_element(struct sym_text *t, struct svg *svg) svg_set_attr(svg, "font-style", osm_val_decode(font->style)); } +static struct symbol * sym_text_copy(struct symbol *sym) +{ + struct sym_text *t = (struct sym_text *) sym; + + struct sym_text *new = xmalloc(sizeof(struct sym_text)); + *new = *t; // FIXME: Is this OK? with respect to pointer fields... + + return (struct symbol *) new; +} + +static bool sym_text_look_same(struct symbol *s1, struct symbol *s2) +{ + struct sym_text *st1 = (struct sym_text *) s1; + struct sym_text *st2 = (struct sym_text *) s2; + return (st1->text == st2->text && st1->text_color == st2->text_color); +} + static void sym_text_draw(struct symbol *sym, struct svg *svg) { struct sym_text *t = (struct sym_text *) sym; -printf("Drawing %s at [%.2f; %.2f]\n", osm_val_decode(t->text), t->x, t->y); if (t->next_duplicate) { @@ -449,8 +464,6 @@ static void sym_text_node(struct osm_object *o, struct style_info *si, osm_val_t msg(L_DEBUG, "Text <%s> dropped as duplicate", osm_val_decode(text)); return; } - - //sym_plan(&st->s, sym_zindex(o, si, 5)); } static void sym_text_center(struct osm_object *o, struct style_info *si, osm_val_t text, double x, double y) @@ -465,18 +478,7 @@ static void sym_text_center(struct osm_object *o, struct style_info *si, osm_val st->x -= st->tw / 2; st->y += st->th - (st->th + st->td) / 2; text_fix_placement(st); - if (o->type == OSM_TYPE_WAY && !osm_way_cyclic_p((struct osm_way *) o)) - { - //sym_plan(&st->s, sym_zindex(o, si, 4.9)); - printf("[Sym] Labelling way %ju with %s\n", o->id, osm_val_decode(st->text)); - labeller_add_linelabel(&st->s, o, sym_zindex(o, si, 4.9)); - } - else - { - //sym_plan(&st->s, sym_zindex(o, si, 4.9)); - printf("[Sym] Labelling area %ju with %s\n", o->id, osm_val_decode(st->text)); - labeller_add_arealabel(&st->s, o, sym_zindex(o, si, 4.9)); - } + labeller_add_label(&st->s, o, sym_zindex(o, si, 4.9)); } static void sym_text_way(struct osm_object *o, struct style_info *si, osm_val_t text) @@ -549,6 +551,8 @@ struct symbolizer symbolizer_text = { .draw = sym_text_draw, .gen = sym_text_gen, .init = sym_text_init, + .copy = sym_text_copy, + .look_same = sym_text_look_same, }; struct sym_text *sym_text_new(struct osm_object *o)