X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fplugin-radar.c;h=0990858d9087d499385dfc67cfb4ec63746d7ec4;hp=e021253f9db4409311f28c59a9aca0bd6137b69a;hb=93c853165104b5119e17be07e325f9097a5ebdb3;hpb=47c93b9c86bcb79df6f28a3c253be9b9644a1c34 diff --git a/src/plugin-radar.c b/src/plugin-radar.c index e021253..0990858 100644 --- a/src/plugin-radar.c +++ b/src/plugin-radar.c @@ -34,9 +34,9 @@ static Sweep *cur_sweep = NULL; // make this not global //static char red[256], green[256], blue[256]; static colormap_t *colormap; static guint sweep_tex = 0; +static Radar *radar = NULL; static AWeatherGui *gui = NULL; -static Radar *radar = NULL; /************************** * Data loading functions * @@ -59,12 +59,16 @@ static void bscan_sweep(Sweep *sweep, guint8 **data, int *width, int *height) for (bi = 0; bi < ray->h.nbins; bi++) { /* copy RGBA into buffer */ //guint val = dz_f(ray->range[bi]); - guint val = ray->h.f(ray->range[bi]); - guint buf_i = (ri*max_bins+bi)*4; + guint8 val = (guint8)ray->h.f(ray->range[bi]); + guint buf_i = (ri*max_bins+bi)*4; buf[buf_i+0] = colormap->data[val][0]; buf[buf_i+1] = colormap->data[val][1]; buf[buf_i+2] = colormap->data[val][2]; buf[buf_i+3] = colormap->data[val][3]; + if (val == BADVAL || val == RFVAL || val == APFLAG || + val == NOTFOUND_H || val == NOTFOUND_V || val == NOECHO) { + buf[buf_i+3] = 0x00; // transparent + } } } @@ -97,8 +101,7 @@ static void load_sweep(Sweep *sweep) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); g_free(data); - gdk_window_invalidate_rect(drawing->window, &drawing->allocation, FALSE); - gdk_window_process_updates(drawing->window, FALSE); + gtk_widget_queue_draw(aweather_gui_get_widget(gui, "drawing")); aweather_gui_gl_end(gui); } @@ -116,7 +119,7 @@ static void load_radar_gui(Radar *radar) for (vi = 0; vi < radar->h.nvolumes; vi++) { Volume *vol = radar->v[vi]; if (vol == NULL) continue; - GtkWidget *vbox = gtk_vbox_new(TRUE, 0); + GtkWidget *vbox = gtk_vbox_new(FALSE, 0); for (si = vol->h.nsweeps-1; si >= 0; si--) { Sweep *sweep = vol->sweep[si]; if (sweep == NULL) continue; @@ -128,7 +131,6 @@ static void load_radar_gui(Radar *radar) gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, TRUE, 0); g_free(label); } - gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); } gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(config_body), hbox); @@ -144,8 +146,12 @@ static void load_radar_rsl(GPid pid, gint status, gpointer _path) return; } char *site = g_path_get_basename(g_path_get_dirname(path)); - if (radar) RSL_free_radar(radar); RSL_read_these_sweeps("all", NULL); + if (radar) { + g_message("Freeing radar"); + RSL_free_radar(radar); + } + g_message("Allocating radar"); radar = RSL_wsr88d_to_radar(path, site); if (radar == NULL) { g_warning("fail to load radar: path=%s, site=%s", path, site); @@ -286,7 +292,10 @@ static void set_time(AWeatherView *view, char *time, gpointer user_data) char *base = "http://mesonet.agron.iastate.edu/data/"; char *path = g_strdup_printf("nexrd2/raw/K%s/K%s_%s", site, site, time); //g_message("caching %s/%s", base, path); + cur_sweep = NULL; // Clear radar + gtk_widget_queue_draw(aweather_gui_get_widget(gui, "drawing")); cache_file(base, path, load_radar, NULL); + g_free(path); } static void set_site(AWeatherView *view, char *site, gpointer user_data) @@ -297,6 +306,9 @@ static void set_site(AWeatherView *view, char *site, gpointer user_data) GError *error = NULL; char *list_uri = g_strdup_printf("http://mesonet.agron.iastate.edu/data/nexrd2/raw/K%s/dir.list", site); GFile *list = g_file_new_for_uri(list_uri); + g_free(list_uri); + cur_sweep = NULL; // Clear radar + gtk_widget_queue_draw(aweather_gui_get_widget(gui, "drawing")); g_file_load_contents(list, NULL, &data, &length, NULL, &error); if (error) { g_warning("Error loading list for %s: %s", site, error->message); @@ -319,6 +331,8 @@ static void set_site(AWeatherView *view, char *site, gpointer user_data) } if (time != NULL) aweather_view_set_time(view, time); + g_free(data); + g_strfreev(lines); } /* Init */ @@ -333,7 +347,7 @@ gboolean radar_init(AWeatherGui *_gui) config_body = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(config_body), gtk_label_new("No radar loaded")); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(config_body), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_notebook_append_page(GTK_NOTEBOOK(config), config_body, gtk_label_new("Radar")); + gtk_notebook_prepend_page(GTK_NOTEBOOK(config), config_body, gtk_label_new("Radar")); /* Set up OpenGL Stuff */ g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL);