summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-05-25 07:32:03 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-05-25 07:32:03 +0000
commit35b2359513b84f9378ac75febe7bc1c7de44ff77 (patch)
tree22933c592d794e05830ad30e074b97a145aacbc9
parentb476839e03a5630e9db9f474b7827a2fe8a6fce2 (diff)
downloadnavit-svn-35b2359513b84f9378ac75febe7bc1c7de44ff77.tar.gz
Fix:graphics_gd:Clear background at the correct time, support for emulating clicks
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2286 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--navit/graphics.c5
-rw-r--r--navit/graphics.h5
-rw-r--r--navit/graphics/gd/graphics_gd.c33
3 files changed, 32 insertions, 11 deletions
diff --git a/navit/graphics.c b/navit/graphics.c
index 2802be69..279bbbf9 100644
--- a/navit/graphics.c
+++ b/navit/graphics.c
@@ -1735,11 +1735,8 @@ do_draw(struct displaylist *displaylist, int cancel)
void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int callback)
{
int order=transform_get_order(trans);
- struct point p;
displaylist->dc.trans=trans;
displaylist->dc.gra=gra;
- p.x=0;
- p.y=0;
// FIXME find a better place to set the background color
if (l) {
graphics_gc_set_background(gra->gc[0], &l->color);
@@ -1748,7 +1745,7 @@ void graphics_displaylist_draw(struct graphics *gra, struct displaylist *display
}
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, &p, 32767, 32767);
+ 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)
diff --git a/navit/graphics.h b/navit/graphics.h
index b5cd05f5..447243b9 100644
--- a/navit/graphics.h
+++ b/navit/graphics.h
@@ -106,6 +106,11 @@ struct graphics_image {
struct point hot;
};
+struct graphics_data_image {
+ void *data;
+ int size;
+};
+
/* prototypes */
enum attr_type;
enum draw_mode_num;
diff --git a/navit/graphics/gd/graphics_gd.c b/navit/graphics/gd/graphics_gd.c
index 8f991d7e..d53fcb62 100644
--- a/navit/graphics/gd/graphics_gd.c
+++ b/navit/graphics/gd/graphics_gd.c
@@ -173,6 +173,7 @@ struct graphics_priv {
struct graphics_gc_priv *background;
struct font_freetype_methods freetype_methods;
struct window window;
+ struct graphics_data_image image;
};
struct graphics_gc_priv {
@@ -324,9 +325,7 @@ draw_polygon(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point
static void
draw_rectangle(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int w, int h)
{
-#if 0
gdImageFilledRectangle(gr->im, p->x, p->y, p->x+w, p->y+h, gc->color);
-#endif
}
static void
@@ -414,11 +413,13 @@ static void
draw_mode(struct graphics_priv *gr, enum draw_mode_num mode)
{
FILE *pngout;
- dbg(0,"enter\n");
+#if 0
if (mode == draw_mode_begin && gr->background) {
gdImageFilledRectangle(gr->im, 0, 0, gr->w, gr->h, gr->background->color);
}
+#endif
if (mode == draw_mode_end) {
+ rename("test.png","test.png.old");
pngout=fopen("test.png", "wb");
gdImagePng(gr->im, pngout);
fclose(pngout);
@@ -430,9 +431,27 @@ static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graph
static void *
get_data(struct graphics_priv *this, char *type)
{
- if (strcmp(type,"window"))
- return NULL;
- return &this->window;
+ int b;
+ struct point p;
+ if (!strcmp(type,"window"))
+ return &this->window;
+ if (!strcmp(type,"image_png")) {
+ if (this->image.data)
+ gdFree(this->image.data);
+ this->image.data=gdImagePngPtr(this->im, &this->image.size);
+ return &this->image;
+ }
+ if (sscanf(type,"click_%d_%d_%d",&p.x,&p.y,&b) == 3) {
+ if (this->image.data)
+ gdFree(this->image.data);
+ this->image.data=0;
+ this->image.size=0;
+
+ callback_list_call_attr_3(this->cbl, attr_button, (void *)b, (void *)1, (void *)&p);
+
+ return &this->image;
+ }
+ return NULL;
}
@@ -499,7 +518,7 @@ graphics_gd_new(struct navit *nav, struct graphics_methods *meth, struct attr **
if (!font_freetype_new)
return NULL;
*meth=graphics_methods;
- ret=g_new(struct graphics_priv, 1);
+ ret=g_new0(struct graphics_priv, 1);
font_freetype_new(&ret->freetype_methods);
meth->font_new=(struct graphics_font_priv *(*)(struct graphics_priv *, struct graphics_font_methods *, char *, int, int))ret->freetype_methods.font_new;
meth->get_text_bbox=ret->freetype_methods.get_text_bbox;