示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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);
}
示例#5
0
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);
}
示例#6
0
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);
}