+//##############################################################################################################
+//#
+//# File: graphics.c
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//#
+//##############################################################################################################
+
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include "route.h"
#include "util.h"
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
struct graphics
{
struct graphics_priv *priv;
struct attr **attrs;
int ready;
};
-
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
struct displaylist {
GHashTable *dl;
};
-
-struct graphics *
-graphics_new(const char *type, struct attr **attrs)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct graphics * graphics_new(const char *type, struct attr **attrs)
{
struct graphics *this_;
struct graphics_priv * (*new)(struct graphics_methods *meth, struct attr **attrs);
return this_;
}
-int
-graphics_get_attr(struct graphics *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+int graphics_get_attr(struct graphics *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
{
return attr_generic_get_attr(this_->attrs, type, attr, iter);
}
-
-struct graphics *
-graphics_overlay_new(struct graphics *parent, struct point *p, int w, int h)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct graphics * graphics_overlay_new(struct graphics *parent, struct point *p, int w, int h)
{
struct graphics *this_;
this_=g_new0(struct graphics, 1);
return this_;
}
-
-void
-graphics_init(struct graphics *this_)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_init(struct graphics *this_)
{
this_->gc[0]=graphics_gc_new(this_);
graphics_gc_set_background(this_->gc[0], &(struct color) { 0xffff, 0xefef, 0xb7b7 });
this_->meth.background_gc(this_->priv, this_->gc[0]->priv);
}
-void *
-graphics_get_data(struct graphics *this_, char *type)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void * graphics_get_data(struct graphics *this_, char *type)
{
return (this_->meth.get_data(this_->priv, type));
}
-void
-graphics_register_resize_callback(struct graphics *this_, void (*callback)(void *data, int w, int h), void *data)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_register_resize_callback(struct graphics *this_, void (*callback)(void *data, int w, int h), void *data)
{
this_->meth.register_resize_callback(this_->priv, callback, data);
}
-void
-graphics_register_button_callback(struct graphics *this_, void (*callback)(void *data, int pressed, int button, struct point *p), void *data)
+//##############################################################################################################
+//# Description:
+//# Comment: Called in navit.c
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_register_button_callback(struct graphics *this_, void (*callback)(void *data, int pressed, int button, struct point *p), void *data)
{
this_->meth.register_button_callback(this_->priv, callback, data);
}
-void
-graphics_register_motion_callback(struct graphics *this_, void (*callback)(void *data, struct point *p), void *data)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_register_motion_callback(struct graphics *this_, void (*callback)(void *data, struct point *p), void *data)
{
this_->meth.register_motion_callback(this_->priv, callback, data);
}
-struct graphics_font *
-graphics_font_new(struct graphics *gra, int size, int flags)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct graphics_font * graphics_font_new(struct graphics *gra, int size, int flags)
{
struct graphics_font *this_;
return this_;
}
-struct graphics_gc *
-graphics_gc_new(struct graphics *gra)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct graphics_gc * graphics_gc_new(struct graphics *gra)
{
struct graphics_gc *this_;
return this_;
}
-void
-graphics_gc_destroy(struct graphics_gc *gc)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_gc_destroy(struct graphics_gc *gc)
{
gc->meth.gc_destroy(gc->priv);
g_free(gc);
}
-void
-graphics_gc_set_foreground(struct graphics_gc *gc, struct color *c)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_gc_set_foreground(struct graphics_gc *gc, struct color *c)
{
gc->meth.gc_set_foreground(gc->priv, c);
}
-void
-graphics_gc_set_background(struct graphics_gc *gc, struct color *c)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_gc_set_background(struct graphics_gc *gc, struct color *c)
{
gc->meth.gc_set_background(gc->priv, c);
}
-void
-graphics_gc_set_linewidth(struct graphics_gc *gc, int width)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_gc_set_linewidth(struct graphics_gc *gc, int width)
{
gc->meth.gc_set_linewidth(gc->priv, width);
}
-void
-graphics_gc_set_dashes(struct graphics_gc *gc, int width, int offset, unsigned char dash_list[], int n)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_gc_set_dashes(struct graphics_gc *gc, int width, int offset, unsigned char dash_list[], int n)
{
if (gc->meth.gc_set_dashes)
gc->meth.gc_set_dashes(gc->priv, width, offset, dash_list, n);
}
-struct graphics_image *
-graphics_image_new(struct graphics *gra, char *path)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct graphics_image * graphics_image_new(struct graphics *gra, char *path)
{
struct graphics_image *this_;
return this_;
}
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
void graphics_image_free(struct graphics *gra, struct graphics_image *img)
{
if (gra->meth.image_free)
g_free(img);
}
-void
-graphics_draw_restore(struct graphics *this_, struct point *p, int w, int h)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_restore(struct graphics *this_, struct point *p, int w, int h)
{
this_->meth.draw_restore(this_->priv, p, w, h);
}
-void
-graphics_draw_mode(struct graphics *this_, enum draw_mode_num mode)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_mode(struct graphics *this_, enum draw_mode_num mode)
{
this_->meth.draw_mode(this_->priv, mode);
}
-void
-graphics_draw_lines(struct graphics *this_, struct graphics_gc *gc, struct point *p, int count)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_lines(struct graphics *this_, struct graphics_gc *gc, struct point *p, int count)
{
this_->meth.draw_lines(this_->priv, gc->priv, p, count);
}
-void
-graphics_draw_circle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int r)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_circle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int r)
{
this_->meth.draw_circle(this_->priv, gc->priv, p, r);
}
-
-void
-graphics_draw_rectangle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int w, int h)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_rectangle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int w, int h)
{
this_->meth.draw_rectangle(this_->priv, gc->priv, p, w, h);
}
-void
-graphics_draw_text(struct graphics *this_, struct graphics_gc *gc1, struct graphics_gc *gc2, struct graphics_font *font, char *text, struct point *p, int dx, int dy)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_text(struct graphics *this_, struct graphics_gc *gc1, struct graphics_gc *gc2, struct graphics_font *font, char *text, struct point *p, int dx, int dy)
{
this_->meth.draw_text(this_->priv, gc1->priv, gc2 ? gc2->priv : NULL, font->priv, text, p, dx, dy);
}
-void
-graphics_draw_image(struct graphics *this_, struct graphics_gc *gc, struct point *p, struct graphics_image *img)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw_image(struct graphics *this_, struct graphics_gc *gc, struct point *p, struct graphics_image *img)
{
this_->meth.draw_image(this_->priv, gc->priv, p, img->priv);
}
#include "popup.h"
#include <stdio.h>
+
#if 0
-static void
-popup_view_html(struct popup_item *item, char *file)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void popup_view_html(struct popup_item *item, char *file)
{
char command[1024];
sprintf(command,"firefox %s", file);
system(command);
}
-static void
-graphics_popup(struct display_list *list, struct popup_item **popup)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void graphics_popup(struct display_list *list, struct popup_item **popup)
{
struct item *item;
struct attr attr;
}
#endif
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
struct displayitem {
struct item item;
char *label;
struct point pnt[0];
};
-static int
-xdisplay_free_list(gpointer key, gpointer value, gpointer user_data)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static int xdisplay_free_list(gpointer key, gpointer value, gpointer user_data)
{
GList *h, *l;
h=value;
return TRUE;
}
-static void
-xdisplay_free(GHashTable *display_list)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void xdisplay_free(GHashTable *display_list)
{
g_hash_table_foreach_remove(display_list, xdisplay_free_list, NULL);
}
-void
-display_add(struct displaylist *displaylist, struct item *item, int count, struct point *pnt, char *label)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void display_add(struct displaylist *displaylist, struct item *item, int count, struct point *pnt, char *label)
{
struct displayitem *di;
int len;
}
-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)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+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;
}
}
-
-static void
-xdisplay_draw_elements(struct graphics *gra, GHashTable *display_list, struct itemtype *itm)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void xdisplay_draw_elements(struct graphics *gra, GHashTable *display_list, struct itemtype *itm)
{
struct element *e;
GList *l,*ls,*es,*types;
graphics_gc_destroy(gc);
}
-static void
-xdisplay_draw_layer(GHashTable *display_list, struct graphics *gra, struct layer *lay, int order)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void xdisplay_draw_layer(GHashTable *display_list, struct graphics *gra, struct layer *lay, int order)
{
GList *itms;
struct itemtype *itm;
}
}
-static void
-xdisplay_draw(GHashTable *display_list, struct graphics *gra, struct layout *l, int order)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void xdisplay_draw(GHashTable *display_list, struct graphics *gra, struct layout *l, int order)
{
GList *lays;
struct layer *lay;
}
}
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
extern void *route_selection;
-static void
-do_draw_map(struct displaylist *displaylist, struct transformation *t, struct map *m, int order)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void do_draw_map(struct displaylist *displaylist, struct transformation *t, struct map *m, int order)
{
enum projection pro;
struct map_rect *mr;
map_selection_destroy(sel);
}
-static void
-do_draw(struct displaylist *displaylist, struct transformation *t, GList *mapsets, int order)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static void do_draw(struct displaylist *displaylist, struct transformation *t, GList *mapsets, int order)
{
struct mapset *ms;
struct map *m;
mapset_close(h);
}
-int
-graphics_ready(struct graphics *this_)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+int graphics_ready(struct graphics *this_)
{
return this_->ready;
}
-void
-graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l)
{
int order=transform_get_order(trans);
struct point p;
gra->meth.draw_mode(gra->priv, draw_mode_end);
}
-void
-graphics_displaylist_move(struct displaylist *displaylist, int dx, int dy)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_displaylist_move(struct displaylist *displaylist, int dx, int dy)
{
struct displaylist_handle *dlh;
struct displayitem *di;
graphics_displaylist_close(dlh);
}
-
-void
-graphics_draw(struct graphics *gra, struct displaylist *displaylist, GList *mapsets, struct transformation *trans, struct layout *l)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_draw(struct graphics *gra, struct displaylist *displaylist, GList *mapsets, struct transformation *trans, struct layout *l)
{
int order=transform_get_order(trans);
gra->ready=1;
}
-
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
struct displaylist_handle {
GList *hl_head,*hl,*l;
};
-
-struct displaylist_handle *
-graphics_displaylist_open(struct displaylist *displaylist)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct displaylist_handle * graphics_displaylist_open(struct displaylist *displaylist)
{
struct displaylist_handle *ret;
return ret;
}
-struct displayitem *
-graphics_displaylist_next(struct displaylist_handle *dlh)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct displayitem * graphics_displaylist_next(struct displaylist_handle *dlh)
{
struct displayitem *ret;
if (! dlh->l) {
return ret;
}
-void
-graphics_displaylist_close(struct displaylist_handle *dlh)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+void graphics_displaylist_close(struct displaylist_handle *dlh)
{
g_list_free(dlh->hl_head);
g_free(dlh);
}
-struct displaylist *
-graphics_displaylist_new(void)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct displaylist * graphics_displaylist_new(void)
{
struct displaylist *ret=g_new(struct displaylist, 1);
return ret;
}
-struct item *
-graphics_displayitem_get_item(struct displayitem *di)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+struct item * graphics_displayitem_get_item(struct displayitem *di)
{
return &di->item;
}
-char *
-graphics_displayitem_get_label(struct displayitem *di)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+char * graphics_displayitem_get_label(struct displayitem *di)
{
return di->label;
}
-static int
-within_dist_point(struct point *p0, struct point *p1, int dist)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static int within_dist_point(struct point *p0, struct point *p1, int dist)
{
if (p0->x == 32767 || p0->y == 32767 || p1->x == 32767 || p1->y == 32767)
return 0;
return 0;
}
-static int
-within_dist_line(struct point *p, struct point *line_p0, struct point *line_p1, int dist)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static int within_dist_line(struct point *p, struct point *line_p0, struct point *line_p1, int dist)
{
int vx,vy,wx,wy;
int c1,c2;
return within_dist_point(p, &line_p, dist);
}
-static int
-within_dist_polyline(struct point *p, struct point *line_pnt, int count, int dist, int close)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static int within_dist_polyline(struct point *p, struct point *line_pnt, int count, int dist, int close)
{
int i;
for (i = 0 ; i < count-1 ; i++) {
return 0;
}
-static int
-within_dist_polygon(struct point *p, struct point *poly_pnt, int count, int dist)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+static int within_dist_polygon(struct point *p, struct point *poly_pnt, int count, int dist)
{
int i, j, c = 0;
for (i = 0, j = count-1; i < count; j = i++) {
return c;
}
-int
-graphics_displayitem_within_dist(struct displayitem *di, struct point *p, int dist)
+//##############################################################################################################
+//# Description:
+//# Comment:
+//# Authors: Martin Schaller (04/2008)
+//##############################################################################################################
+int graphics_displayitem_within_dist(struct displayitem *di, struct point *p, int dist)
{
if (di->item.type < type_line) {
return within_dist_point(p, &di->pnt[0], dist);