From: <mar...@us...> - 2008-08-22 18:36:18
|
Revision: 1300 http://navit.svn.sourceforge.net/navit/?rev=1300&view=rev Author: martin-s Date: 2008-08-22 18:36:27 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Fix:Core:Removed unneccessary debug output Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2008-08-22 12:03:22 UTC (rev 1299) +++ trunk/navit/navit/graphics.c 2008-08-22 18:36:27 UTC (rev 1300) @@ -957,7 +957,6 @@ } #endif profile(0,NULL); - dbg(0,"delta=%d\n", l->order_delta); order+=l->order_delta; do_draw(displaylist, trans, mapsets, order); // profile(1,"do_draw"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <za...@us...> - 2008-10-23 23:19:07
|
Revision: 1543 http://navit.svn.sourceforge.net/navit/?rev=1543&view=rev Author: zaxl Date: 2008-10-23 23:18:56 +0000 (Thu, 23 Oct 2008) Log Message: ----------- FIX:core:cache NAVIT_SHAREDIR from the enviroment for icon paths, it would be better to make it a layout property. Doing a = strdup("*"); f(a); free(a); is a bad habit. Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2008-10-23 22:29:52 UTC (rev 1542) +++ trunk/navit/navit/graphics.c 2008-10-23 23:18:56 UTC (rev 1543) @@ -47,6 +47,8 @@ #include "util.h" #include "callback.h" +static char *navit_sharedir; + //############################################################################################################## //# Description: //# Comment: @@ -139,6 +141,7 @@ graphics_gc_set_background(this_->gc[2], &(struct color) { 0xffff, 0xffff, 0xffff, 0xffff }); graphics_gc_set_foreground(this_->gc[2], &(struct color) { 0x0000, 0x0000, 0x0000, 0xffff }); this_->meth.background_gc(this_->priv, this_->gc[0]->priv); + navit_sharedir = getenv("NAVIT_SHAREDIR"); } /** @@ -678,6 +681,7 @@ struct graphics_gc *gc = NULL; struct graphics_image *img; struct point p; + char path[PATH_MAX]; es=itm->elements; while (es) { @@ -734,9 +738,8 @@ break; case element_icon: if (!img) { - char *icon=g_strjoin(NULL,getenv("NAVIT_SHAREDIR"), "/xpm/", e->u.icon.src, NULL); - img=graphics_image_new(gra, icon); - g_free(icon); + sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src); + img=graphics_image_new(gra, path); if (! img) dbg(0,"failed to load icon '%s'\n", e->u.icon.src); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <za...@us...> - 2008-11-17 00:10:11
|
Revision: 1731 http://navit.svn.sourceforge.net/navit/?rev=1731&view=rev Author: zaxl Date: 2008-11-17 00:10:08 +0000 (Mon, 17 Nov 2008) Log Message: ----------- Fix:core: Save some sqrts in label_line Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2008-11-16 10:13:01 UTC (rev 1730) +++ trunk/navit/navit/graphics.c 2008-11-17 00:10:08 UTC (rev 1731) @@ -608,18 +608,21 @@ */ static void label_line(struct graphics *gra, struct graphics_gc *fg, struct graphics_gc *bg, struct graphics_font *font, struct point *p, int count, char *label) { - int i,x,y,tl; - double dx,dy,l; + int i,x,y,tl,tlsq,l; + float lsq; + double dx,dy; struct point p_t; tl=strlen(label)*400; + tlsq = tl*tl; for (i = 0 ; i < count-1 ; i++) { dx=p[i+1].x-p[i].x; dx*=100; dy=p[i+1].y-p[i].y; dy*=100; - l=(int)sqrt((float)(dx*dx+dy*dy)); - if (l > tl) { + lsq = dx*dx+dy*dy; + if (lsq > tlsq) { + l=(int)sqrtf(lsq); x=p[i].x; y=p[i].y; if (dx < 0) { @@ -634,9 +637,9 @@ y+=dx*45/l/10; p_t.x=x; p_t.y=y; - #if 0 - printf("display_text: '%s', %d, %d, %d, %d %d\n", label, x, y, dx*0x10000/l, dy*0x10000/l, l); - #endif +#if 0 + dbg(0,"display_text: '%s', %d, %d, %d, %d %d\n", label, x, y, dx*0x10000/l, dy*0x10000/l, l); +#endif gra->meth.draw_text(gra->priv, fg->priv, bg->priv, font->priv, label, &p_t, dx*0x10000/l, dy*0x10000/l); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2008-11-21 11:18:52
|
Revision: 1739 http://navit.svn.sourceforge.net/navit/?rev=1739&view=rev Author: martin-s Date: 2008-11-21 11:18:41 +0000 (Fri, 21 Nov 2008) Log Message: ----------- Add:Core:Make absolute icon paths possible Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2008-11-21 08:39:03 UTC (rev 1738) +++ trunk/navit/navit/graphics.c 2008-11-21 11:18:41 UTC (rev 1739) @@ -750,7 +750,10 @@ break; case element_icon: if (!img) { - sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src); + if (e->u.icon.src[0] == '/') + strcpy(path,e->u.icon.src); + else + sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src); img=graphics_image_new_scaled_rotated(gra, path, e->u.icon.width, e->u.icon.height, e->u.icon.rotation); if (! img) dbg(0,"failed to load icon '%s'\n", e->u.icon.src); @@ -836,7 +839,10 @@ } break; case element_icon: - sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src); + if (e->u.icon.src[0] == '/') + strcpy(path,e->u.icon.src); + else + sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src); img=graphics_image_new_scaled_rotated(gra, path, e->u.icon.width, e->u.icon.height, e->u.icon.rotation); if (! img) dbg(0,"failed to load icon '%s'\n", e->u.icon.src); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2008-12-23 17:09:50
|
Revision: 1849 http://navit.svn.sourceforge.net/navit/?rev=1849&view=rev Author: martin-s Date: 2008-12-23 17:09:42 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Add:Core:Initial working on pseudo 3d support Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2008-12-23 17:07:52 UTC (rev 1848) +++ trunk/navit/navit/graphics.c 2008-12-23 17:09:42 UTC (rev 1849) @@ -701,6 +701,285 @@ } } +static int +intersection(struct point * a1, int adx, int ady, struct point * b1, int bdx, int bdy, + struct point * res) +{ + int n, a, b; + n = bdy * adx - bdx * ady; + a = bdx * (a1->y - b1->y) - bdy * (a1->x - b1->x); + b = adx * (a1->y - b1->y) - ady * (a1->x - b1->x); + if (n < 0) { + n = -n; + a = -a; + b = -b; + } +#if 0 + if (a < 0 || b < 0) + return 0; + if (a > n || b > n) + return 0; +#endif + if (n == 0) + return 0; + res->x = a1->x + a * adx / n; + res->y = a1->y + a * ady / n; + return 1; +} + +struct circle { + int x,y,fowler; +} lw10[]={ +{0,10,0}, +{4,9,56}, +{7,7,128}, +{9,4,200}, +{10,0,256}, +{9,-4,312}, +{7,-7,384}, +{4,-9,456}, +{0,-10,512}, +{-4,-9,568}, +{-7,-7,640}, +{-9,-4,712}, +{-10,0,768}, +{-9,4,824}, +{-7,7,896}, +{-4,9,968}, +}; + +static void +draw_circle(struct point *pnt, int diameter, int scale, int start, int len, struct point *res, int *pos, int dir) +{ + struct circle *c; + +#if 0 + dbg(0,"diameter=%d start=%d len=%d pos=%d dir=%d\n", diameter, start, len, *pos, dir); +#endif + int end=start+len; + int i; + c=lw10; + if (len > 0) { + while (start < 0) { + start+=1024; + end+=1024; + } + while (end > 0) { + for (i = 0 ; i < 16 ; i++) { + if (c[i].fowler > start && c[i].fowler < end) { + res[*pos].x=pnt->x+c[i].x*diameter/20; + res[*pos].y=pnt->y+c[i].y*diameter/20; + (*pos)+=dir; + } + } + end-=1024; + start-=1024; + } + } else { + while (start > 1024) { + start-=1024; + end-=1024; + } + while (end < 1024) { + for (i = 15 ; i >= 0 ; i--) { + if (c[i].fowler < start && c[i].fowler > end) { + res[*pos].x=pnt->x+c[i].x*diameter/20; + res[*pos].y=pnt->y+c[i].y*diameter/20; + (*pos)+=dir; + } + } + start+=1024; + end+=1024; + } + } +} + + +static int +fowler(int dy, int dx) +{ + int adx, ady; /* Absolute Values of Dx and Dy */ + int code; /* Angular Region Classification Code */ + + adx = (dx < 0) ? -dx : dx; /* Compute the absolute values. */ + ady = (dy < 0) ? -dy : dy; + + code = (adx < ady) ? 1 : 0; + if (dx < 0) + code += 2; + if (dy < 0) + code += 4; + + switch (code) { + case 0: + return (dx == 0) ? 0 : 128*ady / adx; /* [ 0, 45] */ + case 1: + return (256 - (128*adx / ady)); /* ( 45, 90] */ + case 3: + return (256 + (128*adx / ady)); /* ( 90,135) */ + case 2: + return (512 - (128*ady / adx)); /* [135,180] */ + case 6: + return (512 + (128*ady / adx)); /* (180,225] */ + case 7: + return (768 - (128*adx / ady)); /* (225,270) */ + case 5: + return (768 + (128*adx / ady)); /* [270,315) */ + case 4: + return (1024 - (128*ady / adx));/* [315,360) */ + } + return 0; +} +static int +int_sqrt(unsigned int n) +{ + unsigned int h, p= 0, q= 1, r= n; + while ( q <= n ) + q <<= 2; + while ( q != 1 ) { + q >>= 2; + h = p + q; + p >>= 1; + if ( r >= h ) { + p += q; + r -= h; + } + } + return p; +} + +struct offset { + int px,py,nx,ny; +}; + +static void +calc_offsets(int wi, int l, int dx, int dy, struct offset *res) +{ + int x,y; + x = (dx * wi) / l; + y = (dy * wi) / l; + if (x < 0) { + res->nx = -x/2; + res->px = (x-1)/2; + } else { + res->nx = -(x+1)/2; + res->px = x/2; + } + if (y < 0) { + res->ny = -y/2; + res->py = (y-1)/2; + } else { + res->ny = -(y+1)/2; + res->py = y/2; + } +} + +static void +graphics_draw_polyline_as_polygon(struct graphics *gra, struct graphics_gc *gc, struct point *pnt, int count, int *width, int step) +{ + int maxpoints=200; + struct point res[maxpoints], pos, poso, neg, nego; + int i, j, dx, dy, l, dxo, dyo; + struct offset o,oo; + int fow, fowo, delta; + int wi, ppos = maxpoints/2, npos = maxpoints/2; + int state,prec=5; + j = 0; + int max_circle_points=20; +#if 0 + dbg(0,"enter: count=%d\n", count); +#endif + for (i = 0; i < count; i++) { + wi=*width; + width+=step; +#if 0 + dbg(0,"p[%d]=%d,%d wi=%d\n", i,pnt[i].x,pnt[i].y, wi); +#endif + if (i < count - 1) { + dx = (pnt[i + 1].x - pnt[i].x); + dy = (pnt[i + 1].y - pnt[i].y); + l = int_sqrt(dx * dx + dy * dy); + fow=fowler(-dy, dx); + } + if (! l) + l=1; + calc_offsets(wi, l, dx, dy, &o); + pos.x = pnt[i].x + o.ny; + pos.y = pnt[i].y + o.px; + neg.x = pnt[i].x + o.py; + neg.y = pnt[i].y + o.nx; + if (! i) + state=0; + else if (i == count-1) + state=2; + else if (npos < max_circle_points || ppos >= maxpoints-max_circle_points) + state=3; + else + state=1; +#if 0 + dbg(0,"state=%d npos=%d ppos=%d\n", state, npos, ppos); +#endif + switch (state) { + case 1: + if (fowo != fow) { + poso.x = pnt[i].x + oo.ny; + poso.y = pnt[i].y + oo.px; + nego.x = pnt[i].x + oo.py; + nego.y = pnt[i].y + oo.nx; + delta=fowo-fow; + if (delta < 0) + delta+=1024; + if (delta < 512) { + if (intersection(&pos, dx, dy, &poso, dxo, dyo, &res[ppos])) + ppos++; + res[--npos] = nego; + --npos; + draw_circle(&pnt[i], wi, prec, fowo-512, -delta, res, &npos, -1); + res[npos] = neg; + } else { + res[ppos++] = poso; + draw_circle(&pnt[i], wi, prec, fowo, 1024-delta, res, &ppos, 1); + res[ppos++] = pos; + if (intersection(&neg, dx, dy, &nego, dxo, dyo, &res[npos - 1])) + npos--; + } + } + break; + case 2: + case 3: + res[--npos] = neg; + --npos; + draw_circle(&pnt[i], wi, prec, fow-512, -512, res, &npos, -1); + res[npos] = pos; + res[ppos++] = pos; +#if 0 + dbg(0,"npos=%d ppos=%d\n", npos, ppos); +#endif + dbg_assert(npos > 0); + dbg_assert(ppos < maxpoints); + gra->meth.draw_polygon(gra->priv, gc->priv, res+npos, ppos-npos); + if (state == 2) + break; + npos=maxpoints/2; + ppos=maxpoints/2; + case 0: + res[ppos++] = neg; + draw_circle(&pnt[i], wi, prec, fow+512, 512, res, &ppos, 1); + res[ppos++] = pos; + break; + } + if (step) { + wi=*width; + calc_offsets(wi, l, dx, dy, &oo); + } else + oo=o; + dxo = -dx; + dyo = -dy; + fowo=fow; + } +} + + /** * FIXME * @param <> @@ -742,14 +1021,24 @@ gra->meth.draw_polygon(gra->priv, gc->priv, di->pnt, di->count); break; case element_polyline: +#if 0 if (e->u.polyline.width > 1) - gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); - if (e->u.polyline.width > 0 && e->u.polyline.dash_num > 0) - graphics_gc_set_dashes(gc, e->u.polyline.width, - e->u.polyline.offset, - e->u.polyline.dash_table, - e->u.polyline.dash_num); - gra->meth.draw_lines(gra->priv, gc->priv, di->pnt, di->count); + graphics_draw_polyline_as_polygon(gra, gc, di->pnt, di->count, &e->u.polyline.width, 0); + else { +#else + { + if (e->u.polyline.width > 1) + gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); + + +#endif + if (e->u.polyline.width > 0 && e->u.polyline.dash_num > 0) + graphics_gc_set_dashes(gc, e->u.polyline.width, + e->u.polyline.offset, + e->u.polyline.dash_table, + e->u.polyline.dash_num); + gra->meth.draw_lines(gra->priv, gc->priv, di->pnt, di->count); + } break; case element_circle: if (e->u.circle.width > 1) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-01-13 17:38:59
|
Revision: 1937 http://navit.svn.sourceforge.net/navit/?rev=1937&view=rev Author: martin-s Date: 2009-01-13 17:38:55 +0000 (Tue, 13 Jan 2009) Log Message: ----------- Fix:Core:Set linewidth=1 when drawing polygons Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-01-13 17:21:38 UTC (rev 1936) +++ trunk/navit/navit/graphics.c 2009-01-13 17:38:55 UTC (rev 1937) @@ -1277,8 +1277,12 @@ } else { #else { +#if 0 if (e->u.polyline.width > 1) gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); +#else + gc->meth.gc_set_linewidth(gc->priv, 1); +#endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-01-14 13:22:51
|
Revision: 1943 http://navit.svn.sourceforge.net/navit/?rev=1943&view=rev Author: martin-s Date: 2009-01-14 12:43:04 +0000 (Wed, 14 Jan 2009) Log Message: ----------- Fix:Core:Improved circle drawing Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-01-14 11:59:48 UTC (rev 1942) +++ trunk/navit/navit/graphics.c 2009-01-14 12:43:04 UTC (rev 1943) @@ -734,24 +734,72 @@ } struct circle { - int x,y,fowler; -} lw10[]={ -{0,10,0}, -{4,9,56}, -{7,7,128}, -{9,4,200}, -{10,0,256}, -{9,-4,312}, -{7,-7,384}, -{4,-9,456}, -{0,-10,512}, -{-4,-9,568}, -{-7,-7,640}, -{-9,-4,712}, -{-10,0,768}, -{-9,4,824}, -{-7,7,896}, -{-4,9,968}, + short x,y,fowler; +} circle64[]={ +{0,128,0}, +{13,127,13}, +{25,126,25}, +{37,122,38}, +{49,118,53}, +{60,113,67}, +{71,106,85}, +{81,99,104}, +{91,91,128}, +{99,81,152}, +{106,71,171}, +{113,60,189}, +{118,49,203}, +{122,37,218}, +{126,25,231}, +{127,13,243}, +{128,0,256}, +{127,-13,269}, +{126,-25,281}, +{122,-37,294}, +{118,-49,309}, +{113,-60,323}, +{106,-71,341}, +{99,-81,360}, +{91,-91,384}, +{81,-99,408}, +{71,-106,427}, +{60,-113,445}, +{49,-118,459}, +{37,-122,474}, +{25,-126,487}, +{13,-127,499}, +{0,-128,512}, +{-13,-127,525}, +{-25,-126,537}, +{-37,-122,550}, +{-49,-118,565}, +{-60,-113,579}, +{-71,-106,597}, +{-81,-99,616}, +{-91,-91,640}, +{-99,-81,664}, +{-106,-71,683}, +{-113,-60,701}, +{-118,-49,715}, +{-122,-37,730}, +{-126,-25,743}, +{-127,-13,755}, +{-128,0,768}, +{-127,13,781}, +{-126,25,793}, +{-122,37,806}, +{-118,49,821}, +{-113,60,835}, +{-106,71,853}, +{-99,81,872}, +{-91,91,896}, +{-81,99,920}, +{-71,106,939}, +{-60,113,957}, +{-49,118,971}, +{-37,122,986}, +{-25,126,999}, +{-13,127,1011}, }; static void @@ -762,9 +810,20 @@ #if 0 dbg(0,"diameter=%d start=%d len=%d pos=%d dir=%d\n", diameter, start, len, *pos, dir); #endif + int count=64; int end=start+len; - int i; - c=lw10; + int i,step; + c=circle64; + if (diameter > 128) + step=1; + else if (diameter > 64) + step=2; + else if (diameter > 24) + step=4; + else if (diameter > 8) + step=8; + else + step=16; if (len > 0) { while (start < 0) { start+=1024; @@ -772,13 +831,13 @@ } while (end > 0) { i=0; - while (i < 16 && c[i].fowler <= start) - i++; - while (i < 16 && c[i].fowler < end) { - res[*pos].x=pnt->x+c[i].x*diameter/20; - res[*pos].y=pnt->y+c[i].y*diameter/20; + while (i < count && c[i].fowler <= start) + i+=step; + while (i < count && c[i].fowler < end) { + res[*pos].x=pnt->x+((c[i].x*diameter+128)>>8); + res[*pos].y=pnt->y+((c[i].y*diameter+128)>>8); (*pos)+=dir; - i++; + i+=step; } end-=1024; start-=1024; @@ -789,14 +848,14 @@ end-=1024; } while (end < 1024) { - i=15; - while (i >= 0 && c[i].fowler >= end) - i--; - while (i >= 0 && c[i].fowler > start) { - res[*pos].x=pnt->x+c[i].x*diameter/20; - res[*pos].y=pnt->y+c[i].y*diameter/20; + i=count-1; + while (i >= 0 && c[i].fowler >= start) + i-=step; + while (i >= 0 && c[i].fowler > end) { + res[*pos].x=pnt->x+((c[i].x*diameter+128)>>8); + res[*pos].y=pnt->y+((c[i].y*diameter+128)>>8); (*pos)+=dir; - i--; + i-=step; } start+=1024; end+=1024; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-01-26 12:52:13
|
Revision: 1973 http://navit.svn.sourceforge.net/navit/?rev=1973&view=rev Author: martin-s Date: 2009-01-26 12:22:17 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Fix:Core:Reduce graphics workload to get routing more time Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-01-26 11:44:55 UTC (rev 1972) +++ trunk/navit/navit/graphics.c 2009-01-26 12:22:17 UTC (rev 1973) @@ -1695,7 +1695,7 @@ displaylist->dc.gra=gra; displaylist->ms=mapsets->data; displaylist->dc.trans=trans; - displaylist->workload=async ? 1000 : 0; + displaylist->workload=async ? 100 : 0; displaylist->cb=cb; if (l) order+=l->order_delta; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-01-26 13:15:34
|
Revision: 1972 http://navit.svn.sourceforge.net/navit/?rev=1972&view=rev Author: martin-s Date: 2009-01-26 11:44:55 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Fix:Core:Removed annoying debug message Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-01-26 11:43:19 UTC (rev 1971) +++ trunk/navit/navit/graphics.c 2009-01-26 11:44:55 UTC (rev 1972) @@ -1592,7 +1592,6 @@ struct coord ca[max]; struct attr attr; - fprintf(stderr,"d\n"); while (!cancel) { if (!displaylist->msh) { displaylist->msh=mapset_open(displaylist->ms); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-02-02 14:41:23
|
Revision: 1989 http://navit.svn.sourceforge.net/navit/?rev=1989&view=rev Author: martin-s Date: 2009-02-02 14:41:17 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Add:Core:Added support for drawing rounded rectangles Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-02-02 14:40:17 UTC (rev 1988) +++ trunk/navit/navit/graphics.c 2009-02-02 14:41:17 UTC (rev 1989) @@ -98,6 +98,7 @@ }; +static void draw_circle(struct point *pnt, int diameter, int scale, int start, int len, struct point *res, int *pos, int dir); void graphics_set_rect(struct graphics *gra, struct point_rect *pr) { @@ -437,6 +438,28 @@ this_->meth.draw_rectangle(this_->priv, gc->priv, p, w, h); } +void graphics_draw_rectangle_rounded(struct graphics *this_, struct graphics_gc *gc, struct point *plu, int w, int h, int r, int fill) +{ + struct point p[r*4+32]; + struct point pi0={plu->x+r,plu->y+r}; + struct point pi1={plu->x+w-r,plu->y+r}; + struct point pi2={plu->x+w-r,plu->y+h-r}; + struct point pi3={plu->x+r,plu->y+h-r}; + int i=0; + + draw_circle(&pi2, r*2, 0, -1, 258, p, &i, 1); + draw_circle(&pi1, r*2, 0, 255, 258, p, &i, 1); + draw_circle(&pi0, r*2, 0, 511, 258, p, &i, 1); + draw_circle(&pi3, r*2, 0, 767, 258, p, &i, 1); + p[i]=p[0]; + i++; + if (fill) + this_->meth.draw_polygon(this_->priv, gc->priv, p, i); + else + this_->meth.draw_lines(this_->priv, gc->priv, p, i); +} + + /** * FIXME * @param <> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-02-05 17:45:48
|
Revision: 2016 http://navit.svn.sourceforge.net/navit/?rev=2016&view=rev Author: martin-s Date: 2009-02-05 17:45:43 +0000 (Thu, 05 Feb 2009) Log Message: ----------- Fix:Core:Add length scaling factor to remove drawing glitches Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-02-05 12:45:55 UTC (rev 2015) +++ trunk/navit/navit/graphics.c 2009-02-05 17:45:43 UTC (rev 2016) @@ -1013,18 +1013,19 @@ int wi, ppos = maxpoints/2, npos = maxpoints/2; int state,prec=5; int max_circle_points=20; + int lscale=16; for (i = 0; i < count; i++) { wi=*width; width+=step; if (i < count - 1) { dx = (pnt[i + 1].x - pnt[i].x); dy = (pnt[i + 1].y - pnt[i].y); - l = int_sqrt(dx * dx + dy * dy); + l = int_sqrt(dx * dx * lscale * lscale + dy * dy * lscale * lscale); fow=fowler(-dy, dx); } if (! l) l=1; - calc_offsets(wi, l, dx, dy, &o); + calc_offsets(wi*lscale, l, dx, dy, &o); pos.x = pnt[i].x + o.ny; pos.y = pnt[i].y + o.px; neg.x = pnt[i].x + o.py; @@ -1085,7 +1086,7 @@ } if (step) { wi=*width; - calc_offsets(wi, l, dx, dy, &oo); + calc_offsets(wi*lscale, l, dx, dy, &oo); } else oo=o; dxo = -dx; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-02-13 16:05:31
|
Revision: 2051 http://navit.svn.sourceforge.net/navit/?rev=2051&view=rev Author: martin-s Date: 2009-02-13 16:05:27 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Fix:Core:Fixed a memory leak Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-02-13 15:44:13 UTC (rev 2050) +++ trunk/navit/navit/graphics.c 2009-02-13 16:05:27 UTC (rev 2051) @@ -1328,8 +1328,10 @@ static void display_context_free(struct display_context *dc) { - g_free(dc->gc); - g_free(dc->img); + if (dc->gc) + graphics_gc_destroy(dc->gc); + if (dc->img) + graphics_image_free(dc->gra, dc->img); dc->gc=NULL; dc->img=NULL; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2009-03-01 04:08:50
|
Revision: 2076 http://navit.svn.sourceforge.net/navit/?rev=2076&view=rev Author: steven_s Date: 2009-03-01 04:08:41 +0000 (Sun, 01 Mar 2009) Log Message: ----------- Fix:graphics:Preventing segfault when no mapsets are defined Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-02-27 09:40:43 UTC (rev 2075) +++ trunk/navit/navit/graphics.c 2009-03-01 04:08:41 UTC (rev 2076) @@ -1724,7 +1724,8 @@ dbg(1,"order=%d\n", order); displaylist->dc.gra=gra; - displaylist->ms=mapsets->data; + if(mapsets) + displaylist->ms=mapsets->data; displaylist->dc.trans=trans; displaylist->workload=async ? 100 : 0; displaylist->cb=cb; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-03-16 13:21:17
|
Revision: 2130 http://navit.svn.sourceforge.net/navit/?rev=2130&view=rev Author: martin-s Date: 2009-03-16 13:20:44 +0000 (Mon, 16 Mar 2009) Log Message: ----------- Fix:Core:Made searching lines via right click more reliable Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-03-16 13:19:16 UTC (rev 2129) +++ trunk/navit/navit/graphics.c 2009-03-16 13:20:44 UTC (rev 2130) @@ -1883,6 +1883,29 @@ int c1,c2; struct point line_p; + if (line_p0->x < line_p1->x) { + if (p->x < line_p0->x - dist) + return 0; + if (p->x > line_p1->x + dist) + return 0; + } else { + if (p->x < line_p1->x - dist) + return 0; + if (p->x > line_p0->x + dist) + return 0; + } + if (line_p0->y < line_p1->y) { + if (p->y < line_p0->y - dist) + return 0; + if (p->y > line_p1->y + dist) + return 0; + } else { + if (p->y < line_p1->y - dist) + return 0; + if (p->y > line_p0->y + dist) + return 0; + } + vx=line_p1->x-line_p0->x; vy=line_p1->y-line_p0->y; wx=p->x-line_p0->x; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-03-17 10:52:09
|
Revision: 2138 http://navit.svn.sourceforge.net/navit/?rev=2138&view=rev Author: martin-s Date: 2009-03-17 10:52:07 +0000 (Tue, 17 Mar 2009) Log Message: ----------- Fix:Core:Avoid unneccessary calculation at the last point Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-03-17 10:49:35 UTC (rev 2137) +++ trunk/navit/navit/graphics.c 2009-03-17 10:52:07 UTC (rev 2138) @@ -987,6 +987,7 @@ calc_offsets(int wi, int l, int dx, int dy, struct offset *res) { int x,y; + x = (dx * wi) / l; y = (dy * wi) / l; if (x < 0) { @@ -1017,7 +1018,8 @@ int state,prec=5; int max_circle_points=20; int lscale=16; - for (i = 0; i < count; i++) { + i=0; + for (;;) { wi=*width; width+=step; if (i < count - 1) { @@ -1028,6 +1030,7 @@ } if (! l) l=1; + dbg_assert(wi*lscale < 10000); calc_offsets(wi*lscale, l, dx, dy, &o); pos.x = pnt[i].x + o.ny; pos.y = pnt[i].y + o.px; @@ -1087,6 +1090,9 @@ res[ppos++] = pos; break; } + i++; + if (i >= count) + break; if (step) { wi=*width; calc_offsets(wi*lscale, l, dx, dy, &oo); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-03-22 20:08:13
|
Revision: 2160 http://navit.svn.sourceforge.net/navit/?rev=2160&view=rev Author: martin-s Date: 2009-03-22 20:08:10 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Fix:Core:Split up graphics_draw Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-03-22 11:46:50 UTC (rev 2159) +++ trunk/navit/navit/graphics.c 2009-03-22 20:08:10 UTC (rev 2160) @@ -1559,6 +1559,9 @@ e->u.polyline.dash_num); gra->meth.draw_lines(gra->priv, gc->priv, pnt, count); break; + case element_polygon: + gra->meth.draw_polygon(gra->priv, gc->priv, pnt, count); + break; case element_circle: if (e->u.circle.width > 1) gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); @@ -1736,13 +1739,7 @@ gra->meth.draw_mode(gra->priv, draw_mode_end); } -/** - * FIXME - * @param <> - * @returns <> - * @author Martin Schaller (04/2008) -*/ -void graphics_draw(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb) +void graphics_load_mapset(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb) { int order=transform_get_order(trans); @@ -1769,7 +1766,18 @@ if (! displaylist->idle_cb) displaylist->idle_cb=callback_new_2(callback_cast(do_draw), displaylist, 0); displaylist->idle_ev=event_add_idle(50, displaylist->idle_cb); - } else + } +} +/** + * FIXME + * @param <> + * @returns <> + * @author Martin Schaller (04/2008) +*/ +void graphics_draw(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb) +{ + graphics_load_mapset(gra, displaylist, mapset, trans, l, async, cb); + if (! async) do_draw(displaylist, 0); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-10 07:46:01
|
Revision: 2311 http://navit.svn.sourceforge.net/navit/?rev=2311&view=rev Author: martin-s Date: 2009-06-10 07:44:55 +0000 (Wed, 10 Jun 2009) Log Message: ----------- Fix:Core:Allow font sizes up to 64 Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-06-09 13:00:12 UTC (rev 2310) +++ trunk/navit/navit/graphics.c 2009-06-10 07:44:55 UTC (rev 2311) @@ -62,7 +62,8 @@ struct graphics_priv *priv; struct graphics_methods meth; char *default_font; - struct graphics_font *font[16]; + int font_len; + struct graphics_font **font; struct graphics_gc *gc[3]; struct attr **attrs; struct callback_list *cbl; @@ -254,7 +255,7 @@ void graphics_font_destroy_all(struct graphics *gra) { int i; - for(i = 0 ; i < sizeof(gra->font) / sizeof(gra->font[0]); i++) { + for(i = 0 ; i < gra->font_len; i++) { if(!gra->font[i]) continue; gra->font[i]->meth.font_destroy(gra->font[i]->priv); gra->font[i] = NULL; @@ -1379,6 +1380,22 @@ dc->img=NULL; } +static struct graphics_font * +get_font(struct graphics *gra, int size) +{ + if (size > 64) + size=64; + if (size >= gra->font_len) { + gra->font=g_renew(struct graphics_font *, gra->font, size+1); + while (gra->font_len <= size) + gra->font[gra->font_len++]=NULL; + } + if (! gra->font[size]) + gra->font[size]=graphics_font_new(gra, size*20, 0); + return gra->font[size]; +} + + static void displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc) { @@ -1459,19 +1476,23 @@ gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); gra->meth.draw_circle(gra->priv, gc->priv, pa, e->u.circle.radius); if (di->label && e->text_size) { + struct graphics_font *font=get_font(gra, e->text_size); p.x=pa[0].x+3; p.y=pa[0].y+10; - if (! gra->font[e->text_size]) - gra->font[e->text_size]=graphics_font_new(gra, e->text_size*20, 0); - gra->meth.draw_text(gra->priv, gra->gc[2]->priv, gra->gc[1]->priv, gra->font[e->text_size]->priv, di->label, &p, 0x10000, 0); + if (font) + gra->meth.draw_text(gra->priv, gra->gc[2]->priv, gra->gc[1]->priv, font->priv, di->label, &p, 0x10000, 0); + else + dbg(0,"Failed to get font with size %d\n",e->text_size); } } break; case element_text: if (count && di->label) { - if (! gra->font[e->text_size]) - gra->font[e->text_size]=graphics_font_new(gra, e->text_size*20, 0); - label_line(gra, gra->gc[2], gra->gc[1], gra->font[e->text_size], pa, count, di->label); + struct graphics_font *font=get_font(gra, e->text_size); + if (font) + label_line(gra, gra->gc[2], gra->gc[1], font, pa, count, di->label); + else + dbg(0,"Failed to get font with size %d\n",e->text_size); } break; case element_icon: @@ -1584,11 +1605,13 @@ gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); gra->meth.draw_circle(gra->priv, gc->priv, &pnt[0], e->u.circle.radius); if (label && e->text_size) { + struct graphics_font *font=get_font(gra, e->text_size); p.x=pnt[0].x+3; p.y=pnt[0].y+10; - if (! gra->font[e->text_size]) - gra->font[e->text_size]=graphics_font_new(gra, e->text_size*20, 0); - gra->meth.draw_text(gra->priv, gra->gc[2]->priv, gra->gc[1]->priv, gra->font[e->text_size]->priv, label, &p, 0x10000, 0); + if (font) + gra->meth.draw_text(gra->priv, gra->gc[2]->priv, gra->gc[1]->priv, font->priv, label, &p, 0x10000, 0); + else + dbg(0,"Failed to get font with size %d\n",e->text_size); } break; case element_icon: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2009-06-17 20:32:09
|
Revision: 2338 http://navit.svn.sourceforge.net/navit/?rev=2338&view=rev Author: kazer_ Date: 2009-06-17 20:32:00 +0000 (Wed, 17 Jun 2009) Log Message: ----------- Fix:Core:Fix coverity bug #1, dead code Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-06-17 20:03:06 UTC (rev 2337) +++ trunk/navit/navit/graphics.c 2009-06-17 20:32:00 UTC (rev 2338) @@ -1604,6 +1604,8 @@ if (e->u.circle.width > 1) gc->meth.gc_set_linewidth(gc->priv, e->u.polyline.width); gra->meth.draw_circle(gra->priv, gc->priv, &pnt[0], e->u.circle.radius); + #if 0 + // Leftover code, displayitem_draw is intended to be merged with with graphics_draw_itemgra if (label && e->text_size) { struct graphics_font *font=get_font(gra, e->text_size); p.x=pnt[0].x+3; @@ -1613,6 +1615,7 @@ else dbg(0,"Failed to get font with size %d\n",e->text_size); } + # endif break; case element_icon: if (e->u.icon.src[0] == '/') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-07-26 16:04:01
|
Revision: 2402 http://navit.svn.sourceforge.net/navit/?rev=2402&view=rev Author: martin-s Date: 2009-07-26 16:03:46 +0000 (Sun, 26 Jul 2009) Log Message: ----------- Fix:Core:Reduced scaling factor to avoid overflow with labelling Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-07-26 11:14:00 UTC (rev 2401) +++ trunk/navit/navit/graphics.c 2009-07-26 16:03:46 UTC (rev 2402) @@ -736,14 +736,14 @@ tl=strlen(label)*4; th=8; } - tlm=tl*128; - thm=th*144; + tlm=tl*32; + thm=th*36; tlsq = tlm*tlm; for (i = 0 ; i < count-1 ; i++) { dx=p[i+1].x-p[i].x; - dx*=128; + dx*=32; dy=p[i+1].y-p[i].y; - dy*=128; + dy*=32; lsq = dx*dx+dy*dy; if (lsq > tlsq) { l=(int)sqrtf(lsq); @@ -755,10 +755,10 @@ x=p[i+1].x; y=p[i+1].y; } - x+=(l-tlm)*dx/l/256; - y+=(l-tlm)*dy/l/256; - x-=dy*thm/l/256; - y+=dx*thm/l/256; + x+=(l-tlm)*dx/l/64; + y+=(l-tlm)*dy/l/64; + x-=dy*thm/l/64; + y+=dx*thm/l/64; p_t.x=x; p_t.y=y; #if 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2009-08-14 15:25:45
|
Revision: 2463 http://navit.svn.sourceforge.net/navit/?rev=2463&view=rev Author: kazer_ Date: 2009-08-14 15:25:37 +0000 (Fri, 14 Aug 2009) Log Message: ----------- Fix:Core:Fixed infinite loop in int_sqrt Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-08-14 13:28:46 UTC (rev 2462) +++ trunk/navit/navit/graphics.c 2009-08-14 15:25:37 UTC (rev 2463) @@ -1000,8 +1000,13 @@ int_sqrt(unsigned int n) { unsigned int h, p= 0, q= 1, r= n; - while ( q <= n ) + while ( q <= n ) { q <<= 2; + if(q == 0) { + return (int) sqrtf( (float) n ); /* use float sqrt if we reach q MAX */ + } + } + while ( q != 1 ) { q >>= 2; h = p + q; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-20 05:34:07
|
Revision: 2490 http://navit.svn.sourceforge.net/navit/?rev=2490&view=rev Author: martin-s Date: 2009-08-20 05:33:59 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Fix:Core:Fixed osd icons, fixes trac #443 Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-08-18 19:20:37 UTC (rev 2489) +++ trunk/navit/navit/graphics.c 2009-08-20 05:33:59 UTC (rev 2490) @@ -51,7 +51,6 @@ #include "file.h" #include "event.h" -static char *navit_sharedir; //############################################################################################################## //# Description: @@ -207,7 +206,6 @@ graphics_gc_set_background(this_->gc[2], &(struct color) { 0xffff, 0xffff, 0xffff, 0xffff }); graphics_gc_set_foreground(this_->gc[2], &(struct color) { 0x0000, 0x0000, 0x0000, 0xffff }); graphics_background_gc(this_, this_->gc[0]); - navit_sharedir = getenv("NAVIT_SHAREDIR"); } /** @@ -1404,14 +1402,18 @@ char * graphics_icon_path(char *icon) { + static char *navit_sharedir; dbg(1,"enter %s\n",icon); if (icon[0] == '/') return g_strdup(icon); - else + else { #ifdef HAVE_API_ANDROID return g_strdup_printf("res/drawable/%s", icon); #else + if (! navit_sharedir) + navit_sharedir = getenv("NAVIT_SHAREDIR"); return g_strdup_printf("%s/xpm/%s", navit_sharedir, icon); + } #endif } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-20 09:15:51
|
Revision: 2493 http://navit.svn.sourceforge.net/navit/?rev=2493&view=rev Author: martin-s Date: 2009-08-20 09:15:43 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Fix:Core:Fixed typo Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-08-20 09:02:24 UTC (rev 2492) +++ trunk/navit/navit/graphics.c 2009-08-20 09:15:43 UTC (rev 2493) @@ -1413,8 +1413,8 @@ if (! navit_sharedir) navit_sharedir = getenv("NAVIT_SHAREDIR"); return g_strdup_printf("%s/xpm/%s", navit_sharedir, icon); +#endif } -#endif } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-25 21:04:41
|
Revision: 2530 http://navit.svn.sourceforge.net/navit/?rev=2530&view=rev Author: martin-s Date: 2009-08-25 21:04:33 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Fix:Core:Improved int_sqrt Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-08-25 21:00:52 UTC (rev 2529) +++ trunk/navit/navit/graphics.c 2009-08-25 21:04:33 UTC (rev 2530) @@ -999,21 +999,25 @@ int_sqrt(unsigned int n) { unsigned int h, p= 0, q= 1, r= n; - while ( q <= n ) { - q <<= 2; - if(q == 0) { - return (int) sqrtf( (float) n ); /* use float sqrt if we reach q MAX */ - } - } - while ( q != 1 ) { + /* avoid q rollover */ + if(n > (1<<(sizeof(n)*8-1))) { + q = 1<<(sizeof(n)*8-1); + } else { + while ( q <= n ) { + q <<= 2; + } q >>= 2; + } + + while ( q != 0 ) { h = p + q; p >>= 1; if ( r >= h ) { p += q; r -= h; - } + } + q >>= 2; } return p; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-10-19 20:33:49
|
Revision: 2677 http://navit.svn.sourceforge.net/navit/?rev=2677&view=rev Author: martin-s Date: 2009-10-19 20:33:42 +0000 (Mon, 19 Oct 2009) Log Message: ----------- Fix:Core:Hopefully fixed int_sqrt Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-10-19 14:27:49 UTC (rev 2676) +++ trunk/navit/navit/graphics.c 2009-10-19 20:33:42 UTC (rev 2677) @@ -1014,8 +1014,8 @@ unsigned int h, p= 0, q= 1, r= n; /* avoid q rollover */ - if(n > (1<<(sizeof(n)*8-1))) { - q = 1<<(sizeof(n)*8-1); + if(n >= (1<<(sizeof(n)*8-2))) { + q = 1<<(sizeof(n)*8-2); } else { while ( q <= n ) { q <<= 2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-11-20 10:49:24
|
Revision: 2771 http://navit.svn.sourceforge.net/navit/?rev=2771&view=rev Author: martin-s Date: 2009-11-20 10:49:15 +0000 (Fri, 20 Nov 2009) Log Message: ----------- Add:Core:More functionality for graphics Modified Paths: -------------- trunk/navit/navit/graphics.c Modified: trunk/navit/navit/graphics.c =================================================================== --- trunk/navit/navit/graphics.c 2009-11-20 10:25:11 UTC (rev 2770) +++ trunk/navit/navit/graphics.c 2009-11-20 10:49:15 UTC (rev 2771) @@ -1079,13 +1079,27 @@ wi=*width; width+=step; if (i < count - 1) { + int dxs,dys,lscales; + dx = (pnt[i + 1].x - pnt[i].x); dy = (pnt[i + 1].y - pnt[i].y); +#if 0 l = int_sqrt(dx * dx * lscale * lscale + dy * dy * lscale * lscale); +#else + dxs=dx*dx; + dys=dy*dy; + lscales=lscale*lscale; + if (dxs + dys > lscales) + l = int_sqrt(dxs+dys)*lscale; + else + l = int_sqrt((dxs+dys)*lscales); +#endif fow=fowler(-dy, dx); } if (! l) l=1; + if (wi*lscale > 10000) + lscale=10000/wi; dbg_assert(wi*lscale < 10000); calc_offsets(wi*lscale, l, dx, dy, &o); pos.x = pnt[i].x + o.ny; @@ -1807,7 +1821,7 @@ * @returns <> * @author Martin Schaller (04/2008) */ -void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int callback) +void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int flags) { int order=transform_get_order(trans); displaylist->dc.trans=trans; @@ -1820,13 +1834,15 @@ gra->default_font = g_strdup(l->font); } graphics_background_gc(gra, gra->gc[0]); - gra->meth.draw_mode(gra->priv, draw_mode_begin); - gra->meth.draw_rectangle(gra->priv, gra->gc[0]->priv, &gra->r.lu, gra->r.rl.x-gra->r.lu.x, gra->r.rl.y-gra->r.lu.y); + gra->meth.draw_mode(gra->priv, (flags & 8)?draw_mode_begin_clear:draw_mode_begin); + if (!(flags & 2)) + gra->meth.draw_rectangle(gra->priv, gra->gc[0]->priv, &gra->r.lu, gra->r.rl.x-gra->r.lu.x, gra->r.rl.y-gra->r.lu.y); if (l) xdisplay_draw(displaylist, gra, l, order+l->order_delta); - if (callback) + if (flags & 1) callback_list_call_attr_0(gra->cbl, attr_postdraw); - gra->meth.draw_mode(gra->priv, draw_mode_end); + if (!(flags & 4)) + gra->meth.draw_mode(gra->priv, draw_mode_end); } static void graphics_load_mapset(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |