summaryrefslogtreecommitdiff
path: root/navit/graphics/gd
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-12-24 09:44:22 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-12-24 09:44:22 +0000
commitbae7260d93c126800ba3d3a346a7627c857eed2b (patch)
tree75fd10d99bbb55d57744a5238c0b85df55fa7ae2 /navit/graphics/gd
parent888b4871ab362b3a41d7a61c75d126a67b67a728 (diff)
downloadnavit-bae7260d93c126800ba3d3a346a7627c857eed2b.tar.gz
Add:graphics_gd:Support for resizing
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2892 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/graphics/gd')
-rw-r--r--navit/graphics/gd/graphics_gd.c67
1 files changed, 54 insertions, 13 deletions
diff --git a/navit/graphics/gd/graphics_gd.c b/navit/graphics/gd/graphics_gd.c
index 72bb5a7c5..55dd02c86 100644
--- a/navit/graphics/gd/graphics_gd.c
+++ b/navit/graphics/gd/graphics_gd.c
@@ -35,6 +35,8 @@
#ifdef NAVIT_GD_XPM_TRANSPARENCY_HACK
#include <X11/xpm.h>
+static void emit_callback(struct graphics_priv *priv);
+
BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm (char *filename)
{
XpmInfo info;
@@ -166,7 +168,7 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm (char *filename)
struct graphics_priv {
gdImagePtr im;
- int w,h;
+ int w,h,flags;
struct callback *cb;
struct callback_list *cbl;
struct navit *nav;
@@ -418,7 +420,7 @@ draw_mode(struct graphics_priv *gr, enum draw_mode_num mode)
gdImageFilledRectangle(gr->im, 0, 0, gr->w, gr->h, gr->background->color);
}
#endif
- if (mode == draw_mode_end) {
+ if (mode == draw_mode_end && !(gr->flags & 1)) {
rename("test.png","test.png.old");
pngout=fopen("test.png", "wb");
gdImagePng(gr->im, pngout);
@@ -467,7 +469,47 @@ overlay_disable(struct graphics_priv *gr, int disable)
dbg(0,"enter\n");
}
+static int
+set_attr_do(struct graphics_priv *gr, struct attr *attr, int init)
+{
+ switch (attr->type) {
+ case attr_w:
+ if (gr->w != attr->u.num) {
+ gr->w=attr->u.num;
+ if (!init) {
+ if (gr->im)
+ gdImageDestroy(gr->im);
+ gr->im=gdImageCreateTrueColor(gr->w,gr->h);
+ emit_callback(gr);
+ }
+ }
+ break;
+ case attr_h:
+ if (gr->h != attr->u.num) {
+ gr->h=attr->u.num;
+ if (!init) {
+ if (gr->im)
+ gdImageDestroy(gr->im);
+ gr->im=gdImageCreateTrueColor(gr->w,gr->h);
+ emit_callback(gr);
+ }
+ }
+ break;
+ case attr_flags:
+ gr->flags=attr->u.num;
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int
+set_attr(struct graphics_priv *gr, struct attr *attr)
+{
+ return set_attr_do(gr, attr, 0);
+}
static struct graphics_methods graphics_methods = {
graphics_destroy,
@@ -490,6 +532,8 @@ static struct graphics_methods graphics_methods = {
image_free,
NULL,
overlay_disable,
+ NULL,
+ set_attr,
};
static struct graphics_priv *
@@ -525,17 +569,14 @@ graphics_gd_new(struct navit *nav, struct graphics_methods *meth, struct attr **
navit_add_callback(nav, ret->cb);
ret->cbl=cbl;
ret->nav=nav;
- attr=attr_search(attrs, NULL, attr_w);
- if (attr)
- ret->w=attr->u.num;
- else
- ret->w=800;
- attr=attr_search(attrs, NULL, attr_h);
- if (attr)
- ret->h=attr->u.num;
- else
- ret->h=600;
- ret->im=gdImageCreateTrueColor(ret->w,ret->h);
+ ret->w=800;
+ ret->h=600;
+ while (*attrs) {
+ set_attr_do(ret, *attrs, 1);
+ attrs++;
+ }
+ if (!ret->im)
+ ret->im=gdImageCreateTrueColor(ret->w,ret->h);
return ret;
}