From: Martin S. <mar...@us...> - 2007-12-27 17:58:30
|
Update of /cvsroot/navit/navit/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30155 Modified Files: graphics.c route.c Log Message: Fix:Core:Improved route drawing Index: graphics.c =================================================================== RCS file: /cvsroot/navit/navit/src/graphics.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** graphics.c 21 Dec 2007 14:10:10 -0000 1.25 --- graphics.c 27 Dec 2007 17:58:23 -0000 1.26 *************** *** 551,556 **** int order=transform_get_order(trans); gra->meth.draw_mode(gra->priv, draw_mode_begin); - if (route) - route_draw(route, trans, displaylist); xdisplay_draw(displaylist->dl, gra, layouts, order); gra->meth.draw_mode(gra->priv, draw_mode_end); --- 551,554 ---- Index: route.c =================================================================== RCS file: /cvsroot/navit/navit/src/route.c,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** route.c 26 Dec 2007 10:39:48 -0000 1.31 --- route.c 27 Dec 2007 17:58:23 -0000 1.32 *************** *** 154,158 **** while (c) { n=c->next; ! free(c); c=n; } --- 154,158 ---- while (c) { n=c->next; ! g_free(c); c=n; } *************** *** 450,454 **** { struct route_graph_segment *s; ! s = calloc(1, sizeof(*s)); if (!s) { printf("%s:Out of memory\n", __FUNCTION__); --- 450,454 ---- { struct route_graph_segment *s; ! s = g_new0(struct route_graph_segment, 1); if (!s) { printf("%s:Out of memory\n", __FUNCTION__); *************** *** 548,552 **** ccnt = get_item_seg_coords(&rgs->item, ca, 2047, rgs); ! segment= calloc(1, sizeof(*segment) + sizeof(struct coord) * ccnt); if (!segment) { printf("%s:Out of memory\n", __FUNCTION__); --- 548,552 ---- ccnt = get_item_seg_coords(&rgs->item, ca, 2047, rgs); ! segment= g_malloc0(sizeof(*segment) + sizeof(struct coord) * ccnt); if (!segment) { printf("%s:Out of memory\n", __FUNCTION__); *************** *** 761,765 **** while (curr) { next=curr->next; ! free(curr); curr=next; } --- 761,765 ---- while (curr) { next=curr->next; ! g_free(curr); curr=next; } *************** *** 1422,1478 **** - static int - route_draw_route_info(struct route_info *pos, struct route_info *dst, struct transformation *t, struct displaylist *dsp) - { - struct route_info_handle *h; - struct coord *cp; - struct item item; - int max=100; - struct coord c[max]; - struct point pnt[max]; - int count=0; - struct street_data *street; - enum projection pro = projection_mg; - - item.id_lo=0; - item.id_hi=0; - item.map=NULL; - item.type=type_street_route; - - dbg(1, "enter\n"); - h=route_info_open(pos, dst, 0); - dbg(1,"h=%p\n", h); - if (! h) { - dbg(1, "return 0\n"); - return 0; - } - street = pos ? pos->street : dst->street; - pro = map_projection(street->item.map); - if (pos) - dbg(1, "pos=%p pos->dir=%d pos->pos=%d\n", pos, pos->dir, pos->pos); - while ((cp=route_info_get(h)) && count < max) - c[count++]=*cp; - if (count) - count=transform(t, pro, c, pnt, count, 1); - if (count) - display_add(dsp, &item, count, pnt, "Route"); - route_info_close(h); - dbg(1, "return 1\n"); - return 1; - } - - void - route_draw(struct route *this, struct transformation *t, struct displaylist *dsp) - { - dbg(1,"enter\n"); - if (! this->pos || ! this->dst) - return; - if (! route_draw_route_info(this->pos, this->dst, t, dsp)) { - route_draw_route_info(this->pos, NULL, t, dsp); - route_draw_route_info(NULL, this->dst, t, dsp); - } - dbg(1,"exit\n"); - } - #if 0 struct route_crossings * --- 1422,1425 ---- *************** *** 1505,1508 **** --- 1452,1458 ---- struct map_rect_priv { + struct route_info_handle *ri; + int pos_next; + int pos; struct route *mpriv; struct item item; *************** *** 1537,1549 **** struct map_rect_priv *mr = priv_data; struct route_path_segment *seg = mr->seg; int rc = 0,i; ! for (i=0; i < count; i++) { ! if (mr->last_coord >= seg->ncoords) ! break; ! if (i >= seg->ncoords) ! break; ! c[i] = seg->c[mr->last_coord++]; ! rc++; } return rc; } --- 1487,1524 ---- struct map_rect_priv *mr = priv_data; struct route_path_segment *seg = mr->seg; + struct coord *c1; int rc = 0,i; ! dbg(1,"pos=%d seg=%p\n", mr->pos, seg); ! switch (mr->pos) { ! case -1: ! for (i=0; i < count; i++) { ! if ((c1=route_info_get(mr->ri))) { ! c[i]=*c1; ! rc++; ! } ! } ! break; ! case 0: ! for (i=0; i < count; i++) { ! if (mr->last_coord >= seg->ncoords) ! break; ! if (i >= seg->ncoords) ! break; ! c[i] = seg->c[mr->last_coord++]; ! rc++; ! } ! break; ! case 1: ! for (i=0; i < count; i++) { ! if ((c1=route_info_get(mr->ri))) { ! c[i]=*c1; ! rc++; ! } ! } ! break; ! default: ! rc=0; } + dbg(1,"return %d\n",rc); return rc; } *************** *** 1561,1573 **** struct map_rect_priv *mr = priv_data; struct route_graph_point *p = mr->point; - char buf[1024]; switch (attr_type) { case attr_any: case attr_label: attr->type = attr_label; - sprintf(buf, "x=%d y=%d", p->c.x, p->c.y); if (mr->label) ! free(mr->label); ! mr->label=strdup(buf); attr->u.str = mr->label; return 1; --- 1536,1546 ---- struct map_rect_priv *mr = priv_data; struct route_graph_point *p = mr->point; switch (attr_type) { case attr_any: case attr_label: attr->type = attr_label; if (mr->label) ! g_free(mr->label); ! mr->label=g_strdup_printf("x=%d y=%d", p->c.x, p->c.y); attr->u.str = mr->label; return 1; *************** *** 1608,1616 **** rm_rect_new(struct map_priv *map, struct map_selection *sel) { struct map_rect_priv * mr; ! mr = calloc(1, sizeof(*mr)); ! if (!mr) ! return mr; ! mr->mpriv = (struct route *)map; return mr; } --- 1581,1595 ---- rm_rect_new(struct map_priv *map, struct map_selection *sel) { + struct route *route=(struct route *)map; struct map_rect_priv * mr; ! dbg(1,"enter\n"); ! mr=g_new0(struct map_rect_priv, 1); ! mr->mpriv = route; ! mr->ri=route_info_open(route_get_pos(route), route_get_dst(route), 0); ! mr->pos_next=1; ! if (!mr->ri) { ! mr->ri=route_info_open(route_get_pos(route), NULL, 0); ! mr->pos_next=-1; ! } return mr; } *************** *** 1619,1625 **** rm_rect_destroy(struct map_rect_priv *mr) { if (mr->label) ! free(mr->label); ! free(mr); } --- 1598,1606 ---- rm_rect_destroy(struct map_rect_priv *mr) { + if (mr->ri) + route_info_close(mr->ri); if (mr->label) ! g_free(mr->label); ! g_free(mr); } *************** *** 1629,1632 **** --- 1610,1614 ---- struct route *r = mr->mpriv; struct route_path_segment *seg = mr->seg; + dbg(1,"enter\n", mr->pos); rep: *************** *** 1655,1664 **** } ! /* FIXME: Generate items for segstart-dst/pos */ ! if (!seg) ! seg = r->path2->path; ! else ! seg = seg->next; ! if (!seg) { mr->segsdone = 1; if (r->flags & RF_SHOWGRAPH) --- 1637,1661 ---- } ! mr->pos=mr->pos_next; ! switch(mr->pos) { ! case -1: ! mr->pos_next=0; ! break; ! case 0: ! if (!seg) ! seg = r->path2->path; ! else ! seg = seg->next; ! if (seg) { ! mr->item = seg->item; ! break; ! } ! mr->pos=1; ! route_info_close(mr->ri); ! mr->ri=route_info_open(NULL, route_get_dst(r), 0); ! case 1: ! mr->pos_next=2; ! break; ! case 2: mr->segsdone = 1; if (r->flags & RF_SHOWGRAPH) *************** *** 1671,1675 **** mr->item.id_lo = 0; mr->item.map = NULL; - mr->item = seg->item; mr->item.priv_data = mr; mr->item.type = type_street_route; --- 1668,1671 ---- |