]> git.street.me.uk Git - andy/viking.git/commitdiff
Replace VikMapsLayer_MapType by VikMapType
author(null) <(null)>
Tue, 9 Sep 2008 11:57:47 +0000 (13:57 +0200)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Fri, 27 Mar 2009 11:14:39 +0000 (12:14 +0100)
src/vikmapslayer.c
src/vikmapslayer.h

index 901b7f6658be28d9d065ce6db20bced7ef81c0ac..06474a877ea4e057ae3e935e798ecdc41c3c486e 100644 (file)
@@ -201,7 +201,7 @@ enum { REDOWNLOAD_NONE = 0, REDOWNLOAD_BAD, REDOWNLOAD_ALL, DOWNLOAD_OR_REFRESH
 /******** MAPS LAYER TYPES **************/
 /****************************************/
 
-void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapType *map_type )
+void maps_layer_register_type ( const char *label, guint id, VikMapType *map_type )
 {
   g_assert(label != NULL);
   g_assert(map_type != NULL);
@@ -214,7 +214,7 @@ void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapTyp
   params_maptypes_ids = g_list_append(params_maptypes_ids, GUINT_TO_POINTER (id));
 
   /* We have to clone */
-  VikMapsLayer_MapType *clone = g_memdup(map_type, sizeof(VikMapsLayer_MapType));
+  VikMapType *clone = VIK_MAP_TYPE(g_object_ref(map_type));
   /* Register the clone in the list */
   __map_types = g_list_append(__map_types, clone);
 
@@ -232,7 +232,7 @@ void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapTyp
 
 #define MAPS_LAYER_NTH_LABEL(n) ((gchar*)g_list_nth_data(params_maptypes, (n)))
 #define MAPS_LAYER_NTH_ID(n) ((guint)g_list_nth_data(params_maptypes_ids, (n)))
-#define MAPS_LAYER_NTH_TYPE(n) ((VikMapsLayer_MapType*)g_list_nth_data(__map_types, (n)))
+#define MAPS_LAYER_NTH_TYPE(n) (VIK_MAP_TYPE(g_list_nth_data(__map_types, (n))))
 
 gint vik_maps_layer_get_map_type(VikMapsLayer *vml)
 {
@@ -453,7 +453,7 @@ static void maps_layer_post_read (VikLayer *vl, VikViewport *vp, gboolean from_f
      * So, we can check if we have to inform the user about inconsistency */
     VikViewportDrawMode vp_drawmode;
     VikMapsLayer *vml = VIK_MAPS_LAYER(vl);
-    VikMapsLayer_MapType *map_type = NULL;
+    VikMapType *map_type = NULL;
  
     vp_drawmode = vik_viewport_get_drawmode ( VIK_VIEWPORT(vp) );
     map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
@@ -608,9 +608,9 @@ static void maps_layer_draw_section ( VikMapsLayer *vml, VikViewport *vvp, VikCo
   }
 
   /* coord -> ID */
-  VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
-  if ( map_type->coord_to_mapcoord ( ul, xzoom, yzoom, &ulm ) &&
-       map_type->coord_to_mapcoord ( br, xzoom, yzoom, &brm ) ) {
+  VikMapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+  if ( vik_map_type_coord_to_mapcoord ( map_type, ul, xzoom, yzoom, &ulm ) &&
+       vik_map_type_coord_to_mapcoord ( map_type, br, xzoom, yzoom, &brm ) ) {
 
     /* loop & draw */
     gint x, y;
@@ -642,7 +642,7 @@ static void maps_layer_draw_section ( VikMapsLayer *vml, VikViewport *vvp, VikCo
             width = gdk_pixbuf_get_width ( pixbuf );
             height = gdk_pixbuf_get_height ( pixbuf );
 
-            map_type->mapcoord_to_center_coord ( &ulm, &coord );
+            vik_map_type_mapcoord_to_center_coord ( map_type, &ulm, &coord );
             vik_viewport_coord_to_screen ( vvp, &coord, &xx, &yy );
             xx -= (width/2);
             yy -= (height/2);
@@ -667,7 +667,7 @@ static void maps_layer_draw_section ( VikMapsLayer *vml, VikViewport *vvp, VikCo
       xend = (xinc == 1) ? (xmax+1) : (xmin-1);
       yend = (yinc == 1) ? (ymax+1) : (ymin-1);
 
-      map_type->mapcoord_to_center_coord ( &ulm, &coord );
+      vik_map_type_mapcoord_to_center_coord ( map_type, &ulm, &coord );
       vik_viewport_coord_to_screen ( vvp, &coord, &xx_tmp, &yy_tmp );
       xx = xx_tmp; yy = yy_tmp;
       /* above trick so xx,yy doubles. this is so shrinkfactors aren't rounded off
@@ -816,7 +816,7 @@ static void map_download_thread ( MapDownloadInfo *mdi, gpointer threaddata )
       mdi->mapcoord.x = x; mdi->mapcoord.y = y;
 
       if (need_download) {
-        if ( MAPS_LAYER_NTH_TYPE(mdi->maptype)->download ( &(mdi->mapcoord), mdi->filename_buf ))
+        if ( vik_map_type_download( MAPS_LAYER_NTH_TYPE(mdi->maptype), &(mdi->mapcoord), mdi->filename_buf ))
           continue;
       }
 
@@ -859,9 +859,9 @@ static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const V
   gdouble xzoom = vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp );
   gdouble yzoom = vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp );
   MapCoord ulm, brm;
-  VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
-  if ( map_type->coord_to_mapcoord ( ul, xzoom, yzoom, &ulm ) 
-    && map_type->coord_to_mapcoord ( br, xzoom, yzoom, &brm ) )
+  VikMapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+  if ( vik_map_type_coord_to_mapcoord ( map_type, ul, xzoom, yzoom, &ulm ) 
+    && vik_map_type_coord_to_mapcoord ( map_type, br, xzoom, yzoom, &brm ) )
   {
     MapDownloadInfo *mdi = g_malloc ( sizeof(MapDownloadInfo) );
     gint a, b;
@@ -945,10 +945,10 @@ static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const V
 void maps_layer_download_section_without_redraw( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom)
 {
   MapCoord ulm, brm;
-  VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+  VikMapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
 
-  if (!map_type->coord_to_mapcoord(ul, zoom, zoom, &ulm) 
-    || !map_type->coord_to_mapcoord(br, zoom, zoom, &brm)) {
+  if (!vik_map_type_coord_to_mapcoord(map_type, ul, zoom, zoom, &ulm) 
+    || !vik_map_type_coord_to_mapcoord(map_type, br, zoom, zoom, &brm)) {
     g_warning("%s() coord_to_mapcoord() failed", __PRETTY_FUNCTION__);
     return;
   }
@@ -1076,9 +1076,9 @@ static gboolean maps_layer_download_click ( VikMapsLayer *vml, GdkEventButton *e
   MapCoord tmp;
   if (!vml || vml->vl.type != VIK_LAYER_MAPS)
     return FALSE;
-  VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+  VikMapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
   if ( map_type->drawmode == vik_viewport_get_drawmode ( vvp ) &&
-       map_type->coord_to_mapcoord ( vik_viewport_get_center ( vvp ),
+       vik_map_type_coord_to_mapcoord ( map_type, vik_viewport_get_center ( vvp ),
            vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp ),
            vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp ),
            &tmp ) ) {
@@ -1127,10 +1127,10 @@ static void download_onscreen_maps ( gpointer vml_vvp[2], gint redownload )
   vik_viewport_screen_to_coord ( vvp, 0, 0, &ul );
   vik_viewport_screen_to_coord ( vvp, vik_viewport_get_width(vvp), vik_viewport_get_height(vvp), &br );
 
-  VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+  VikMapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
   if ( map_type->drawmode == vp_drawmode &&
-       map_type->coord_to_mapcoord ( &ul, xzoom, yzoom, &ulm ) &&
-       map_type->coord_to_mapcoord ( &br, xzoom, yzoom, &brm ) )
+       vik_map_type_coord_to_mapcoord ( map_type, &ul, xzoom, yzoom, &ulm ) &&
+       vik_map_type_coord_to_mapcoord ( map_type, &br, xzoom, yzoom, &brm ) )
     start_download_thread ( vml, vvp, &ul, &br, redownload );
   else if (map_type->drawmode != vp_drawmode) {
     const gchar *drawmode_name = vik_viewport_get_drawmode_name (vvp, map_type->drawmode);
index d32ca8eb35474f1225a9e0e8e1001d42125440fa..7686d3f2ad827a3842905266f818f2b26ca7fcee 100644 (file)
@@ -25,6 +25,7 @@
 #include "vikcoord.h"
 #include "viklayer.h"
 #include "vikviewport.h"
+#include "vik-map-type.h"
 #include "mapcoord.h"
 
 #define VIK_MAPS_LAYER_TYPE            (vik_maps_layer_get_type ())
@@ -43,18 +44,7 @@ GType vik_maps_layer_get_type ();
 
 typedef struct _VikMapsLayer VikMapsLayer;
 
-typedef struct {
-  guint8 uniq_id;
-  guint16 tilesize_x;
-  guint16 tilesize_y;
-  guint drawmode;
-  gboolean (*coord_to_mapcoord) ( const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest );
-  void (*mapcoord_to_center_coord) ( MapCoord *src, VikCoord *dest );
-  int (*download) ( MapCoord *src, const gchar *dest_fn );
-  /* TODO: constant size (yay!) */
-} VikMapsLayer_MapType;
-
-void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapType *map_type );
+void maps_layer_register_type ( const char *label, guint id, VikMapType *map_type );
 void maps_layer_download_section_without_redraw ( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom);
 gint vik_maps_layer_get_map_type(VikMapsLayer *vml);
 gchar *vik_maps_layer_get_map_label(VikMapsLayer *vml);