summaryrefslogtreecommitdiff
path: root/navit
diff options
context:
space:
mode:
authormdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220>2014-05-09 22:29:10 +0000
committermdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220>2014-05-09 22:29:10 +0000
commit8da8d4a31876677a1b02fcd22c1e1989904b9e83 (patch)
tree61f226bc83baff4a5fab121f40a7db3ac0e99672 /navit
parent2102ee3511b4ada356fe8e324ff92e3b5e28fa69 (diff)
downloadnavit-8da8d4a31876677a1b02fcd22c1e1989904b9e83.tar.gz
Add:graphics_android:Support dashed lines
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5774 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit')
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java18
-rw-r--r--navit/graphics/android/graphics_android.c25
2 files changed, 36 insertions, 7 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index 812e897d7..c15eef1b3 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -823,20 +823,34 @@ public class NavitGraphics
protected void draw_polyline(Paint paint, int c[])
{
+ int i, ndashes;
+ float [] intervals;
// Log.e("NavitGraphics","draw_polyline");
paint.setStrokeWidth(c[0]);
paint.setARGB(c[1],c[2],c[3],c[4]);
paint.setStyle(Paint.Style.STROKE);
//paint.setAntiAlias(true);
//paint.setStrokeWidth(0);
+ ndashes=c[5];
+ intervals=new float[ndashes+(ndashes%2)];
+ for (i = 0; i < ndashes; i++)
+ intervals[i]=c[6+i];
+
+ if((ndashes%2)==1)
+ intervals[ndashes]=intervals[ndashes-1];
+
+ if(ndashes>0)
+ paint.setPathEffect(new android.graphics.DashPathEffect(intervals,0.0f));
+
Path path = new Path();
- path.moveTo(c[5], c[6]);
- for (int i = 7; i < c.length; i += 2)
+ path.moveTo(c[6+ndashes], c[7+ndashes]);
+ for (i = 8+ndashes; i < c.length; i += 2)
{
path.lineTo(c[i], c[i + 1]);
}
//global_path.close();
draw_canvas.drawPath(path, paint);
+ paint.setPathEffect(null);
}
protected void draw_polygon(Paint paint, int c[])
diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c
index b2c7fc3b6..9930c8248 100644
--- a/navit/graphics/android/graphics_android.c
+++ b/navit/graphics/android/graphics_android.c
@@ -71,6 +71,8 @@ struct graphics_gc_priv {
int linewidth;
enum draw_mode_num mode;
int a,r,g,b;
+ unsigned char *dashes;
+ int ndashes;
};
struct graphics_image_priv {
@@ -142,6 +144,7 @@ static struct graphics_font_priv *font_new(struct graphics_priv *gr, struct grap
static void
gc_destroy(struct graphics_gc_priv *gc)
{
+ g_free(gc->dashes);
g_free(gc);
}
@@ -154,6 +157,14 @@ gc_set_linewidth(struct graphics_gc_priv *gc, int w)
static void
gc_set_dashes(struct graphics_gc_priv *gc, int w, int offset, unsigned char *dash_list, int n)
{
+ g_free(gc->dashes);
+ gc->ndashes=n;
+ if(n) {
+ gc->dashes=g_malloc(n);
+ memcpy(gc->dashes, dash_list, n);
+ } else {
+ gc->dashes=NULL;
+ }
}
static void
@@ -267,22 +278,26 @@ static void initPaint(struct graphics_priv *gra, struct graphics_gc_priv *gc)
static void
draw_lines(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count)
{
- int arrsize=1+4+count*2;
+ int arrsize=1+4+1+gc->ndashes+count*2;
jint pc[arrsize];
int i;
jintArray points;
if (count <= 0)
return;
points = (*jnienv)->NewIntArray(jnienv,arrsize);
- for (i = 0 ; i < count ; i++) {
- pc[5+i*2]=p[i].x;
- pc[5+i*2+1]=p[i].y;
- }
pc[0]=gc->linewidth;
pc[1]=gc->a;
pc[2]=gc->r;
pc[3]=gc->g;
pc[4]=gc->b;
+ pc[5]=gc->ndashes;
+ for (i = 0 ; i < gc->ndashes ; i++) {
+ pc[6+i] = gc->dashes[i];
+ }
+ for (i = 0 ; i < count ; i++) {
+ pc[6+gc->ndashes+i*2]=p[i].x;
+ pc[6+gc->ndashes+i*2+1]=p[i].y;
+ }
(*jnienv)->SetIntArrayRegion(jnienv, points, 0, arrsize, pc);
(*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polyline, gc->gra->Paint, points);
(*jnienv)->DeleteLocalRef(jnienv, points);