Commit f46122b8 authored by Michael Natterer's avatar Michael Natterer 😴

app: add lots of accessors to GimpPalette

and use them all over the place instead of directly accessing the struct.
parent 5931fe53
......@@ -94,7 +94,6 @@ palettes_merge_callback (GtkWidget *widget,
GimpContainerEditor *editor;
GimpPalette *palette;
GimpPalette *new_palette;
GimpPaletteEntry *entry;
GList *sel_list;
editor = (GimpContainerEditor *) data;
......@@ -115,7 +114,6 @@ palettes_merge_callback (GtkWidget *widget,
while (sel_list)
{
GimpListItem *list_item;
GList *cols;
list_item = GIMP_LIST_ITEM (sel_list->data);
......@@ -123,9 +121,13 @@ palettes_merge_callback (GtkWidget *widget,
if (palette)
{
for (cols = palette->colors; cols; cols = g_list_next (cols))
GList *cols;
for (cols = gimp_palette_get_colors (palette);
cols;
cols = g_list_next (cols))
{
entry = (GimpPaletteEntry *) cols->data;
GimpPaletteEntry *entry = cols->data;
gimp_palette_add_entry (new_palette,
entry->name,
......
......@@ -780,12 +780,13 @@ gimp_image_convert (GimpImage *image,
g_return_val_if_fail (custom_palette == NULL ||
GIMP_IS_PALETTE (custom_palette), FALSE);
g_return_val_if_fail (custom_palette == NULL ||
custom_palette->n_colors <= 256, FALSE);
gimp_palette_get_n_colors (custom_palette) <= 256,
FALSE);
if (! custom_palette)
palette_type = GIMP_MONO_PALETTE;
if (custom_palette->n_colors < 1)
if (gimp_palette_get_n_colors (custom_palette) == 0)
{
g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
_("Cannot convert image: palette is empty."));
......@@ -2733,20 +2734,19 @@ webpal_pass1 (QuantizeObj *quantobj)
static void
custompal_pass1 (QuantizeObj *quantobj)
{
gint i;
GList *list;
GimpPaletteEntry *entry;
guchar r, g, b;
gint i;
GList *list;
/* fprintf(stderr,
"custompal_pass1: using (theCustomPalette %s) from (file %s)\n",
theCustomPalette->name, theCustomPalette->filename); */
for (i = 0, list = theCustomPalette->colors;
for (i = 0, list = gimp_palette_get_colors (theCustomPalette);
list;
i++, list = g_list_next (list))
{
entry = list->data;
GimpPaletteEntry *entry = list->data;
guchar r, g, b;
gimp_rgb_get_uchar (&entry->color, &r, &g, &b);
......
......@@ -204,7 +204,7 @@ gimp_palette_import_create_image_palette (gpointer data,
n_colors = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (palette),
"import-n-colors"));
if (palette->n_colors >= n_colors)
if (gimp_palette_get_n_colors (palette) >= n_colors)
return;
lab = g_strdup_printf ("%s (occurs %u)", _("Untitled"), color_tab->count);
......
......@@ -152,7 +152,7 @@ gimp_palette_load (GimpContext *context,
columns = 0;
}
palette->n_columns = columns;
gimp_palette_set_columns (palette, columns);
linenum++;
if (! fgets (str, sizeof (str), file))
......@@ -221,7 +221,7 @@ gimp_palette_load (GimpContext *context,
255);
entry->name = g_strdup (tok ? tok : _("Untitled"));
entry->position = palette->n_colors;
entry->position = gimp_palette_get_n_colors (palette);
palette->colors = g_list_prepend (palette->colors, entry);
palette->n_colors++;
......
......@@ -60,9 +60,12 @@ gimp_palette_save (GimpData *data,
fprintf (file, "GIMP Palette\n");
fprintf (file, "Name: %s\n", gimp_object_get_name (palette));
fprintf (file, "Columns: %d\n#\n", CLAMP (palette->n_columns, 0, 256));
fprintf (file, "Columns: %d\n#\n", CLAMP (gimp_palette_get_columns (palette),
0, 256));
for (list = palette->colors; list; list = g_list_next (list))
for (list = gimp_palette_get_colors (palette);
list;
list = g_list_next (list))
{
GimpPaletteEntry *entry = list->data;
guchar r, g, b;
......
......@@ -362,6 +362,25 @@ gimp_palette_get_checksum (GimpTagged *tagged)
return checksum_string;
}
/* public functions */
GList *
gimp_palette_get_colors (GimpPalette *palette)
{
g_return_val_if_fail (GIMP_IS_PALETTE (palette), NULL);
return palette->colors;
}
gint
gimp_palette_get_n_colors (GimpPalette *palette)
{
g_return_val_if_fail (GIMP_IS_PALETTE (palette), 0);
return palette->n_colors;
}
GimpPaletteEntry *
gimp_palette_add_entry (GimpPalette *palette,
gint position,
......@@ -440,6 +459,89 @@ gimp_palette_delete_entry (GimpPalette *palette,
}
}
gboolean
gimp_palette_set_entry (GimpPalette *palette,
gint position,
const gchar *name,
const GimpRGB *color)
{
GimpPaletteEntry *entry;
g_return_val_if_fail (GIMP_IS_PALETTE (palette), FALSE);
g_return_val_if_fail (color != NULL, FALSE);
entry = gimp_palette_get_entry (palette, position);
if (! entry)
return FALSE;
entry->color = *color;
if (entry->name)
g_free (entry->name);
entry->name = g_strdup (name);
gimp_data_dirty (GIMP_DATA (palette));
return TRUE;
}
gboolean
gimp_palette_set_entry_color (GimpPalette *palette,
gint position,
const GimpRGB *color)
{
GimpPaletteEntry *entry;
g_return_val_if_fail (GIMP_IS_PALETTE (palette), FALSE);
g_return_val_if_fail (color != NULL, FALSE);
entry = gimp_palette_get_entry (palette, position);
if (! entry)
return FALSE;
entry->color = *color;
gimp_data_dirty (GIMP_DATA (palette));
return TRUE;
}
gboolean
gimp_palette_set_entry_name (GimpPalette *palette,
gint position,
const gchar *name)
{
GimpPaletteEntry *entry;
g_return_val_if_fail (GIMP_IS_PALETTE (palette), FALSE);
entry = gimp_palette_get_entry (palette, position);
if (! entry)
return FALSE;
if (entry->name)
g_free (entry->name);
entry->name = g_strdup (name);
gimp_data_dirty (GIMP_DATA (palette));
return TRUE;
}
GimpPaletteEntry *
gimp_palette_get_entry (GimpPalette *palette,
gint position)
{
g_return_val_if_fail (GIMP_IS_PALETTE (palette), NULL);
return g_list_nth_data (palette->colors, position);
}
void
gimp_palette_set_columns (GimpPalette *palette,
gint columns)
......@@ -457,7 +559,7 @@ gimp_palette_set_columns (GimpPalette *palette,
}
gint
gimp_palette_get_columns (GimpPalette *palette)
gimp_palette_get_columns (GimpPalette *palette)
{
g_return_val_if_fail (GIMP_IS_PALETTE (palette), 0);
......
......@@ -58,26 +58,42 @@ struct _GimpPaletteClass
};
GType gimp_palette_get_type (void) G_GNUC_CONST;
GimpData * gimp_palette_new (GimpContext *context,
const gchar *name);
GimpData * gimp_palette_get_standard (GimpContext *context);
GimpPaletteEntry * gimp_palette_add_entry (GimpPalette *palette,
gint position,
const gchar *name,
const GimpRGB *color);
void gimp_palette_delete_entry (GimpPalette *palette,
GimpPaletteEntry *entry);
void gimp_palette_set_columns (GimpPalette *palette,
gint columns);
gint gimp_palette_get_columns (GimpPalette *palette);
GimpPaletteEntry * gimp_palette_find_entry (GimpPalette *palette,
const GimpRGB *color,
GimpPaletteEntry *start_from);
GType gimp_palette_get_type (void) G_GNUC_CONST;
GimpData * gimp_palette_new (GimpContext *context,
const gchar *name);
GimpData * gimp_palette_get_standard (GimpContext *context);
GList * gimp_palette_get_colors (GimpPalette *palette);
gint gimp_palette_get_n_colors (GimpPalette *palette);
GimpPaletteEntry * gimp_palette_add_entry (GimpPalette *palette,
gint position,
const gchar *name,
const GimpRGB *color);
void gimp_palette_delete_entry (GimpPalette *palette,
GimpPaletteEntry *entry);
gboolean gimp_palette_set_entry (GimpPalette *palette,
gint position,
const gchar *name,
const GimpRGB *color);
gboolean gimp_palette_set_entry_color (GimpPalette *palette,
gint position,
const GimpRGB *color);
gboolean gimp_palette_set_entry_name (GimpPalette *palette,
gint position,
const gchar *name);
GimpPaletteEntry * gimp_palette_get_entry (GimpPalette *palette,
gint position);
void gimp_palette_set_columns (GimpPalette *palette,
gint columns);
gint gimp_palette_get_columns (GimpPalette *palette);
GimpPaletteEntry * gimp_palette_find_entry (GimpPalette *palette,
const GimpRGB *color,
GimpPaletteEntry *start_from);
#endif /* __GIMP_PALETTE_H__ */
......@@ -396,7 +396,8 @@ convert_dialog_palette_filter (const GimpObject *object,
{
GimpPalette *palette = GIMP_PALETTE (object);
return palette->n_colors > 0 && palette->n_colors <= 256;
return (gimp_palette_get_n_colors (palette) > 0 &&
gimp_palette_get_n_colors (palette) <= 256);
}
static void
......@@ -407,7 +408,7 @@ convert_dialog_palette_changed (GimpContext *context,
if (! palette)
return;
if (palette->n_colors > 256)
if (gimp_palette_get_n_colors (palette) > 256)
{
gimp_message (dialog->image->gimp, G_OBJECT (dialog->dialog),
GIMP_MESSAGE_WARNING,
......
......@@ -864,7 +864,7 @@ palette_import_make_palette (ImportDialog *dialog)
if (dialog->palette)
g_object_unref (dialog->palette);
palette->n_columns = n_columns;
gimp_palette_set_columns (palette, n_columns);
gimp_view_set_viewable (GIMP_VIEW (dialog->preview),
GIMP_VIEWABLE (palette));
......@@ -873,5 +873,6 @@ palette_import_make_palette (ImportDialog *dialog)
}
gtk_widget_set_visible (dialog->no_colors_label,
dialog->palette && dialog->palette->n_colors > 0);
dialog->palette &&
gimp_palette_get_n_colors (dialog->palette) > 0);
}
......@@ -239,7 +239,7 @@ palette_get_info_invoker (GimpProcedure *procedure,
GimpPalette *palette = gimp_pdb_get_palette (gimp, name, FALSE, error);
if (palette)
num_colors = palette->n_colors;
num_colors = gimp_palette_get_n_colors (palette);
else
success = FALSE;
}
......@@ -275,19 +275,21 @@ palette_get_colors_invoker (GimpProcedure *procedure,
if (palette)
{
GList *list = palette->colors;
GList *list = gimp_palette_get_colors (palette);
gint i;
num_colors = palette->n_colors;
num_colors = gimp_palette_get_n_colors (palette);
colors = g_new (GimpRGB, num_colors);
for (i = 0; i < num_colors; i++, list = g_list_next (list))
colors[i] = ((GimpPaletteEntry *)(list->data))->color;
{
GimpPaletteEntry *entry = list->data;
colors[i] = entry->color;
}
}
else
{
success = FALSE;
}
success = FALSE;
}
return_vals = gimp_procedure_get_return_values (procedure, success,
......@@ -322,7 +324,7 @@ palette_get_columns_invoker (GimpProcedure *procedure,
GimpPalette *palette = gimp_pdb_get_palette (gimp, name, FALSE, error);
if (palette)
num_columns = palette->n_columns;
num_columns = gimp_palette_get_columns (palette);
else
success = FALSE;
}
......@@ -429,12 +431,10 @@ palette_delete_entry_invoker (GimpProcedure *procedure,
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num);
gimp_palette_delete_entry (palette, entry);
}
if (entry)
gimp_palette_delete_entry (palette, entry);
else
success = FALSE;
}
......@@ -469,12 +469,10 @@ palette_entry_get_color_invoker (GimpProcedure *procedure,
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num);
color = entry->color;
}
if (entry)
color = entry->color;
else
success = FALSE;
}
......@@ -513,18 +511,7 @@ palette_entry_set_color_invoker (GimpProcedure *procedure,
GimpPalette *palette = gimp_pdb_get_palette (gimp, name, TRUE, error);
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
entry->color = color;
gimp_data_dirty (GIMP_DATA (palette));
}
else
success = FALSE;
}
success = gimp_palette_set_entry_color (palette, entry_num, &color);
else
success = FALSE;
}
......@@ -556,12 +543,10 @@ palette_entry_get_name_invoker (GimpProcedure *procedure,
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num);
entry_name = g_strdup (entry->name);
}
if (entry)
entry_name = g_strdup (entry->name);
else
success = FALSE;
}
......@@ -600,19 +585,7 @@ palette_entry_set_name_invoker (GimpProcedure *procedure,
GimpPalette *palette = gimp_pdb_get_palette (gimp, name, TRUE, error);
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
g_free (entry->name);
entry->name = g_strdup (entry_name);
gimp_data_dirty (GIMP_DATA (palette));
}
else
success = FALSE;
}
success = gimp_palette_set_entry_name (palette, entry_num, entry_name);
else
success = FALSE;
}
......
......@@ -105,7 +105,7 @@ palettes_get_palette_invoker (GimpProcedure *procedure,
if (palette)
{
name = g_strdup (gimp_object_get_name (palette));
num_colors = palette->n_colors;
num_colors = gimp_palette_get_n_colors (palette);
}
else
success = FALSE;
......@@ -152,12 +152,12 @@ palettes_get_palette_entry_invoker (GimpProcedure *procedure,
if (palette)
{
if (entry_num >= 0 && entry_num < palette->n_colors)
{
GimpPaletteEntry *entry = g_list_nth_data (palette->colors, entry_num);
GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num);
if (entry)
{
actual_name = g_strdup (gimp_object_get_name (palette));
num_colors = palette->n_colors;
num_colors = gimp_palette_get_n_colors (palette);
color = entry->color;
}
else
......
......@@ -78,7 +78,7 @@ gimp_color_selector_palette_set_color (GimpColorSelector *selector,
{
GimpPalette *palette = gimp_context_get_palette (select->context);
if (palette && palette->n_colors > 0)
if (palette && gimp_palette_get_n_colors (palette) > 0)
{
GimpPaletteEntry *entry;
......
......@@ -347,7 +347,7 @@ gimp_palette_editor_set_data (GimpDataEditor *editor,
editor);
gtk_adjustment_set_value (palette_editor->columns_data,
palette->n_columns);
gimp_palette_get_columns (palette));
palette_editor_scroll_top_left (palette_editor);
......@@ -468,8 +468,9 @@ gimp_palette_editor_pick_color (GimpPaletteEditor *editor,
break;
case GIMP_COLOR_PICK_STATE_UPDATE:
editor->color->color = *color;
gimp_data_dirty (data);
gimp_palette_set_entry_color (GIMP_PALETTE (data),
editor->color->position,
color);
break;
}
}
......@@ -515,10 +516,12 @@ gimp_palette_editor_zoom (GimpPaletteEditor *editor,
gtk_widget_get_allocation (viewport, &allocation);
columns = palette->n_columns ? palette->n_columns : COLUMNS;
rows = palette->n_colors / columns;
columns = gimp_palette_get_columns (palette);
if (columns == 0)
columns = COLUMNS;
if (palette->n_colors % columns)
rows = gimp_palette_get_n_colors (palette) / columns;
if (gimp_palette_get_n_colors (palette) % columns)
rows += 1;
rows = MAX (1, rows);
......@@ -531,9 +534,8 @@ gimp_palette_editor_zoom (GimpPaletteEditor *editor,
zoom_factor = CLAMP (zoom_factor, 0.1, 4.0);
if (palette->n_columns)
editor->columns = palette->n_columns;
else
editor->columns = gimp_palette_get_columns (palette);
if (editor->columns == 0)
editor->columns = COLUMNS;
palette_editor_resize (editor, editor->last_width, zoom_factor);
......@@ -552,7 +554,7 @@ gimp_palette_editor_get_index (GimpPaletteEditor *editor,
palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data);
if (palette && palette->n_colors > 0)
if (palette && gimp_palette_get_n_colors (palette) > 0)
{
GimpPaletteEntry *entry;
......@@ -571,26 +573,29 @@ gimp_palette_editor_set_index (GimpPaletteEditor *editor,
GimpRGB *color)
{
GimpPalette *palette;
GList *list;
g_return_val_if_fail (GIMP_IS_PALETTE_EDITOR (editor), FALSE);
palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data);
if (! palette || palette->n_colors == 0)
return FALSE;
if (palette && gimp_palette_get_n_colors (palette) > 0)
{
GimpPaletteEntry *entry;
index = CLAMP (index, 0, palette->n_colors - 1);
index = CLAMP (index, 0, gimp_palette_get_n_colors (palette) - 1);
list = g_list_nth (palette->colors, index);
entry = gimp_palette_get_entry (palette, index);
gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view),
list->data);
gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view),
entry);
if (color)
*color = editor->color->color;
if (color)
*color = editor->color->color;
return TRUE;
return TRUE;
}
return FALSE;
}
gint
......@@ -602,10 +607,12 @@ gimp_palette_editor_max_index (GimpPaletteEditor *editor)
palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data);
if (! palette || palette->n_colors == 0)
return -1;
if (palette && gimp_palette_get_n_colors (palette) > 0)
{
return gimp_palette_get_n_colors (palette) - 1;
}
return palette->n_colors - 1;
return -1;
}
......@@ -615,9 +622,8 @@ static void
palette_editor_invalidate_preview (GimpPalette *palette,
GimpPaletteEditor *editor)
{
if (palette->n_columns)
editor->columns = palette->n_columns;
else
editor->columns = gimp_palette_get_columns (palette);
if (editor->columns == 0)
editor->columns = COLUMNS;
palette_editor_resize (editor, editor->last_width, editor->zoom_factor);
......@@ -747,17 +753,12 @@ palette_editor_color_name_changed (GtkWidget *widget,
{
if (GIMP_DATA_EDITOR (editor)->data)
{
GimpPalette *palette;
palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data);
if (editor->color->name)
g_free (editor->color->name);