void do_settings_dialog(void) { static SettingsDialog_t *dialog; const char *filename = get_filename(); MapInfo_t *info = get_map_info(); if (!dialog) dialog = create_settings_dialog(); if (!filename) filename = _("<Untitled>"); gtk_label_set_text(GTK_LABEL(dialog->filename), filename); browse_widget_set_filename(dialog->imagename, info->image_name); gtk_entry_set_text(GTK_ENTRY(dialog->title), info->title); gtk_entry_set_text(GTK_ENTRY(dialog->author), info->author); gtk_entry_set_text(GTK_ENTRY(dialog->default_url), info->default_url); if (info->map_format == NCSA) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->ncsa), TRUE); else if (info->map_format == CERN) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->cern), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->csim), TRUE); gtk_widget_grab_focus(dialog->imagename->file); default_dialog_show(dialog->dialog); gtk_text_buffer_set_text (dialog->description, info->description, -1); }
static void settings_ok_cb(gpointer data) { SettingsDialog_t *param = (SettingsDialog_t*) data; MapInfo_t *info = get_map_info(); gchar *description; GtkTextIter start, end; g_strreplace(&info->image_name, gtk_entry_get_text( GTK_ENTRY(param->imagename->file))); g_strreplace(&info->title, gtk_entry_get_text(GTK_ENTRY(param->title))); g_strreplace(&info->author, gtk_entry_get_text(GTK_ENTRY(param->author))); g_strreplace(&info->default_url, gtk_entry_get_text(GTK_ENTRY(param->default_url))); gtk_text_buffer_get_bounds(param->description, &start, &end); description = gtk_text_buffer_get_text(param->description, &start, &end, FALSE); g_strreplace(&info->description, description); g_free(description); info->map_format = _map_format; }
struct bogoman_map *bogoman_load(const char *path) { FILE *f = fopen(path, "r"); if (f == NULL) return NULL; unsigned int w, h; get_map_info(f, &w, &h); DEBUG(1, "Have map %ux%u\n", w, h); struct bogoman_map *map; size_t map_size; map_size = sizeof(struct bogoman_map) + w * h * sizeof(struct bogoman_map_elem); map = malloc(map_size); if (map == NULL) goto err0; memset(map, 0, map_size); map->w = w; map->h = h; load_map(f, map); return map; err0: fclose(f); return NULL; }
static void render_rgb_image(Preview_t *preview_base, GimpPixelRgn *srcrgn) { guchar *src_row, *dest_buffer, *src, *dest; gint row, col; gint dwidth, dheight, pwidth, pheight; gint *src_col; gint bpp, alpha, has_alpha, b; guchar check; gboolean gray = get_map_info()->show_gray; GtkWidget *preview = preview_base->preview; dwidth = srcrgn->w; dheight = srcrgn->h; pwidth = preview_base->widget_width; pheight = preview_base->widget_height; bpp = srcrgn->bpp; alpha = bpp; has_alpha = gimp_drawable_has_alpha(srcrgn->drawable->drawable_id); if (has_alpha) alpha--; src_row = g_new(guchar, dwidth * bpp); dest_buffer = g_new(guchar, pwidth * pheight * bpp); src_col = g_new(gint, pwidth); for (col = 0; col < pwidth; col++) src_col[col] = (col * dwidth / pwidth) * bpp; dest = dest_buffer; for (row = 0; row < pheight; row++) { gimp_pixel_rgn_get_row(srcrgn, src_row, 0, row * dheight / pheight, dwidth); for (col = 0; col < pwidth; col++) { src = &src_row[src_col[col]]; if(!has_alpha || src[alpha] == OPAQUE) { /* no alpha channel or opaque -- simple way */ for (b = 0; b < alpha; b++) dest[b] = src[b]; } else { /* more or less transparent */ if( ( col % (CHECKWIDTH*2) < CHECKWIDTH ) ^ ( row % (CHECKWIDTH*2) < CHECKWIDTH ) ) check = LIGHTCHECK; else check = DARKCHECK; if (src[alpha] == 0) { /* full transparent -- check */ for (b = 0; b < alpha; b++) dest[b] = check; } else { /* middlemost transparent -- mix check and src */ for (b = 0; b < alpha; b++) dest[b] = (src[b] * src[alpha] + check * (OPAQUE - src[alpha])) / OPAQUE; } } if (gray) { guchar avg; avg = (299 * dest[0] + 587 * dest[1] + 114 * dest[2]) / 1000; for (b = 0; b < alpha; b++) dest[b] = avg; } dest += alpha; } } gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview), 0, 0, pwidth, pheight, GIMP_RGB_IMAGE, dest_buffer, pwidth * 3); g_free(src_col); g_free(src_row); g_free(dest_buffer); }
static void render_indexed_image(Preview_t *preview_base, GimpPixelRgn *srcrgn) { guchar *src_row, *dest_buffer, *src, *dest; gint row, col; gint dwidth, dheight, pwidth, pheight; gint *src_col; gint bpp, alpha, has_alpha; guchar *cmap, *colour; gint ncols; gboolean gray = get_map_info()->show_gray; GtkWidget *preview = preview_base->preview; dwidth = srcrgn->w; dheight = srcrgn->h; pwidth = preview_base->widget_width; pheight = preview_base->widget_height; bpp = srcrgn->bpp; alpha = bpp; has_alpha = gimp_drawable_has_alpha(srcrgn->drawable->drawable_id); if (has_alpha) alpha--; cmap = gimp_image_get_colormap (gimp_item_get_image (srcrgn->drawable->drawable_id), &ncols); src_row = g_new(guchar, dwidth * bpp); dest_buffer = g_new(guchar, pwidth * pheight * 3); src_col = g_new(gint, pwidth); for (col = 0; col < pwidth; col++) src_col[col] = (col * dwidth / pwidth) * bpp; dest = dest_buffer; for (row = 0; row < pheight; row++) { gimp_pixel_rgn_get_row(srcrgn, src_row, 0, row * dheight / pheight, dwidth); for (col = 0; col < pwidth; col++) { src = &src_row[src_col[col]]; colour = cmap + 3 * (int)(*src); if (gray) { guchar avg = (299 * colour[0] + 587 * colour[1] + 114 * colour[2]) / 1000; *dest++ = avg; *dest++ = avg; *dest++ = avg; } else { *dest++ = colour[0]; *dest++ = colour[1]; *dest++ = colour[2]; } } } gimp_preview_area_draw(GIMP_PREVIEW_AREA(preview), 0, 0, pwidth, pheight, GIMP_RGB_IMAGE, dest_buffer, pwidth * 3); g_free(src_col); g_free(src_row); g_free(dest_buffer); }
int main(int argc, char **argv) { char name[128] = ""; struct Option *map; struct GModule *module; char *mapset; char buff[500]; /* must run in a term window */ G_putenv("GRASS_UI_TERM", "1"); /* Initialize the GIS calls */ G_gisinit(argv[0]); module = G_define_module(); G_add_keyword(_("display")); G_add_keyword(_("raster")); module->description = "Allows the user to interactively change the color table " "of a raster map layer displayed on the graphics monitor."; map = G_define_option(); map->key = "map"; map->type = TYPE_STRING; if (*name) map->answer = name; if (*name) map->required = NO; else map->required = YES; map->gisprompt = "old,cell,raster"; map->description = "Name of raster map"; if (G_parser(argc, argv)) exit(1); /* Make sure map is available */ if (map->answer == NULL) exit(0); mapset = G_find_raster2(map->answer, ""); if (mapset == NULL) { char msg[256]; sprintf(msg, "Raster file [%s] not available", map->answer); G_fatal_error(msg); } if (Rast_map_is_fp(map->answer, mapset)) { sprintf(buff, "Raster file [%s] is floating point! \nd.colors only works with integer maps", map->answer); G_fatal_error(buff); } /* connect to the driver */ if (R_open_driver() != 0) G_fatal_error("No graphics device selected"); /* Read in the map region associated with graphics window */ D_setup(0); get_map_info(map->answer, mapset); R_close_driver(); exit(0); }