/[zanavi_public1]/navit/navit/graphics/android/graphics_android.c
ZANavi

Diff of /navit/navit/graphics/android/graphics_android.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 2 Revision 29
1/**
2 * ZANavi, Zoff Android Navigation system.
3 * Copyright (C) 2011-2012 Zoff <zoff@zoff.cc>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * version 2 as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
1/** 20/**
2 * Navit, a modular navigation system. 21 * Navit, a modular navigation system.
3 * Copyright (C) 2005-2008 Navit Team 22 * Copyright (C) 2005-2008 Navit Team
4 * 23 *
5 * This program is free software; you can redistribute it and/or 24 * This program is free software; you can redistribute it and/or
30#include "callback.h" 49#include "callback.h"
31#include "android.h" 50#include "android.h"
32 51
33int dummy; 52int dummy;
34 53
35struct graphics_priv { 54struct graphics_priv
55{
36 jclass NavitGraphicsClass; 56 jclass NavitGraphicsClass;
37 jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polyline2, NavitGraphics_draw_polyline_dashed, NavitGraphics_draw_polygon, NavitGraphics_draw_polygon2, NavitGraphics_draw_rectangle, NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image, NavitGraphics_draw_bigmap, NavitGraphics_send_osd_values, NavitGraphics_draw_mode, NavitGraphics_draw_drag, NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera,NavitGraphicsClass_rotate_and_scale_bitmap; 57 jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polyline2, NavitGraphics_draw_polyline3, NavitGraphics_draw_polyline4, NavitGraphics_draw_polyline_dashed, NavitGraphics_set_dashes, NavitGraphics_draw_polygon, NavitGraphics_draw_polygon2, NavitGraphics_draw_rectangle, NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image,
58 NavitGraphics_draw_bigmap, NavitGraphics_send_osd_values, NavitGraphics_draw_mode, NavitGraphics_draw_drag, NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera, NavitGraphicsClass_rotate_and_scale_bitmap;
38 59
39 jclass PaintClass; 60 jclass PaintClass;
40 jmethodID Paint_init,Paint_setStrokeWidth,Paint_setARGB; 61 jmethodID Paint_init, Paint_setStrokeWidth, Paint_setARGB;
41 62
42 jobject NavitGraphics; 63 jobject NavitGraphics;
43 jobject Paint; 64 jobject Paint;
44 65
45 jclass BitmapFactoryClass; 66 jclass BitmapFactoryClass;
46 jmethodID BitmapFactory_decodeFile, BitmapFactory_decodeResource; 67 jmethodID BitmapFactory_decodeFile, BitmapFactory_decodeResource;
47 68
48 jclass BitmapClass; 69 jclass BitmapClass;
49 jmethodID Bitmap_getHeight, Bitmap_getWidth; 70 jmethodID Bitmap_getHeight, Bitmap_getWidth;
50 71
57 78
58 struct callback_list *cbl; 79 struct callback_list *cbl;
59 struct window win; 80 struct window win;
60}; 81};
61 82
62struct graphics_font_priv { 83struct graphics_font_priv
84{
63 int size; 85 int size;
64}; 86};
65 87
66struct graphics_gc_priv { 88struct graphics_gc_priv
89{
67 struct graphics_priv *gra; 90 struct graphics_priv *gra;
68 int linewidth; 91 int linewidth;
69 enum draw_mode_num mode; 92 enum draw_mode_num mode;
70 int a,r,g,b; 93 int a, r, g, b;
71}; 94};
72 95
73struct graphics_image_priv { 96struct graphics_image_priv
97{
74 jobject Bitmap; 98 jobject Bitmap;
75 int width; 99 int width;
76 int height; 100 int height;
77 struct point hot; 101 struct point hot;
78}; 102};
79 103
80static GHashTable *image_cache_hash = NULL; 104static GHashTable *image_cache_hash = NULL;
81 105
82static int
83find_class_global(char *name, jclass *ret) 106static int find_class_global(char *name, jclass *ret)
84{ 107{
108 //DBG dbg(0,"EEnter\n");
85 *ret=(*jnienv)->FindClass(jnienv, name); 109 *ret = (*jnienv)->FindClass(jnienv, name);
86 if (! *ret) { 110 if (!*ret)
111 {
87 dbg(0,"Failed to get Class %s\n",name); 112 //DBG dbg(0, "Failed to get Class %s\n", name);
88 return 0; 113 return 0;
89 } 114 }
90 (*jnienv)->NewGlobalRef(jnienv, *ret); 115 *ret = (*jnienv)->NewGlobalRef(jnienv, *ret);
91 return 1; 116 return 1;
92} 117}
93 118
94static int
95find_method(jclass class, char *name, char *args, jmethodID *ret) 119static int find_method(jclass class, char *name, char *args, jmethodID *ret)
96{ 120{
121 //DBG dbg(0,"EEnter\n");
97 *ret = (*jnienv)->GetMethodID(jnienv, class, name, args); 122 *ret = (*jnienv)->GetMethodID(jnienv, class, name, args);
98 if (*ret == NULL) { 123 if (*ret == NULL)
124 {
99 dbg(0,"Failed to get Method %s with signature %s\n",name,args); 125 //DBG dbg(0, "Failed to get Method %s with signature %s\n", name, args);
100 return 0; 126 return 0;
101 } 127 }
102 return 1; 128 return 1;
103} 129}
104 130
105static int
106find_static_method(jclass class, char *name, char *args, jmethodID *ret) 131static int find_static_method(jclass class, char *name, char *args, jmethodID *ret)
107{ 132{
133 //DBG dbg(0,"EEnter\n");
108 *ret = (*jnienv)->GetStaticMethodID(jnienv, class, name, args); 134 *ret = (*jnienv)->GetStaticMethodID(jnienv, class, name, args);
109 if (*ret == NULL) { 135 if (*ret == NULL)
136 {
110 dbg(0,"Failed to get static Method %s with signature %s\n",name,args); 137 //DBG dbg(0, "Failed to get static Method %s with signature %s\n", name, args);
111 return 0; 138 return 0;
112 } 139 }
113 return 1; 140 return 1;
114} 141}
115 142
116static void
117graphics_destroy(struct graphics_priv *gr) 143static void graphics_destroy(struct graphics_priv *gr)
118{ 144{
119} 145}
120 146
121static void font_destroy(struct graphics_font_priv *font) 147static void font_destroy(struct graphics_font_priv *font)
122{ 148{
123 g_free(font); 149 g_free(font);
124} 150}
125 151
126static struct graphics_font_methods font_methods = { 152static struct graphics_font_methods font_methods =
127 font_destroy 153{ font_destroy };
128};
129 154
130static struct graphics_font_priv *font_new(struct graphics_priv *gr, struct graphics_font_methods *meth, char *font, int size, int flags) 155static struct graphics_font_priv *font_new(struct graphics_priv *gr, struct graphics_font_methods *meth, char *font, int size, int flags)
131{ 156{
132 struct graphics_font_priv *ret=g_new0(struct graphics_font_priv, 1); 157 struct graphics_font_priv *ret=g_new0(struct graphics_font_priv, 1);
133 *meth=font_methods; 158 *meth = font_methods;
134 159
135 ret->size=size; 160 ret->size = size;
136 return ret; 161 return ret;
137} 162}
138 163
139static void
140gc_destroy(struct graphics_gc_priv *gc) 164static void gc_destroy(struct graphics_gc_priv *gc)
141{ 165{
142 //dbg(0,"EEnter\n"); 166 //DBG dbg(0,"EEnter\n");
143 167
144 g_free(gc); 168 g_free(gc);
145} 169}
146 170
147static void
148gc_set_linewidth(struct graphics_gc_priv *gc, int w) 171static void gc_set_linewidth(struct graphics_gc_priv *gc, int w)
149{ 172{
150 gc->linewidth = w; 173 gc->linewidth = w;
151} 174}
152 175
153static void 176static void gc_set_dashes(struct graphics_priv *gra, struct graphics_gc_priv *gc, int w, int offset, int dash_list[], int order)
154gc_set_dashes(struct graphics_gc_priv *gc, int w, int offset, unsigned char *dash_list, int n)
155{ 177{
156 // should call a java routine that does something like: 178 JNIEnv *jnienv2;
157 // 179 jnienv2 = jni_getenv();
158 // paint.setPathEffect(new DashPathEffect(new float[] { 8, 3 }, 1)); 180 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_set_dashes, gc->gra->Paint, dash_list[0], order);
159} 181}
160 182
161static void
162gc_set_foreground(struct graphics_gc_priv *gc, struct color *c) 183static void gc_set_foreground(struct graphics_gc_priv *gc, struct color *c)
163{ 184{
164 gc->r = c->r >> 8; 185 gc->r = c->r >> 8;
165 gc->g = c->g >> 8; 186 gc->g = c->g >> 8;
166 gc->b = c->b >> 8; 187 gc->b = c->b >> 8;
167 gc->a = c->a >> 8; 188 gc->a = c->a >> 8;
168} 189}
169 190
170static void
171gc_set_background(struct graphics_gc_priv *gc, struct color *c) 191static void gc_set_background(struct graphics_gc_priv *gc, struct color *c)
172{ 192{
173} 193}
174 194
175static struct graphics_gc_methods gc_methods = { 195static struct graphics_gc_methods gc_methods =
176 gc_destroy, 196{ gc_destroy, gc_set_linewidth, gc_set_dashes, gc_set_foreground, gc_set_background };
177 gc_set_linewidth,
178 gc_set_dashes,
179 gc_set_foreground,
180 gc_set_background
181};
182 197
183static struct graphics_gc_priv *gc_new(struct graphics_priv *gr, struct graphics_gc_methods *meth) 198static struct graphics_gc_priv *gc_new(struct graphics_priv *gr, struct graphics_gc_methods *meth)
184{ 199{
185 //dbg(0,"EEnter\n"); 200 ////DBG dbg(0,"EEnter\n");
186 201
187 struct graphics_gc_priv *ret=g_new0(struct graphics_gc_priv, 1); 202 struct graphics_gc_priv *ret=g_new0(struct graphics_gc_priv, 1);
188 *meth=gc_methods; 203 *meth = gc_methods;
189 204
190 ret->gra = gr; 205 ret->gra = gr;
191 ret->a = ret->r = ret->g = ret->b = 255; 206 ret->a = ret->r = ret->g = ret->b = 255;
192 ret->linewidth=1; 207 ret->linewidth = 1;
193 return ret; 208 return ret;
194} 209}
195 210
196static void image_destroy(struct graphics_image_priv *img) 211static void image_destroy(struct graphics_image_priv *img)
197{ 212{
198 // unused? 213 // unused?
199} 214}
200 215
201static struct graphics_image_methods image_methods = { 216static struct graphics_image_methods image_methods =
202 image_destroy 217{ image_destroy };
203};
204
205 218
206static struct graphics_image_priv * 219static struct graphics_image_priv *
207image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation) 220image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation)
208{ 221{
209 //dbg(0,"EEnter\n"); 222 //DBG dbg(0,"EEnter\n");
223
224 JNIEnv *jnienv2;
225 jnienv2 = jni_getenv();
210 226
211 struct graphics_image_priv* ret = NULL; 227 struct graphics_image_priv* ret = NULL;
212 228
213 if ( !g_hash_table_lookup_extended( image_cache_hash, path, NULL, (gpointer)&ret) ) 229 if (!g_hash_table_lookup_extended(image_cache_hash, path, NULL, (gpointer) & ret))
214 { 230 {
215 ret=g_new0(struct graphics_image_priv, 1); 231 ret=g_new0(struct graphics_image_priv, 1);
216 jstring string; 232 jstring string;
217 int id; 233 int id;
218 234
219 dbg(1,"enter %s\n",path); 235 // // dbg(1, "enter %s\n", path);
220 if (!strncmp(path,"res/drawable/",13)) { 236 if (!strncmp(path, "res/drawable/", 13))
237 {
221 jstring a=(*jnienv)->NewStringUTF(jnienv, "drawable"); 238 jstring a = (*jnienv2)->NewStringUTF(jnienv2, "drawable");
222 jstring b=(*jnienv)->NewStringUTF(jnienv, "com.zoffcc.applications.zanavi"); 239 jstring b = (*jnienv2)->NewStringUTF(jnienv2, "com.zoffcc.applications.zanavi");
223 char *path_noext=g_strdup(path+13); 240 char *path_noext = g_strdup(path + 13);
224 char *pos=strrchr(path_noext, '.'); 241 char *pos = strrchr(path_noext, '.');
225 if (pos) 242 if (pos)
226 *pos='\0'; 243 *pos = '\0';
227 dbg(1,"path_noext=%s\n",path_noext); 244 //DBG dbg(0, "path_noext=%s\n", path_noext);
228 string = (*jnienv)->NewStringUTF(jnienv, path_noext); 245 string = (*jnienv2)->NewStringUTF(jnienv2, path_noext);
229 g_free(path_noext); 246 g_free(path_noext);
230 id=(*jnienv)->CallIntMethod(jnienv, gra->Resources, gra->Resources_getIdentifier, string, a, b); 247 id = (*jnienv2)->CallIntMethod(jnienv2, gra->Resources, gra->Resources_getIdentifier, string, a, b);
231 dbg(1,"id=%d\n",id); 248 //DBG dbg(0, "id=%d\n", id);
249 //DBG dbg(0,"JNI\n");
232 if (id) 250 if (id)
251 {
233 ret->Bitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->BitmapFactoryClass, gra->BitmapFactory_decodeResource, gra->Resources, id); 252 ret->Bitmap = (*jnienv2)->CallStaticObjectMethod(jnienv2, gra->BitmapFactoryClass, gra->BitmapFactory_decodeResource, gra->Resources, id);
253 }
234 (*jnienv)->DeleteLocalRef(jnienv, b); 254 (*jnienv2)->DeleteLocalRef(jnienv2, b);
235 (*jnienv)->DeleteLocalRef(jnienv, a); 255 (*jnienv2)->DeleteLocalRef(jnienv2, a);
256 }
236 } else { 257 else
258 {
237 string = (*jnienv)->NewStringUTF(jnienv, path); 259 string = (*jnienv2)->NewStringUTF(jnienv2, path);
260 //DBG dbg(0,"JNI\n");
238 ret->Bitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->BitmapFactoryClass, gra->BitmapFactory_decodeFile, string); 261 ret->Bitmap = (*jnienv2)->CallStaticObjectMethod(jnienv2, gra->BitmapFactoryClass, gra->BitmapFactory_decodeFile, string);
239 // there should be a check here, if we really want any rotation/scaling 262 // there should be a check here, if we really want any rotation/scaling
240 // otherwise the call is overkill 263 // otherwise the call is overkill
264 //DBG dbg(0,"JNI\n");
241 ret->Bitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->NavitGraphicsClass, gra->NavitGraphicsClass_rotate_and_scale_bitmap, ret->Bitmap, *w, *h, rotation); 265 ret->Bitmap = (*jnienv2)->CallStaticObjectMethod(jnienv2, gra->NavitGraphicsClass, gra->NavitGraphicsClass_rotate_and_scale_bitmap, ret->Bitmap, *w, *h, rotation);
242 } 266 }
243 dbg(1,"result=%p\n",ret->Bitmap); 267 //// dbg(1, "result=%p\n", ret->Bitmap);
244 if (ret->Bitmap) { 268 if (ret->Bitmap)
269 {
270 //DBG dbg(0,"JNI\n");
245 (*jnienv)->NewGlobalRef(jnienv, ret->Bitmap); 271 ret->Bitmap = (*jnienv2)->NewGlobalRef(jnienv2, ret->Bitmap);
246 (*jnienv)->DeleteLocalRef(jnienv, ret->Bitmap); 272 // ICS (*jnienv2)->DeleteLocalRef(jnienv2, ret->Bitmap);
273 //DBG dbg(0,"JNI\n");
247 ret->width=(*jnienv)->CallIntMethod(jnienv, ret->Bitmap, gra->Bitmap_getWidth); 274 ret->width = (*jnienv2)->CallIntMethod(jnienv2, ret->Bitmap, gra->Bitmap_getWidth);
275 //DBG dbg(0,"JNI\n");
248 ret->height=(*jnienv)->CallIntMethod(jnienv, ret->Bitmap, gra->Bitmap_getHeight); 276 ret->height = (*jnienv2)->CallIntMethod(jnienv2, ret->Bitmap, gra->Bitmap_getHeight);
249 dbg(1,"w=%d h=%d for %s\n",ret->width,ret->height,path); 277 //// dbg(1, "w=%d h=%d for %s\n", ret->width, ret->height, path);
250 ret->hot.x=ret->width/2; 278 ret->hot.x = ret->width / 2;
251 ret->hot.y=ret->height/2; 279 ret->hot.y = ret->height / 2;
280 }
252 } else { 281 else
282 {
253 g_free(ret); 283 g_free(ret);
254 ret=NULL; 284 ret = NULL;
255 dbg(0,"Failed to open %s\n",path); 285 //DBG dbg(0, "Failed to open %s\n", path);
256 } 286 }
287 //DBG dbg(0,"JNI\n");
257 (*jnienv)->DeleteLocalRef(jnienv, string); 288 (*jnienv2)->DeleteLocalRef(jnienv2, string);
289 //DBG dbg(0,"JNI\n");
258 g_hash_table_insert(image_cache_hash, g_strdup( path ), (gpointer)ret ); 290 g_hash_table_insert(image_cache_hash, g_strdup(path), (gpointer) ret);
259 } 291 }
260 if (ret) { 292 if (ret)
293 {
261 *w=ret->width; 294 *w = ret->width;
262 *h=ret->height; 295 *h = ret->height;
263 if (hot) 296 if (hot)
297 {
264 *hot=ret->hot; 298 *hot = ret->hot;
299 }
265 } 300 }
266 301
267 return ret; 302 return ret;
268} 303}
269 304
270static void initPaint(struct graphics_priv *gra, struct graphics_gc_priv *gc) 305static void initPaint(struct graphics_priv *gra, struct graphics_gc_priv *gc)
271{ 306{
272 //dbg(0,"EEnter\n"); 307 //DBG dbg(0,"EEnter\n");
273 308
309 JNIEnv *jnienv2;
310 jnienv2 = jni_getenv();
311
274 float wf = gc->linewidth; 312 float wf = gc->linewidth;
275 (*jnienv)->CallVoidMethod(jnienv, gc->gra->Paint, gra->Paint_setStrokeWidth, wf); 313 (*jnienv2)->CallVoidMethod(jnienv2, gc->gra->Paint, gra->Paint_setStrokeWidth, wf);
276 (*jnienv)->CallVoidMethod(jnienv, gc->gra->Paint, gra->Paint_setARGB, gc->a, gc->r, gc->g, gc->b); 314 (*jnienv2)->CallVoidMethod(jnienv2, gc->gra->Paint, gra->Paint_setARGB, gc->a, gc->r, gc->g, gc->b);
277} 315}
278 316
279static void
280draw_lines(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count) 317static void draw_lines(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count)
281{ 318{
319 //DBG dbg(0,"EEnter\n");
282 jint pc[count*2]; 320 jint pc[count * 2];
321 int i;
322 jintArray points;
323
324 if (count <= 0)
325 return;
326
327 JNIEnv *jnienv2;
328 jnienv2 = jni_getenv();
329
330 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
331 for (i = 0; i < count; i++)
332 {
333 pc[i * 2] = p[i].x;
334 pc[i * 2 + 1] = p[i].y;
335 }
336 initPaint(gra, gc);
337 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
338 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline, gc->gra->Paint, points);
339 (*jnienv2)->DeleteLocalRef(jnienv2, points);
340}
341
342static void draw_lines3(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int width)
343{
344 //DBG dbg(0,"EEnter\n");
345 jint pc[count * 2];
346 int i;
347 jintArray points;
348 if (count <= 0)
349 {
350 return;
351 }
352
353 JNIEnv *jnienv2;
354 jnienv2 = jni_getenv();
355
356 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
357 for (i = 0; i < count; i++)
358 {
359 pc[i * 2] = p[i].x;
360 pc[i * 2 + 1] = p[i].y;
361 }
362 initPaint(gra, gc);
363 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
364 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline3, gc->gra->Paint, points, order, width);
365 (*jnienv2)->DeleteLocalRef(jnienv2, points);
366}
367
368static void draw_lines4(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int width, int type)
369{
370 //DBG dbg(0,"EEnter\n");
371
372 // draw tunnel-street or bridge-street
373 // type:1 -> tunnel
374 // type:2 -> bridge
375
376 JNIEnv *jnienv2;
377 jnienv2 = jni_getenv();
378
379
380 if (type > 90)
381 {
382 // "***" signal
383 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline4, NULL, NULL, order, width, type);
384 }
385 else
386 {
387 jint pc[count * 2];
388 int i;
389 jintArray points;
390 if (count <= 0)
391 {
392 return;
393 }
394 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
395 for (i = 0; i < count; i++)
396 {
397 pc[i * 2] = p[i].x;
398 pc[i * 2 + 1] = p[i].y;
399 }
400 initPaint(gra, gc);
401 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
402 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline4, gc->gra->Paint, points, order, width, type);
403 (*jnienv2)->DeleteLocalRef(jnienv2, points);
404 }
405}
406
407static void draw_lines2(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway)
408{
409 //DBG dbg(0,"EEnter\n");
410 jint pc[count * 2];
283 int i; 411 int i;
284 jintArray points; 412 jintArray points;
285 if (count <= 0) 413 if (count <= 0)
286 return; 414 return;
415
416 JNIEnv *jnienv2;
417 jnienv2 = jni_getenv();
418
287 points = (*jnienv)->NewIntArray(jnienv,count*2); 419 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
288 for (i = 0 ; i < count ; i++) { 420 for (i = 0; i < count; i++)
421 {
289 pc[i*2]=p[i].x; 422 pc[i * 2] = p[i].x;
290 pc[i*2+1]=p[i].y; 423 pc[i * 2 + 1] = p[i].y;
291 } 424 }
292 initPaint(gra, gc); 425 initPaint(gra, gc);
293 (*jnienv)->SetIntArrayRegion(jnienv, points, 0, count*2, pc); 426 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
294 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polyline, gc->gra->Paint, points); 427 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline2, gc->gra->Paint, points, order, oneway);
295 (*jnienv)->DeleteLocalRef(jnienv, points); 428 (*jnienv2)->DeleteLocalRef(jnienv2, points);
296} 429}
297 430
298static void
299draw_lines2(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway) 431static void draw_lines_dashed(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway)
300{ 432{
301 jint pc[count*2]; 433 jint pc[count * 2];
302 int i; 434 int i;
303 jintArray points; 435 jintArray points;
304 if (count <= 0) 436 if (count <= 0)
305 return; 437 return;
438
439 JNIEnv *jnienv2;
440 jnienv2 = jni_getenv();
441
306 points = (*jnienv)->NewIntArray(jnienv,count*2); 442 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
307 for (i = 0 ; i < count ; i++) { 443 for (i = 0; i < count; i++)
444 {
308 pc[i*2]=p[i].x; 445 pc[i * 2] = p[i].x;
309 pc[i*2+1]=p[i].y; 446 pc[i * 2 + 1] = p[i].y;
310 } 447 }
311 initPaint(gra, gc); 448 initPaint(gra, gc);
312 (*jnienv)->SetIntArrayRegion(jnienv, points, 0, count*2, pc); 449 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
313 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polyline2, gc->gra->Paint, points, order, oneway); 450 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polyline_dashed, gc->gra->Paint, points, order, oneway);
314 (*jnienv)->DeleteLocalRef(jnienv, points); 451 (*jnienv2)->DeleteLocalRef(jnienv2, points);
315} 452}
316 453
317
318static void
319draw_lines_dashed(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway) 454static void draw_polygon(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count)
320{ 455{
321 jint pc[count*2]; 456 jint pc[count * 2];
322 int i; 457 int i;
323 jintArray points; 458 jintArray points;
324 if (count <= 0) 459 if (count <= 0)
325 return; 460 return;
461
462 JNIEnv *jnienv2;
463 jnienv2 = jni_getenv();
464
326 points = (*jnienv)->NewIntArray(jnienv,count*2); 465 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
327 for (i = 0 ; i < count ; i++) { 466 for (i = 0; i < count; i++)
467 {
328 pc[i*2]=p[i].x; 468 pc[i * 2] = p[i].x;
329 pc[i*2+1]=p[i].y; 469 pc[i * 2 + 1] = p[i].y;
330 } 470 }
331 initPaint(gra, gc); 471 initPaint(gra, gc);
332 (*jnienv)->SetIntArrayRegion(jnienv, points, 0, count*2, pc); 472 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
333 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polyline_dashed, gc->gra->Paint, points, order, oneway); 473 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polygon, gc->gra->Paint, points);
334 (*jnienv)->DeleteLocalRef(jnienv, points); 474 (*jnienv2)->DeleteLocalRef(jnienv2, points);
335} 475}
336 476
337static void
338draw_polygon(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count) 477static void draw_polygon2(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway)
339{ 478{
340 jint pc[count*2]; 479 jint pc[count * 2];
341 int i; 480 int i;
342 jintArray points; 481 jintArray points;
343 if (count <= 0) 482 if (count <= 0)
344 return; 483 return;
484
485 JNIEnv *jnienv2;
486 jnienv2 = jni_getenv();
487
345 points = (*jnienv)->NewIntArray(jnienv,count*2); 488 points = (*jnienv2)->NewIntArray(jnienv2, count * 2);
346 for (i = 0 ; i < count ; i++) { 489 for (i = 0; i < count; i++)
490 {
347 pc[i*2]=p[i].x; 491 pc[i * 2] = p[i].x;
348 pc[i*2+1]=p[i].y; 492 pc[i * 2 + 1] = p[i].y;
349 } 493 }
350 initPaint(gra, gc); 494 initPaint(gra, gc);
351 (*jnienv)->SetIntArrayRegion(jnienv, points, 0, count*2, pc); 495 (*jnienv2)->SetIntArrayRegion(jnienv2, points, 0, count * 2, pc);
352 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polygon, gc->gra->Paint, points); 496 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_polygon2, gc->gra->Paint, points, order, oneway);
353 (*jnienv)->DeleteLocalRef(jnienv, points); 497 (*jnienv2)->DeleteLocalRef(jnienv2, points);
354} 498}
355 499
356static void
357draw_polygon2(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count, int order, int oneway) 500static void draw_rectangle(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int w, int h)
358{ 501{
359 jint pc[count*2]; 502 JNIEnv *jnienv2;
360 int i; 503 jnienv2 = jni_getenv();
361 jintArray points; 504
362 if (count <= 0)
363 return;
364 points = (*jnienv)->NewIntArray(jnienv,count*2);
365 for (i = 0 ; i < count ; i++) {
366 pc[i*2]=p[i].x;
367 pc[i*2+1]=p[i].y;
368 }
369 initPaint(gra, gc); 505 initPaint(gra, gc);
370 (*jnienv)->SetIntArrayRegion(jnienv, points, 0, count*2, pc);
371 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_polygon2, gc->gra->Paint, points, order, oneway);
372 (*jnienv)->DeleteLocalRef(jnienv, points);
373}
374
375
376static void
377draw_rectangle(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int w, int h)
378{
379 initPaint(gra, gc);
380 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_rectangle, gc->gra->Paint, p->x, p->y, w, h); 506 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_rectangle, gc->gra->Paint, p->x, p->y, w, h);
381} 507}
382 508
383static void
384draw_circle(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int r) 509static void draw_circle(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int r)
385{ 510{
511 JNIEnv *jnienv2;
512 jnienv2 = jni_getenv();
513
386 initPaint(gra, gc); 514 initPaint(gra, gc);
387 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_circle, gc->gra->Paint, p->x, p->y, r); 515 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_circle, gc->gra->Paint, p->x, p->y, r);
388} 516}
389 517
390
391static void
392draw_text(struct graphics_priv *gra, struct graphics_gc_priv *fg, struct graphics_gc_priv *bg, struct graphics_font_priv *font, char *text, struct point *p, int dx, int dy) 518static void draw_text(struct graphics_priv *gra, struct graphics_gc_priv *fg, struct graphics_gc_priv *bg, struct graphics_font_priv *font, char *text, struct point *p, int dx, int dy)
393{ 519{
394 dbg(1,"enter %s\n", text); 520 //// dbg(1, "enter %s\n", text);
521 JNIEnv *jnienv2;
522 jnienv2 = jni_getenv();
523
395 initPaint(gra, fg); 524 initPaint(gra, fg);
396 jstring string = (*jnienv)->NewStringUTF(jnienv, text); 525 jstring string = (*jnienv2)->NewStringUTF(jnienv2, text);
397 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_text, fg->gra->Paint, p->x, p->y, string, font->size, dx, dy); 526 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_text, fg->gra->Paint, p->x, p->y, string, font->size, dx, dy);
398 (*jnienv)->DeleteLocalRef(jnienv, string); 527 (*jnienv2)->DeleteLocalRef(jnienv2, string);
399} 528}
400 529
401static void
402draw_image(struct graphics_priv *gra, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img) 530static void draw_image(struct graphics_priv *gra, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img)
403{ 531{
404 //dbg(0,"EEnter\n"); 532 //DBG dbg(0,"EEnter\n");
405 533
534 JNIEnv *jnienv2;
535 jnienv2 = jni_getenv();
536
406 dbg(1,"enter %p\n",img); 537 //// dbg(1, "enter %p\n", img);
407 initPaint(gra, fg); 538 initPaint(gra, fg);
408 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_image, fg->gra->Paint, p->x, p->y, img->Bitmap); 539 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_image, fg->gra->Paint, p->x, p->y, img->Bitmap);
409
410}
411 540
412static void 541}
542
413draw_bigmap(struct graphics_priv *gra, struct graphics_gc_priv *fg, int yaw, int order, float clat, float clng, int x, int y, int scx, int scy, int px, int py, int valid) 543static void draw_bigmap(struct graphics_priv *gra, struct graphics_gc_priv *fg, int yaw, int order, float clat, float clng, int x, int y, int scx, int scy, int px, int py, int valid)
414{ 544{
415 //dbg(0,"EEnter\n"); 545 //DBG dbg(0,"EEnter\n");
416 546
547 JNIEnv *jnienv2;
548 jnienv2 = jni_getenv();
549
417 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_bigmap, yaw, order, clat, clng, x, y, scx, scy, px, py, valid); 550 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_bigmap, yaw, order, clat, clng, x, y, scx, scy, px, py, valid);
418}
419 551
420static void 552 //DBG dbg(0,"leave\n");
553}
554
421send_osd_values(struct graphics_priv *gra, struct graphics_gc_priv *fg, char *id, char *text1, char *text2, char *text3, int i1, int i2, int i3, int i4, float f1, float f2, float f3) 555static void send_osd_values(struct graphics_priv *gra, struct graphics_gc_priv *fg, char *id, char *text1, char *text2, char *text3, int i1, int i2, int i3, int i4, float f1, float f2, float f3)
422{ 556{
423 //dbg(0,"EEnter\n"); 557 //DBG dbg(0,"EEnter\n");
424 558
559 JNIEnv *jnienv2;
560 jnienv2 = jni_getenv();
561
425 jstring string1 = (*jnienv)->NewStringUTF(jnienv, id); 562 jstring string1 = (*jnienv2)->NewStringUTF(jnienv2, id);
426 jstring string2 = (*jnienv)->NewStringUTF(jnienv, text1); 563 jstring string2 = (*jnienv2)->NewStringUTF(jnienv2, text1);
427 jstring string3 = (*jnienv)->NewStringUTF(jnienv, text2); 564 jstring string3 = (*jnienv2)->NewStringUTF(jnienv2, text2);
428 jstring string4 = (*jnienv)->NewStringUTF(jnienv, text3); 565 jstring string4 = (*jnienv2)->NewStringUTF(jnienv2, text3);
429 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_send_osd_values, string1, string2, string3, string4, i1, i2, i3, i4, f1, f2, f3); 566 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_send_osd_values, string1, string2, string3, string4, i1, i2, i3, i4, f1, f2, f3);
430 (*jnienv)->DeleteLocalRef(jnienv, string1); 567 (*jnienv2)->DeleteLocalRef(jnienv2, string1);
431 (*jnienv)->DeleteLocalRef(jnienv, string2); 568 (*jnienv2)->DeleteLocalRef(jnienv2, string2);
432 (*jnienv)->DeleteLocalRef(jnienv, string3); 569 (*jnienv2)->DeleteLocalRef(jnienv2, string3);
433 (*jnienv)->DeleteLocalRef(jnienv, string4); 570 (*jnienv2)->DeleteLocalRef(jnienv2, string4);
434} 571}
435 572
436
437static void
438draw_image_warp(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, int count, char *data) 573static void draw_image_warp(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, int count, char *data)
439{ 574{
440} 575}
441 576
442static void
443draw_restore(struct graphics_priv *gr, struct point *p, int w, int h) 577static void draw_restore(struct graphics_priv *gr, struct point *p, int w, int h)
444{ 578{
445} 579}
446 580
447static void draw_drag(struct graphics_priv *gra, struct point *p) 581static void draw_drag(struct graphics_priv *gra, struct point *p)
448{ 582{
449 //dbg(0,"EEnter\n"); 583 //DBG dbg(0,"EEnter\n");
584 JNIEnv *jnienv2;
585 jnienv2 = jni_getenv();
450 586
451 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_drag, p ? p->x : 0, p ? p->y : 0); 587 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_drag, p ? p->x : 0, p ? p->y : 0);
452} 588}
453 589
454static void
455background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc) 590static void background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc)
456{ 591{
457} 592}
458 593
459static void
460draw_mode(struct graphics_priv *gra, enum draw_mode_num mode) 594static void draw_mode(struct graphics_priv *gra, enum draw_mode_num mode)
461{ 595{
462 //dbg(0,"EEnter\n"); 596 //DBG dbg(0,"EEnter\n");
597 JNIEnv *jnienv2;
598 jnienv2 = jni_getenv();
463 599
464 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_mode, (int)mode); 600 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_draw_mode, (int) mode);
465} 601}
466 602
467static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int alpha, int wraparound); 603static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int alpha, int wraparound);
468 604
469static void * 605static void *
470get_data(struct graphics_priv *this, const char *type) 606get_data(struct graphics_priv *this, const char *type)
471{ 607{
472 //dbg(0,"EEnter\n"); 608 //DBG dbg(0,"EEnter\n");
473 609
474 if (strcmp(type,"window")) 610 if (strcmp(type, "window"))
611 {
475 return NULL; 612 return NULL;
613 }
614
476 return &this->win; 615 return &this->win;
477} 616}
478 617
479static void image_free(struct graphics_priv *gr, struct graphics_image_priv *priv) 618static void image_free(struct graphics_priv *gr, struct graphics_image_priv *priv)
480{ 619{
481} 620}
482 621
483static void get_text_bbox(struct graphics_priv *gr, struct graphics_font_priv *font, char *text, int dx, int dy, struct point *ret, int estimate) 622static void get_text_bbox(struct graphics_priv *gr, struct graphics_font_priv *font, char *text, int dx, int dy, struct point *ret, int estimate)
484{ 623{
485 //dbg(0,"EEnter\n"); 624 ////DBG dbg(0,"EEnter\n");
625
626 // this is a rough estimate!! otherwise java methods would be called, and thats too slow!
486 627
487 int len = g_utf8_strlen(text, -1); 628 int len = g_utf8_strlen(text, -1);
488 int xMin = 0; 629 int xMin = 0;
489 int yMin = 0; 630 int yMin = 0;
490 int yMax = 13*font->size/256; 631 int yMax = 13 * font->size / 256;
491 int xMax = 9*font->size*len/256; 632 int xMax = 9 * font->size * len / 256;
492 633
493 ret[0].x = xMin; 634 ret[0].x = xMin;
494 ret[0].y = -yMin; 635 ret[0].y = -yMin;
495 ret[1].x = xMin; 636 ret[1].x = xMin;
496 ret[1].y = -yMax; 637 ret[1].y = -yMax;
500 ret[3].y = -yMin; 641 ret[3].y = -yMin;
501} 642}
502 643
503static void overlay_disable(struct graphics_priv *gra, int disable) 644static void overlay_disable(struct graphics_priv *gra, int disable)
504{ 645{
646 //DBG dbg(0,"EEnter\n");
647 JNIEnv *jnienv2;
648 jnienv2 = jni_getenv();
649
505 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_overlay_disable, disable); 650 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_overlay_disable, disable);
506} 651}
507 652
508static void overlay_resize(struct graphics_priv *gra, struct point *pnt, int w, int h, int alpha, int wraparound) 653static void overlay_resize(struct graphics_priv *gra, struct point *pnt, int w, int h, int alpha, int wraparound)
509{ 654{
655 //DBG dbg(0,"EEnter\n");
656 JNIEnv *jnienv2;
657 jnienv2 = jni_getenv();
658
510 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_overlay_resize, pnt ? pnt->x:0 , pnt ? pnt->y:0, w, h, alpha, wraparound); 659 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_overlay_resize, pnt ? pnt->x : 0, pnt ? pnt->y : 0, w, h, alpha, wraparound);
511} 660}
512 661
513static int
514set_attr(struct graphics_priv *gra, struct attr *attr) 662static int set_attr(struct graphics_priv *gra, struct attr *attr)
515{ 663{
664 //DBG dbg(0,"EEnter\n");
665 JNIEnv *jnienv2;
666 jnienv2 = jni_getenv();
667
516 switch (attr->type) { 668 switch (attr->type)
669 {
517 case attr_use_camera: 670 case attr_use_camera:
518 (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_SetCamera, attr->u.num); 671 (*jnienv2)->CallVoidMethod(jnienv2, gra->NavitGraphics, gra->NavitGraphics_SetCamera, attr->u.num);
519 return 1; 672 return 1;
520 default: 673 default:
521 return 0; 674 return 0;
522 } 675 }
523} 676}
524 677
525static struct graphics_methods graphics_methods = { 678static struct graphics_methods graphics_methods =
526 graphics_destroy, 679{ graphics_destroy, draw_mode, draw_lines, draw_lines2, draw_lines3, draw_lines4, draw_lines_dashed, draw_polygon, draw_polygon2, draw_rectangle, draw_circle, draw_text, draw_image, draw_bigmap, send_osd_values, draw_image_warp, draw_restore, draw_drag, font_new, gc_new, background_gc, overlay_new, image_new, get_data,
527 draw_mode, 680 image_free, get_text_bbox, overlay_disable, overlay_resize, set_attr, };
528 draw_lines,
529 draw_lines2,
530 draw_lines_dashed,
531 draw_polygon,
532 draw_polygon2,
533 draw_rectangle,
534 draw_circle,
535 draw_text,
536 draw_image,
537 draw_bigmap,
538 send_osd_values,
539 draw_image_warp,
540 draw_restore,
541 draw_drag,
542 font_new,
543 gc_new,
544 background_gc,
545 overlay_new,
546 image_new,
547 get_data,
548 image_free,
549 get_text_bbox,
550 overlay_disable,
551 overlay_resize,
552 set_attr,
553};
554 681
555static void 682/*
556resize_callback(struct graphics_priv *gra, int w, int h) 683static void resize_callback(struct graphics_priv *gra, int w, int h)
557{ 684{
558 //dbg(0,"EEnter\n"); 685 //DBG dbg(0,"EEnter\n");
559
560 // dbg(0,"w=%d h=%d ok\n",w,h); 686 // //DBG dbg(0,"w=%d h=%d ok\n",w,h);
561 callback_list_call_attr_2(gra->cbl, attr_resize, (void *)w, (void *)h); 687 // callback_list_call_attr_2(gra->cbl, attr_resize, (void *) w, (void *) h);
688 navit_resize(attr_resize, this_);
562} 689}
690*/
563 691
564static void 692/*
565motion_callback(struct graphics_priv *gra, int x, int y) 693static void motion_callback(struct graphics_priv *gra, int x, int y)
566{ 694{
567 //dbg(0,"EEnter\n"); 695 //DBG dbg(0,"EEnter\n");
568 696
569 struct point p; 697 struct point p;
570 p.x=x; 698 p.x = x;
571 p.y=y; 699 p.y = y;
572 callback_list_call_attr_1(gra->cbl, attr_motion, (void *)&p); 700 callback_list_call_attr_1(gra->cbl, attr_motion, (void *) &p);
573} 701}
702*/
574 703
575static void 704/*
576keypress_callback(struct graphics_priv *gra, char *s) 705static void keypress_callback(struct graphics_priv *gra, char *s)
577{ 706{
707 //DBG dbg(0,"EEnter\n");
578 callback_list_call_attr_1(gra->cbl, attr_keypress, s); 708 callback_list_call_attr_1(gra->cbl, attr_keypress, s);
579} 709}
710*/
580 711
581static void 712/*
582button_callback(struct graphics_priv *gra, int pressed, int button, int x, int y) 713static void button_callback(struct graphics_priv *gra, int pressed, int button, int x, int y)
583{ 714{
584 //dbg(0,"EEnter\n"); 715 //DBG dbg(0,"EEnter\n");
585 716
586 struct point p; 717 struct point p;
587 p.x=x; 718 p.x = x;
588 p.y=y; 719 p.y = y;
589 // dbg(0,"XXXXXXXYYYYYYYYY\n"); 720 // //DBG dbg(0,"XXXXXXXYYYYYYYYY\n");
590 callback_list_call_attr_3(gra->cbl, attr_button, (void *)pressed, (void *)button, (void *)&p); 721 callback_list_call_attr_3(gra->cbl, attr_button, (void *) pressed, (void *) button, (void *) &p);
591} 722}
723*/
592 724
593
594static int
595set_activity(jobject graphics) 725static int set_activity(jobject graphics)
596{ 726{
597 //dbg(0,"EEnter\n"); 727 //DBG dbg(0,"EEnter\n");
598 728
599 jclass ActivityClass; 729 jclass ActivityClass;
600 jmethodID cid; 730 jmethodID cid;
601 731
602 ActivityClass = (*jnienv)->GetObjectClass(jnienv, android_activity); 732 ActivityClass = (*jnienv)->GetObjectClass(jnienv, android_activity);
603 // dbg(0,"at 5\n"); 733 // //DBG dbg(0,"at 5\n");
604 if (ActivityClass == NULL) { 734 if (ActivityClass == NULL)
735 {
605 dbg(0,"no activity class found\n"); 736 //DBG dbg(0, "no activity class found\n");
606 return 0; 737 return 0;
607 } 738 }
608 // dbg(0,"at 6\n"); 739 // //DBG dbg(0,"at 6\n");
609 cid = (*jnienv)->GetMethodID(jnienv, ActivityClass, "setContentView", "(Landroid/view/View;)V"); 740 cid = (*jnienv)->GetMethodID(jnienv, ActivityClass, "setContentView", "(Landroid/view/View;)V");
610 if (cid == NULL) { 741 if (cid == NULL)
742 {
611 dbg(0,"no setContentView method found\n"); 743 //DBG dbg(0, "no setContentView method found\n");
612 return 0; 744 return 0;
613 } 745 }
614 // dbg(0,"at 7\n"); 746 //DBG dbg(0,"at 7\n");
615 (*jnienv)->CallVoidMethod(jnienv, android_activity, cid, graphics); 747 (*jnienv)->CallVoidMethod(jnienv, android_activity, cid, graphics);
616 // dbg(0,"at 8\n"); 748 //DBG dbg(0,"at 8\n");
617 return 1; 749 return 1;
618} 750}
619 751
620static int
621graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, struct point *pnt, int w, int h, int alpha, int wraparound, int use_camera) 752static int graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, struct point *pnt, int w, int h, int alpha, int wraparound, int use_camera)
622{ 753{
623 struct callback *cb; 754 struct callback *cb;
624 jmethodID cid; 755 jmethodID cid;
625 756
626 dbg(0,"at 2 jnienv=%p\n",jnienv); 757 dbg(0, "at 2 jnienv=%p\n", jnienv);
758 //DBG dbg(0,"a1\n");
627 if (!find_class_global("android/graphics/Paint", &ret->PaintClass)) 759 if (!find_class_global("android/graphics/Paint", &ret->PaintClass))
628 return 0; 760 return 0;
761 //DBG dbg(0,"a2\n");
629 if (!find_method(ret->PaintClass, "<init>", "(I)V", &ret->Paint_init)) 762 if (!find_method(ret->PaintClass, "<init>", "(I)V", &ret->Paint_init))
630 return 0; 763 return 0;
764 //DBG dbg(0,"a3\n");
631 if (!find_method(ret->PaintClass, "setARGB", "(IIII)V", &ret->Paint_setARGB)) 765 if (!find_method(ret->PaintClass, "setARGB", "(IIII)V", &ret->Paint_setARGB))
632 return 0; 766 return 0;
767 //DBG dbg(0,"a4\n");
633 if (!find_method(ret->PaintClass, "setStrokeWidth", "(F)V", &ret->Paint_setStrokeWidth)) 768 if (!find_method(ret->PaintClass, "setStrokeWidth", "(F)V", &ret->Paint_setStrokeWidth))
634 return 0; 769 return 0;
635 770
771 //DBG dbg(0,"a4.1\n");
636 if (!find_class_global("android/graphics/BitmapFactory", &ret->BitmapFactoryClass)) 772 if (!find_class_global("android/graphics/BitmapFactory", &ret->BitmapFactoryClass))
637 return 0; 773 return 0;
774 //DBG dbg(0,"a4.2\n");
638 if (!find_static_method(ret->BitmapFactoryClass, "decodeFile", "(Ljava/lang/String;)Landroid/graphics/Bitmap;", &ret->BitmapFactory_decodeFile)) 775 if (!find_static_method(ret->BitmapFactoryClass, "decodeFile", "(Ljava/lang/String;)Landroid/graphics/Bitmap;", &ret->BitmapFactory_decodeFile))
639 return 0; 776 return 0;
777 //DBG dbg(0,"a4.3\n");
640 if (!find_static_method(ret->BitmapFactoryClass, "decodeResource", "(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;", &ret->BitmapFactory_decodeResource)) 778 if (!find_static_method(ret->BitmapFactoryClass, "decodeResource", "(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;", &ret->BitmapFactory_decodeResource))
641 return 0; 779 return 0;
642 780
781 //DBG dbg(0,"a4.4\n");
643 if (!find_class_global("android/graphics/Bitmap", &ret->BitmapClass)) 782 if (!find_class_global("android/graphics/Bitmap", &ret->BitmapClass))
644 return 0; 783 return 0;
784 //DBG dbg(0,"a4.5\n");
645 if (!find_method(ret->BitmapClass, "getHeight", "()I", &ret->Bitmap_getHeight)) 785 if (!find_method(ret->BitmapClass, "getHeight", "()I", &ret->Bitmap_getHeight))
646 return 0; 786 return 0;
787 //DBG dbg(0,"a4.6\n");
647 if (!find_method(ret->BitmapClass, "getWidth", "()I", &ret->Bitmap_getWidth)) 788 if (!find_method(ret->BitmapClass, "getWidth", "()I", &ret->Bitmap_getWidth))
648 return 0; 789 return 0;
649 790 //DBG dbg(0,"a4.7\n");
650 if (!find_class_global("android/content/Context", &ret->ContextClass)) 791 if (!find_class_global("android/content/Context", &ret->ContextClass))
651 return 0; 792 return 0;
793 //DBG dbg(0,"a4.8\n");
652 if (!find_method(ret->ContextClass, "getResources", "()Landroid/content/res/Resources;", &ret->Context_getResources)) 794 if (!find_method(ret->ContextClass, "getResources", "()Landroid/content/res/Resources;", &ret->Context_getResources))
653 return 0; 795 return 0;
654 796 //DBG dbg(0,"a5\n");
655
656 ret->Resources=(*jnienv)->CallObjectMethod(jnienv, android_activity, ret->Context_getResources); 797 ret->Resources = (*jnienv)->CallObjectMethod(jnienv, android_activity, ret->Context_getResources);
798 //DBG dbg(0,"a6\n");
657 if (ret->Resources) 799 if (ret->Resources)
800 {
658 (*jnienv)->NewGlobalRef(jnienv, ret->Resources); 801 ret->Resources = (*jnienv)->NewGlobalRef(jnienv, ret->Resources);
802 }
803 //DBG dbg(0,"a7\n");
659 if (!find_class_global("android/content/res/Resources", &ret->ResourcesClass)) 804 if (!find_class_global("android/content/res/Resources", &ret->ResourcesClass))
660 return 0; 805 return 0;
806 //DBG dbg(0,"a8\n");
661 if (!find_method(ret->ResourcesClass, "getIdentifier", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", &ret->Resources_getIdentifier)) 807 if (!find_method(ret->ResourcesClass, "getIdentifier", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", &ret->Resources_getIdentifier))
662 return 0; 808 return 0;
663 809 //DBG dbg(0,"a9\n");
664 if (!find_class_global("com/zoffcc/applications/zanavi/NavitGraphics", &ret->NavitGraphicsClass)) 810 if (!find_class_global("com/zoffcc/applications/zanavi/NavitGraphics", &ret->NavitGraphicsClass))
665 return 0; 811 return 0;
666 dbg(0,"at 3\n"); 812 //DBG dbg(0, "at 3\n");
667 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "<init>", "(Landroid/app/Activity;Lcom/zoffcc/applications/zanavi/NavitGraphics;IIIIIII)V"); 813 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "<init>", "(Landroid/app/Activity;Lcom/zoffcc/applications/zanavi/NavitGraphics;IIIIIII)V");
668 if (cid == NULL) { 814 if (cid == NULL)
815 {
669 dbg(0,"no method found\n"); 816 //DBG dbg(0, "no method found\n");
670 return 0; /* exception thrown */ 817 return 0; /* exception thrown */
671 } 818 }
672 dbg(0,"at 4 android_activity=%p\n",android_activity); 819 //DBG dbg(0, "at 4 android_activity=%p\n", android_activity);
673 ret->NavitGraphics=(*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity, parent ? parent->NavitGraphics : NULL, pnt ? pnt->x:0 , pnt ? pnt->y:0, w, h, alpha, wraparound, use_camera); 820 ret->NavitGraphics = (*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity, parent ? parent->NavitGraphics : NULL, pnt ? pnt->x : 0, pnt ? pnt->y : 0, w, h, alpha, wraparound, use_camera);
674 dbg(0,"result=%p\n",ret->NavitGraphics); 821 dbg(0, "result=%p\n", ret->NavitGraphics);
675 if (ret->NavitGraphics) 822 if (ret->NavitGraphics)
823 {
676 (*jnienv)->NewGlobalRef(jnienv, ret->NavitGraphics); 824 ret->NavitGraphics = (*jnienv)->NewGlobalRef(jnienv, ret->NavitGraphics);
825 }
677 826
678 /* Create a single global Paint, otherwise android will quickly run out 827 /* Create a single global Paint, otherwise android will quickly run out
679 * of global refs.*/ 828 * of global refs.*/
680 /* 0x101 = text kerning (default), antialiasing */ 829 /* 0x101 = text kerning (default), antialiasing */
681 ret->Paint=(*jnienv)->NewObject(jnienv, ret->PaintClass, ret->Paint_init, 0x101); 830 ret->Paint = (*jnienv)->NewObject(jnienv, ret->PaintClass, ret->Paint_init, 0x101);
682 831
683 dbg(0,"result=%p\n",ret->Paint); 832 //DBG dbg(0, "l result=%p\n", ret->Paint);
684 if (ret->Paint) 833 if (ret->Paint)
834 {
685 (*jnienv)->NewGlobalRef(jnienv, ret->Paint); 835 ret->Paint = (*jnienv)->NewGlobalRef(jnienv, ret->Paint);
836 }
837 //DBG dbg(0, "g result=%p\n", ret->Paint);
686 838
839 /*
687 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setSizeChangedCallback", "(I)V"); 840 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setSizeChangedCallback", "(I)V");
688 if (cid == NULL) { 841 if (cid == NULL)
842 {
689 dbg(0,"no SetResizeCallback method found\n"); 843 //DBG dbg(0, "no SetResizeCallback method found\n");
690 return 0; /* exception thrown */ 844 return 0;
691 } 845 }
692 cb=callback_new_1(callback_cast(resize_callback), ret); 846 cb = callback_new_1(callback_cast(resize_callback), ret);
693 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb); 847 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int) cb);
848 */
694 849
850 /*
695 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setButtonCallback", "(I)V"); 851 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setButtonCallback", "(I)V");
696 if (cid == NULL) { 852 if (cid == NULL)
853 {
697 dbg(0,"no SetButtonCallback method found\n"); 854 //DBG dbg(0, "no SetButtonCallback method found\n");
698 return 0; /* exception thrown */ 855 return 0;
699 } 856 }
700 cb=callback_new_1(callback_cast(button_callback), ret); 857 cb = callback_new_1(callback_cast(button_callback), ret);
701 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb); 858 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int) cb);
859 */
702 860
861 /*
703 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setMotionCallback", "(I)V"); 862 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setMotionCallback", "(I)V");
704 if (cid == NULL) { 863 if (cid == NULL)
864 {
705 dbg(0,"no SetMotionCallback method found\n"); 865 //DBG dbg(0, "no SetMotionCallback method found\n");
706 return 0; /* exception thrown */ 866 return 0;
707 } 867 }
708 cb=callback_new_1(callback_cast(motion_callback), ret); 868 cb = callback_new_1(callback_cast(motion_callback), ret);
709 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb); 869 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int) cb);
870 */
871
872 // sets the graphics object for the JAVA code (this is bad, please fix me!!)
873 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "NavitSetGrObj", "()V");
874 if (cid == NULL)
875 {
876 //DBG dbg(0, "no SetMotionCallback method found\n");
877 return 0;
878 }
879 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid);
710 880
711 881
712 // public Bitmap rotate_and_scale_bitmap(Bitmap in, int w, int h, int angle) 882 // public Bitmap rotate_and_scale_bitmap(Bitmap in, int w, int h, int angle)
713 883
714 if (!find_static_method(ret->NavitGraphicsClass, "rotate_and_scale_bitmap", "(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;", &ret->NavitGraphicsClass_rotate_and_scale_bitmap)) 884 if (!find_static_method(ret->NavitGraphicsClass, "rotate_and_scale_bitmap", "(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;", &ret->NavitGraphicsClass_rotate_and_scale_bitmap))
715 return 0; 885 return 0;
716 886
717 // 887 //
718 //cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "rotate_and_scale_bitmap", "(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;"); 888 //cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "rotate_and_scale_bitmap", "(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;");
719 //if (cid == NULL) { 889 //if (cid == NULL) {
720 // dbg(0,"no rotate_and_scale_bitmap method found\n"); 890 // //DBG dbg(0,"no rotate_and_scale_bitmap method found\n");
721 // return 0; /* exception thrown */ 891 // return 0; /* exception thrown */
722 //} 892 //}
723 893
894 /*
724 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setKeypressCallback", "(I)V"); 895 cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "setKeypressCallback", "(I)V");
725 if (cid == NULL) { 896 if (cid == NULL)
897 {
726 dbg(0,"no SetKeypressCallback method found\n"); 898 //DBG dbg(0, "no SetKeypressCallback method found\n");
727 return 0; /* exception thrown */ 899 return 0;
728 } 900 }
729 cb=callback_new_1(callback_cast(keypress_callback), ret); 901 cb = callback_new_1(callback_cast(keypress_callback), ret);
730 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int)cb); 902 (*jnienv)->CallVoidMethod(jnienv, ret->NavitGraphics, cid, (int) cb);
903 */
731 904
732 if (!find_method(ret->NavitGraphicsClass, "draw_polyline", "(Landroid/graphics/Paint;[I)V", &ret->NavitGraphics_draw_polyline)) 905 if (!find_method(ret->NavitGraphicsClass, "draw_polyline", "(Landroid/graphics/Paint;[I)V", &ret->NavitGraphics_draw_polyline))
733 return 0; 906 return 0;
734 if (!find_method(ret->NavitGraphicsClass, "draw_polyline2", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polyline2)) 907 if (!find_method(ret->NavitGraphicsClass, "draw_polyline2", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polyline2))
735 return 0; 908 return 0;
909 if (!find_method(ret->NavitGraphicsClass, "draw_polyline3", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polyline3))
910 return 0;
911 if (!find_method(ret->NavitGraphicsClass, "draw_polyline4", "(Landroid/graphics/Paint;[IIII)V", &ret->NavitGraphics_draw_polyline4))
912 return 0;
736 if (!find_method(ret->NavitGraphicsClass, "draw_polyline_dashed", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polyline_dashed)) 913 if (!find_method(ret->NavitGraphicsClass, "draw_polyline_dashed", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polyline_dashed))
737 return 0; 914 return 0;
915 if (!find_method(ret->NavitGraphicsClass, "set_dashes", "(Landroid/graphics/Paint;II)V", &ret->NavitGraphics_set_dashes))
916 return 0;
738 if (!find_method(ret->NavitGraphicsClass, "draw_polygon", "(Landroid/graphics/Paint;[I)V", &ret->NavitGraphics_draw_polygon)) 917 if (!find_method(ret->NavitGraphicsClass, "draw_polygon", "(Landroid/graphics/Paint;[I)V", &ret->NavitGraphics_draw_polygon))
739 return 0; 918 return 0;
740 if (!find_method(ret->NavitGraphicsClass, "draw_polygon2", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polygon2)) 919 if (!find_method(ret->NavitGraphicsClass, "draw_polygon2", "(Landroid/graphics/Paint;[III)V", &ret->NavitGraphics_draw_polygon2))
741 return 0; 920 return 0;
742 if (!find_method(ret->NavitGraphicsClass, "draw_rectangle", "(Landroid/graphics/Paint;IIII)V", &ret->NavitGraphics_draw_rectangle)) 921 if (!find_method(ret->NavitGraphicsClass, "draw_rectangle", "(Landroid/graphics/Paint;IIII)V", &ret->NavitGraphics_draw_rectangle))
757 return 0; 936 return 0;
758 if (!find_method(ret->NavitGraphicsClass, "overlay_disable", "(I)V", &ret->NavitGraphics_overlay_disable)) 937 if (!find_method(ret->NavitGraphicsClass, "overlay_disable", "(I)V", &ret->NavitGraphics_overlay_disable))
759 return 0; 938 return 0;
760 if (!find_method(ret->NavitGraphicsClass, "overlay_resize", "(IIIIII)V", &ret->NavitGraphics_overlay_resize)) 939 if (!find_method(ret->NavitGraphicsClass, "overlay_resize", "(IIIIII)V", &ret->NavitGraphics_overlay_resize))
761 return 0; 940 return 0;
941 /*
762 if (!find_method(ret->NavitGraphicsClass, "SetCamera", "(I)V", &ret->NavitGraphics_SetCamera)) 942 if (!find_method(ret->NavitGraphicsClass, "SetCamera", "(I)V", &ret->NavitGraphics_SetCamera))
763 return 0; 943 return 0;
944 */
945
946 //DBG dbg(0,"99\n");
764#if 0 947#if 0
765 set_activity(ret->NavitGraphics); 948 set_activity(ret->NavitGraphics);
766#endif 949#endif
767 return 1; 950 return 1;
768} 951}
769 952
770static int
771graphics_android_fullscreen(struct window *win, int on) 953static int graphics_android_fullscreen(struct window *win, int on)
772{ 954{
773 return 1; 955 return 1;
774} 956}
775 957
776static jclass NavitClass; 958static jclass NavitClass;
777static jmethodID Navit_disableSuspend, Navit_exit; 959static jmethodID Navit_disableSuspend, Navit_exit;
778 960
779static void
780graphics_android_disable_suspend(struct window *win) 961static void graphics_android_disable_suspend(struct window *win)
781{ 962{
782 //dbg(0,"enter\n"); 963 //DBG dbg(0,"enter\n");
964 JNIEnv *jnienv2;
965 jnienv2 = jni_getenv();
966
783 (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_disableSuspend); 967 (*jnienv2)->CallVoidMethod(jnienv2, android_activity, Navit_disableSuspend);
784} 968}
785
786
787 969
788static struct graphics_priv * 970static struct graphics_priv *
789graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl) 971graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl)
790{ 972{
791 //dbg(0,"EEnter\n"); 973 //DBG dbg(0,"EEnter\n");
792 974
793 struct graphics_priv *ret; 975 struct graphics_priv *ret;
794 struct attr *attr; 976 struct attr *attr;
795 int use_camera=0; 977 int use_camera = 0;
978
796 if (!event_request_system("android","graphics_android")) 979 if (!event_request_system("android", "graphics_android"))
980 {
797 return NULL; 981 return NULL;
982 }
983
798 ret=g_new0(struct graphics_priv, 1); 984 ret=g_new0(struct graphics_priv, 1);
799
800 ret->cbl=cbl; 985 ret->cbl = cbl;
801 *meth=graphics_methods; 986 *meth = graphics_methods;
802 ret->win.priv=ret; 987 ret->win.priv = ret;
803 ret->win.fullscreen=graphics_android_fullscreen; 988 ret->win.fullscreen = graphics_android_fullscreen;
804 ret->win.disable_suspend=graphics_android_disable_suspend; 989 ret->win.disable_suspend = graphics_android_disable_suspend;
805 if ((attr=attr_search(attrs, NULL, attr_use_camera))) { 990 if ((attr = attr_search(attrs, NULL, attr_use_camera)))
991 {
806 use_camera=attr->u.num; 992 use_camera = attr->u.num;
807 } 993 }
808 image_cache_hash = g_hash_table_new(g_str_hash, g_str_equal); 994 image_cache_hash = g_hash_table_new(g_str_hash, g_str_equal);
809 if (graphics_android_init(ret, NULL, NULL, 0, 0, 0, 0, use_camera)) { 995 if (graphics_android_init(ret, NULL, NULL, 0, 0, 0, 0, use_camera))
996 {
810 //dbg(0,"returning %p\n",ret); 997 ////DBG dbg(0,"returning %p\n",ret);
811 return ret; 998 return ret;
812 } else { 999 }
1000 else
1001 {
813 g_free(ret); 1002 g_free(ret);
814 return NULL; 1003 return NULL;
815 } 1004 }
816} 1005}
817 1006
818static struct graphics_priv * 1007static struct graphics_priv *
819overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int alpha, int wraparound) 1008overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int alpha, int wraparound)
820{ 1009{
821 //dbg(0,"EEnter\n"); 1010 //DBG dbg(0,"EEnter\n");
822 1011
823 struct graphics_priv *ret=g_new0(struct graphics_priv, 1); 1012 struct graphics_priv *ret=g_new0(struct graphics_priv, 1);
824 *meth=graphics_methods; 1013 *meth = graphics_methods;
825 if (graphics_android_init(ret, gr, p, w, h, alpha, wraparound, 0)) { 1014 if (graphics_android_init(ret, gr, p, w, h, alpha, wraparound, 0))
1015 {
826 dbg(0,"returning %p\n",ret); 1016 //DBG dbg(0, "returning %p\n", ret);
827 return ret; 1017 return ret;
828 } else { 1018 }
1019 else
1020 {
829 g_free(ret); 1021 g_free(ret);
830 return NULL; 1022 return NULL;
831 } 1023 }
832} 1024}
833 1025
834
835static void
836event_android_main_loop_run(void) 1026static void event_android_main_loop_run(void)
837{ 1027{
838 dbg(0,"enter\n"); 1028 dbg(0, "enter\n");
839} 1029}
840 1030
841static void event_android_main_loop_quit(void) 1031static void event_android_main_loop_quit(void)
842{ 1032{
843 dbg(0,"enter\n"); 1033 dbg(0, "enter\n");
844 // exit(0); 1034 // ******* exit(0);
845 (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_exit); 1035 (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_exit);
846} 1036}
847
848 1037
849static jclass NavitTimeoutClass; 1038static jclass NavitTimeoutClass;
850static jmethodID NavitTimeout_init; 1039static jmethodID NavitTimeout_init;
851static jmethodID NavitTimeout_remove; 1040static jmethodID NavitTimeout_remove;
852 1041
859static jmethodID NavitWatch_remove; 1048static jmethodID NavitWatch_remove;
860 1049
861static struct event_watch * 1050static struct event_watch *
862event_android_add_watch(void *h, enum event_watch_cond cond, struct callback *cb) 1051event_android_add_watch(void *h, enum event_watch_cond cond, struct callback *cb)
863{ 1052{
1053 //DBG dbg(0,"enter\n");
864 jobject ret; 1054 jobject ret;
865 ret=(*jnienv)->NewObject(jnienv, NavitWatchClass, NavitWatch_init, (int) h, (int) cond, (int)cb); 1055 ret = (*jnienv)->NewObject(jnienv, NavitWatchClass, NavitWatch_init, (int) h, (int) cond, (int) cb);
866 //dbg(0,"result for %p,%d,%p=%p\n",h,cond,cb,ret); 1056 // //DBG dbg(0,"result for %p,%d,%p=%p\n",h,cond,cb,ret);
867 if (ret) 1057 if (ret)
1058 {
1059 //DBG dbg(0,"result for %p,%p\n",h,ret);
868 (*jnienv)->NewGlobalRef(jnienv, ret); 1060 ret = (*jnienv)->NewGlobalRef(jnienv, ret);
1061 //DBG dbg(0,"g ret %p\n",ret);
1062 }
869 return (struct event_watch *)ret; 1063 return (struct event_watch *) ret;
870} 1064}
871 1065
872static void
873event_android_remove_watch(struct event_watch *ev) 1066static void event_android_remove_watch(struct event_watch *ev)
874{ 1067{
1068 //DBG dbg(0,"enter\n");
1069 if (ev)
1070 {
875 //dbg(0,"enter %p\n",ev); 1071 //DBG dbg(0,"enter %p\n",ev);
876 if (ev) {
877 jobject obj=(jobject )ev; 1072 jobject obj = (jobject) ev;
1073 // maybe need this ? ICS obj = (*jnienv)->NewGlobalRef(jnienv, obj);
878 (*jnienv)->CallVoidMethod(jnienv, obj, NavitWatch_remove); 1074 (*jnienv)->CallVoidMethod(jnienv, obj, NavitWatch_remove);
879 (*jnienv)->DeleteGlobalRef(jnienv, obj); 1075 // ICS (*jnienv)->DeleteGlobalRef(jnienv, obj);
880 } 1076 }
881} 1077}
882 1078
883static struct event_timeout * 1079static struct event_timeout *
884event_android_add_timeout(int timeout, int multi, struct callback *cb) 1080event_android_add_timeout(int timeout, int multi, struct callback *cb)
885{ 1081{
886 //dbg(0,"EEnter\n"); 1082 //dbg(0,"EEnter\n");
887 1083
1084 // timeout -> delay in milliseconds
1085
888 jobject ret; 1086 jobject ret;
1087 jobject ret_g = NULL;
889 ret=(*jnienv)->NewObject(jnienv, NavitTimeoutClass, NavitTimeout_init, timeout, multi, (int)cb); 1088 ret = (*jnienv)->NewObject(jnienv, NavitTimeoutClass, NavitTimeout_init, timeout, multi, (int) cb);
890 dbg(1,"result for %d,%d,%p=%p\n",timeout,multi,cb,ret); 1089 //dbg(0, "result for %d,%d,%p\n", timeout, multi, cb);
1090
891 if (ret) 1091 if (ret)
1092 {
1093 dbg(0,"l ret=%p\n",ret);
892 (*jnienv)->NewGlobalRef(jnienv, ret); 1094 ret_g = (*jnienv)->NewGlobalRef(jnienv, ret);
1095 dbg(0,"g ret=%p\n",ret_g);
1096 }
1097 //dbg(0,"leave\n");
893 return (struct event_timeout *)ret; 1098 return (struct event_timeout *) ret_g;
894} 1099}
895 1100
896static void
897event_android_remove_timeout(struct event_timeout *to) 1101static void event_android_remove_timeout(struct event_timeout *to)
898{ 1102{
899 //dbg(0,"EEnter\n"); 1103 //dbg(0,"EEnter\n");
900 1104
901 dbg(1,"enter %p\n",to);
902 if (to) { 1105 if (to)
1106 {
1107 dbg(0, "remove %p\n", to);
903 jobject obj=(jobject )to; 1108 jobject obj = (jobject) to;
904 (*jnienv)->CallVoidMethod(jnienv, obj, NavitTimeout_remove); 1109 (*jnienv)->CallVoidMethod(jnienv, obj, NavitTimeout_remove);
1110 // ICS
1111 dbg(0, "remove 1\n");
905 (*jnienv)->DeleteGlobalRef(jnienv, obj); 1112 (*jnienv)->DeleteGlobalRef(jnienv, obj);
1113 dbg(0, "remove 2\n");
906 } 1114 }
907} 1115}
908
909 1116
910static struct event_idle * 1117static struct event_idle *
911event_android_add_idle(int priority, struct callback *cb) 1118event_android_add_idle(int priority, struct callback *cb)
912{ 1119{
1120 // ----------------------------------------------------
1121 // ----------------------------------------------------
1122 // "priority" param is now misused here as "multi"
1123 // priority == 1000 -> set multi = 0
1124 // ----------------------------------------------------
1125 // ----------------------------------------------------
1126
913 //dbg(0,"EEnter\n"); 1127 //dbg(0,"EEnter\n");
914 1128
915#if 0 1129#if 0
916 jobject ret; 1130 jobject ret;
917 dbg(1,"enter\n"); 1131 // dbg(1,"enter\n");
918 ret=(*jnienv)->NewObject(jnienv, NavitIdleClass, NavitIdle_init, (int)cb); 1132 ret=(*jnienv)->NewObject(jnienv, NavitIdleClass, NavitIdle_init, (int)cb);
919 dbg(1,"result for %p=%p\n",cb,ret); 1133 // dbg(1,"result for %p=%p\n",cb,ret);
920 if (ret) 1134 if (ret)
921 (*jnienv)->NewGlobalRef(jnienv, ret); 1135 (*jnienv)->NewGlobalRef(jnienv, ret);
922 return (struct event_idle *)ret; 1136 return (struct event_idle *)ret;
923#endif 1137#endif
1138 // ----- xxxxxxxx ------
1139 if (priority == 1000)
1140 {
1141 return (struct event_idle *) event_android_add_timeout(10, 0, cb);
1142 }
1143 else
1144 {
924 return (struct event_idle *)event_android_add_timeout(1, 1, cb); 1145 return (struct event_idle *) event_android_add_timeout(10, 1, cb);
1146 }
925} 1147}
926 1148
927static void
928event_android_remove_idle(struct event_idle *ev) 1149static void event_android_remove_idle(struct event_idle *ev)
929{ 1150{
930 //dbg(0,"EEnter\n"); 1151 //DBG dbg(0,"EEnter\n");
931 1152
932#if 0 1153#if 0
933 dbg(1,"enter %p\n",ev); 1154 // dbg(1,"enter %p\n",ev);
934 if (ev) { 1155 if (ev)
1156 {
935 jobject obj=(jobject )ev; 1157 jobject obj=(jobject )ev;
936 (*jnienv)->CallVoidMethod(jnienv, obj, NavitIdle_remove); 1158 (*jnienv)->CallVoidMethod(jnienv, obj, NavitIdle_remove);
937 (*jnienv)->DeleteGlobalRef(jnienv, obj); 1159 (*jnienv)->DeleteGlobalRef(jnienv, obj);
938 } 1160 }
939#endif 1161#endif
940 event_android_remove_timeout((struct event_timeout *)ev); 1162 event_android_remove_timeout((struct event_timeout *) ev);
941} 1163}
942 1164
943static void
944event_android_call_callback(struct callback_list *cb) 1165static void event_android_call_callback(struct callback_list *cb)
945{ 1166{
946 // dbg(0,"enter\n"); 1167 //DBG dbg(0,"enter\n");
947} 1168}
948 1169
949static struct event_methods event_android_methods = { 1170static struct event_methods event_android_methods =
950 event_android_main_loop_run, 1171{ event_android_main_loop_run, event_android_main_loop_quit, event_android_add_watch, event_android_remove_watch, event_android_add_timeout, event_android_remove_timeout, event_android_add_idle, event_android_remove_idle, event_android_call_callback, };
951 event_android_main_loop_quit,
952 event_android_add_watch,
953 event_android_remove_watch,
954 event_android_add_timeout,
955 event_android_remove_timeout,
956 event_android_add_idle,
957 event_android_remove_idle,
958 event_android_call_callback,
959};
960 1172
961static struct event_priv * 1173static struct event_priv *
962event_android_new(struct event_methods *meth) 1174event_android_new(struct event_methods *meth)
963{ 1175{
964 //dbg(0,"enter\n"); 1176 //DBG dbg(0,"enter\n");
965 if (!find_class_global("com/zoffcc/applications/zanavi/NavitTimeout", &NavitTimeoutClass)) 1177 if (!find_class_global("com/zoffcc/applications/zanavi/NavitTimeout", &NavitTimeoutClass))
966 return NULL; 1178 return NULL;
967 NavitTimeout_init = (*jnienv)->GetMethodID(jnienv, NavitTimeoutClass, "<init>", "(IZI)V"); 1179 NavitTimeout_init = (*jnienv)->GetMethodID(jnienv, NavitTimeoutClass, "<init>", "(IZI)V");
968 if (NavitTimeout_init == NULL) 1180 if (NavitTimeout_init == NULL)
969 return NULL; 1181 return NULL;
970 NavitTimeout_remove = (*jnienv)->GetMethodID(jnienv, NavitTimeoutClass, "remove", "()V"); 1182 NavitTimeout_remove = (*jnienv)->GetMethodID(jnienv, NavitTimeoutClass, "remove", "()V");
971 if (NavitTimeout_remove == NULL) 1183 if (NavitTimeout_remove == NULL)
972 return NULL; 1184 return NULL;
973#if 0 1185#if 0
974 if (!find_class_global("com/zoffcc/applications/zanavi/NavitIdle", &NavitIdleClass)) 1186 if (!find_class_global("com/zoffcc/applications/zanavi/NavitIdle", &NavitIdleClass))
975 return NULL; 1187 return NULL;
976 NavitIdle_init = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "<init>", "(I)V"); 1188 NavitIdle_init = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "<init>", "(I)V");
977 if (NavitIdle_init == NULL) 1189 if (NavitIdle_init == NULL)
978 return NULL; 1190 return NULL;
979 NavitIdle_remove = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "remove", "()V"); 1191 NavitIdle_remove = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "remove", "()V");
980 if (NavitIdle_remove == NULL) 1192 if (NavitIdle_remove == NULL)
981 return NULL; 1193 return NULL;
982#endif 1194#endif
983 1195
984 if (!find_class_global("com/zoffcc/applications/zanavi/NavitWatch", &NavitWatchClass)) 1196 if (!find_class_global("com/zoffcc/applications/zanavi/NavitWatch", &NavitWatchClass))
985 return NULL; 1197 return NULL;
986 NavitWatch_init = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "<init>", "(III)V"); 1198 NavitWatch_init = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "<init>", "(III)V");
987 if (NavitWatch_init == NULL) 1199 if (NavitWatch_init == NULL)
988 return NULL; 1200 return NULL;
989 NavitWatch_remove = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "remove", "()V"); 1201 NavitWatch_remove = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "remove", "()V");
990 if (NavitWatch_remove == NULL) 1202 if (NavitWatch_remove == NULL)
991 return NULL; 1203 return NULL;
992 1204
993 if (!find_class_global("com/zoffcc/applications/zanavi/Navit", &NavitClass)) 1205 if (!find_class_global("com/zoffcc/applications/zanavi/Navit", &NavitClass))
994 return NULL; 1206 return NULL;
995 Navit_disableSuspend = (*jnienv)->GetMethodID(jnienv, NavitClass, "disableSuspend", "()V"); 1207 Navit_disableSuspend = (*jnienv)->GetMethodID(jnienv, NavitClass, "disableSuspend", "()V");
996 if (Navit_disableSuspend == NULL) 1208 if (Navit_disableSuspend == NULL)
997 return NULL; 1209 return NULL;
998 Navit_exit = (*jnienv)->GetMethodID(jnienv, NavitClass, "exit", "()V"); 1210 Navit_exit = (*jnienv)->GetMethodID(jnienv, NavitClass, "exit2", "()V");
999 if (Navit_exit == NULL) 1211 if (Navit_exit == NULL)
1000 return NULL; 1212 return NULL;
1001 //dbg(0,"ok\n"); 1213 //DBG dbg(0,"ok\n");
1002 *meth=event_android_methods; 1214 *meth = event_android_methods;
1003 return NULL; 1215 return NULL;
1004} 1216}
1005 1217
1006
1007void
1008plugin_init(void) 1218void plugin_init(void)
1009{ 1219{
1010 //dbg(0,"enter\n"); 1220 //DBG dbg(0,"enter\n");
1011 plugin_register_graphics_type("android", graphics_android_new); 1221 plugin_register_graphics_type("android", graphics_android_new);
1012 plugin_register_event_type("android", event_android_new); 1222 plugin_register_event_type("android", event_android_new);
1013} 1223}
1224

Legend:
Removed from v.2  
changed lines
  Added in v.29

   
Visit the ZANavi Wiki