static VikAggregateLayer *aggregate_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { #define alm_size (*(gint *)data) #define alm_next \ len -= sizeof(gint) + alm_size; \ data += sizeof(gint) + alm_size; VikAggregateLayer *rv = vik_aggregate_layer_new(); VikLayer *child_layer; vik_layer_unmarshall_params ( VIK_LAYER(rv), data+sizeof(gint), alm_size, vvp ); alm_next; while (len>0) { child_layer = vik_layer_unmarshall ( data + sizeof(gint), alm_size, vvp ); if (child_layer) { rv->children = g_list_append ( rv->children, child_layer ); g_signal_connect_swapped ( G_OBJECT(child_layer), "update", G_CALLBACK(vik_layer_emit_update_secondary), rv ); } alm_next; } // g_print("aggregate_layer_unmarshall ended with len=%d\n", len); return rv; #undef alm_size #undef alm_next }
static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikCoordLayer *rv = coord_layer_new ( vvp ); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); coord_layer_update_gc ( rv, vvp ); return rv; }
static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikGeorefLayer *rv = georef_layer_new ( vvp ); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); if (rv->image) { georef_layer_load_image ( rv, vvp, TRUE ); } return rv; }
static VikDEMLayer *dem_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikDEMLayer *rv = dem_layer_new ( vvp ); gint i; /* TODO: share GCS between layers */ for ( i = 0; i < DEM_N_HEIGHT_COLORS; i++ ) { if ( i == 0 ) rv->gcs[i] = vik_viewport_new_gc_from_color ( vvp, &(rv->color), UNUSED_LINE_THICKNESS ); else rv->gcs[i] = vik_viewport_new_gc ( vvp, dem_height_colors[i], UNUSED_LINE_THICKNESS ); } for ( i = 0; i < DEM_N_GRADIENT_COLORS; i++ ) rv->gcsgradient[i] = vik_viewport_new_gc ( vvp, dem_gradient_colors[i], UNUSED_LINE_THICKNESS ); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); return rv; }