static GtkWidget * convert_dialog_palette_box (IndexedDialog *dialog) { Gimp *gimp = dialog->image->gimp; GList *list; GimpPalette *palette; GimpPalette *web_palette = NULL; gboolean default_found = FALSE; /* We can't dither to > 256 colors */ dialog->container = gimp_container_filter (gimp->palette_factory->container, convert_dialog_palette_filter, NULL); if (gimp_container_is_empty (dialog->container)) { g_object_unref (dialog->container); dialog->container = NULL; return NULL; } dialog->context = gimp_context_new (gimp, "convert-dialog", NULL); g_object_weak_ref (G_OBJECT (dialog->dialog), (GWeakNotify) g_object_unref, dialog->context); g_object_weak_ref (G_OBJECT (dialog->dialog), (GWeakNotify) g_object_unref, dialog->container); for (list = GIMP_LIST (dialog->container)->list; list; list = g_list_next (list)) { palette = list->data; /* Preferentially, the initial default is 'Web' if available */ if (web_palette == NULL && g_ascii_strcasecmp (GIMP_OBJECT (palette)->name, "Web") == 0) { web_palette = palette; } if (saved_palette == palette) { dialog->custom_palette = saved_palette; default_found = TRUE; } } if (! default_found) { if (web_palette) dialog->custom_palette = web_palette; else dialog->custom_palette = GIMP_LIST (dialog->container)->list->data; } gimp_context_set_palette (dialog->context, dialog->custom_palette); g_signal_connect (dialog->context, "palette-changed", G_CALLBACK (convert_dialog_palette_changed), dialog); return gimp_palette_box_new (dialog->container, dialog->context, 4); }
bool loadPalette(Pentagram::Palette * pal, const ConvertShapeFormat * format) { GimpRGB color; guchar palHack[2]; palHack[1] = 255; bool newPal; const gchar * palName; for (int i = 0; i < 256; ++i) { palHack[0] = i; pal->native[i] = *((uint16 * ) palHack); } if (format == &PentagramShapeFormat) { palName = "Pentagram"; } else if (format == &U8SKFShapeFormat) { palName = "U8SKF"; } else if (format == &U8ShapeFormat) { palName = "Ultima8"; } else if (format == &U82DShapeFormat) { palName = "Ultima8"; } else if (format == &CrusaderShapeFormat) { palName = "Crusader"; } else if (format == &Crusader2DShapeFormat) { palName = "Crusader"; } else { return false; } newPal = ! gimp_context_set_palette(palName); if (newPal) { gint colors = 0; if (gimp_palette_get_info(palName, &colors)) { newPal = false; if (colors != 256) { newPal = true; if (!gimp_palette_delete(palName)) return false; } } } if (newPal) { if (g_ascii_strcasecmp(palName, gimp_palette_new(palName))) return false; if (!gimp_context_set_palette(palName)) return false; IDataSource * ds = choosePalette(); if (ds) { gint j = 0; ds->seek(4); pal->load(*ds); delete ds; for (gint i = 0; i < 256; ++i) { gimp_rgb_set_uchar(&color, pal->palette[i * 3], pal->palette[i * 3 + 1], pal->palette[i * 3 + 2]); gimp_palette_add_entry(palName, "Untitled", &color, &j); assert (j == i); } } else { return false; } } else { for (gint i = 0; i < 256; ++i) { gimp_palette_entry_get_color(palName, i, &color); gimp_rgb_get_uchar(&color, &(pal->palette[i * 3]), &(pal->palette[i * 3 + 1]), &(pal->palette[i * 3 + 2])); } } return true; }