+}
+
+/* Split the pixbuf into east and west halves (with 2K sides)
+ * Also map the pixbuf's alpha values */
+static void _conus_update_end_split(guchar *pixels, guchar *west, guchar *east,
+ gint width, gint height, gint pxsize)
+{
+ g_debug("Conus: update_end_split");
+ guchar *out[] = {west,east};
+ const guchar alphamap[][4] = {
+ {0x04, 0xe9, 0xe7, 0x30},
+ {0x01, 0x9f, 0xf4, 0x60},
+ {0x03, 0x00, 0xf4, 0x90},
+ };
+ for (int y = 0; y < height; y++)
+ for (int x = 0; x < width; x++) {
+ gint subx = x % (width/2);
+ gint idx = x / (width/2);
+ guchar *src = &pixels[(y*width+x)*pxsize];
+ guchar *dst = &out[idx][(y*(width/2)+subx)*4];
+ if (src[0] > 0xe0 &&
+ src[1] > 0xe0 &&
+ src[2] > 0xe0) {
+ dst[3] = 0x00;
+ } else {
+ dst[0] = src[0];
+ dst[1] = src[1];
+ dst[2] = src[2];
+ dst[3] = 0xff;
+ for (int j = 0; j < G_N_ELEMENTS(alphamap); j++)
+ if (src[0] == alphamap[j][0] &&
+ src[1] == alphamap[j][1] &&
+ src[2] == alphamap[j][2])
+ dst[3] = alphamap[j][3];
+ }
+ }
+}
+
+gboolean _conus_update_end(gpointer _conus)
+{
+ RadarConus *conus = _conus;
+ g_debug("Conus: update_end");
+
+ /* Check error status */
+ if (conus->message) {
+ g_warning("Conus: update_end - %s", conus->message);
+ _gtk_bin_set_child(GTK_BIN(conus->config), gtk_label_new(conus->message));
+ goto out;
+ }
+
+ /* Load and pixbuf */
+ GError *error = NULL;
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(conus->path, &error);
+ if (!pixbuf || error) {
+ g_warning("Conus: update_end - error loading pixbuf: %s", conus->path);
+ _gtk_bin_set_child(GTK_BIN(conus->config), gtk_label_new("Error loading pixbuf"));
+ g_remove(conus->path);
+ goto out;
+ }