diff --git a/ChangeLog b/ChangeLog index d6dbd0a42d..75c9faa311 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,34 @@ +2001-02-11 Michael Natterer + + * app/Makefile.am + * app/apptypes.h + * app/gimpdata.[ch]: new abstract base class for everything + (except images) which has a filename and can become dirty and must + be saved. + + * app/gimpbrush.[ch] + * app/gimpgradient.[ch] + * app/gimppattern.[ch]: all derived from GimpData now. + + * app/gimpbrushgenerated.[ch] + * app/brush_select.c + * app/brushes.c + * app/gimpbrushpipe.c + * app/gradient_editor.c + * app/gradients.c + * app/patterns.c: removed lots of code duplication due to common + file save magic. + + The gradient file format has changed: it now contains the + gradient's name (no more ugly underscores). The files have the + extension ".ggr". + + * app/gimpgradient.[ch]: save new gradients, load new and old + gradients. + + * data/gradients/*: removed all old gradients and added the new + ones. + 2001-02-10 David Monniaux MMX code for paint_funcs. Very partial so far. diff --git a/app/Makefile.am b/app/Makefile.am index f7ddade842..2273d2238c 100644 --- a/app/Makefile.am +++ b/app/Makefile.am @@ -116,6 +116,8 @@ gimp_SOURCES = \ gimpcontext.h \ gimpcontextpreview.c \ gimpcontextpreview.h \ + gimpdata.c \ + gimpdata.h \ gimpdatalist.c \ gimpdatalist.h \ gimpdnd.c \ @@ -267,6 +269,7 @@ gimp_SOURCES = \ \ paint_funcs.c \ paint_funcs.h \ + paint_funcs_simd.S \ pixel_processor.c \ pixel_processor.h \ pixel_region.c \ @@ -314,8 +317,7 @@ gimp_SOURCES = \ marching_ants.h \ pixmaps.h \ pixmaps2.h \ - wilber.h \ - paint_funcs_simd.S + wilber.h EXTRA_DIST = \ makefile.mingw \ diff --git a/app/apptypes.h b/app/apptypes.h index 29b8c2db82..3c2bfaf835 100644 --- a/app/apptypes.h +++ b/app/apptypes.h @@ -58,6 +58,8 @@ typedef GimpImage GImage; /* data objects */ +typedef struct _GimpData GimpData; + typedef struct _GimpBrush GimpBrush; typedef struct _GimpBrushGenerated GimpBrushGenerated; typedef struct _GimpBrushPipe GimpBrushPipe; diff --git a/app/brush_select.c b/app/brush_select.c index 6f052be4ff..3b8c19e827 100644 --- a/app/brush_select.c +++ b/app/brush_select.c @@ -35,6 +35,7 @@ #include "gimpbrushgenerated.h" #include "gimpbrushpipe.h" #include "gimpcontext.h" +#include "gimpdata.h" #include "gimpdnd.h" #include "gimplist.h" #include "gimprc.h" @@ -1878,7 +1879,7 @@ brush_select_delete_brush_callback (GtkWidget *widget, if (GIMP_IS_BRUSH_GENERATED (brush)) { - gimp_brush_generated_delete (GIMP_BRUSH_GENERATED (brush)); + gimp_data_delete_from_disk (GIMP_DATA (brush)); brush_select_freeze_all (); diff --git a/app/brushes.c b/app/brushes.c index f84afe1136..03e193175b 100644 --- a/app/brushes.c +++ b/app/brushes.c @@ -128,29 +128,28 @@ brushes_brush_load (const gchar *filename) void brushes_free (void) { - GList *vbr_path; - gchar *vbr_dir; - if (! global_brush_list) return; - vbr_path = gimp_path_parse (brush_vbr_path, 16, TRUE, NULL); - vbr_dir = gimp_path_get_user_writable_dir (vbr_path); - gimp_path_free (vbr_path); - brush_select_freeze_all (); while (GIMP_LIST (global_brush_list)->list) { - GimpBrush *brush = GIMP_BRUSH (GIMP_LIST (global_brush_list)->list->data); + GimpData *data; - if (GIMP_IS_BRUSH_GENERATED (brush) && vbr_dir) - gimp_brush_generated_save (GIMP_BRUSH_GENERATED (brush), vbr_dir); + data = GIMP_DATA (GIMP_LIST (global_brush_list)->list->data); - gimp_container_remove (global_brush_list, GIMP_OBJECT (brush)); + if (! GIMP_DATA (data)->filename) + gimp_data_create_filename (data, + GIMP_OBJECT (data)->name, + GIMP_BRUSH_GENERATED_FILE_EXTENSION, + brush_path); + + if (data->dirty) + gimp_data_save (data); + + gimp_container_remove (global_brush_list, GIMP_OBJECT (data)); } brush_select_thaw_all (); - - g_free (vbr_dir); } diff --git a/app/core/gimpbrush-load.c b/app/core/gimpbrush-load.c index ae89d48314..9da968ec4f 100644 --- a/app/core/gimpbrush-load.c +++ b/app/core/gimpbrush-load.c @@ -89,7 +89,7 @@ gimp_brush_get_type (void) (GtkClassInitFunc) NULL }; - type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &info); + type = gtk_type_unique (GIMP_TYPE_DATA, &info); } return type; } @@ -103,7 +103,7 @@ gimp_brush_class_init (GimpBrushClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_brush_destroy; @@ -116,16 +116,14 @@ gimp_brush_class_init (GimpBrushClass *klass) static void gimp_brush_init (GimpBrush *brush) { - brush->filename = NULL; + brush->mask = NULL; + brush->pixmap = NULL; brush->spacing = 20; brush->x_axis.x = 15.0; brush->x_axis.y = 0.0; brush->y_axis.x = 0.0; brush->y_axis.y = 15.0; - - brush->mask = NULL; - brush->pixmap = NULL; } static void @@ -135,8 +133,6 @@ gimp_brush_destroy (GtkObject *object) brush = GIMP_BRUSH (object); - g_free (brush->filename); - if (brush->mask) temp_buf_free (brush->mask); @@ -269,12 +265,16 @@ gimp_brush_load (const gchar *filename) close (fd); - brush->filename = g_strdup (filename); + if (! brush) + return NULL; + + gimp_data_set_filename (GIMP_DATA (brush), filename); /* Swap the brush to disk (if we're being stingy with memory) */ if (stingy_memory_use) { temp_buf_swap (brush->mask); + if (brush->pixmap) temp_buf_swap (brush->pixmap); } @@ -429,7 +429,7 @@ gimp_brush_load_brush (gint fd, } } break; - + default: g_message ("Unsupported brush depth: %d\n" "in file \"%s\"\n" diff --git a/app/core/gimpbrush.c b/app/core/gimpbrush.c index ae89d48314..9da968ec4f 100644 --- a/app/core/gimpbrush.c +++ b/app/core/gimpbrush.c @@ -89,7 +89,7 @@ gimp_brush_get_type (void) (GtkClassInitFunc) NULL }; - type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &info); + type = gtk_type_unique (GIMP_TYPE_DATA, &info); } return type; } @@ -103,7 +103,7 @@ gimp_brush_class_init (GimpBrushClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_brush_destroy; @@ -116,16 +116,14 @@ gimp_brush_class_init (GimpBrushClass *klass) static void gimp_brush_init (GimpBrush *brush) { - brush->filename = NULL; + brush->mask = NULL; + brush->pixmap = NULL; brush->spacing = 20; brush->x_axis.x = 15.0; brush->x_axis.y = 0.0; brush->y_axis.x = 0.0; brush->y_axis.y = 15.0; - - brush->mask = NULL; - brush->pixmap = NULL; } static void @@ -135,8 +133,6 @@ gimp_brush_destroy (GtkObject *object) brush = GIMP_BRUSH (object); - g_free (brush->filename); - if (brush->mask) temp_buf_free (brush->mask); @@ -269,12 +265,16 @@ gimp_brush_load (const gchar *filename) close (fd); - brush->filename = g_strdup (filename); + if (! brush) + return NULL; + + gimp_data_set_filename (GIMP_DATA (brush), filename); /* Swap the brush to disk (if we're being stingy with memory) */ if (stingy_memory_use) { temp_buf_swap (brush->mask); + if (brush->pixmap) temp_buf_swap (brush->pixmap); } @@ -429,7 +429,7 @@ gimp_brush_load_brush (gint fd, } } break; - + default: g_message ("Unsupported brush depth: %d\n" "in file \"%s\"\n" diff --git a/app/core/gimpbrush.h b/app/core/gimpbrush.h index ac1f98d0ba..ba0837291f 100644 --- a/app/core/gimpbrush.h +++ b/app/core/gimpbrush.h @@ -20,7 +20,7 @@ #define __GIMP_BRUSH_H__ -#include "gimpviewable.h" +#include "gimpdata.h" #define GIMP_TYPE_BRUSH (gimp_brush_get_type ()) @@ -34,19 +34,19 @@ typedef struct _GimpBrushClass GimpBrushClass; struct _GimpBrush { - GimpViewable parent_instance; + GimpData parent_instance; - gchar *filename; /* actual filename--brush's location on disk */ - gint spacing; /* brush's spacing */ - GimpVector2 x_axis; /* for calculating brush spacing */ - GimpVector2 y_axis; /* for calculating brush spacing */ - TempBuf *mask; /* the actual mask */ - TempBuf *pixmap; /* optional pixmap data */ + TempBuf *mask; /* the actual mask */ + TempBuf *pixmap; /* optional pixmap data */ + + gint spacing; /* brush's spacing */ + GimpVector2 x_axis; /* for calculating brush spacing */ + GimpVector2 y_axis; /* for calculating brush spacing */ }; struct _GimpBrushClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; /* FIXME: these are no virtual function pointers but bad hacks: */ GimpBrush * (* select_brush) (PaintCore *paint_core); diff --git a/app/core/gimpbrushgenerated-load.c b/app/core/gimpbrushgenerated-load.c index b6a1faaee5..b9c03975c7 100644 --- a/app/core/gimpbrushgenerated-load.c +++ b/app/core/gimpbrushgenerated-load.c @@ -47,42 +47,18 @@ #define OVERSAMPLING 5 -static void gimp_brush_generated_generate (GimpBrushGenerated *brush); +/* local function prototypes */ +static void gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass); +static void gimp_brush_generated_init (GimpBrushGenerated *brush); +static void gimp_brush_generated_destroy (GtkObject *object); +static gboolean gimp_brush_generated_save (GimpData *data); +static void gimp_brush_generated_dirty (GimpData *data); static GimpBrushClass *parent_class = NULL; -static void -gimp_brush_generated_destroy (GtkObject *object) -{ - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - -static void -gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) klass; - - parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - - object_class->destroy = gimp_brush_generated_destroy; -} - -static void -gimp_brush_generated_init (GimpBrushGenerated *brush) -{ - brush->radius = 5.0; - brush->hardness = 0.0; - brush->angle = 0.0; - brush->aspect_ratio = 1.0; - brush->freeze = 0; -} - -guint +GtkType gimp_brush_generated_get_type (void) { static GtkType type = 0; @@ -107,162 +83,56 @@ gimp_brush_generated_get_type (void) return type; } -GimpBrush * -gimp_brush_generated_new (gfloat radius, - gfloat hardness, - gfloat angle, - gfloat aspect_ratio) +static void +gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) { - GimpBrushGenerated *brush; + GtkObjectClass *object_class; + GimpDataClass *data_class; - /* set up normal brush data */ - brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + object_class = (GtkObjectClass *) klass; + data_class = (GimpDataClass *) klass; - gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - GIMP_BRUSH (brush)->spacing = 20; + object_class->destroy = gimp_brush_generated_destroy; - /* set up gimp_brush_generated data */ - brush->radius = radius; - brush->hardness = hardness; - brush->angle = angle; - brush->aspect_ratio = aspect_ratio; - - /* render brush mask */ - gimp_brush_generated_generate (brush); - - return GIMP_BRUSH (brush); + data_class->save = gimp_brush_generated_save; + data_class->dirty = gimp_brush_generated_dirty; } -GimpBrush * -gimp_brush_generated_load (const gchar *file_name) +static void +gimp_brush_generated_init (GimpBrushGenerated *brush) { - GimpBrushGenerated *brush; - FILE *fp; - gchar string[256]; - gfloat fl; - gfloat version; - - if ((fp = fopen (file_name, "rb")) == NULL) - return NULL; - - /* make sure the file we are reading is the right type */ - fgets (string, 255, fp); - - if (strncmp (string, "GIMP-VBR", 8) != 0) - return NULL; - - /* make sure we are reading a compatible version */ - fgets (string, 255, fp); - sscanf (string, "%f", &version); - g_return_val_if_fail (version < 2.0, NULL); - - /* create new brush */ - brush = - GIMP_BRUSH_GENERATED (gtk_type_new (gimp_brush_generated_get_type ())); - - GIMP_BRUSH (brush)->filename = g_strdup (file_name); - - gimp_brush_generated_freeze (brush); - - /* read name */ - fgets (string, 255, fp); - if (string[strlen (string) - 1] == '\n') - string[strlen (string) - 1] = 0; - gimp_object_set_name (GIMP_OBJECT (brush), string); - - /* read brush spacing */ - fscanf (fp, "%f", &fl); - GIMP_BRUSH (brush)->spacing = fl; - - /* read brush radius */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_radius (brush, fl); - - /* read brush hardness */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_hardness (brush, fl); - - /* read brush aspect_ratio */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_aspect_ratio (brush, fl); - - /* read brush angle */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_angle (brush, fl); - - fclose (fp); - - gimp_brush_generated_thaw (brush); - - if (stingy_memory_use) - temp_buf_swap (GIMP_BRUSH (brush)->mask); - - return GIMP_BRUSH (brush); + brush->radius = 5.0; + brush->hardness = 0.0; + brush->angle = 0.0; + brush->aspect_ratio = 1.0; + brush->freeze = 0; } -void -gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory) +static void +gimp_brush_generated_destroy (GtkObject *object) { - FILE *fp; - gchar *filename = NULL; + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - g_return_if_fail (directory != NULL); +static gboolean +gimp_brush_generated_save (GimpData *data) +{ + GimpBrushGenerated *brush; + FILE *fp; - if (! GIMP_BRUSH (brush)->filename) - { - gchar *safe_name; - gint i; - gint unum = 1; + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_BRUSH_GENERATED (data), FALSE); - /* make sure we don't create a naughty filename */ - safe_name = g_strdup (GIMP_OBJECT (brush)->name); - if (safe_name[0] == '.') - safe_name[0] = '_'; - for (i = 0; safe_name[i]; i++) - if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) - safe_name[i] = '_'; - - filename = g_strdup_printf ("%s%s.vbr", - directory, safe_name); - - while ((fp = fopen (filename, "r"))) - { - /* make sure we don't overite an existing brush */ - fclose (fp); - g_free (filename); - filename = g_strdup_printf ("%s%s_%d.vbr", - directory, safe_name, unum); - unum++; - } - g_free (safe_name); - } - else - { - filename = g_strdup (GIMP_BRUSH (brush)->filename); - - if (strlen(filename) < 4 || strcmp (&filename[strlen (filename) - 4], - ".vbr")) - { - /* we only want to save .vbr files, so set filename to null - * if this isn't a .vbr file - */ - g_free (filename); - filename = NULL; - } - } - - if (! filename) - return; + brush = GIMP_BRUSH_GENERATED (data); /* we are (finaly) ready to try to save the generated brush file */ - if ((fp = fopen (filename, "wb")) == NULL) + if ((fp = fopen (data->filename, "wb")) == NULL) { - g_warning ("Unable to save file %s", filename); - return; + g_warning ("Unable to save file %s", data->filename); + return FALSE; } /* write magic header */ @@ -290,37 +160,8 @@ gimp_brush_generated_save (GimpBrushGenerated *brush, fprintf (fp, "%f\n", brush->angle); fclose (fp); -} -void -gimp_brush_generated_delete (GimpBrushGenerated *brush) -{ - if (GIMP_BRUSH (brush)->filename) - { - unlink (GIMP_BRUSH (brush)->filename); - } -} - -void -gimp_brush_generated_freeze (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - brush->freeze++; -} - -void -gimp_brush_generated_thaw (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - if (brush->freeze > 0) - brush->freeze--; - - if (brush->freeze == 0) - gimp_brush_generated_generate (brush); + return TRUE; } static double @@ -340,9 +181,10 @@ gauss (gdouble f) return (2.0 * f*f); } -void -gimp_brush_generated_generate (GimpBrushGenerated *brush) +static void +gimp_brush_generated_dirty (GimpData *data) { + GimpBrushGenerated *brush; register GimpBrush *gbrush = NULL; register gint x, y; register guchar *centerp; @@ -355,9 +197,8 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) gdouble buffer[OVERSAMPLING]; gint width, height; - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - + brush = GIMP_BRUSH_GENERATED (data); + if (brush->freeze) /* if we are frozen defer rerendering till later */ return; @@ -368,7 +209,7 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) if (gbrush->mask) { - temp_buf_free(gbrush->mask); + temp_buf_free (gbrush->mask); } /* compute the range of the brush. should do a better job than this? */ @@ -462,9 +303,129 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) g_free (lookup); + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); + gimp_viewable_invalidate_preview (GIMP_VIEWABLE (brush)); } +GimpBrush * +gimp_brush_generated_new (gfloat radius, + gfloat hardness, + gfloat angle, + gfloat aspect_ratio) +{ + GimpBrushGenerated *brush; + + /* set up normal brush data */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + + GIMP_BRUSH (brush)->spacing = 20; + + /* set up gimp_brush_generated data */ + brush->radius = radius; + brush->hardness = hardness; + brush->angle = angle; + brush->aspect_ratio = aspect_ratio; + + /* render brush mask */ + gimp_data_dirty (GIMP_DATA (brush)); + + return GIMP_BRUSH (brush); +} + +GimpBrush * +gimp_brush_generated_load (const gchar *filename) +{ + GimpBrushGenerated *brush; + FILE *fp; + gchar string[256]; + gfloat fl; + gfloat version; + + if ((fp = fopen (filename, "rb")) == NULL) + return NULL; + + /* make sure the file we are reading is the right type */ + fgets (string, 255, fp); + + if (strncmp (string, "GIMP-VBR", 8) != 0) + return NULL; + + /* make sure we are reading a compatible version */ + fgets (string, 255, fp); + sscanf (string, "%f", &version); + g_return_val_if_fail (version < 2.0, NULL); + + /* create new brush */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_data_set_filename (GIMP_DATA (brush), filename); + + gimp_brush_generated_freeze (brush); + + /* read name */ + fgets (string, 255, fp); + if (string[strlen (string) - 1] == '\n') + string[strlen (string) - 1] = 0; + gimp_object_set_name (GIMP_OBJECT (brush), string); + + /* read brush spacing */ + fscanf (fp, "%f", &fl); + GIMP_BRUSH (brush)->spacing = fl; + + /* read brush radius */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_radius (brush, fl); + + /* read brush hardness */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_hardness (brush, fl); + + /* read brush aspect_ratio */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_aspect_ratio (brush, fl); + + /* read brush angle */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_angle (brush, fl); + + fclose (fp); + + gimp_brush_generated_thaw (brush); + + GIMP_DATA (brush)->dirty = FALSE; + + if (stingy_memory_use) + temp_buf_swap (GIMP_BRUSH (brush)->mask); + + return GIMP_BRUSH (brush); +} + +void +gimp_brush_generated_freeze (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + brush->freeze++; +} + +void +gimp_brush_generated_thaw (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + if (brush->freeze > 0) + brush->freeze--; + + if (brush->freeze == 0) + gimp_data_dirty (GIMP_DATA (brush)); +} + gfloat gimp_brush_generated_set_radius (GimpBrushGenerated *brush, gfloat radius) @@ -481,8 +442,8 @@ gimp_brush_generated_set_radius (GimpBrushGenerated *brush, brush->radius = radius; - if (!brush->freeze) - gimp_brush_generated_generate (brush); + if (! brush->freeze) + gimp_data_dirty (GIMP_DATA (brush)); return brush->radius; } @@ -504,7 +465,7 @@ gimp_brush_generated_set_hardness (GimpBrushGenerated *brush, brush->hardness = hardness; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->hardness; } @@ -526,7 +487,7 @@ gimp_brush_generated_set_angle (GimpBrushGenerated *brush, brush->angle = angle; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->angle; } @@ -548,7 +509,7 @@ gimp_brush_generated_set_aspect_ratio (GimpBrushGenerated *brush, brush->aspect_ratio = ratio; if (!brush->freeze) - gimp_brush_generated_generate(brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->aspect_ratio; } diff --git a/app/core/gimpbrushgenerated-save.c b/app/core/gimpbrushgenerated-save.c index b6a1faaee5..b9c03975c7 100644 --- a/app/core/gimpbrushgenerated-save.c +++ b/app/core/gimpbrushgenerated-save.c @@ -47,42 +47,18 @@ #define OVERSAMPLING 5 -static void gimp_brush_generated_generate (GimpBrushGenerated *brush); +/* local function prototypes */ +static void gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass); +static void gimp_brush_generated_init (GimpBrushGenerated *brush); +static void gimp_brush_generated_destroy (GtkObject *object); +static gboolean gimp_brush_generated_save (GimpData *data); +static void gimp_brush_generated_dirty (GimpData *data); static GimpBrushClass *parent_class = NULL; -static void -gimp_brush_generated_destroy (GtkObject *object) -{ - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - -static void -gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) klass; - - parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - - object_class->destroy = gimp_brush_generated_destroy; -} - -static void -gimp_brush_generated_init (GimpBrushGenerated *brush) -{ - brush->radius = 5.0; - brush->hardness = 0.0; - brush->angle = 0.0; - brush->aspect_ratio = 1.0; - brush->freeze = 0; -} - -guint +GtkType gimp_brush_generated_get_type (void) { static GtkType type = 0; @@ -107,162 +83,56 @@ gimp_brush_generated_get_type (void) return type; } -GimpBrush * -gimp_brush_generated_new (gfloat radius, - gfloat hardness, - gfloat angle, - gfloat aspect_ratio) +static void +gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) { - GimpBrushGenerated *brush; + GtkObjectClass *object_class; + GimpDataClass *data_class; - /* set up normal brush data */ - brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + object_class = (GtkObjectClass *) klass; + data_class = (GimpDataClass *) klass; - gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - GIMP_BRUSH (brush)->spacing = 20; + object_class->destroy = gimp_brush_generated_destroy; - /* set up gimp_brush_generated data */ - brush->radius = radius; - brush->hardness = hardness; - brush->angle = angle; - brush->aspect_ratio = aspect_ratio; - - /* render brush mask */ - gimp_brush_generated_generate (brush); - - return GIMP_BRUSH (brush); + data_class->save = gimp_brush_generated_save; + data_class->dirty = gimp_brush_generated_dirty; } -GimpBrush * -gimp_brush_generated_load (const gchar *file_name) +static void +gimp_brush_generated_init (GimpBrushGenerated *brush) { - GimpBrushGenerated *brush; - FILE *fp; - gchar string[256]; - gfloat fl; - gfloat version; - - if ((fp = fopen (file_name, "rb")) == NULL) - return NULL; - - /* make sure the file we are reading is the right type */ - fgets (string, 255, fp); - - if (strncmp (string, "GIMP-VBR", 8) != 0) - return NULL; - - /* make sure we are reading a compatible version */ - fgets (string, 255, fp); - sscanf (string, "%f", &version); - g_return_val_if_fail (version < 2.0, NULL); - - /* create new brush */ - brush = - GIMP_BRUSH_GENERATED (gtk_type_new (gimp_brush_generated_get_type ())); - - GIMP_BRUSH (brush)->filename = g_strdup (file_name); - - gimp_brush_generated_freeze (brush); - - /* read name */ - fgets (string, 255, fp); - if (string[strlen (string) - 1] == '\n') - string[strlen (string) - 1] = 0; - gimp_object_set_name (GIMP_OBJECT (brush), string); - - /* read brush spacing */ - fscanf (fp, "%f", &fl); - GIMP_BRUSH (brush)->spacing = fl; - - /* read brush radius */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_radius (brush, fl); - - /* read brush hardness */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_hardness (brush, fl); - - /* read brush aspect_ratio */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_aspect_ratio (brush, fl); - - /* read brush angle */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_angle (brush, fl); - - fclose (fp); - - gimp_brush_generated_thaw (brush); - - if (stingy_memory_use) - temp_buf_swap (GIMP_BRUSH (brush)->mask); - - return GIMP_BRUSH (brush); + brush->radius = 5.0; + brush->hardness = 0.0; + brush->angle = 0.0; + brush->aspect_ratio = 1.0; + brush->freeze = 0; } -void -gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory) +static void +gimp_brush_generated_destroy (GtkObject *object) { - FILE *fp; - gchar *filename = NULL; + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - g_return_if_fail (directory != NULL); +static gboolean +gimp_brush_generated_save (GimpData *data) +{ + GimpBrushGenerated *brush; + FILE *fp; - if (! GIMP_BRUSH (brush)->filename) - { - gchar *safe_name; - gint i; - gint unum = 1; + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_BRUSH_GENERATED (data), FALSE); - /* make sure we don't create a naughty filename */ - safe_name = g_strdup (GIMP_OBJECT (brush)->name); - if (safe_name[0] == '.') - safe_name[0] = '_'; - for (i = 0; safe_name[i]; i++) - if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) - safe_name[i] = '_'; - - filename = g_strdup_printf ("%s%s.vbr", - directory, safe_name); - - while ((fp = fopen (filename, "r"))) - { - /* make sure we don't overite an existing brush */ - fclose (fp); - g_free (filename); - filename = g_strdup_printf ("%s%s_%d.vbr", - directory, safe_name, unum); - unum++; - } - g_free (safe_name); - } - else - { - filename = g_strdup (GIMP_BRUSH (brush)->filename); - - if (strlen(filename) < 4 || strcmp (&filename[strlen (filename) - 4], - ".vbr")) - { - /* we only want to save .vbr files, so set filename to null - * if this isn't a .vbr file - */ - g_free (filename); - filename = NULL; - } - } - - if (! filename) - return; + brush = GIMP_BRUSH_GENERATED (data); /* we are (finaly) ready to try to save the generated brush file */ - if ((fp = fopen (filename, "wb")) == NULL) + if ((fp = fopen (data->filename, "wb")) == NULL) { - g_warning ("Unable to save file %s", filename); - return; + g_warning ("Unable to save file %s", data->filename); + return FALSE; } /* write magic header */ @@ -290,37 +160,8 @@ gimp_brush_generated_save (GimpBrushGenerated *brush, fprintf (fp, "%f\n", brush->angle); fclose (fp); -} -void -gimp_brush_generated_delete (GimpBrushGenerated *brush) -{ - if (GIMP_BRUSH (brush)->filename) - { - unlink (GIMP_BRUSH (brush)->filename); - } -} - -void -gimp_brush_generated_freeze (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - brush->freeze++; -} - -void -gimp_brush_generated_thaw (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - if (brush->freeze > 0) - brush->freeze--; - - if (brush->freeze == 0) - gimp_brush_generated_generate (brush); + return TRUE; } static double @@ -340,9 +181,10 @@ gauss (gdouble f) return (2.0 * f*f); } -void -gimp_brush_generated_generate (GimpBrushGenerated *brush) +static void +gimp_brush_generated_dirty (GimpData *data) { + GimpBrushGenerated *brush; register GimpBrush *gbrush = NULL; register gint x, y; register guchar *centerp; @@ -355,9 +197,8 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) gdouble buffer[OVERSAMPLING]; gint width, height; - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - + brush = GIMP_BRUSH_GENERATED (data); + if (brush->freeze) /* if we are frozen defer rerendering till later */ return; @@ -368,7 +209,7 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) if (gbrush->mask) { - temp_buf_free(gbrush->mask); + temp_buf_free (gbrush->mask); } /* compute the range of the brush. should do a better job than this? */ @@ -462,9 +303,129 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) g_free (lookup); + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); + gimp_viewable_invalidate_preview (GIMP_VIEWABLE (brush)); } +GimpBrush * +gimp_brush_generated_new (gfloat radius, + gfloat hardness, + gfloat angle, + gfloat aspect_ratio) +{ + GimpBrushGenerated *brush; + + /* set up normal brush data */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + + GIMP_BRUSH (brush)->spacing = 20; + + /* set up gimp_brush_generated data */ + brush->radius = radius; + brush->hardness = hardness; + brush->angle = angle; + brush->aspect_ratio = aspect_ratio; + + /* render brush mask */ + gimp_data_dirty (GIMP_DATA (brush)); + + return GIMP_BRUSH (brush); +} + +GimpBrush * +gimp_brush_generated_load (const gchar *filename) +{ + GimpBrushGenerated *brush; + FILE *fp; + gchar string[256]; + gfloat fl; + gfloat version; + + if ((fp = fopen (filename, "rb")) == NULL) + return NULL; + + /* make sure the file we are reading is the right type */ + fgets (string, 255, fp); + + if (strncmp (string, "GIMP-VBR", 8) != 0) + return NULL; + + /* make sure we are reading a compatible version */ + fgets (string, 255, fp); + sscanf (string, "%f", &version); + g_return_val_if_fail (version < 2.0, NULL); + + /* create new brush */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_data_set_filename (GIMP_DATA (brush), filename); + + gimp_brush_generated_freeze (brush); + + /* read name */ + fgets (string, 255, fp); + if (string[strlen (string) - 1] == '\n') + string[strlen (string) - 1] = 0; + gimp_object_set_name (GIMP_OBJECT (brush), string); + + /* read brush spacing */ + fscanf (fp, "%f", &fl); + GIMP_BRUSH (brush)->spacing = fl; + + /* read brush radius */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_radius (brush, fl); + + /* read brush hardness */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_hardness (brush, fl); + + /* read brush aspect_ratio */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_aspect_ratio (brush, fl); + + /* read brush angle */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_angle (brush, fl); + + fclose (fp); + + gimp_brush_generated_thaw (brush); + + GIMP_DATA (brush)->dirty = FALSE; + + if (stingy_memory_use) + temp_buf_swap (GIMP_BRUSH (brush)->mask); + + return GIMP_BRUSH (brush); +} + +void +gimp_brush_generated_freeze (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + brush->freeze++; +} + +void +gimp_brush_generated_thaw (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + if (brush->freeze > 0) + brush->freeze--; + + if (brush->freeze == 0) + gimp_data_dirty (GIMP_DATA (brush)); +} + gfloat gimp_brush_generated_set_radius (GimpBrushGenerated *brush, gfloat radius) @@ -481,8 +442,8 @@ gimp_brush_generated_set_radius (GimpBrushGenerated *brush, brush->radius = radius; - if (!brush->freeze) - gimp_brush_generated_generate (brush); + if (! brush->freeze) + gimp_data_dirty (GIMP_DATA (brush)); return brush->radius; } @@ -504,7 +465,7 @@ gimp_brush_generated_set_hardness (GimpBrushGenerated *brush, brush->hardness = hardness; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->hardness; } @@ -526,7 +487,7 @@ gimp_brush_generated_set_angle (GimpBrushGenerated *brush, brush->angle = angle; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->angle; } @@ -548,7 +509,7 @@ gimp_brush_generated_set_aspect_ratio (GimpBrushGenerated *brush, brush->aspect_ratio = ratio; if (!brush->freeze) - gimp_brush_generated_generate(brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->aspect_ratio; } diff --git a/app/core/gimpbrushgenerated.c b/app/core/gimpbrushgenerated.c index b6a1faaee5..b9c03975c7 100644 --- a/app/core/gimpbrushgenerated.c +++ b/app/core/gimpbrushgenerated.c @@ -47,42 +47,18 @@ #define OVERSAMPLING 5 -static void gimp_brush_generated_generate (GimpBrushGenerated *brush); +/* local function prototypes */ +static void gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass); +static void gimp_brush_generated_init (GimpBrushGenerated *brush); +static void gimp_brush_generated_destroy (GtkObject *object); +static gboolean gimp_brush_generated_save (GimpData *data); +static void gimp_brush_generated_dirty (GimpData *data); static GimpBrushClass *parent_class = NULL; -static void -gimp_brush_generated_destroy (GtkObject *object) -{ - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - -static void -gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) klass; - - parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - - object_class->destroy = gimp_brush_generated_destroy; -} - -static void -gimp_brush_generated_init (GimpBrushGenerated *brush) -{ - brush->radius = 5.0; - brush->hardness = 0.0; - brush->angle = 0.0; - brush->aspect_ratio = 1.0; - brush->freeze = 0; -} - -guint +GtkType gimp_brush_generated_get_type (void) { static GtkType type = 0; @@ -107,162 +83,56 @@ gimp_brush_generated_get_type (void) return type; } -GimpBrush * -gimp_brush_generated_new (gfloat radius, - gfloat hardness, - gfloat angle, - gfloat aspect_ratio) +static void +gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) { - GimpBrushGenerated *brush; + GtkObjectClass *object_class; + GimpDataClass *data_class; - /* set up normal brush data */ - brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + object_class = (GtkObjectClass *) klass; + data_class = (GimpDataClass *) klass; - gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - GIMP_BRUSH (brush)->spacing = 20; + object_class->destroy = gimp_brush_generated_destroy; - /* set up gimp_brush_generated data */ - brush->radius = radius; - brush->hardness = hardness; - brush->angle = angle; - brush->aspect_ratio = aspect_ratio; - - /* render brush mask */ - gimp_brush_generated_generate (brush); - - return GIMP_BRUSH (brush); + data_class->save = gimp_brush_generated_save; + data_class->dirty = gimp_brush_generated_dirty; } -GimpBrush * -gimp_brush_generated_load (const gchar *file_name) +static void +gimp_brush_generated_init (GimpBrushGenerated *brush) { - GimpBrushGenerated *brush; - FILE *fp; - gchar string[256]; - gfloat fl; - gfloat version; - - if ((fp = fopen (file_name, "rb")) == NULL) - return NULL; - - /* make sure the file we are reading is the right type */ - fgets (string, 255, fp); - - if (strncmp (string, "GIMP-VBR", 8) != 0) - return NULL; - - /* make sure we are reading a compatible version */ - fgets (string, 255, fp); - sscanf (string, "%f", &version); - g_return_val_if_fail (version < 2.0, NULL); - - /* create new brush */ - brush = - GIMP_BRUSH_GENERATED (gtk_type_new (gimp_brush_generated_get_type ())); - - GIMP_BRUSH (brush)->filename = g_strdup (file_name); - - gimp_brush_generated_freeze (brush); - - /* read name */ - fgets (string, 255, fp); - if (string[strlen (string) - 1] == '\n') - string[strlen (string) - 1] = 0; - gimp_object_set_name (GIMP_OBJECT (brush), string); - - /* read brush spacing */ - fscanf (fp, "%f", &fl); - GIMP_BRUSH (brush)->spacing = fl; - - /* read brush radius */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_radius (brush, fl); - - /* read brush hardness */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_hardness (brush, fl); - - /* read brush aspect_ratio */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_aspect_ratio (brush, fl); - - /* read brush angle */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_angle (brush, fl); - - fclose (fp); - - gimp_brush_generated_thaw (brush); - - if (stingy_memory_use) - temp_buf_swap (GIMP_BRUSH (brush)->mask); - - return GIMP_BRUSH (brush); + brush->radius = 5.0; + brush->hardness = 0.0; + brush->angle = 0.0; + brush->aspect_ratio = 1.0; + brush->freeze = 0; } -void -gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory) +static void +gimp_brush_generated_destroy (GtkObject *object) { - FILE *fp; - gchar *filename = NULL; + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - g_return_if_fail (directory != NULL); +static gboolean +gimp_brush_generated_save (GimpData *data) +{ + GimpBrushGenerated *brush; + FILE *fp; - if (! GIMP_BRUSH (brush)->filename) - { - gchar *safe_name; - gint i; - gint unum = 1; + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_BRUSH_GENERATED (data), FALSE); - /* make sure we don't create a naughty filename */ - safe_name = g_strdup (GIMP_OBJECT (brush)->name); - if (safe_name[0] == '.') - safe_name[0] = '_'; - for (i = 0; safe_name[i]; i++) - if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) - safe_name[i] = '_'; - - filename = g_strdup_printf ("%s%s.vbr", - directory, safe_name); - - while ((fp = fopen (filename, "r"))) - { - /* make sure we don't overite an existing brush */ - fclose (fp); - g_free (filename); - filename = g_strdup_printf ("%s%s_%d.vbr", - directory, safe_name, unum); - unum++; - } - g_free (safe_name); - } - else - { - filename = g_strdup (GIMP_BRUSH (brush)->filename); - - if (strlen(filename) < 4 || strcmp (&filename[strlen (filename) - 4], - ".vbr")) - { - /* we only want to save .vbr files, so set filename to null - * if this isn't a .vbr file - */ - g_free (filename); - filename = NULL; - } - } - - if (! filename) - return; + brush = GIMP_BRUSH_GENERATED (data); /* we are (finaly) ready to try to save the generated brush file */ - if ((fp = fopen (filename, "wb")) == NULL) + if ((fp = fopen (data->filename, "wb")) == NULL) { - g_warning ("Unable to save file %s", filename); - return; + g_warning ("Unable to save file %s", data->filename); + return FALSE; } /* write magic header */ @@ -290,37 +160,8 @@ gimp_brush_generated_save (GimpBrushGenerated *brush, fprintf (fp, "%f\n", brush->angle); fclose (fp); -} -void -gimp_brush_generated_delete (GimpBrushGenerated *brush) -{ - if (GIMP_BRUSH (brush)->filename) - { - unlink (GIMP_BRUSH (brush)->filename); - } -} - -void -gimp_brush_generated_freeze (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - brush->freeze++; -} - -void -gimp_brush_generated_thaw (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - if (brush->freeze > 0) - brush->freeze--; - - if (brush->freeze == 0) - gimp_brush_generated_generate (brush); + return TRUE; } static double @@ -340,9 +181,10 @@ gauss (gdouble f) return (2.0 * f*f); } -void -gimp_brush_generated_generate (GimpBrushGenerated *brush) +static void +gimp_brush_generated_dirty (GimpData *data) { + GimpBrushGenerated *brush; register GimpBrush *gbrush = NULL; register gint x, y; register guchar *centerp; @@ -355,9 +197,8 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) gdouble buffer[OVERSAMPLING]; gint width, height; - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - + brush = GIMP_BRUSH_GENERATED (data); + if (brush->freeze) /* if we are frozen defer rerendering till later */ return; @@ -368,7 +209,7 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) if (gbrush->mask) { - temp_buf_free(gbrush->mask); + temp_buf_free (gbrush->mask); } /* compute the range of the brush. should do a better job than this? */ @@ -462,9 +303,129 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) g_free (lookup); + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); + gimp_viewable_invalidate_preview (GIMP_VIEWABLE (brush)); } +GimpBrush * +gimp_brush_generated_new (gfloat radius, + gfloat hardness, + gfloat angle, + gfloat aspect_ratio) +{ + GimpBrushGenerated *brush; + + /* set up normal brush data */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + + GIMP_BRUSH (brush)->spacing = 20; + + /* set up gimp_brush_generated data */ + brush->radius = radius; + brush->hardness = hardness; + brush->angle = angle; + brush->aspect_ratio = aspect_ratio; + + /* render brush mask */ + gimp_data_dirty (GIMP_DATA (brush)); + + return GIMP_BRUSH (brush); +} + +GimpBrush * +gimp_brush_generated_load (const gchar *filename) +{ + GimpBrushGenerated *brush; + FILE *fp; + gchar string[256]; + gfloat fl; + gfloat version; + + if ((fp = fopen (filename, "rb")) == NULL) + return NULL; + + /* make sure the file we are reading is the right type */ + fgets (string, 255, fp); + + if (strncmp (string, "GIMP-VBR", 8) != 0) + return NULL; + + /* make sure we are reading a compatible version */ + fgets (string, 255, fp); + sscanf (string, "%f", &version); + g_return_val_if_fail (version < 2.0, NULL); + + /* create new brush */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_data_set_filename (GIMP_DATA (brush), filename); + + gimp_brush_generated_freeze (brush); + + /* read name */ + fgets (string, 255, fp); + if (string[strlen (string) - 1] == '\n') + string[strlen (string) - 1] = 0; + gimp_object_set_name (GIMP_OBJECT (brush), string); + + /* read brush spacing */ + fscanf (fp, "%f", &fl); + GIMP_BRUSH (brush)->spacing = fl; + + /* read brush radius */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_radius (brush, fl); + + /* read brush hardness */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_hardness (brush, fl); + + /* read brush aspect_ratio */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_aspect_ratio (brush, fl); + + /* read brush angle */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_angle (brush, fl); + + fclose (fp); + + gimp_brush_generated_thaw (brush); + + GIMP_DATA (brush)->dirty = FALSE; + + if (stingy_memory_use) + temp_buf_swap (GIMP_BRUSH (brush)->mask); + + return GIMP_BRUSH (brush); +} + +void +gimp_brush_generated_freeze (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + brush->freeze++; +} + +void +gimp_brush_generated_thaw (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + if (brush->freeze > 0) + brush->freeze--; + + if (brush->freeze == 0) + gimp_data_dirty (GIMP_DATA (brush)); +} + gfloat gimp_brush_generated_set_radius (GimpBrushGenerated *brush, gfloat radius) @@ -481,8 +442,8 @@ gimp_brush_generated_set_radius (GimpBrushGenerated *brush, brush->radius = radius; - if (!brush->freeze) - gimp_brush_generated_generate (brush); + if (! brush->freeze) + gimp_data_dirty (GIMP_DATA (brush)); return brush->radius; } @@ -504,7 +465,7 @@ gimp_brush_generated_set_hardness (GimpBrushGenerated *brush, brush->hardness = hardness; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->hardness; } @@ -526,7 +487,7 @@ gimp_brush_generated_set_angle (GimpBrushGenerated *brush, brush->angle = angle; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->angle; } @@ -548,7 +509,7 @@ gimp_brush_generated_set_aspect_ratio (GimpBrushGenerated *brush, brush->aspect_ratio = ratio; if (!brush->freeze) - gimp_brush_generated_generate(brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->aspect_ratio; } diff --git a/app/core/gimpbrushgenerated.h b/app/core/gimpbrushgenerated.h index f38d961667..137be2204a 100644 --- a/app/core/gimpbrushgenerated.h +++ b/app/core/gimpbrushgenerated.h @@ -25,6 +25,9 @@ #include "gimpbrush.h" +#define GIMP_BRUSH_GENERATED_FILE_EXTENSION ".vbr" + + #define GIMP_TYPE_BRUSH_GENERATED (gimp_brush_generated_get_type ()) #define GIMP_BRUSH_GENERATED(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_BRUSH_GENERATED, GimpBrushGenerated)) #define GIMP_BRUSH_GENERATED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_BRUSH_GENERATED, GimpBrushGeneratedClass)) @@ -60,10 +63,6 @@ GimpBrush * gimp_brush_generated_new (gfloat radius, gfloat aspect_ratio); GimpBrush * gimp_brush_generated_load (const gchar *file_name); -void gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory); -void gimp_brush_generated_delete (GimpBrushGenerated *brush); - void gimp_brush_generated_freeze (GimpBrushGenerated *brush); void gimp_brush_generated_thaw (GimpBrushGenerated *brush); diff --git a/app/core/gimpbrushpipe-load.c b/app/core/gimpbrushpipe-load.c index 539c118334..2370ad5f22 100644 --- a/app/core/gimpbrushpipe-load.c +++ b/app/core/gimpbrushpipe-load.c @@ -396,8 +396,9 @@ gimp_brush_pipe_load (const gchar *filename) /* Current brush is the first one. */ pipe->current = pipe->brushes[0]; + gimp_data_set_filename (GIMP_DATA (pipe), filename); + /* just to satisfy the code that relies on this crap */ - GIMP_BRUSH (pipe)->filename = g_strdup (filename); GIMP_BRUSH (pipe)->spacing = pipe->current->spacing; GIMP_BRUSH (pipe)->x_axis = pipe->current->x_axis; GIMP_BRUSH (pipe)->y_axis = pipe->current->y_axis; diff --git a/app/core/gimpbrushpipe.c b/app/core/gimpbrushpipe.c index 539c118334..2370ad5f22 100644 --- a/app/core/gimpbrushpipe.c +++ b/app/core/gimpbrushpipe.c @@ -396,8 +396,9 @@ gimp_brush_pipe_load (const gchar *filename) /* Current brush is the first one. */ pipe->current = pipe->brushes[0]; + gimp_data_set_filename (GIMP_DATA (pipe), filename); + /* just to satisfy the code that relies on this crap */ - GIMP_BRUSH (pipe)->filename = g_strdup (filename); GIMP_BRUSH (pipe)->spacing = pipe->current->spacing; GIMP_BRUSH (pipe)->x_axis = pipe->current->x_axis; GIMP_BRUSH (pipe)->y_axis = pipe->current->y_axis; diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c new file mode 100644 index 0000000000..66c6e62900 --- /dev/null +++ b/app/core/gimpdata.c @@ -0,0 +1,254 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#include "apptypes.h" + +#include "gimpdata.h" + +#include "libgimp/gimpenv.h" + + +enum +{ + DIRTY, + SAVE, + LAST_SIGNAL +}; + + +static void gimp_data_class_init (GimpDataClass *klass); +static void gimp_data_init (GimpData *data); +static void gimp_data_destroy (GtkObject *object); +static void gimp_data_real_dirty (GimpData *data); + + +static guint data_signals[LAST_SIGNAL] = { 0 }; + +static GimpViewableClass *parent_class = NULL; + + +GtkType +gimp_data_get_type (void) +{ + static GtkType data_type = 0; + + if (! data_type) + { + static const GtkTypeInfo data_info = + { + "GimpData", + sizeof (GimpData), + sizeof (GimpDataClass), + (GtkClassInitFunc) gimp_data_class_init, + (GtkObjectInitFunc) gimp_data_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL + }; + + data_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &data_info); + } + + return data_type; +} + +static void +gimp_data_class_init (GimpDataClass *klass) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass *) klass; + + parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + + data_signals[DIRTY] = + gtk_signal_new ("dirty", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpDataClass, + dirty), + gtk_signal_default_marshaller, + GTK_TYPE_NONE, 0); + + data_signals[SAVE] = + gtk_signal_new ("save", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpDataClass, + save), + gtk_marshal_BOOL__NONE, + GTK_TYPE_BOOL, 0); + + object_class->destroy = gimp_data_destroy; + + klass->dirty = gimp_data_real_dirty; + klass->save = NULL; +} + +static void +gimp_data_init (GimpData *data) +{ + data->filename = NULL; + data->dirty = FALSE; +} + +static void +gimp_data_destroy (GtkObject *object) +{ + GimpData *data; + + data = GIMP_DATA (object); + + g_free (data->filename); + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} + +gboolean +gimp_data_save (GimpData *data) +{ + gboolean success = FALSE; + + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_DATA (data), FALSE); + + if (! data->filename) + { + g_warning ("%s(): can't save data with NULL filename", + G_GNUC_FUNCTION); + return FALSE; + } + + gtk_signal_emit (GTK_OBJECT (data), data_signals[SAVE], + &success); + + if (success) + data->dirty = FALSE; + + return success; +} + +void +gimp_data_dirty (GimpData *data) +{ + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + + gtk_signal_emit (GTK_OBJECT (data), data_signals[DIRTY]); +} + +static void +gimp_data_real_dirty (GimpData *data) +{ + data->dirty = TRUE; +} + +gboolean +gimp_data_delete_from_disk (GimpData *data) +{ + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_DATA (data), FALSE); + g_return_val_if_fail (data->filename != NULL, FALSE); + + if (unlink (data->filename) == -1) + { + g_message ("%s(): could not unlink() %s: %s", + G_GNUC_FUNCTION, data->filename, g_strerror (errno)); + return FALSE; + } + + return TRUE; +} + +void +gimp_data_set_filename (GimpData *data, + const gchar *filename) +{ + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + + g_free (data->filename); + + data->filename = g_strdup (filename); +} + +void +gimp_data_create_filename (GimpData *data, + const gchar *basename, + const gchar *extension, + const gchar *data_path) +{ + GList *path; + gchar *dir; + gchar *filename; + gchar *safe_name; + gint i; + gint unum = 1; + FILE *file; + + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + g_return_if_fail (basename != NULL); + g_return_if_fail (extension != NULL); + g_return_if_fail (data_path != NULL); + + path = gimp_path_parse (data_path, 16, TRUE, NULL); + dir = gimp_path_get_user_writable_dir (path); + gimp_path_free (path); + + if (! dir) + return; + + safe_name = g_strdup (basename); + if (safe_name[0] == '.') + safe_name[0] = '_'; + for (i = 0; safe_name[i]; i++) + if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) + safe_name[i] = '_'; + + filename = g_strdup_printf ("%s%s%s", dir, safe_name, extension); + + while ((file = fopen (filename, "r"))) + { + fclose (file); + + g_free (filename); + filename = g_strdup_printf ("%s%s_%d%s", dir, safe_name, unum, extension); + unum++; + } + + g_free (dir); + g_free (safe_name); + + gimp_data_set_filename (data, filename); + + g_free (filename); +} diff --git a/app/core/gimpdata.h b/app/core/gimpdata.h new file mode 100644 index 0000000000..95d5498977 --- /dev/null +++ b/app/core/gimpdata.h @@ -0,0 +1,67 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __GIMP_DATA_H__ +#define __GIMP_DATA_H__ + + +#include "gimpviewable.h" + + +#define GIMP_TYPE_DATA (gimp_data_get_type ()) +#define GIMP_DATA(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_DATA, GimpData)) +#define GIMP_DATA_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DATA, GimpDataClass)) +#define GIMP_IS_DATA(obj) (GTK_CHECK_TYPE ((obj), GIMP_TYPE_DATA)) +#define GIMP_IS_DATA_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DATA)) + + +typedef struct _GimpDataClass GimpDataClass; + +struct _GimpData +{ + GimpViewable parent_instance; + + gchar *filename; + gboolean dirty; +}; + +struct _GimpDataClass +{ + GimpViewableClass parent_class; + + void (* dirty) (GimpData *data); + gboolean (* save) (GimpData *data); +}; + + +GtkType gimp_data_get_type (void); + +gboolean gimp_data_save (GimpData *data); + +void gimp_data_dirty (GimpData *data); +gboolean gimp_data_delete_from_disk (GimpData *data); + +void gimp_data_set_filename (GimpData *data, + const gchar *filename); +void gimp_data_create_filename (GimpData *data, + const gchar *filename, + const gchar *extension, + const gchar *data_path); + + +#endif /* __GIMP_DATA_H__ */ diff --git a/app/core/gimpgradient.c b/app/core/gimpgradient.c index 3e7b385d70..da5306e88d 100644 --- a/app/core/gimpgradient.c +++ b/app/core/gimpgradient.c @@ -18,28 +18,12 @@ #include "config.h" +#include #include -#include #include -#include - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include #include -#ifdef G_OS_WIN32 -#include -#endif - -#ifndef _O_BINARY -#define _O_BINARY 0 -#endif - #include "libgimpcolor/gimpcolor.h" #include "libgimpmath/gimpmath.h" @@ -60,29 +44,28 @@ #define EPSILON 1e-10 -static void gimp_gradient_class_init (GimpGradientClass *klass); -static void gimp_gradient_init (GimpGradient *gradient); -static void gimp_gradient_destroy (GtkObject *object); -static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable, - gint width, - gint height); +static void gimp_gradient_class_init (GimpGradientClass *klass); +static void gimp_gradient_init (GimpGradient *gradient); +static void gimp_gradient_destroy (GtkObject *object); +static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable, + gint width, + gint height); +static void gimp_gradient_dirty (GimpData *data); +static gboolean gimp_gradient_save (GimpData *data); -static void gimp_gradient_dump (GimpGradient *grad, - FILE *file); - -static gdouble gimp_gradient_calc_linear_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_curved_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sine_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle, - gdouble pos); +static gdouble gimp_gradient_calc_linear_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_curved_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sine_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle, + gdouble pos); -static GimpViewableClass *parent_class = NULL; +static GimpDataClass *parent_class = NULL; GtkType @@ -104,7 +87,7 @@ gimp_gradient_get_type (void) (GtkClassInitFunc) NULL }; - gradient_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &gradient_info); + gradient_type = gtk_type_unique (GIMP_TYPE_DATA, &gradient_info); } return gradient_type; @@ -115,23 +98,25 @@ gimp_gradient_class_init (GimpGradientClass *klass) { GtkObjectClass *object_class; GimpViewableClass *viewable_class; + GimpDataClass *data_class; object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; + data_class = (GimpDataClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_gradient_destroy; viewable_class->get_new_preview = gimp_gradient_get_new_preview; + + data_class->dirty = gimp_gradient_dirty; + data_class->save = gimp_gradient_save; } static void gimp_gradient_init (GimpGradient *gradient) { - gradient->filename = NULL; - gradient->dirty = FALSE; - gradient->segments = NULL; gradient->last_visited = NULL; @@ -145,8 +130,6 @@ gimp_gradient_destroy (GtkObject *object) gradient = GIMP_GRADIENT (object); - g_free (gradient->filename); - if (gradient->segments) gimp_gradient_segments_free (gradient->segments); @@ -232,39 +215,6 @@ gimp_gradient_get_new_preview (GimpViewable *viewable, return temp_buf; } -static void -gimp_gradient_dump (GimpGradient *gradient, - FILE *file) -{ - GimpGradientSegment *seg; - - g_return_if_fail (gradient != NULL); - g_return_if_fail (GIMP_IS_GRADIENT (gradient)); - - fprintf (file, "Name: \"%s\"\n", GIMP_OBJECT (gradient)->name); - fprintf (file, "Dirty: %d\n", gradient->dirty); - fprintf (file, "Filename: \"%s\"\n", gradient->filename); - - for (seg = gradient->segments; seg; seg = seg->next) - { - fprintf (file, "%c%p | %f %f %f | %f %f %f %f | %f %f %f %f | %d %d | %p %p\n", - (seg == gradient->last_visited) ? '>' : ' ', - seg, - seg->left, seg->middle, seg->right, - seg->left_color.r, - seg->left_color.g, - seg->left_color.b, - seg->left_color.a, - seg->right_color.r, - seg->right_color.g, - seg->right_color.b, - seg->right_color.a, - (int) seg->type, - (int) seg->color, - seg->prev, seg->next); - } -} - GimpGradient * gimp_gradient_new (const gchar *name) { @@ -308,10 +258,20 @@ gimp_gradient_load (const gchar *filename) gradient = GIMP_GRADIENT (gtk_type_new (GIMP_TYPE_GRADIENT)); - gradient->filename = g_strdup (filename); - GIMP_OBJECT (gradient)->name = g_strdup (g_basename (filename)); + gimp_data_set_filename (GIMP_DATA (gradient), filename); fgets (line, 1024, file); + if (! strncmp (line, "Name: ", strlen ("Name: "))) + { + gimp_object_set_name (GIMP_OBJECT (gradient), &line[strlen ("Name: ")]); + + fgets (line, 1024, file); + } + else /* old gradient format */ + { + gimp_object_set_name (GIMP_OBJECT (gradient), g_basename (filename)); + } + num_segments = atoi (line); if (num_segments < 1) @@ -368,29 +328,35 @@ gimp_gradient_load (const gchar *filename) return gradient; } -void -gimp_gradient_save (GimpGradient *gradient) +static void +gimp_gradient_dirty (GimpData *data) { - FILE *file; - gint num_segments; + GimpGradient *gradient; + + gradient = GIMP_GRADIENT (data); + + gradient->last_visited = NULL; + + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); +} + +static gboolean +gimp_gradient_save (GimpData *data) +{ + GimpGradient *gradient; GimpGradientSegment *seg; + gint num_segments; + FILE *file; - g_return_if_fail (gradient != NULL); - g_return_if_fail (GIMP_IS_GRADIENT (gradient)); + gradient = GIMP_GRADIENT (data); - if (! gradient->filename) - { - g_message ("%s(): can't save gradient with NULL filename", - G_GNUC_FUNCTION); - return; - } - - file = fopen (gradient->filename, "wb"); + file = fopen (data->filename, "wb"); if (! file) { g_message ("%s(): can't open \"%s\"", - G_GNUC_FUNCTION, gradient->filename); - return; + G_GNUC_FUNCTION, data->filename); + return FALSE; } /* File format is: @@ -404,6 +370,8 @@ gimp_gradient_save (GimpGradient *gradient) fprintf (file, "GIMP Gradient\n"); + fprintf (file, "Name: %s\n", GIMP_OBJECT (gradient)->name); + /* Count number of segments */ num_segments = 0; seg = gradient->segments; @@ -435,7 +403,7 @@ gimp_gradient_save (GimpGradient *gradient) fclose (file); - gradient->dirty = FALSE; + return TRUE; } void @@ -503,9 +471,8 @@ gimp_gradient_get_color_at (GimpGradient *gradient, break; default: - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("gradient_get_color_at(): Unknown gradient type %d", - (int) seg->type); + gimp_fatal_error ("%s(): Unknown gradient type %d", + G_GNUC_FUNCTION, (gint) seg->type); break; } @@ -566,9 +533,8 @@ gimp_gradient_get_color_at (GimpGradient *gradient, break; default: - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("gradient_get_color_at(): Unknown coloring mode %d", - (int) seg->color); + gimp_fatal_error ("%s(): Unknown coloring mode %d", + G_GNUC_FUNCTION, (gint) seg->color); break; } @@ -578,6 +544,50 @@ gimp_gradient_get_color_at (GimpGradient *gradient, *color = rgb; } +GimpGradientSegment * +gimp_gradient_get_segment_at (GimpGradient *gradient, + gdouble pos) +{ + GimpGradientSegment *seg; + + g_return_val_if_fail (gradient != NULL, NULL); + g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL); + + /* handle FP imprecision at the edges of the gradient */ + pos = CLAMP (pos, 0.0, 1.0); + + if (gradient->last_visited) + seg = gradient->last_visited; + else + seg = gradient->segments; + + while (seg) + { + if (pos >= seg->left) + { + if (pos <= seg->right) + { + gradient->last_visited = seg; /* for speed */ + return seg; + } + else + { + seg = seg->next; + } + } + else + { + seg = seg->prev; + } + } + + /* Oops: we should have found a segment, but we didn't */ + gimp_fatal_error ("%s(): no matching segment for position %0.15f", + G_GNUC_FUNCTION, pos); + + return NULL; +} + static gdouble gimp_gradient_calc_linear_factor (gdouble middle, gdouble pos) @@ -698,48 +708,3 @@ gimp_gradient_segment_get_last (GimpGradientSegment *seg) return seg; } - -GimpGradientSegment * -gimp_gradient_get_segment_at (GimpGradient *gradient, - gdouble pos) -{ - GimpGradientSegment *seg; - - g_return_val_if_fail (gradient != NULL, NULL); - g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL); - - /* handle FP imprecision at the edges of the gradient */ - pos = CLAMP (pos, 0.0, 1.0); - - if (gradient->last_visited) - seg = gradient->last_visited; - else - seg = gradient->segments; - - while (seg) - { - if (pos >= seg->left) - { - if (pos <= seg->right) - { - gradient->last_visited = seg; /* for speed */ - return seg; - } - else - { - seg = seg->next; - } - } - else - { - seg = seg->prev; - } - } - - /* Oops: we should have found a segment, but we didn't */ - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("%s(): no matching segment for position %0.15f", - G_GNUC_FUNCTION, pos); - - return NULL; -} diff --git a/app/core/gimpgradient.h b/app/core/gimpgradient.h index 88847e3fea..b6066a44bf 100644 --- a/app/core/gimpgradient.h +++ b/app/core/gimpgradient.h @@ -20,7 +20,10 @@ #define __GIMP_GRADIENT_H__ -#include "gimpviewable.h" +#include "gimpdata.h" + + +#define GIMP_GRADIENT_FILE_EXTENSION ".ggr" typedef enum @@ -66,10 +69,7 @@ typedef struct _GimpGradientClass GimpGradientClass; struct _GimpGradient { - GimpViewable parent_instance; - - gchar *filename; - gboolean dirty; + GimpData parent_instance; GimpGradientSegment *segments; @@ -80,30 +80,29 @@ struct _GimpGradient struct _GimpGradientClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; }; -GtkType gimp_gradient_get_type (void); -GimpGradient * gimp_gradient_new (const gchar *name); +GtkType gimp_gradient_get_type (void); +GimpGradient * gimp_gradient_new (const gchar *name); -GimpGradient * gimp_gradient_load (const gchar *filename); -void gimp_gradient_save (GimpGradient *gradient); +GimpGradient * gimp_gradient_load (const gchar *filename); -void gimp_gradient_get_color_at (GimpGradient *gradient, - gdouble pos, - GimpRGB *color); +void gimp_gradient_get_color_at (GimpGradient *gradient, + gdouble pos, + GimpRGB *color); +GimpGradientSegment * gimp_gradient_get_segment_at (GimpGradient *grad, + gdouble pos); /* gradient segment functions */ GimpGradientSegment * gimp_gradient_segment_new (void); -GimpGradientSegment * gimp_gradient_get_segment_at (GimpGradient *grad, - gdouble pos); GimpGradientSegment * gimp_gradient_segment_get_last (GimpGradientSegment *seg); -void gimp_gradient_segment_free (GimpGradientSegment *seg); -void gimp_gradient_segments_free (GimpGradientSegment *seg); +void gimp_gradient_segment_free (GimpGradientSegment *seg); +void gimp_gradient_segments_free (GimpGradientSegment *seg); #endif /* __GIMP_GRADIENT_H__ */ diff --git a/app/core/gimppattern-load.c b/app/core/gimppattern-load.c index f43bbba857..46386b5316 100644 --- a/app/core/gimppattern-load.c +++ b/app/core/gimppattern-load.c @@ -60,7 +60,7 @@ static TempBuf * gimp_pattern_get_new_preview (GimpViewable *viewable, gint height); -static GimpViewableClass *parent_class = NULL; +static GimpDataClass *parent_class = NULL; GtkType @@ -82,7 +82,7 @@ gimp_pattern_get_type (void) (GtkClassInitFunc) NULL }; - pattern_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &pattern_info); + pattern_type = gtk_type_unique (GIMP_TYPE_DATA, &pattern_info); } return pattern_type; @@ -97,7 +97,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_pattern_destroy; @@ -107,8 +107,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) static void gimp_pattern_init (GimpPattern *pattern) { - pattern->filename = NULL; - pattern->mask = NULL; + pattern->mask = NULL; } static void @@ -118,8 +117,6 @@ gimp_pattern_destroy (GtkObject *object) pattern = GIMP_PATTERN (object); - g_free (pattern->filename); - if (pattern->mask) temp_buf_free (pattern->mask); @@ -236,9 +233,11 @@ gimp_pattern_load (const gchar *filename) close (fd); - GIMP_OBJECT (pattern)->name = name; + gimp_object_set_name (GIMP_OBJECT (pattern), name); - pattern->filename = g_strdup (filename); + g_free (name); + + gimp_data_set_filename (GIMP_DATA (pattern), filename); /* Swap the pattern to disk (if we're being stingy with memory) */ if (stingy_memory_use) diff --git a/app/core/gimppattern.c b/app/core/gimppattern.c index f43bbba857..46386b5316 100644 --- a/app/core/gimppattern.c +++ b/app/core/gimppattern.c @@ -60,7 +60,7 @@ static TempBuf * gimp_pattern_get_new_preview (GimpViewable *viewable, gint height); -static GimpViewableClass *parent_class = NULL; +static GimpDataClass *parent_class = NULL; GtkType @@ -82,7 +82,7 @@ gimp_pattern_get_type (void) (GtkClassInitFunc) NULL }; - pattern_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &pattern_info); + pattern_type = gtk_type_unique (GIMP_TYPE_DATA, &pattern_info); } return pattern_type; @@ -97,7 +97,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_pattern_destroy; @@ -107,8 +107,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) static void gimp_pattern_init (GimpPattern *pattern) { - pattern->filename = NULL; - pattern->mask = NULL; + pattern->mask = NULL; } static void @@ -118,8 +117,6 @@ gimp_pattern_destroy (GtkObject *object) pattern = GIMP_PATTERN (object); - g_free (pattern->filename); - if (pattern->mask) temp_buf_free (pattern->mask); @@ -236,9 +233,11 @@ gimp_pattern_load (const gchar *filename) close (fd); - GIMP_OBJECT (pattern)->name = name; + gimp_object_set_name (GIMP_OBJECT (pattern), name); - pattern->filename = g_strdup (filename); + g_free (name); + + gimp_data_set_filename (GIMP_DATA (pattern), filename); /* Swap the pattern to disk (if we're being stingy with memory) */ if (stingy_memory_use) diff --git a/app/core/gimppattern.h b/app/core/gimppattern.h index 1ca9c06035..a1ebdd42a8 100644 --- a/app/core/gimppattern.h +++ b/app/core/gimppattern.h @@ -20,7 +20,7 @@ #define __GIMP_PATTERN_H__ -#include "gimpviewable.h" +#include "gimpdata.h" #define GIMP_TYPE_PATTERN (gimp_pattern_get_type ()) @@ -34,15 +34,14 @@ typedef struct _GimpPatternClass GimpPatternClass; struct _GimpPattern { - GimpViewable parent_instance; + GimpData parent_instance; - gchar *filename; /* actual filename--pattern's location on disk */ - TempBuf *mask; /* the actual mask */ + TempBuf *mask; }; struct _GimpPatternClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; }; diff --git a/app/gimpbrush.c b/app/gimpbrush.c index ae89d48314..9da968ec4f 100644 --- a/app/gimpbrush.c +++ b/app/gimpbrush.c @@ -89,7 +89,7 @@ gimp_brush_get_type (void) (GtkClassInitFunc) NULL }; - type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &info); + type = gtk_type_unique (GIMP_TYPE_DATA, &info); } return type; } @@ -103,7 +103,7 @@ gimp_brush_class_init (GimpBrushClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_brush_destroy; @@ -116,16 +116,14 @@ gimp_brush_class_init (GimpBrushClass *klass) static void gimp_brush_init (GimpBrush *brush) { - brush->filename = NULL; + brush->mask = NULL; + brush->pixmap = NULL; brush->spacing = 20; brush->x_axis.x = 15.0; brush->x_axis.y = 0.0; brush->y_axis.x = 0.0; brush->y_axis.y = 15.0; - - brush->mask = NULL; - brush->pixmap = NULL; } static void @@ -135,8 +133,6 @@ gimp_brush_destroy (GtkObject *object) brush = GIMP_BRUSH (object); - g_free (brush->filename); - if (brush->mask) temp_buf_free (brush->mask); @@ -269,12 +265,16 @@ gimp_brush_load (const gchar *filename) close (fd); - brush->filename = g_strdup (filename); + if (! brush) + return NULL; + + gimp_data_set_filename (GIMP_DATA (brush), filename); /* Swap the brush to disk (if we're being stingy with memory) */ if (stingy_memory_use) { temp_buf_swap (brush->mask); + if (brush->pixmap) temp_buf_swap (brush->pixmap); } @@ -429,7 +429,7 @@ gimp_brush_load_brush (gint fd, } } break; - + default: g_message ("Unsupported brush depth: %d\n" "in file \"%s\"\n" diff --git a/app/gimpbrush.h b/app/gimpbrush.h index ac1f98d0ba..ba0837291f 100644 --- a/app/gimpbrush.h +++ b/app/gimpbrush.h @@ -20,7 +20,7 @@ #define __GIMP_BRUSH_H__ -#include "gimpviewable.h" +#include "gimpdata.h" #define GIMP_TYPE_BRUSH (gimp_brush_get_type ()) @@ -34,19 +34,19 @@ typedef struct _GimpBrushClass GimpBrushClass; struct _GimpBrush { - GimpViewable parent_instance; + GimpData parent_instance; - gchar *filename; /* actual filename--brush's location on disk */ - gint spacing; /* brush's spacing */ - GimpVector2 x_axis; /* for calculating brush spacing */ - GimpVector2 y_axis; /* for calculating brush spacing */ - TempBuf *mask; /* the actual mask */ - TempBuf *pixmap; /* optional pixmap data */ + TempBuf *mask; /* the actual mask */ + TempBuf *pixmap; /* optional pixmap data */ + + gint spacing; /* brush's spacing */ + GimpVector2 x_axis; /* for calculating brush spacing */ + GimpVector2 y_axis; /* for calculating brush spacing */ }; struct _GimpBrushClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; /* FIXME: these are no virtual function pointers but bad hacks: */ GimpBrush * (* select_brush) (PaintCore *paint_core); diff --git a/app/gimpbrushgenerated.c b/app/gimpbrushgenerated.c index b6a1faaee5..b9c03975c7 100644 --- a/app/gimpbrushgenerated.c +++ b/app/gimpbrushgenerated.c @@ -47,42 +47,18 @@ #define OVERSAMPLING 5 -static void gimp_brush_generated_generate (GimpBrushGenerated *brush); +/* local function prototypes */ +static void gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass); +static void gimp_brush_generated_init (GimpBrushGenerated *brush); +static void gimp_brush_generated_destroy (GtkObject *object); +static gboolean gimp_brush_generated_save (GimpData *data); +static void gimp_brush_generated_dirty (GimpData *data); static GimpBrushClass *parent_class = NULL; -static void -gimp_brush_generated_destroy (GtkObject *object) -{ - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - -static void -gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) klass; - - parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - - object_class->destroy = gimp_brush_generated_destroy; -} - -static void -gimp_brush_generated_init (GimpBrushGenerated *brush) -{ - brush->radius = 5.0; - brush->hardness = 0.0; - brush->angle = 0.0; - brush->aspect_ratio = 1.0; - brush->freeze = 0; -} - -guint +GtkType gimp_brush_generated_get_type (void) { static GtkType type = 0; @@ -107,162 +83,56 @@ gimp_brush_generated_get_type (void) return type; } -GimpBrush * -gimp_brush_generated_new (gfloat radius, - gfloat hardness, - gfloat angle, - gfloat aspect_ratio) +static void +gimp_brush_generated_class_init (GimpBrushGeneratedClass *klass) { - GimpBrushGenerated *brush; + GtkObjectClass *object_class; + GimpDataClass *data_class; - /* set up normal brush data */ - brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + object_class = (GtkObjectClass *) klass; + data_class = (GimpDataClass *) klass; - gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + parent_class = gtk_type_class (GIMP_TYPE_BRUSH); - GIMP_BRUSH (brush)->spacing = 20; + object_class->destroy = gimp_brush_generated_destroy; - /* set up gimp_brush_generated data */ - brush->radius = radius; - brush->hardness = hardness; - brush->angle = angle; - brush->aspect_ratio = aspect_ratio; - - /* render brush mask */ - gimp_brush_generated_generate (brush); - - return GIMP_BRUSH (brush); + data_class->save = gimp_brush_generated_save; + data_class->dirty = gimp_brush_generated_dirty; } -GimpBrush * -gimp_brush_generated_load (const gchar *file_name) +static void +gimp_brush_generated_init (GimpBrushGenerated *brush) { - GimpBrushGenerated *brush; - FILE *fp; - gchar string[256]; - gfloat fl; - gfloat version; - - if ((fp = fopen (file_name, "rb")) == NULL) - return NULL; - - /* make sure the file we are reading is the right type */ - fgets (string, 255, fp); - - if (strncmp (string, "GIMP-VBR", 8) != 0) - return NULL; - - /* make sure we are reading a compatible version */ - fgets (string, 255, fp); - sscanf (string, "%f", &version); - g_return_val_if_fail (version < 2.0, NULL); - - /* create new brush */ - brush = - GIMP_BRUSH_GENERATED (gtk_type_new (gimp_brush_generated_get_type ())); - - GIMP_BRUSH (brush)->filename = g_strdup (file_name); - - gimp_brush_generated_freeze (brush); - - /* read name */ - fgets (string, 255, fp); - if (string[strlen (string) - 1] == '\n') - string[strlen (string) - 1] = 0; - gimp_object_set_name (GIMP_OBJECT (brush), string); - - /* read brush spacing */ - fscanf (fp, "%f", &fl); - GIMP_BRUSH (brush)->spacing = fl; - - /* read brush radius */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_radius (brush, fl); - - /* read brush hardness */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_hardness (brush, fl); - - /* read brush aspect_ratio */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_aspect_ratio (brush, fl); - - /* read brush angle */ - fscanf (fp, "%f", &fl); - gimp_brush_generated_set_angle (brush, fl); - - fclose (fp); - - gimp_brush_generated_thaw (brush); - - if (stingy_memory_use) - temp_buf_swap (GIMP_BRUSH (brush)->mask); - - return GIMP_BRUSH (brush); + brush->radius = 5.0; + brush->hardness = 0.0; + brush->angle = 0.0; + brush->aspect_ratio = 1.0; + brush->freeze = 0; } -void -gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory) +static void +gimp_brush_generated_destroy (GtkObject *object) { - FILE *fp; - gchar *filename = NULL; + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - g_return_if_fail (directory != NULL); +static gboolean +gimp_brush_generated_save (GimpData *data) +{ + GimpBrushGenerated *brush; + FILE *fp; - if (! GIMP_BRUSH (brush)->filename) - { - gchar *safe_name; - gint i; - gint unum = 1; + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_BRUSH_GENERATED (data), FALSE); - /* make sure we don't create a naughty filename */ - safe_name = g_strdup (GIMP_OBJECT (brush)->name); - if (safe_name[0] == '.') - safe_name[0] = '_'; - for (i = 0; safe_name[i]; i++) - if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) - safe_name[i] = '_'; - - filename = g_strdup_printf ("%s%s.vbr", - directory, safe_name); - - while ((fp = fopen (filename, "r"))) - { - /* make sure we don't overite an existing brush */ - fclose (fp); - g_free (filename); - filename = g_strdup_printf ("%s%s_%d.vbr", - directory, safe_name, unum); - unum++; - } - g_free (safe_name); - } - else - { - filename = g_strdup (GIMP_BRUSH (brush)->filename); - - if (strlen(filename) < 4 || strcmp (&filename[strlen (filename) - 4], - ".vbr")) - { - /* we only want to save .vbr files, so set filename to null - * if this isn't a .vbr file - */ - g_free (filename); - filename = NULL; - } - } - - if (! filename) - return; + brush = GIMP_BRUSH_GENERATED (data); /* we are (finaly) ready to try to save the generated brush file */ - if ((fp = fopen (filename, "wb")) == NULL) + if ((fp = fopen (data->filename, "wb")) == NULL) { - g_warning ("Unable to save file %s", filename); - return; + g_warning ("Unable to save file %s", data->filename); + return FALSE; } /* write magic header */ @@ -290,37 +160,8 @@ gimp_brush_generated_save (GimpBrushGenerated *brush, fprintf (fp, "%f\n", brush->angle); fclose (fp); -} -void -gimp_brush_generated_delete (GimpBrushGenerated *brush) -{ - if (GIMP_BRUSH (brush)->filename) - { - unlink (GIMP_BRUSH (brush)->filename); - } -} - -void -gimp_brush_generated_freeze (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - brush->freeze++; -} - -void -gimp_brush_generated_thaw (GimpBrushGenerated *brush) -{ - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - - if (brush->freeze > 0) - brush->freeze--; - - if (brush->freeze == 0) - gimp_brush_generated_generate (brush); + return TRUE; } static double @@ -340,9 +181,10 @@ gauss (gdouble f) return (2.0 * f*f); } -void -gimp_brush_generated_generate (GimpBrushGenerated *brush) +static void +gimp_brush_generated_dirty (GimpData *data) { + GimpBrushGenerated *brush; register GimpBrush *gbrush = NULL; register gint x, y; register guchar *centerp; @@ -355,9 +197,8 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) gdouble buffer[OVERSAMPLING]; gint width, height; - g_return_if_fail (brush != NULL); - g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); - + brush = GIMP_BRUSH_GENERATED (data); + if (brush->freeze) /* if we are frozen defer rerendering till later */ return; @@ -368,7 +209,7 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) if (gbrush->mask) { - temp_buf_free(gbrush->mask); + temp_buf_free (gbrush->mask); } /* compute the range of the brush. should do a better job than this? */ @@ -462,9 +303,129 @@ gimp_brush_generated_generate (GimpBrushGenerated *brush) g_free (lookup); + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); + gimp_viewable_invalidate_preview (GIMP_VIEWABLE (brush)); } +GimpBrush * +gimp_brush_generated_new (gfloat radius, + gfloat hardness, + gfloat angle, + gfloat aspect_ratio) +{ + GimpBrushGenerated *brush; + + /* set up normal brush data */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_object_set_name (GIMP_OBJECT (brush), "Untitled"); + + GIMP_BRUSH (brush)->spacing = 20; + + /* set up gimp_brush_generated data */ + brush->radius = radius; + brush->hardness = hardness; + brush->angle = angle; + brush->aspect_ratio = aspect_ratio; + + /* render brush mask */ + gimp_data_dirty (GIMP_DATA (brush)); + + return GIMP_BRUSH (brush); +} + +GimpBrush * +gimp_brush_generated_load (const gchar *filename) +{ + GimpBrushGenerated *brush; + FILE *fp; + gchar string[256]; + gfloat fl; + gfloat version; + + if ((fp = fopen (filename, "rb")) == NULL) + return NULL; + + /* make sure the file we are reading is the right type */ + fgets (string, 255, fp); + + if (strncmp (string, "GIMP-VBR", 8) != 0) + return NULL; + + /* make sure we are reading a compatible version */ + fgets (string, 255, fp); + sscanf (string, "%f", &version); + g_return_val_if_fail (version < 2.0, NULL); + + /* create new brush */ + brush = GIMP_BRUSH_GENERATED (gtk_type_new (GIMP_TYPE_BRUSH_GENERATED)); + + gimp_data_set_filename (GIMP_DATA (brush), filename); + + gimp_brush_generated_freeze (brush); + + /* read name */ + fgets (string, 255, fp); + if (string[strlen (string) - 1] == '\n') + string[strlen (string) - 1] = 0; + gimp_object_set_name (GIMP_OBJECT (brush), string); + + /* read brush spacing */ + fscanf (fp, "%f", &fl); + GIMP_BRUSH (brush)->spacing = fl; + + /* read brush radius */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_radius (brush, fl); + + /* read brush hardness */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_hardness (brush, fl); + + /* read brush aspect_ratio */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_aspect_ratio (brush, fl); + + /* read brush angle */ + fscanf (fp, "%f", &fl); + gimp_brush_generated_set_angle (brush, fl); + + fclose (fp); + + gimp_brush_generated_thaw (brush); + + GIMP_DATA (brush)->dirty = FALSE; + + if (stingy_memory_use) + temp_buf_swap (GIMP_BRUSH (brush)->mask); + + return GIMP_BRUSH (brush); +} + +void +gimp_brush_generated_freeze (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + brush->freeze++; +} + +void +gimp_brush_generated_thaw (GimpBrushGenerated *brush) +{ + g_return_if_fail (brush != NULL); + g_return_if_fail (GIMP_IS_BRUSH_GENERATED (brush)); + + if (brush->freeze > 0) + brush->freeze--; + + if (brush->freeze == 0) + gimp_data_dirty (GIMP_DATA (brush)); +} + gfloat gimp_brush_generated_set_radius (GimpBrushGenerated *brush, gfloat radius) @@ -481,8 +442,8 @@ gimp_brush_generated_set_radius (GimpBrushGenerated *brush, brush->radius = radius; - if (!brush->freeze) - gimp_brush_generated_generate (brush); + if (! brush->freeze) + gimp_data_dirty (GIMP_DATA (brush)); return brush->radius; } @@ -504,7 +465,7 @@ gimp_brush_generated_set_hardness (GimpBrushGenerated *brush, brush->hardness = hardness; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->hardness; } @@ -526,7 +487,7 @@ gimp_brush_generated_set_angle (GimpBrushGenerated *brush, brush->angle = angle; if (!brush->freeze) - gimp_brush_generated_generate (brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->angle; } @@ -548,7 +509,7 @@ gimp_brush_generated_set_aspect_ratio (GimpBrushGenerated *brush, brush->aspect_ratio = ratio; if (!brush->freeze) - gimp_brush_generated_generate(brush); + gimp_data_dirty (GIMP_DATA (brush)); return brush->aspect_ratio; } diff --git a/app/gimpbrushgenerated.h b/app/gimpbrushgenerated.h index f38d961667..137be2204a 100644 --- a/app/gimpbrushgenerated.h +++ b/app/gimpbrushgenerated.h @@ -25,6 +25,9 @@ #include "gimpbrush.h" +#define GIMP_BRUSH_GENERATED_FILE_EXTENSION ".vbr" + + #define GIMP_TYPE_BRUSH_GENERATED (gimp_brush_generated_get_type ()) #define GIMP_BRUSH_GENERATED(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_BRUSH_GENERATED, GimpBrushGenerated)) #define GIMP_BRUSH_GENERATED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_BRUSH_GENERATED, GimpBrushGeneratedClass)) @@ -60,10 +63,6 @@ GimpBrush * gimp_brush_generated_new (gfloat radius, gfloat aspect_ratio); GimpBrush * gimp_brush_generated_load (const gchar *file_name); -void gimp_brush_generated_save (GimpBrushGenerated *brush, - const gchar *directory); -void gimp_brush_generated_delete (GimpBrushGenerated *brush); - void gimp_brush_generated_freeze (GimpBrushGenerated *brush); void gimp_brush_generated_thaw (GimpBrushGenerated *brush); diff --git a/app/gimpbrushpipe.c b/app/gimpbrushpipe.c index 539c118334..2370ad5f22 100644 --- a/app/gimpbrushpipe.c +++ b/app/gimpbrushpipe.c @@ -396,8 +396,9 @@ gimp_brush_pipe_load (const gchar *filename) /* Current brush is the first one. */ pipe->current = pipe->brushes[0]; + gimp_data_set_filename (GIMP_DATA (pipe), filename); + /* just to satisfy the code that relies on this crap */ - GIMP_BRUSH (pipe)->filename = g_strdup (filename); GIMP_BRUSH (pipe)->spacing = pipe->current->spacing; GIMP_BRUSH (pipe)->x_axis = pipe->current->x_axis; GIMP_BRUSH (pipe)->y_axis = pipe->current->y_axis; diff --git a/app/gimpdata.c b/app/gimpdata.c new file mode 100644 index 0000000000..66c6e62900 --- /dev/null +++ b/app/gimpdata.c @@ -0,0 +1,254 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#include "apptypes.h" + +#include "gimpdata.h" + +#include "libgimp/gimpenv.h" + + +enum +{ + DIRTY, + SAVE, + LAST_SIGNAL +}; + + +static void gimp_data_class_init (GimpDataClass *klass); +static void gimp_data_init (GimpData *data); +static void gimp_data_destroy (GtkObject *object); +static void gimp_data_real_dirty (GimpData *data); + + +static guint data_signals[LAST_SIGNAL] = { 0 }; + +static GimpViewableClass *parent_class = NULL; + + +GtkType +gimp_data_get_type (void) +{ + static GtkType data_type = 0; + + if (! data_type) + { + static const GtkTypeInfo data_info = + { + "GimpData", + sizeof (GimpData), + sizeof (GimpDataClass), + (GtkClassInitFunc) gimp_data_class_init, + (GtkObjectInitFunc) gimp_data_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL + }; + + data_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &data_info); + } + + return data_type; +} + +static void +gimp_data_class_init (GimpDataClass *klass) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass *) klass; + + parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + + data_signals[DIRTY] = + gtk_signal_new ("dirty", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpDataClass, + dirty), + gtk_signal_default_marshaller, + GTK_TYPE_NONE, 0); + + data_signals[SAVE] = + gtk_signal_new ("save", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (GimpDataClass, + save), + gtk_marshal_BOOL__NONE, + GTK_TYPE_BOOL, 0); + + object_class->destroy = gimp_data_destroy; + + klass->dirty = gimp_data_real_dirty; + klass->save = NULL; +} + +static void +gimp_data_init (GimpData *data) +{ + data->filename = NULL; + data->dirty = FALSE; +} + +static void +gimp_data_destroy (GtkObject *object) +{ + GimpData *data; + + data = GIMP_DATA (object); + + g_free (data->filename); + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} + +gboolean +gimp_data_save (GimpData *data) +{ + gboolean success = FALSE; + + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_DATA (data), FALSE); + + if (! data->filename) + { + g_warning ("%s(): can't save data with NULL filename", + G_GNUC_FUNCTION); + return FALSE; + } + + gtk_signal_emit (GTK_OBJECT (data), data_signals[SAVE], + &success); + + if (success) + data->dirty = FALSE; + + return success; +} + +void +gimp_data_dirty (GimpData *data) +{ + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + + gtk_signal_emit (GTK_OBJECT (data), data_signals[DIRTY]); +} + +static void +gimp_data_real_dirty (GimpData *data) +{ + data->dirty = TRUE; +} + +gboolean +gimp_data_delete_from_disk (GimpData *data) +{ + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (GIMP_IS_DATA (data), FALSE); + g_return_val_if_fail (data->filename != NULL, FALSE); + + if (unlink (data->filename) == -1) + { + g_message ("%s(): could not unlink() %s: %s", + G_GNUC_FUNCTION, data->filename, g_strerror (errno)); + return FALSE; + } + + return TRUE; +} + +void +gimp_data_set_filename (GimpData *data, + const gchar *filename) +{ + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + + g_free (data->filename); + + data->filename = g_strdup (filename); +} + +void +gimp_data_create_filename (GimpData *data, + const gchar *basename, + const gchar *extension, + const gchar *data_path) +{ + GList *path; + gchar *dir; + gchar *filename; + gchar *safe_name; + gint i; + gint unum = 1; + FILE *file; + + g_return_if_fail (data != NULL); + g_return_if_fail (GIMP_IS_DATA (data)); + g_return_if_fail (basename != NULL); + g_return_if_fail (extension != NULL); + g_return_if_fail (data_path != NULL); + + path = gimp_path_parse (data_path, 16, TRUE, NULL); + dir = gimp_path_get_user_writable_dir (path); + gimp_path_free (path); + + if (! dir) + return; + + safe_name = g_strdup (basename); + if (safe_name[0] == '.') + safe_name[0] = '_'; + for (i = 0; safe_name[i]; i++) + if (safe_name[i] == G_DIR_SEPARATOR || isspace (safe_name[i])) + safe_name[i] = '_'; + + filename = g_strdup_printf ("%s%s%s", dir, safe_name, extension); + + while ((file = fopen (filename, "r"))) + { + fclose (file); + + g_free (filename); + filename = g_strdup_printf ("%s%s_%d%s", dir, safe_name, unum, extension); + unum++; + } + + g_free (dir); + g_free (safe_name); + + gimp_data_set_filename (data, filename); + + g_free (filename); +} diff --git a/app/gimpdata.h b/app/gimpdata.h new file mode 100644 index 0000000000..95d5498977 --- /dev/null +++ b/app/gimpdata.h @@ -0,0 +1,67 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __GIMP_DATA_H__ +#define __GIMP_DATA_H__ + + +#include "gimpviewable.h" + + +#define GIMP_TYPE_DATA (gimp_data_get_type ()) +#define GIMP_DATA(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_DATA, GimpData)) +#define GIMP_DATA_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DATA, GimpDataClass)) +#define GIMP_IS_DATA(obj) (GTK_CHECK_TYPE ((obj), GIMP_TYPE_DATA)) +#define GIMP_IS_DATA_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DATA)) + + +typedef struct _GimpDataClass GimpDataClass; + +struct _GimpData +{ + GimpViewable parent_instance; + + gchar *filename; + gboolean dirty; +}; + +struct _GimpDataClass +{ + GimpViewableClass parent_class; + + void (* dirty) (GimpData *data); + gboolean (* save) (GimpData *data); +}; + + +GtkType gimp_data_get_type (void); + +gboolean gimp_data_save (GimpData *data); + +void gimp_data_dirty (GimpData *data); +gboolean gimp_data_delete_from_disk (GimpData *data); + +void gimp_data_set_filename (GimpData *data, + const gchar *filename); +void gimp_data_create_filename (GimpData *data, + const gchar *filename, + const gchar *extension, + const gchar *data_path); + + +#endif /* __GIMP_DATA_H__ */ diff --git a/app/gimpgradient.c b/app/gimpgradient.c index 3e7b385d70..da5306e88d 100644 --- a/app/gimpgradient.c +++ b/app/gimpgradient.c @@ -18,28 +18,12 @@ #include "config.h" +#include #include -#include #include -#include - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include #include -#ifdef G_OS_WIN32 -#include -#endif - -#ifndef _O_BINARY -#define _O_BINARY 0 -#endif - #include "libgimpcolor/gimpcolor.h" #include "libgimpmath/gimpmath.h" @@ -60,29 +44,28 @@ #define EPSILON 1e-10 -static void gimp_gradient_class_init (GimpGradientClass *klass); -static void gimp_gradient_init (GimpGradient *gradient); -static void gimp_gradient_destroy (GtkObject *object); -static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable, - gint width, - gint height); +static void gimp_gradient_class_init (GimpGradientClass *klass); +static void gimp_gradient_init (GimpGradient *gradient); +static void gimp_gradient_destroy (GtkObject *object); +static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable, + gint width, + gint height); +static void gimp_gradient_dirty (GimpData *data); +static gboolean gimp_gradient_save (GimpData *data); -static void gimp_gradient_dump (GimpGradient *grad, - FILE *file); - -static gdouble gimp_gradient_calc_linear_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_curved_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sine_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle, - gdouble pos); -static gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle, - gdouble pos); +static gdouble gimp_gradient_calc_linear_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_curved_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sine_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle, + gdouble pos); +static gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle, + gdouble pos); -static GimpViewableClass *parent_class = NULL; +static GimpDataClass *parent_class = NULL; GtkType @@ -104,7 +87,7 @@ gimp_gradient_get_type (void) (GtkClassInitFunc) NULL }; - gradient_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &gradient_info); + gradient_type = gtk_type_unique (GIMP_TYPE_DATA, &gradient_info); } return gradient_type; @@ -115,23 +98,25 @@ gimp_gradient_class_init (GimpGradientClass *klass) { GtkObjectClass *object_class; GimpViewableClass *viewable_class; + GimpDataClass *data_class; object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; + data_class = (GimpDataClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_gradient_destroy; viewable_class->get_new_preview = gimp_gradient_get_new_preview; + + data_class->dirty = gimp_gradient_dirty; + data_class->save = gimp_gradient_save; } static void gimp_gradient_init (GimpGradient *gradient) { - gradient->filename = NULL; - gradient->dirty = FALSE; - gradient->segments = NULL; gradient->last_visited = NULL; @@ -145,8 +130,6 @@ gimp_gradient_destroy (GtkObject *object) gradient = GIMP_GRADIENT (object); - g_free (gradient->filename); - if (gradient->segments) gimp_gradient_segments_free (gradient->segments); @@ -232,39 +215,6 @@ gimp_gradient_get_new_preview (GimpViewable *viewable, return temp_buf; } -static void -gimp_gradient_dump (GimpGradient *gradient, - FILE *file) -{ - GimpGradientSegment *seg; - - g_return_if_fail (gradient != NULL); - g_return_if_fail (GIMP_IS_GRADIENT (gradient)); - - fprintf (file, "Name: \"%s\"\n", GIMP_OBJECT (gradient)->name); - fprintf (file, "Dirty: %d\n", gradient->dirty); - fprintf (file, "Filename: \"%s\"\n", gradient->filename); - - for (seg = gradient->segments; seg; seg = seg->next) - { - fprintf (file, "%c%p | %f %f %f | %f %f %f %f | %f %f %f %f | %d %d | %p %p\n", - (seg == gradient->last_visited) ? '>' : ' ', - seg, - seg->left, seg->middle, seg->right, - seg->left_color.r, - seg->left_color.g, - seg->left_color.b, - seg->left_color.a, - seg->right_color.r, - seg->right_color.g, - seg->right_color.b, - seg->right_color.a, - (int) seg->type, - (int) seg->color, - seg->prev, seg->next); - } -} - GimpGradient * gimp_gradient_new (const gchar *name) { @@ -308,10 +258,20 @@ gimp_gradient_load (const gchar *filename) gradient = GIMP_GRADIENT (gtk_type_new (GIMP_TYPE_GRADIENT)); - gradient->filename = g_strdup (filename); - GIMP_OBJECT (gradient)->name = g_strdup (g_basename (filename)); + gimp_data_set_filename (GIMP_DATA (gradient), filename); fgets (line, 1024, file); + if (! strncmp (line, "Name: ", strlen ("Name: "))) + { + gimp_object_set_name (GIMP_OBJECT (gradient), &line[strlen ("Name: ")]); + + fgets (line, 1024, file); + } + else /* old gradient format */ + { + gimp_object_set_name (GIMP_OBJECT (gradient), g_basename (filename)); + } + num_segments = atoi (line); if (num_segments < 1) @@ -368,29 +328,35 @@ gimp_gradient_load (const gchar *filename) return gradient; } -void -gimp_gradient_save (GimpGradient *gradient) +static void +gimp_gradient_dirty (GimpData *data) { - FILE *file; - gint num_segments; + GimpGradient *gradient; + + gradient = GIMP_GRADIENT (data); + + gradient->last_visited = NULL; + + if (GIMP_DATA_CLASS (parent_class)->dirty) + GIMP_DATA_CLASS (parent_class)->dirty (data); +} + +static gboolean +gimp_gradient_save (GimpData *data) +{ + GimpGradient *gradient; GimpGradientSegment *seg; + gint num_segments; + FILE *file; - g_return_if_fail (gradient != NULL); - g_return_if_fail (GIMP_IS_GRADIENT (gradient)); + gradient = GIMP_GRADIENT (data); - if (! gradient->filename) - { - g_message ("%s(): can't save gradient with NULL filename", - G_GNUC_FUNCTION); - return; - } - - file = fopen (gradient->filename, "wb"); + file = fopen (data->filename, "wb"); if (! file) { g_message ("%s(): can't open \"%s\"", - G_GNUC_FUNCTION, gradient->filename); - return; + G_GNUC_FUNCTION, data->filename); + return FALSE; } /* File format is: @@ -404,6 +370,8 @@ gimp_gradient_save (GimpGradient *gradient) fprintf (file, "GIMP Gradient\n"); + fprintf (file, "Name: %s\n", GIMP_OBJECT (gradient)->name); + /* Count number of segments */ num_segments = 0; seg = gradient->segments; @@ -435,7 +403,7 @@ gimp_gradient_save (GimpGradient *gradient) fclose (file); - gradient->dirty = FALSE; + return TRUE; } void @@ -503,9 +471,8 @@ gimp_gradient_get_color_at (GimpGradient *gradient, break; default: - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("gradient_get_color_at(): Unknown gradient type %d", - (int) seg->type); + gimp_fatal_error ("%s(): Unknown gradient type %d", + G_GNUC_FUNCTION, (gint) seg->type); break; } @@ -566,9 +533,8 @@ gimp_gradient_get_color_at (GimpGradient *gradient, break; default: - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("gradient_get_color_at(): Unknown coloring mode %d", - (int) seg->color); + gimp_fatal_error ("%s(): Unknown coloring mode %d", + G_GNUC_FUNCTION, (gint) seg->color); break; } @@ -578,6 +544,50 @@ gimp_gradient_get_color_at (GimpGradient *gradient, *color = rgb; } +GimpGradientSegment * +gimp_gradient_get_segment_at (GimpGradient *gradient, + gdouble pos) +{ + GimpGradientSegment *seg; + + g_return_val_if_fail (gradient != NULL, NULL); + g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL); + + /* handle FP imprecision at the edges of the gradient */ + pos = CLAMP (pos, 0.0, 1.0); + + if (gradient->last_visited) + seg = gradient->last_visited; + else + seg = gradient->segments; + + while (seg) + { + if (pos >= seg->left) + { + if (pos <= seg->right) + { + gradient->last_visited = seg; /* for speed */ + return seg; + } + else + { + seg = seg->next; + } + } + else + { + seg = seg->prev; + } + } + + /* Oops: we should have found a segment, but we didn't */ + gimp_fatal_error ("%s(): no matching segment for position %0.15f", + G_GNUC_FUNCTION, pos); + + return NULL; +} + static gdouble gimp_gradient_calc_linear_factor (gdouble middle, gdouble pos) @@ -698,48 +708,3 @@ gimp_gradient_segment_get_last (GimpGradientSegment *seg) return seg; } - -GimpGradientSegment * -gimp_gradient_get_segment_at (GimpGradient *gradient, - gdouble pos) -{ - GimpGradientSegment *seg; - - g_return_val_if_fail (gradient != NULL, NULL); - g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL); - - /* handle FP imprecision at the edges of the gradient */ - pos = CLAMP (pos, 0.0, 1.0); - - if (gradient->last_visited) - seg = gradient->last_visited; - else - seg = gradient->segments; - - while (seg) - { - if (pos >= seg->left) - { - if (pos <= seg->right) - { - gradient->last_visited = seg; /* for speed */ - return seg; - } - else - { - seg = seg->next; - } - } - else - { - seg = seg->prev; - } - } - - /* Oops: we should have found a segment, but we didn't */ - gimp_gradient_dump (gradient, stderr); - gimp_fatal_error ("%s(): no matching segment for position %0.15f", - G_GNUC_FUNCTION, pos); - - return NULL; -} diff --git a/app/gimpgradient.h b/app/gimpgradient.h index 88847e3fea..b6066a44bf 100644 --- a/app/gimpgradient.h +++ b/app/gimpgradient.h @@ -20,7 +20,10 @@ #define __GIMP_GRADIENT_H__ -#include "gimpviewable.h" +#include "gimpdata.h" + + +#define GIMP_GRADIENT_FILE_EXTENSION ".ggr" typedef enum @@ -66,10 +69,7 @@ typedef struct _GimpGradientClass GimpGradientClass; struct _GimpGradient { - GimpViewable parent_instance; - - gchar *filename; - gboolean dirty; + GimpData parent_instance; GimpGradientSegment *segments; @@ -80,30 +80,29 @@ struct _GimpGradient struct _GimpGradientClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; }; -GtkType gimp_gradient_get_type (void); -GimpGradient * gimp_gradient_new (const gchar *name); +GtkType gimp_gradient_get_type (void); +GimpGradient * gimp_gradient_new (const gchar *name); -GimpGradient * gimp_gradient_load (const gchar *filename); -void gimp_gradient_save (GimpGradient *gradient); +GimpGradient * gimp_gradient_load (const gchar *filename); -void gimp_gradient_get_color_at (GimpGradient *gradient, - gdouble pos, - GimpRGB *color); +void gimp_gradient_get_color_at (GimpGradient *gradient, + gdouble pos, + GimpRGB *color); +GimpGradientSegment * gimp_gradient_get_segment_at (GimpGradient *grad, + gdouble pos); /* gradient segment functions */ GimpGradientSegment * gimp_gradient_segment_new (void); -GimpGradientSegment * gimp_gradient_get_segment_at (GimpGradient *grad, - gdouble pos); GimpGradientSegment * gimp_gradient_segment_get_last (GimpGradientSegment *seg); -void gimp_gradient_segment_free (GimpGradientSegment *seg); -void gimp_gradient_segments_free (GimpGradientSegment *seg); +void gimp_gradient_segment_free (GimpGradientSegment *seg); +void gimp_gradient_segments_free (GimpGradientSegment *seg); #endif /* __GIMP_GRADIENT_H__ */ diff --git a/app/gimppattern.c b/app/gimppattern.c index f43bbba857..46386b5316 100644 --- a/app/gimppattern.c +++ b/app/gimppattern.c @@ -60,7 +60,7 @@ static TempBuf * gimp_pattern_get_new_preview (GimpViewable *viewable, gint height); -static GimpViewableClass *parent_class = NULL; +static GimpDataClass *parent_class = NULL; GtkType @@ -82,7 +82,7 @@ gimp_pattern_get_type (void) (GtkClassInitFunc) NULL }; - pattern_type = gtk_type_unique (GIMP_TYPE_VIEWABLE, &pattern_info); + pattern_type = gtk_type_unique (GIMP_TYPE_DATA, &pattern_info); } return pattern_type; @@ -97,7 +97,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) object_class = (GtkObjectClass *) klass; viewable_class = (GimpViewableClass *) klass; - parent_class = gtk_type_class (GIMP_TYPE_VIEWABLE); + parent_class = gtk_type_class (GIMP_TYPE_DATA); object_class->destroy = gimp_pattern_destroy; @@ -107,8 +107,7 @@ gimp_pattern_class_init (GimpPatternClass *klass) static void gimp_pattern_init (GimpPattern *pattern) { - pattern->filename = NULL; - pattern->mask = NULL; + pattern->mask = NULL; } static void @@ -118,8 +117,6 @@ gimp_pattern_destroy (GtkObject *object) pattern = GIMP_PATTERN (object); - g_free (pattern->filename); - if (pattern->mask) temp_buf_free (pattern->mask); @@ -236,9 +233,11 @@ gimp_pattern_load (const gchar *filename) close (fd); - GIMP_OBJECT (pattern)->name = name; + gimp_object_set_name (GIMP_OBJECT (pattern), name); - pattern->filename = g_strdup (filename); + g_free (name); + + gimp_data_set_filename (GIMP_DATA (pattern), filename); /* Swap the pattern to disk (if we're being stingy with memory) */ if (stingy_memory_use) diff --git a/app/gimppattern.h b/app/gimppattern.h index 1ca9c06035..a1ebdd42a8 100644 --- a/app/gimppattern.h +++ b/app/gimppattern.h @@ -20,7 +20,7 @@ #define __GIMP_PATTERN_H__ -#include "gimpviewable.h" +#include "gimpdata.h" #define GIMP_TYPE_PATTERN (gimp_pattern_get_type ()) @@ -34,15 +34,14 @@ typedef struct _GimpPatternClass GimpPatternClass; struct _GimpPattern { - GimpViewable parent_instance; + GimpData parent_instance; - gchar *filename; /* actual filename--pattern's location on disk */ - TempBuf *mask; /* the actual mask */ + TempBuf *mask; }; struct _GimpPatternClass { - GimpViewableClass parent_class; + GimpDataClass parent_class; }; diff --git a/app/gradient_editor.c b/app/gradient_editor.c index 92628893f2..4d18cf0fd3 100644 --- a/app/gradient_editor.c +++ b/app/gradient_editor.c @@ -524,15 +524,10 @@ static void cpopup_blend_endpoints (GimpRGB *left, /* Segment functions */ -static void seg_get_closest_handle (GimpGradient *grad, - gdouble pos, - GimpGradientSegment **seg, - control_drag_mode_t *handle); - -/* Files and paths functions */ - -static gchar * build_user_filename (gchar *name, - gchar *path_str); +static void seg_get_closest_handle (GimpGradient *grad, + gdouble pos, + GimpGradientSegment **seg, + control_drag_mode_t *handle); /***** Local variables *****/ @@ -923,9 +918,6 @@ gradient_editor_create (void) curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, gradient_path); - gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); pos = gimp_container_get_child_index (global_gradient_list, @@ -1365,9 +1357,7 @@ ed_do_new_gradient_callback (GtkWidget *widget, g_free (gradient_name); - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (grad)); /* Put new gradient in list */ gimp_container_add (global_gradient_list, GIMP_OBJECT (grad)); @@ -1431,10 +1421,11 @@ ed_do_copy_gradient_callback (GtkWidget *widget, grad = GIMP_GRADIENT (gtk_type_new (GIMP_TYPE_GRADIENT)); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, gradient_path); + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); + + g_free (gradient_name); + + gimp_data_dirty (GIMP_DATA (grad)); prev = NULL; orig = curr_gradient->segments; @@ -1506,27 +1497,18 @@ ed_do_rename_gradient_callback (GtkWidget *widget, gpointer data) { GimpGradient *grad = (GimpGradient *) data; - gint row; + gint row; g_return_if_fail (grad != NULL); + g_return_if_fail (gradient_name != NULL); - if (!gradient_name) - { - g_warning ("received NULL in call_data"); - return; - } + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); - g_free (GIMP_OBJECT (grad)->name); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; + g_free (gradient_name); - /* Delete file and free gradient */ - unlink (grad->filename); + gimp_data_dirty (GIMP_DATA (grad)); - g_free (grad->filename); - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_set_filename (GIMP_DATA (grad), NULL); row = gtk_clist_find_row_from_data (GTK_CLIST (g_editor->clist), grad); if (row > -1) @@ -1600,7 +1582,7 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gtk_clist_remove (GTK_CLIST (g_editor->clist), row); /* Delete gradient from gradients list */ - unlink (delete_gradient->filename); + gimp_data_delete_from_disk (GIMP_DATA (delete_gradient)); gimp_container_remove (global_gradient_list, GIMP_OBJECT (delete_gradient)); @@ -1751,9 +1733,7 @@ ed_refresh_grads_callback (GtkWidget *widget, { curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (curr_gradient)); gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); @@ -2700,7 +2680,7 @@ control_motion (gint x) if (str) g_free (str); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); if (g_editor->instant_update) ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); @@ -3910,7 +3890,8 @@ cpopup_load_left_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -3961,7 +3942,8 @@ cpopup_load_right_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4054,7 +4036,7 @@ static void cpopup_set_left_color_callback (GtkWidget *widget, gpointer data) { - g_editor->left_saved_dirty = curr_gradient->dirty; + g_editor->left_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->left_saved_segments = cpopup_save_selection (); color_notebook_new (_("Left Endpoint Color"), @@ -4071,7 +4053,7 @@ static void cpopup_set_right_color_callback (GtkWidget *widget, gpointer data) { - g_editor->right_saved_dirty = curr_gradient->dirty; + g_editor->right_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->right_saved_segments = cpopup_save_selection (); color_notebook_new (_("Right Endpoint Color"), @@ -4097,7 +4079,7 @@ cpopup_left_color_changed (ColorNotebook *cnb, &g_editor->control_sel_r->right_color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->left_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4106,13 +4088,13 @@ cpopup_left_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints ((GimpRGB *) color, &g_editor->control_sel_r->right_color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->left_saved_segments); ed_update_editor (GRAD_UPDATE_GRADIENT); - curr_gradient->dirty = g_editor->left_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->left_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4133,7 +4115,7 @@ cpopup_right_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints (&g_editor->control_sel_r->left_color, (GimpRGB *) color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_OK: @@ -4141,14 +4123,14 @@ cpopup_right_color_changed (ColorNotebook *cnb, (GimpRGB *) color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->right_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->right_saved_segments); - curr_gradient->dirty = g_editor->right_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->right_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4223,7 +4205,8 @@ cpopup_blending_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4291,7 +4274,8 @@ cpopup_coloring_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4314,8 +4298,8 @@ cpopup_split_midpoint_callback (GtkWidget *widget, g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4475,8 +4459,8 @@ cpopup_split_uniform_split_callback (GtkWidget *widget, g_editor->control_sel_l = lsel; g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4490,7 +4474,7 @@ cpopup_split_uniform_cancel_callback (GtkWidget *widget, static void cpopup_split_uniform (GimpGradientSegment *lseg, - int parts, + gint parts, GimpGradientSegment **newl, GimpGradientSegment **newr) { @@ -4641,8 +4625,7 @@ cpopup_delete_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4666,7 +4649,8 @@ cpopup_recenter_callback (GtkWidget *wiodget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4720,7 +4704,8 @@ cpopup_redistribute_callback (GtkWidget *widget, /* Done */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4914,8 +4899,7 @@ cpopup_flip_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5102,8 +5086,7 @@ cpopup_do_replicate_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5126,7 +5109,8 @@ cpopup_blend_colors (GtkWidget *widget, &g_editor->control_sel_r->right_color, TRUE, FALSE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5138,7 +5122,8 @@ cpopup_blend_opacity (GtkWidget *widget, &g_editor->control_sel_r->right_color, FALSE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5228,32 +5213,3 @@ seg_get_closest_handle (GimpGradient *grad, } } } - -/***** Files and paths functions *****/ - -static gchar * -build_user_filename (gchar *name, - gchar *path_str) -{ - GList *grad_path; - gchar *grad_dir; - gchar *filename; - - g_assert (name != NULL); - - if (!path_str) - return NULL; /* Perhaps this is not a good idea */ - - grad_path = gimp_path_parse (path_str, 16, TRUE, NULL); - grad_dir = gimp_path_get_user_writable_dir (grad_path); - gimp_path_free (grad_path); - - if (!grad_dir) - return NULL; /* Perhaps this is not a good idea */ - - filename = g_strdup_printf ("%s%s", grad_dir, name); - - g_free (grad_dir); - - return filename; -} diff --git a/app/gradients.c b/app/gradients.c index 044182a890..b02fed1bb7 100644 --- a/app/gradients.c +++ b/app/gradients.c @@ -81,15 +81,20 @@ gradients_free (void) while (GIMP_LIST (global_gradient_list)->list) { - GimpGradient *gradient = - GIMP_GRADIENT (GIMP_LIST (global_gradient_list)->list->data); + GimpData *data; - if (gradient->dirty) - gimp_gradient_save (gradient); + data = GIMP_DATA (GIMP_LIST (global_gradient_list)->list->data); - gimp_container_remove - (global_gradient_list, - GIMP_OBJECT (GIMP_LIST (global_gradient_list)->list->data)); + if (! data->filename) + gimp_data_create_filename (data, + GIMP_OBJECT (data)->name, + GIMP_GRADIENT_FILE_EXTENSION, + brush_path); + + if (data->dirty) + gimp_data_save (data); + + gimp_container_remove (global_gradient_list, GIMP_OBJECT (data)); } gradient_select_thaw_all (); diff --git a/app/gui/brush-select.c b/app/gui/brush-select.c index 6f052be4ff..3b8c19e827 100644 --- a/app/gui/brush-select.c +++ b/app/gui/brush-select.c @@ -35,6 +35,7 @@ #include "gimpbrushgenerated.h" #include "gimpbrushpipe.h" #include "gimpcontext.h" +#include "gimpdata.h" #include "gimpdnd.h" #include "gimplist.h" #include "gimprc.h" @@ -1878,7 +1879,7 @@ brush_select_delete_brush_callback (GtkWidget *widget, if (GIMP_IS_BRUSH_GENERATED (brush)) { - gimp_brush_generated_delete (GIMP_BRUSH_GENERATED (brush)); + gimp_data_delete_from_disk (GIMP_DATA (brush)); brush_select_freeze_all (); diff --git a/app/gui/gradient-editor.c b/app/gui/gradient-editor.c index 92628893f2..4d18cf0fd3 100644 --- a/app/gui/gradient-editor.c +++ b/app/gui/gradient-editor.c @@ -524,15 +524,10 @@ static void cpopup_blend_endpoints (GimpRGB *left, /* Segment functions */ -static void seg_get_closest_handle (GimpGradient *grad, - gdouble pos, - GimpGradientSegment **seg, - control_drag_mode_t *handle); - -/* Files and paths functions */ - -static gchar * build_user_filename (gchar *name, - gchar *path_str); +static void seg_get_closest_handle (GimpGradient *grad, + gdouble pos, + GimpGradientSegment **seg, + control_drag_mode_t *handle); /***** Local variables *****/ @@ -923,9 +918,6 @@ gradient_editor_create (void) curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, gradient_path); - gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); pos = gimp_container_get_child_index (global_gradient_list, @@ -1365,9 +1357,7 @@ ed_do_new_gradient_callback (GtkWidget *widget, g_free (gradient_name); - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (grad)); /* Put new gradient in list */ gimp_container_add (global_gradient_list, GIMP_OBJECT (grad)); @@ -1431,10 +1421,11 @@ ed_do_copy_gradient_callback (GtkWidget *widget, grad = GIMP_GRADIENT (gtk_type_new (GIMP_TYPE_GRADIENT)); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, gradient_path); + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); + + g_free (gradient_name); + + gimp_data_dirty (GIMP_DATA (grad)); prev = NULL; orig = curr_gradient->segments; @@ -1506,27 +1497,18 @@ ed_do_rename_gradient_callback (GtkWidget *widget, gpointer data) { GimpGradient *grad = (GimpGradient *) data; - gint row; + gint row; g_return_if_fail (grad != NULL); + g_return_if_fail (gradient_name != NULL); - if (!gradient_name) - { - g_warning ("received NULL in call_data"); - return; - } + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); - g_free (GIMP_OBJECT (grad)->name); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; + g_free (gradient_name); - /* Delete file and free gradient */ - unlink (grad->filename); + gimp_data_dirty (GIMP_DATA (grad)); - g_free (grad->filename); - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_set_filename (GIMP_DATA (grad), NULL); row = gtk_clist_find_row_from_data (GTK_CLIST (g_editor->clist), grad); if (row > -1) @@ -1600,7 +1582,7 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gtk_clist_remove (GTK_CLIST (g_editor->clist), row); /* Delete gradient from gradients list */ - unlink (delete_gradient->filename); + gimp_data_delete_from_disk (GIMP_DATA (delete_gradient)); gimp_container_remove (global_gradient_list, GIMP_OBJECT (delete_gradient)); @@ -1751,9 +1733,7 @@ ed_refresh_grads_callback (GtkWidget *widget, { curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (curr_gradient)); gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); @@ -2700,7 +2680,7 @@ control_motion (gint x) if (str) g_free (str); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); if (g_editor->instant_update) ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); @@ -3910,7 +3890,8 @@ cpopup_load_left_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -3961,7 +3942,8 @@ cpopup_load_right_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4054,7 +4036,7 @@ static void cpopup_set_left_color_callback (GtkWidget *widget, gpointer data) { - g_editor->left_saved_dirty = curr_gradient->dirty; + g_editor->left_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->left_saved_segments = cpopup_save_selection (); color_notebook_new (_("Left Endpoint Color"), @@ -4071,7 +4053,7 @@ static void cpopup_set_right_color_callback (GtkWidget *widget, gpointer data) { - g_editor->right_saved_dirty = curr_gradient->dirty; + g_editor->right_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->right_saved_segments = cpopup_save_selection (); color_notebook_new (_("Right Endpoint Color"), @@ -4097,7 +4079,7 @@ cpopup_left_color_changed (ColorNotebook *cnb, &g_editor->control_sel_r->right_color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->left_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4106,13 +4088,13 @@ cpopup_left_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints ((GimpRGB *) color, &g_editor->control_sel_r->right_color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->left_saved_segments); ed_update_editor (GRAD_UPDATE_GRADIENT); - curr_gradient->dirty = g_editor->left_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->left_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4133,7 +4115,7 @@ cpopup_right_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints (&g_editor->control_sel_r->left_color, (GimpRGB *) color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_OK: @@ -4141,14 +4123,14 @@ cpopup_right_color_changed (ColorNotebook *cnb, (GimpRGB *) color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->right_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->right_saved_segments); - curr_gradient->dirty = g_editor->right_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->right_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4223,7 +4205,8 @@ cpopup_blending_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4291,7 +4274,8 @@ cpopup_coloring_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4314,8 +4298,8 @@ cpopup_split_midpoint_callback (GtkWidget *widget, g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4475,8 +4459,8 @@ cpopup_split_uniform_split_callback (GtkWidget *widget, g_editor->control_sel_l = lsel; g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4490,7 +4474,7 @@ cpopup_split_uniform_cancel_callback (GtkWidget *widget, static void cpopup_split_uniform (GimpGradientSegment *lseg, - int parts, + gint parts, GimpGradientSegment **newl, GimpGradientSegment **newr) { @@ -4641,8 +4625,7 @@ cpopup_delete_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4666,7 +4649,8 @@ cpopup_recenter_callback (GtkWidget *wiodget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4720,7 +4704,8 @@ cpopup_redistribute_callback (GtkWidget *widget, /* Done */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4914,8 +4899,7 @@ cpopup_flip_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5102,8 +5086,7 @@ cpopup_do_replicate_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5126,7 +5109,8 @@ cpopup_blend_colors (GtkWidget *widget, &g_editor->control_sel_r->right_color, TRUE, FALSE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5138,7 +5122,8 @@ cpopup_blend_opacity (GtkWidget *widget, &g_editor->control_sel_r->right_color, FALSE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5228,32 +5213,3 @@ seg_get_closest_handle (GimpGradient *grad, } } } - -/***** Files and paths functions *****/ - -static gchar * -build_user_filename (gchar *name, - gchar *path_str) -{ - GList *grad_path; - gchar *grad_dir; - gchar *filename; - - g_assert (name != NULL); - - if (!path_str) - return NULL; /* Perhaps this is not a good idea */ - - grad_path = gimp_path_parse (path_str, 16, TRUE, NULL); - grad_dir = gimp_path_get_user_writable_dir (grad_path); - gimp_path_free (grad_path); - - if (!grad_dir) - return NULL; /* Perhaps this is not a good idea */ - - filename = g_strdup_printf ("%s%s", grad_dir, name); - - g_free (grad_dir); - - return filename; -} diff --git a/app/patterns.c b/app/patterns.c index 839174e1d0..4a617422ea 100644 --- a/app/patterns.c +++ b/app/patterns.c @@ -101,8 +101,7 @@ patterns_get_standard_pattern (void) gimp_object_set_name (GIMP_OBJECT (standard_pattern), "Standard"); - standard_pattern->filename = NULL; - standard_pattern->mask = temp_buf_new (32, 32, 3, 0, 0, NULL); + standard_pattern->mask = temp_buf_new (32, 32, 3, 0, 0, NULL); data = temp_buf_data (standard_pattern->mask); diff --git a/app/widgets/gimpgradienteditor.c b/app/widgets/gimpgradienteditor.c index 92628893f2..4d18cf0fd3 100644 --- a/app/widgets/gimpgradienteditor.c +++ b/app/widgets/gimpgradienteditor.c @@ -524,15 +524,10 @@ static void cpopup_blend_endpoints (GimpRGB *left, /* Segment functions */ -static void seg_get_closest_handle (GimpGradient *grad, - gdouble pos, - GimpGradientSegment **seg, - control_drag_mode_t *handle); - -/* Files and paths functions */ - -static gchar * build_user_filename (gchar *name, - gchar *path_str); +static void seg_get_closest_handle (GimpGradient *grad, + gdouble pos, + GimpGradientSegment **seg, + control_drag_mode_t *handle); /***** Local variables *****/ @@ -923,9 +918,6 @@ gradient_editor_create (void) curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, gradient_path); - gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); pos = gimp_container_get_child_index (global_gradient_list, @@ -1365,9 +1357,7 @@ ed_do_new_gradient_callback (GtkWidget *widget, g_free (gradient_name); - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (grad)); /* Put new gradient in list */ gimp_container_add (global_gradient_list, GIMP_OBJECT (grad)); @@ -1431,10 +1421,11 @@ ed_do_copy_gradient_callback (GtkWidget *widget, grad = GIMP_GRADIENT (gtk_type_new (GIMP_TYPE_GRADIENT)); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, gradient_path); + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); + + g_free (gradient_name); + + gimp_data_dirty (GIMP_DATA (grad)); prev = NULL; orig = curr_gradient->segments; @@ -1506,27 +1497,18 @@ ed_do_rename_gradient_callback (GtkWidget *widget, gpointer data) { GimpGradient *grad = (GimpGradient *) data; - gint row; + gint row; g_return_if_fail (grad != NULL); + g_return_if_fail (gradient_name != NULL); - if (!gradient_name) - { - g_warning ("received NULL in call_data"); - return; - } + gimp_object_set_name (GIMP_OBJECT (grad), gradient_name); - g_free (GIMP_OBJECT (grad)->name); - GIMP_OBJECT (grad)->name = gradient_name; /* We don't need to copy since - this memory is ours */ - grad->dirty = TRUE; + g_free (gradient_name); - /* Delete file and free gradient */ - unlink (grad->filename); + gimp_data_dirty (GIMP_DATA (grad)); - g_free (grad->filename); - grad->filename = build_user_filename (GIMP_OBJECT (grad)->name, - gradient_path); + gimp_data_set_filename (GIMP_DATA (grad), NULL); row = gtk_clist_find_row_from_data (GTK_CLIST (g_editor->clist), grad); if (row > -1) @@ -1600,7 +1582,7 @@ ed_do_delete_gradient_callback (GtkWidget *widget, gtk_clist_remove (GTK_CLIST (g_editor->clist), row); /* Delete gradient from gradients list */ - unlink (delete_gradient->filename); + gimp_data_delete_from_disk (GIMP_DATA (delete_gradient)); gimp_container_remove (global_gradient_list, GIMP_OBJECT (delete_gradient)); @@ -1751,9 +1733,7 @@ ed_refresh_grads_callback (GtkWidget *widget, { curr_gradient = dnd_gradient = gimp_gradient_new (_("Default")); - curr_gradient->filename = - build_user_filename (GIMP_OBJECT (curr_gradient)->name, - gradient_path); + gimp_data_dirty (GIMP_DATA (curr_gradient)); gimp_container_add (global_gradient_list, GIMP_OBJECT (curr_gradient)); @@ -2700,7 +2680,7 @@ control_motion (gint x) if (str) g_free (str); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); if (g_editor->instant_update) ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); @@ -3910,7 +3890,8 @@ cpopup_load_left_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -3961,7 +3942,8 @@ cpopup_load_right_callback (GtkWidget *widget, break; } - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4054,7 +4036,7 @@ static void cpopup_set_left_color_callback (GtkWidget *widget, gpointer data) { - g_editor->left_saved_dirty = curr_gradient->dirty; + g_editor->left_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->left_saved_segments = cpopup_save_selection (); color_notebook_new (_("Left Endpoint Color"), @@ -4071,7 +4053,7 @@ static void cpopup_set_right_color_callback (GtkWidget *widget, gpointer data) { - g_editor->right_saved_dirty = curr_gradient->dirty; + g_editor->right_saved_dirty = GIMP_DATA (curr_gradient)->dirty; g_editor->right_saved_segments = cpopup_save_selection (); color_notebook_new (_("Right Endpoint Color"), @@ -4097,7 +4079,7 @@ cpopup_left_color_changed (ColorNotebook *cnb, &g_editor->control_sel_r->right_color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->left_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4106,13 +4088,13 @@ cpopup_left_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints ((GimpRGB *) color, &g_editor->control_sel_r->right_color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->left_saved_segments); ed_update_editor (GRAD_UPDATE_GRADIENT); - curr_gradient->dirty = g_editor->left_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->left_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4133,7 +4115,7 @@ cpopup_right_color_changed (ColorNotebook *cnb, cpopup_blend_endpoints (&g_editor->control_sel_r->left_color, (GimpRGB *) color, TRUE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); break; case COLOR_NOTEBOOK_OK: @@ -4141,14 +4123,14 @@ cpopup_right_color_changed (ColorNotebook *cnb, (GimpRGB *) color, TRUE, TRUE); gimp_gradient_segments_free (g_editor->right_saved_segments); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; case COLOR_NOTEBOOK_CANCEL: cpopup_replace_selection (g_editor->right_saved_segments); - curr_gradient->dirty = g_editor->right_saved_dirty; + GIMP_DATA (curr_gradient)->dirty = g_editor->right_saved_dirty; color_notebook_free (cnb); gtk_widget_set_sensitive (g_editor->shell, TRUE); break; @@ -4223,7 +4205,8 @@ cpopup_blending_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4291,7 +4274,8 @@ cpopup_coloring_callback (GtkWidget *widget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -4314,8 +4298,8 @@ cpopup_split_midpoint_callback (GtkWidget *widget, g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4475,8 +4459,8 @@ cpopup_split_uniform_split_callback (GtkWidget *widget, g_editor->control_sel_l = lsel; g_editor->control_sel_r = rseg; - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4490,7 +4474,7 @@ cpopup_split_uniform_cancel_callback (GtkWidget *widget, static void cpopup_split_uniform (GimpGradientSegment *lseg, - int parts, + gint parts, GimpGradientSegment **newl, GimpGradientSegment **newr) { @@ -4641,8 +4625,7 @@ cpopup_delete_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4666,7 +4649,8 @@ cpopup_recenter_callback (GtkWidget *wiodget, } while (aseg != g_editor->control_sel_r); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4720,7 +4704,8 @@ cpopup_redistribute_callback (GtkWidget *widget, /* Done */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -4914,8 +4899,7 @@ cpopup_flip_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5102,8 +5086,7 @@ cpopup_do_replicate_callback (GtkWidget *widget, /* Done */ - curr_gradient->last_visited = NULL; /* Force re-search */ - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); ed_update_editor (GRAD_UPDATE_GRADIENT | GRAD_UPDATE_CONTROL); } @@ -5126,7 +5109,8 @@ cpopup_blend_colors (GtkWidget *widget, &g_editor->control_sel_r->right_color, TRUE, FALSE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5138,7 +5122,8 @@ cpopup_blend_opacity (GtkWidget *widget, &g_editor->control_sel_r->right_color, FALSE, TRUE); - curr_gradient->dirty = TRUE; + gimp_data_dirty (GIMP_DATA (curr_gradient)); + ed_update_editor (GRAD_UPDATE_GRADIENT); } @@ -5228,32 +5213,3 @@ seg_get_closest_handle (GimpGradient *grad, } } } - -/***** Files and paths functions *****/ - -static gchar * -build_user_filename (gchar *name, - gchar *path_str) -{ - GList *grad_path; - gchar *grad_dir; - gchar *filename; - - g_assert (name != NULL); - - if (!path_str) - return NULL; /* Perhaps this is not a good idea */ - - grad_path = gimp_path_parse (path_str, 16, TRUE, NULL); - grad_dir = gimp_path_get_user_writable_dir (grad_path); - gimp_path_free (grad_path); - - if (!grad_dir) - return NULL; /* Perhaps this is not a good idea */ - - filename = g_strdup_printf ("%s%s", grad_dir, name); - - g_free (grad_dir); - - return filename; -} diff --git a/data/gradients/Abstract_1 b/data/gradients/Abstract_1.ggr similarity index 97% rename from data/gradients/Abstract_1 rename to data/gradients/Abstract_1.ggr index 88e18d8cee..5e681d223c 100644 --- a/data/gradients/Abstract_1 +++ b/data/gradients/Abstract_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Abstract 1 6 0.000000 0.286311 0.572621 0.269543 0.259267 1.000000 1.000000 0.215635 0.407414 0.984953 1.000000 0 0 0.572621 0.657763 0.716194 0.215635 0.407414 0.984953 1.000000 0.040368 0.833333 0.619375 1.000000 0 0 diff --git a/data/gradients/Abstract_2 b/data/gradients/Abstract_2.ggr similarity index 97% rename from data/gradients/Abstract_2 rename to data/gradients/Abstract_2.ggr index 013ef19a93..913ae01945 100644 --- a/data/gradients/Abstract_2 +++ b/data/gradients/Abstract_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Abstract 2 6 0.000000 0.333532 0.570952 1.000000 0.000000 0.055296 1.000000 0.922731 0.452483 0.984953 1.000000 0 0 0.570952 0.616469 0.664441 0.922731 0.452483 0.984953 1.000000 0.122236 0.319840 0.583333 1.000000 0 0 diff --git a/data/gradients/Abstract_3 b/data/gradients/Abstract_3.ggr similarity index 97% rename from data/gradients/Abstract_3 rename to data/gradients/Abstract_3.ggr index 45166b9186..5052750a08 100644 --- a/data/gradients/Abstract_3 +++ b/data/gradients/Abstract_3.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Abstract 3 6 0.000000 0.050083 0.435726 0.000000 0.424242 0.070751 1.000000 1.000000 0.725647 0.428066 1.000000 0 0 0.435726 0.490818 0.590985 1.000000 0.725647 0.428066 1.000000 0.115248 0.249315 0.651515 1.000000 0 0 diff --git a/data/gradients/Aneurism b/data/gradients/Aneurism.ggr similarity index 98% rename from data/gradients/Aneurism rename to data/gradients/Aneurism.ggr index b4da236b20..092b229234 100644 --- a/data/gradients/Aneurism +++ b/data/gradients/Aneurism.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Aneurism 8 0.000000 0.119571 0.235803 0.000000 0.000000 0.000000 0.000000 0.202999 0.003788 0.265152 1.000000 0 0 0.235803 0.306652 0.377501 0.202999 0.003788 0.265152 1.000000 0.300711 0.001894 0.393939 1.000000 0 0 diff --git a/data/gradients/Blinds b/data/gradients/Blinds.ggr similarity index 98% rename from data/gradients/Blinds rename to data/gradients/Blinds.ggr index b782eef841..a6bca82566 100644 --- a/data/gradients/Blinds +++ b/data/gradients/Blinds.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Blinds 9 0.000000 0.041667 0.166667 0.000000 0.000000 0.000000 1.000000 0.500000 0.500000 0.500000 1.000000 2 0 0.166667 0.186978 0.250000 0.500000 0.500000 0.500000 1.000000 1.000000 1.000000 1.000000 1.000000 2 0 diff --git a/data/gradients/Blue_Green b/data/gradients/Blue_Green.ggr similarity index 92% rename from data/gradients/Blue_Green rename to data/gradients/Blue_Green.ggr index 620523c714..4b50457648 100644 --- a/data/gradients/Blue_Green +++ b/data/gradients/Blue_Green.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Blue Green 2 0.000000 0.135225 0.565943 0.000000 0.481711 1.000000 1.000000 0.283820 0.887055 1.000000 1.000000 0 0 0.565943 0.918197 1.000000 0.283820 0.887055 1.000000 1.000000 0.000000 1.000000 0.631509 1.000000 0 0 diff --git a/data/gradients/Browns b/data/gradients/Browns.ggr similarity index 98% rename from data/gradients/Browns rename to data/gradients/Browns.ggr index e25d0d8222..7b826a3908 100644 --- a/data/gradients/Browns +++ b/data/gradients/Browns.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Browns 11 0.000000 0.055092 0.116861 0.550000 0.353971 0.192500 1.000000 0.734848 0.461927 0.168587 1.000000 0 0 0.116861 0.176962 0.253756 0.734848 0.461927 0.168587 1.000000 0.550000 0.328592 0.022000 1.000000 0 0 diff --git a/data/gradients/Brushed_Aluminium b/data/gradients/Brushed_Aluminium.ggr similarity index 99% rename from data/gradients/Brushed_Aluminium rename to data/gradients/Brushed_Aluminium.ggr index 7f119ee77c..3b2462586a 100644 --- a/data/gradients/Brushed_Aluminium +++ b/data/gradients/Brushed_Aluminium.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Brushed Aluminium 24 0.000000 0.031250 0.041736 0.435294 0.447059 0.411765 1.000000 0.498070 0.508364 0.477482 1.000000 0 0 0.041736 0.066308 0.072621 0.498070 0.508364 0.477482 1.000000 0.529458 0.539017 0.510340 1.000000 0 0 diff --git a/data/gradients/Burning_Paper b/data/gradients/Burning_Paper.ggr similarity index 96% rename from data/gradients/Burning_Paper rename to data/gradients/Burning_Paper.ggr index 3f0bff7e8a..df064eb063 100644 --- a/data/gradients/Burning_Paper +++ b/data/gradients/Burning_Paper.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Burning Paper 6 0.000000 0.264608 0.502504 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 0.502504 0.601002 0.637730 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 0.000000 1.000000 1 0 diff --git a/data/gradients/Burning_Transparency b/data/gradients/Burning_Transparency.ggr similarity index 95% rename from data/gradients/Burning_Transparency rename to data/gradients/Burning_Transparency.ggr index 92d55ccfce..fccbc4a96c 100644 --- a/data/gradients/Burning_Transparency +++ b/data/gradients/Burning_Transparency.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Burning Transparency 6 0.000000 0.264608 0.502504 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0 0.502504 0.601002 0.637730 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1 0 diff --git a/data/gradients/CD b/data/gradients/CD.ggr similarity index 99% rename from data/gradients/CD rename to data/gradients/CD.ggr index ba1c7228cf..824df96044 100644 --- a/data/gradients/CD +++ b/data/gradients/CD.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: CD 18 0.000000 0.010566 0.023372 0.819999 0.820000 0.820000 1.000000 0.879999 0.880000 0.880000 1.000000 0 0 0.023372 0.045682 0.063439 0.879999 0.880000 0.880000 1.000000 0.999999 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/CD_Half b/data/gradients/CD_Half.ggr similarity index 98% rename from data/gradients/CD_Half rename to data/gradients/CD_Half.ggr index f155038484..fdc5dd3830 100644 --- a/data/gradients/CD_Half +++ b/data/gradients/CD_Half.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: CD Half 9 0.000000 0.021131 0.046745 0.819999 0.820000 0.820000 1.000000 0.879999 0.880000 0.880000 1.000000 0 0 0.046745 0.091364 0.126878 0.879999 0.880000 0.880000 1.000000 0.999999 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/Caribbean_Blues b/data/gradients/Caribbean_Blues.ggr similarity index 93% rename from data/gradients/Caribbean_Blues rename to data/gradients/Caribbean_Blues.ggr index 147693256e..232b7b8b41 100644 --- a/data/gradients/Caribbean_Blues +++ b/data/gradients/Caribbean_Blues.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Caribbean Blues 3 0.000000 0.403766 0.567613 0.000000 0.130219 0.583333 1.000000 0.200000 0.833333 0.726927 1.000000 0 0 0.567613 0.642738 0.681135 0.200000 0.833333 0.726927 1.000000 1.000000 0.988352 0.860000 1.000000 0 0 diff --git a/data/gradients/Coffee b/data/gradients/Coffee.ggr similarity index 90% rename from data/gradients/Coffee rename to data/gradients/Coffee.ggr index 5cdf8a6032..24baee0eaa 100644 --- a/data/gradients/Coffee +++ b/data/gradients/Coffee.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Coffee 1 0.000000 0.949917 1.000000 0.560606 0.435893 0.311332 0.000000 0.300000 0.233262 0.166605 1.000000 4 0 diff --git a/data/gradients/Cold_Steel b/data/gradients/Cold_Steel.ggr similarity index 92% rename from data/gradients/Cold_Steel rename to data/gradients/Cold_Steel.ggr index add47e6c4f..f6b27a0205 100644 --- a/data/gradients/Cold_Steel +++ b/data/gradients/Cold_Steel.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Cold Steel 2 0.000000 0.208681 0.647746 1.000000 1.000000 1.000000 1.000000 0.047059 0.023529 0.137255 1.000000 0 0 0.647746 0.669449 1.000000 0.047059 0.023529 0.137255 1.000000 0.364706 0.733333 0.756863 1.000000 0 0 diff --git a/data/gradients/Cold_Steel_2 b/data/gradients/Cold_Steel_2.ggr similarity index 94% rename from data/gradients/Cold_Steel_2 rename to data/gradients/Cold_Steel_2.ggr index 5a494f1040..f09dcf89aa 100644 --- a/data/gradients/Cold_Steel_2 +++ b/data/gradients/Cold_Steel_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Cold Steel 2 3 0.000000 0.068447 0.101836 0.143939 0.013928 0.100000 1.000000 1.000000 1.000000 1.000000 1.000000 1 0 0.101836 0.501669 0.901503 1.000000 1.000000 1.000000 1.000000 0.088684 0.075143 0.174242 1.000000 1 0 diff --git a/data/gradients/Crown_molding b/data/gradients/Crown_molding.ggr similarity index 96% rename from data/gradients/Crown_molding rename to data/gradients/Crown_molding.ggr index 319f214037..56ffb0135b 100644 --- a/data/gradients/Crown_molding +++ b/data/gradients/Crown_molding.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Crown molding 6 0.000000 0.155120 0.238453 0.000000 0.000000 0.000000 1.000000 0.840000 0.840000 0.840000 1.000000 0 0 0.238453 0.287145 0.288815 0.840000 0.840000 0.840000 1.000000 0.333333 0.333333 0.333333 1.000000 4 0 diff --git a/data/gradients/Danish_flag b/data/gradients/Danish_flag deleted file mode 100644 index f06fea61b1..0000000000 --- a/data/gradients/Danish_flag +++ /dev/null @@ -1,7 +0,0 @@ -/* color_map file created by the GIMP */ -/* http://www.gimp.org/ */ -color_map { - [0.000000 color rgbt <1.000000, 0.000000, 0.000000, 0.000000>] - [0.395659 color rgbt <1.000000, 0.500000, 0.500000, 0.000000>] - [1.000000 color rgbt <1.000000, 1.000000, 1.000000, 0.000000>] -} /* color_map */ diff --git a/data/gradients/Dark_1 b/data/gradients/Dark_1.ggr similarity index 96% rename from data/gradients/Dark_1 rename to data/gradients/Dark_1.ggr index 05596f0569..52a0f80456 100644 --- a/data/gradients/Dark_1 +++ b/data/gradients/Dark_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Dark 1 3 0.000000 0.315713 0.560935 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 0.560935 0.677796 0.774624 0.000000 0.000000 0.000000 1.000000 0.636364 0.280000 0.280000 1.000000 0 0 diff --git a/data/gradients/Deep_Sea b/data/gradients/Deep_Sea.ggr similarity index 93% rename from data/gradients/Deep_Sea rename to data/gradients/Deep_Sea.ggr index b7b3e4e034..c6cfc5fefa 100644 --- a/data/gradients/Deep_Sea +++ b/data/gradients/Deep_Sea.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Deep Sea 2 0.000000 0.580968 0.764608 0.000000 0.009040 0.166667 1.000000 0.179032 0.390004 0.621212 1.000000 0 0 0.764608 0.888147 1.000000 0.179032 0.390004 0.621212 1.000000 0.000000 0.969697 0.969697 1.000000 0 0 diff --git a/data/gradients/Default b/data/gradients/Default.ggr similarity index 89% rename from data/gradients/Default rename to data/gradients/Default.ggr index 95ac22a6e8..82511f35e1 100644 --- a/data/gradients/Default +++ b/data/gradients/Default.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Default 1 0.000000 0.500000 1.000000 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/Flare_Glow_Angular_1 b/data/gradients/Flare_Glow_Angular_1.ggr similarity index 99% rename from data/gradients/Flare_Glow_Angular_1 rename to data/gradients/Flare_Glow_Angular_1.ggr index e89ccd090f..b0e2dc9c0c 100644 --- a/data/gradients/Flare_Glow_Angular_1 +++ b/data/gradients/Flare_Glow_Angular_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Glow Angular 1 46 0.000000 0.006944 0.013889 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.120000 0 0 0.013889 0.025598 0.038954 1.000000 1.000000 1.000000 0.120000 1.000000 1.000000 1.000000 0.860000 0 0 diff --git a/data/gradients/Flare_Glow_Radial_1 b/data/gradients/Flare_Glow_Radial_1.ggr similarity index 94% rename from data/gradients/Flare_Glow_Radial_1 rename to data/gradients/Flare_Glow_Radial_1.ggr index f0b126325a..318f43fed8 100644 --- a/data/gradients/Flare_Glow_Radial_1 +++ b/data/gradients/Flare_Glow_Radial_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Glow Radial 1 4 0.000000 0.353923 0.535893 1.000000 1.000000 1.000000 0.940000 0.780303 0.560606 1.000000 0.480000 1 0 0.535893 0.595400 0.616550 0.780303 0.560606 1.000000 0.480000 0.900000 0.800000 1.000000 0.860000 1 0 diff --git a/data/gradients/Flare_Glow_Radial_2 b/data/gradients/Flare_Glow_Radial_2.ggr similarity index 95% rename from data/gradients/Flare_Glow_Radial_2 rename to data/gradients/Flare_Glow_Radial_2.ggr index e87e35d197..972825998d 100644 --- a/data/gradients/Flare_Glow_Radial_2 +++ b/data/gradients/Flare_Glow_Radial_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Glow Radial 2 5 0.000000 0.260896 0.530885 0.500000 1.000000 1.000000 0.000000 0.653680 0.728264 0.846320 0.000000 1 2 0.530885 0.567758 0.646077 0.653680 0.728264 0.846320 0.000000 0.622773 0.921464 0.578536 0.250000 1 2 diff --git a/data/gradients/Flare_Glow_Radial_3 b/data/gradients/Flare_Glow_Radial_3.ggr similarity index 95% rename from data/gradients/Flare_Glow_Radial_3 rename to data/gradients/Flare_Glow_Radial_3.ggr index 765a70e81f..42c24e1a56 100644 --- a/data/gradients/Flare_Glow_Radial_3 +++ b/data/gradients/Flare_Glow_Radial_3.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Glow Radial 3 5 0.000000 0.173623 0.350584 1.000000 0.920000 0.920000 0.809524 1.000000 0.737255 0.737255 0.306122 2 0 0.350584 0.375626 0.400668 1.000000 0.737255 0.737255 0.306122 1.000000 0.636060 0.636060 0.306122 0 0 diff --git a/data/gradients/Flare_Glow_Radial_4 b/data/gradients/Flare_Glow_Radial_4.ggr similarity index 92% rename from data/gradients/Flare_Glow_Radial_4 rename to data/gradients/Flare_Glow_Radial_4.ggr index 925d815abc..966f853809 100644 --- a/data/gradients/Flare_Glow_Radial_4 +++ b/data/gradients/Flare_Glow_Radial_4.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Glow Radial 4 3 0.000000 0.737896 0.878130 1.000000 0.999999 0.999999 0.100000 1.000000 0.755000 0.755000 0.550000 1 0 0.878130 0.920520 0.943039 1.000000 0.755000 0.755000 0.550000 1.000000 0.510000 0.510000 1.000000 1 0 diff --git a/data/gradients/Flare_Radial_101 b/data/gradients/Flare_Radial_101.ggr similarity index 96% rename from data/gradients/Flare_Radial_101 rename to data/gradients/Flare_Radial_101.ggr index 9cc5554159..eff7920fcb 100644 --- a/data/gradients/Flare_Radial_101 +++ b/data/gradients/Flare_Radial_101.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Radial 101 7 0.000000 0.050918 0.101836 1.000000 0.999999 0.999999 1.000000 1.000000 0.999999 0.999999 1.000000 0 0 0.101836 0.151085 0.200334 1.000000 0.999999 0.999999 1.000000 1.000000 0.691315 0.691315 0.650000 0 0 diff --git a/data/gradients/Flare_Radial_102 b/data/gradients/Flare_Radial_102.ggr similarity index 96% rename from data/gradients/Flare_Radial_102 rename to data/gradients/Flare_Radial_102.ggr index 7495da5ed5..ac50a3c952 100644 --- a/data/gradients/Flare_Radial_102 +++ b/data/gradients/Flare_Radial_102.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Radial 102 6 0.000000 0.024937 0.058431 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.900000 0 0 0.058431 0.083751 0.105175 1.000000 1.000000 1.000000 0.900000 1.000000 0.490000 0.490000 0.820000 0 0 diff --git a/data/gradients/Flare_Radial_103 b/data/gradients/Flare_Radial_103.ggr similarity index 83% rename from data/gradients/Flare_Radial_103 rename to data/gradients/Flare_Radial_103.ggr index 10a5f1f4c7..a73fbe9e6f 100644 --- a/data/gradients/Flare_Radial_103 +++ b/data/gradients/Flare_Radial_103.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Flare Radial 103 1 0.000000 0.517529 1.000000 1.000000 1.000000 1.000000 0.490000 1.000000 0.510000 0.510000 1.000000 0 0 diff --git a/data/gradients/Flare_Rays_Radial_1 b/data/gradients/Flare_Rays_Radial_1.ggr similarity index 89% rename from data/gradients/Flare_Rays_Radial_1 rename to data/gradients/Flare_Rays_Radial_1.ggr index 856878a1ec..66a848d567 100644 --- a/data/gradients/Flare_Rays_Radial_1 +++ b/data/gradients/Flare_Rays_Radial_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Rays Radial 1 2 0.000000 0.514267 0.657763 1.000000 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 0.500000 1 0 0.657763 0.938230 1.000000 1.000000 1.000000 1.000000 0.500000 1.000000 1.000000 1.000000 0.000000 1 0 diff --git a/data/gradients/Flare_Rays_Radial_2 b/data/gradients/Flare_Rays_Radial_2.ggr similarity index 89% rename from data/gradients/Flare_Rays_Radial_2 rename to data/gradients/Flare_Rays_Radial_2.ggr index 7a645af213..c38e061c47 100644 --- a/data/gradients/Flare_Rays_Radial_2 +++ b/data/gradients/Flare_Rays_Radial_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Rays Radial 2 2 0.000000 0.181970 0.434057 1.000000 1.000000 1.000000 0.000000 1.000000 0.600000 0.600000 0.600000 1 0 0.434057 0.582638 1.000000 1.000000 0.600000 0.600000 0.600000 1.000000 1.000000 1.000000 0.000000 1 0 diff --git a/data/gradients/Flare_Rays_Size_1 b/data/gradients/Flare_Rays_Size_1.ggr similarity index 98% rename from data/gradients/Flare_Rays_Size_1 rename to data/gradients/Flare_Rays_Size_1.ggr index 33e2bed95e..f5d85e7f58 100644 --- a/data/gradients/Flare_Rays_Size_1 +++ b/data/gradients/Flare_Rays_Size_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Flare Rays Size 1 16 0.000000 0.031250 0.062500 1.000000 1.000000 1.000000 1.000000 0.240000 0.240000 0.240000 1.000000 0 0 0.062500 0.117659 0.153589 0.240000 0.240000 0.240000 1.000000 0.860000 0.860000 0.860000 1.000000 0 0 diff --git a/data/gradients/Flare_Sizefac_101 b/data/gradients/Flare_Sizefac_101.ggr similarity index 83% rename from data/gradients/Flare_Sizefac_101 rename to data/gradients/Flare_Sizefac_101.ggr index 15fd59b93f..e654a9eed2 100644 --- a/data/gradients/Flare_Sizefac_101 +++ b/data/gradients/Flare_Sizefac_101.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Flare Sizefac 101 1 0.000000 0.500000 1.000000 0.370000 0.370000 0.370000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/Four_bars b/data/gradients/Four_bars.ggr similarity index 98% rename from data/gradients/Four_bars rename to data/gradients/Four_bars.ggr index a7705d14dc..7a0a3e2426 100644 --- a/data/gradients/Four_bars +++ b/data/gradients/Four_bars.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Four bars 8 0.000000 0.062500 0.125000 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 0.125000 0.187500 0.250000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/French_flag b/data/gradients/French_flag.ggr similarity index 94% rename from data/gradients/French_flag rename to data/gradients/French_flag.ggr index 8481234855..a616797060 100644 --- a/data/gradients/French_flag +++ b/data/gradients/French_flag.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: French flag 3 0.000000 0.166667 0.333333 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 0 0 0.333333 0.500000 0.666667 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/French_flag_smooth b/data/gradients/French_flag_smooth.ggr similarity index 89% rename from data/gradients/French_flag_smooth rename to data/gradients/French_flag_smooth.ggr index bdc6ee65eb..61b179df25 100644 --- a/data/gradients/French_flag_smooth +++ b/data/gradients/French_flag_smooth.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: French flag smooth 2 0.000000 0.250000 0.500000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 0.500000 0.750000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/Full_saturation_spectrum_CCW b/data/gradients/Full_saturation_spectrum_CCW.ggr similarity index 77% rename from data/gradients/Full_saturation_spectrum_CCW rename to data/gradients/Full_saturation_spectrum_CCW.ggr index 6cfd312c11..9bd2ea3b06 100644 --- a/data/gradients/Full_saturation_spectrum_CCW +++ b/data/gradients/Full_saturation_spectrum_CCW.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Full saturation spectrum CCW 1 0.000000 0.500000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 1 diff --git a/data/gradients/Full_saturation_spectrum_CW b/data/gradients/Full_saturation_spectrum_CW.ggr similarity index 77% rename from data/gradients/Full_saturation_spectrum_CW rename to data/gradients/Full_saturation_spectrum_CW.ggr index 4ec3df0b1e..d70ba64383 100644 --- a/data/gradients/Full_saturation_spectrum_CW +++ b/data/gradients/Full_saturation_spectrum_CW.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Full saturation spectrum CW 1 0.000000 0.500000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 2 diff --git a/data/gradients/German_flag b/data/gradients/German_flag.ggr similarity index 94% rename from data/gradients/German_flag rename to data/gradients/German_flag.ggr index 594ed3e309..8d76ac20ea 100644 --- a/data/gradients/German_flag +++ b/data/gradients/German_flag.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: German flag 3 0.000000 0.166667 0.333333 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 0.333333 0.500000 0.666667 1.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/German_flag_smooth b/data/gradients/German_flag_smooth.ggr similarity index 89% rename from data/gradients/German_flag_smooth rename to data/gradients/German_flag_smooth.ggr index 9ac48a3132..efadfdbc34 100644 --- a/data/gradients/German_flag_smooth +++ b/data/gradients/German_flag_smooth.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: German flag smooth 2 0.000000 0.250000 0.500000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 0.500000 0.750000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/Golden b/data/gradients/Golden.ggr similarity index 99% rename from data/gradients/Golden rename to data/gradients/Golden.ggr index c88d0f7c45..4f1a65e20c 100644 --- a/data/gradients/Golden +++ b/data/gradients/Golden.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Golden 14 0.000000 0.080316 0.163606 0.137255 0.156863 0.011760 1.000000 0.533330 0.415600 0.086270 1.000000 0 0 0.163606 0.193879 0.224151 0.533330 0.415600 0.086270 1.000000 0.650000 0.550000 0.161000 1.000000 0 0 diff --git a/data/gradients/Greens b/data/gradients/Greens.ggr similarity index 98% rename from data/gradients/Greens rename to data/gradients/Greens.ggr index 23e89300d0..0f307a0108 100644 --- a/data/gradients/Greens +++ b/data/gradients/Greens.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Greens 9 0.000000 0.062500 0.086811 0.146341 0.393939 0.133992 1.000000 0.198883 0.300000 0.135000 1.000000 0 0 0.086811 0.200334 0.250000 0.198883 0.300000 0.135000 1.000000 0.406805 0.613636 0.276136 1.000000 0 0 diff --git a/data/gradients/Horizon_1 b/data/gradients/Horizon_1.ggr similarity index 97% rename from data/gradients/Horizon_1 rename to data/gradients/Horizon_1.ggr index cf1f1b8b2e..25db002bd4 100644 --- a/data/gradients/Horizon_1 +++ b/data/gradients/Horizon_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Horizon 1 5 0.000000 0.348915 0.532554 0.047059 0.360784 0.572549 1.000000 1.000000 0.984314 0.984314 1.000000 0 0 0.532554 0.542571 0.555927 1.000000 0.984314 0.984314 1.000000 0.258824 0.121569 0.035294 1.000000 3 0 diff --git a/data/gradients/Horizon_2 b/data/gradients/Horizon_2.ggr similarity index 97% rename from data/gradients/Horizon_2 rename to data/gradients/Horizon_2.ggr index ba77813ba4..e2d07424b0 100644 --- a/data/gradients/Horizon_2 +++ b/data/gradients/Horizon_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Horizon 2 5 0.000000 0.290484 0.348915 0.047059 0.360784 0.572549 1.000000 0.370303 0.628966 0.787879 1.000000 0 0 0.348915 0.470785 0.532554 0.370303 0.628966 0.787879 1.000000 1.000000 0.984314 0.984314 1.000000 0 0 diff --git a/data/gradients/Incandescent b/data/gradients/Incandescent.ggr similarity index 95% rename from data/gradients/Incandescent rename to data/gradients/Incandescent.ggr index 996dca91c6..64a3438b4e 100644 --- a/data/gradients/Incandescent +++ b/data/gradients/Incandescent.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Incandescent 4 0.000000 0.459098 0.594324 0.000000 0.000000 0.000000 1.000000 0.729412 0.000000 0.000000 1.000000 0 0 0.594324 0.677796 0.809683 0.729412 0.000000 0.000000 1.000000 1.000000 0.545098 0.196078 1.000000 0 0 diff --git a/data/gradients/Land_1 b/data/gradients/Land_1.ggr similarity index 97% rename from data/gradients/Land_1 rename to data/gradients/Land_1.ggr index 5935f079a9..a2180779ef 100644 --- a/data/gradients/Land_1 +++ b/data/gradients/Land_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Land 1 5 0.000000 0.348915 0.532554 0.047059 0.360784 0.572549 1.000000 1.000000 0.984314 0.984314 1.000000 0 0 0.532554 0.542571 0.555927 1.000000 0.984314 0.984314 1.000000 0.258824 0.121569 0.035294 1.000000 3 0 diff --git a/data/gradients/Land_and_Sea b/data/gradients/Land_and_Sea.ggr similarity index 96% rename from data/gradients/Land_and_Sea rename to data/gradients/Land_and_Sea.ggr index 1b8e52f5aa..a932b18863 100644 --- a/data/gradients/Land_and_Sea +++ b/data/gradients/Land_and_Sea.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Land and Sea 5 0.000000 0.081803 0.166945 1.000000 1.000000 1.000000 1.000000 0.560606 0.560606 0.560606 1.000000 0 0 0.166945 0.212020 0.265442 0.560606 0.560606 0.560606 1.000000 0.083243 0.462121 0.112054 1.000000 0 0 diff --git a/data/gradients/Makefile.am b/data/gradients/Makefile.am index 79a382b550..1d391d9544 100644 --- a/data/gradients/Makefile.am +++ b/data/gradients/Makefile.am @@ -12,82 +12,81 @@ EXTRA_DIST = $(gradientdata_DATA) .PHONY: files FILES = \ - Abstract_1 \ - Abstract_2 \ - Abstract_3 \ - Aneurism \ - Blinds \ - Blue_Green \ - Browns \ - Brushed_Aluminium \ - Burning_Paper \ - Burning_Transparency \ - CD \ - CD_Half \ - Caribbean_Blues \ - Coffee \ - Cold_Steel \ - Cold_Steel_2 \ - Crown_molding \ - Danish_flag \ - Dark_1 \ - Deep_Sea \ - Default \ - Flare_Glow_Angular_1 \ - Flare_Glow_Radial_1 \ - Flare_Glow_Radial_2 \ - Flare_Glow_Radial_3 \ - Flare_Glow_Radial_4 \ - Flare_Radial_101 \ - Flare_Radial_102 \ - Flare_Radial_103 \ - Flare_Rays_Radial_1 \ - Flare_Rays_Radial_2 \ - Flare_Rays_Size_1 \ - Flare_Sizefac_101 \ - Four_bars \ - French_flag \ - French_flag_smooth \ - Full_saturation_spectrum_CCW \ - Full_saturation_spectrum_CW \ - German_flag \ - German_flag_smooth \ - Golden \ - Greens \ - Horizon_1 \ - Horizon_2 \ - Incandescent \ - Land_1 \ - Land_and_Sea \ - Metallic_Something \ - Mexican_flag \ - Mexican_flag_smooth \ - Nauseating_Headache \ - Neon_Cyan \ - Neon_Green \ - Neon_Yellow \ - Pastels \ - Pastel_Rainbow \ - Purples \ - Radial_Eyeball_Blue \ - Radial_Eyeball_Brown \ - Radial_Eyeball_Green \ - Radial_Glow_1 \ - Radial_Rainbow_Hoop \ - Romanian_flag \ - Romanian_flag_smooth \ - Rounded_edge \ - Shadows_1 \ - Shadows_2 \ - Shadows_3 \ - Skyline \ - Skyline_polluted \ - Square_Wood_Frame \ - Sunrise \ - Three_bars_sin \ - Tropical_Colors \ - Tube_Red \ - Wood_1 \ - Wood_2 \ - Yellow_Contrast \ - Yellow_Orange + Abstract_1.ggr \ + Abstract_2.ggr \ + Abstract_3.ggr \ + Aneurism.ggr \ + Blinds.ggr \ + Blue_Green.ggr \ + Browns.ggr \ + Brushed_Aluminium.ggr \ + Burning_Paper.ggr \ + Burning_Transparency.ggr \ + CD.ggr \ + CD_Half.ggr \ + Caribbean_Blues.ggr \ + Coffee.ggr \ + Cold_Steel.ggr \ + Cold_Steel_2.ggr \ + Crown_molding.ggr \ + Dark_1.ggr \ + Deep_Sea.ggr \ + Default.ggr \ + Flare_Glow_Angular_1.ggr \ + Flare_Glow_Radial_1.ggr \ + Flare_Glow_Radial_2.ggr \ + Flare_Glow_Radial_3.ggr \ + Flare_Glow_Radial_4.ggr \ + Flare_Radial_101.ggr \ + Flare_Radial_102.ggr \ + Flare_Radial_103.ggr \ + Flare_Rays_Radial_1.ggr \ + Flare_Rays_Radial_2.ggr \ + Flare_Rays_Size_1.ggr \ + Flare_Sizefac_101.ggr \ + Four_bars.ggr \ + French_flag.ggr \ + French_flag_smooth.ggr \ + Full_saturation_spectrum_CCW.ggr \ + Full_saturation_spectrum_CW.ggr \ + German_flag.ggr \ + German_flag_smooth.ggr \ + Golden.ggr \ + Greens.ggr \ + Horizon_1.ggr \ + Horizon_2.ggr \ + Incandescent.ggr \ + Land_1.ggr \ + Land_and_Sea.ggr \ + Metallic_Something.ggr \ + Mexican_flag.ggr \ + Mexican_flag_smooth.ggr \ + Nauseating_Headache.ggr \ + Neon_Cyan.ggr \ + Neon_Green.ggr \ + Neon_Yellow.ggr \ + Pastels.ggr \ + Pastel_Rainbow.ggr \ + Purples.ggr \ + Radial_Eyeball_Blue.ggr \ + Radial_Eyeball_Brown.ggr \ + Radial_Eyeball_Green.ggr \ + Radial_Glow_1.ggr \ + Radial_Rainbow_Hoop.ggr \ + Romanian_flag.ggr \ + Romanian_flag_smooth.ggr \ + Rounded_edge.ggr \ + Shadows_1.ggr \ + Shadows_2.ggr \ + Shadows_3.ggr \ + Skyline.ggr \ + Skyline_polluted.ggr \ + Square_Wood_Frame.ggr \ + Sunrise.ggr \ + Three_bars_sin.ggr \ + Tropical_Colors.ggr \ + Tube_Red.ggr \ + Wood_1.ggr \ + Wood_2.ggr \ + Yellow_Contrast.ggr \ + Yellow_Orange.ggr diff --git a/data/gradients/Metallic_Something b/data/gradients/Metallic_Something.ggr similarity index 97% rename from data/gradients/Metallic_Something rename to data/gradients/Metallic_Something.ggr index bea2ba319b..19e675b7b4 100644 --- a/data/gradients/Metallic_Something +++ b/data/gradients/Metallic_Something.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Metallic Something 8 0.000000 0.036728 0.096828 0.020000 0.050000 0.080000 1.000000 0.142500 0.168750 0.195000 1.000000 2 0 0.096828 0.163606 0.220367 0.142500 0.168750 0.195000 1.000000 0.317326 0.344269 0.371212 1.000000 2 0 diff --git a/data/gradients/Mexican_flag b/data/gradients/Mexican_flag.ggr similarity index 94% rename from data/gradients/Mexican_flag rename to data/gradients/Mexican_flag.ggr index 667423656f..bcb7686d09 100644 --- a/data/gradients/Mexican_flag +++ b/data/gradients/Mexican_flag.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Mexican flag 3 0.000000 0.166667 0.333333 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 0 0 0.333333 0.500000 0.666667 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 diff --git a/data/gradients/Mexican_flag_smooth b/data/gradients/Mexican_flag_smooth.ggr similarity index 89% rename from data/gradients/Mexican_flag_smooth rename to data/gradients/Mexican_flag_smooth.ggr index 31661e6286..ee36311634 100644 --- a/data/gradients/Mexican_flag_smooth +++ b/data/gradients/Mexican_flag_smooth.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Mexican flag smooth 2 0.000000 0.250000 0.500000 0.000000 1.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0 0.500000 0.750000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/Nauseating_Headache b/data/gradients/Nauseating_Headache.ggr similarity index 99% rename from data/gradients/Nauseating_Headache rename to data/gradients/Nauseating_Headache.ggr index e61f30f518..347453ac88 100644 --- a/data/gradients/Nauseating_Headache +++ b/data/gradients/Nauseating_Headache.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Nauseating Headache 25 0.000000 0.058431 0.098497 0.391197 0.651515 0.409796 1.000000 0.495110 0.916667 0.865009 1.000000 0 1 0.098497 0.100167 0.101836 0.495110 0.916667 0.865009 1.000000 0.451393 0.807720 0.778663 1.000000 0 0 diff --git a/data/gradients/Neon_Cyan b/data/gradients/Neon_Cyan.ggr similarity index 96% rename from data/gradients/Neon_Cyan rename to data/gradients/Neon_Cyan.ggr index b0f8044ae5..4ae27583e9 100644 --- a/data/gradients/Neon_Cyan +++ b/data/gradients/Neon_Cyan.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Neon Cyan 4 0.000000 0.672788 0.699499 0.000000 1.000000 0.949020 0.000000 0.000000 1.000000 0.933333 0.901961 1 0 0.699499 0.737062 0.774624 0.000000 1.000000 0.913725 0.901961 0.827451 1.000000 0.988235 1.000000 1 0 diff --git a/data/gradients/Neon_Green b/data/gradients/Neon_Green.ggr similarity index 96% rename from data/gradients/Neon_Green rename to data/gradients/Neon_Green.ggr index 498c34ba3e..1f7402f864 100644 --- a/data/gradients/Neon_Green +++ b/data/gradients/Neon_Green.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Neon Green 4 0.000000 0.672788 0.699499 0.000000 1.000000 0.000000 0.000000 0.129412 1.000000 0.000000 0.901961 1 0 0.699499 0.737062 0.774624 0.129412 1.000000 0.000000 0.901961 0.823529 1.000000 0.807843 1.000000 1 0 diff --git a/data/gradients/Neon_Yellow b/data/gradients/Neon_Yellow.ggr similarity index 95% rename from data/gradients/Neon_Yellow rename to data/gradients/Neon_Yellow.ggr index 2d7ac1063b..31648b0493 100644 --- a/data/gradients/Neon_Yellow +++ b/data/gradients/Neon_Yellow.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Neon Yellow 4 0.000000 0.672788 0.699499 1.000000 0.949020 0.000000 0.000000 1.000000 0.933333 0.000000 0.901961 1 0 0.699499 0.737062 0.774624 1.000000 0.933333 0.000000 0.901961 0.996078 1.000000 0.819608 1.000000 1 0 diff --git a/data/gradients/Pastel_Rainbow b/data/gradients/Pastel_Rainbow.ggr similarity index 85% rename from data/gradients/Pastel_Rainbow rename to data/gradients/Pastel_Rainbow.ggr index 4bd0b319da..28a71847cd 100644 --- a/data/gradients/Pastel_Rainbow +++ b/data/gradients/Pastel_Rainbow.ggr @@ -1,3 +1,4 @@ GIMP Gradient +Name: Pastel Rainbow 1 0.000000 0.500000 1.000000 1.000000 0.749020 0.749020 1.000000 1.000000 0.749020 0.749020 1.000000 0 1 diff --git a/data/gradients/Pastels b/data/gradients/Pastels.ggr similarity index 99% rename from data/gradients/Pastels rename to data/gradients/Pastels.ggr index e4c3ca5180..f57fa5afa1 100644 --- a/data/gradients/Pastels +++ b/data/gradients/Pastels.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Pastels 14 0.000000 0.035714 0.091462 0.960000 0.880000 0.690000 1.000000 0.962857 0.741400 0.930894 1.000000 0 0 0.091462 0.127176 0.137849 0.962857 0.741400 0.930894 1.000000 0.761897 0.812851 0.965714 1.000000 0 0 diff --git a/data/gradients/Purples b/data/gradients/Purples.ggr similarity index 98% rename from data/gradients/Purples rename to data/gradients/Purples.ggr index 5dddcc2cc0..6c6ce68914 100644 --- a/data/gradients/Purples +++ b/data/gradients/Purples.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Purples 7 0.000000 0.057596 0.098497 0.303030 0.109635 0.273088 1.000000 0.514411 0.279242 0.734848 1.000000 0 0 0.098497 0.176962 0.228715 0.514411 0.279242 0.734848 1.000000 0.604602 0.331500 0.650000 1.000000 0 0 diff --git a/data/gradients/Radial_Eyeball_Blue b/data/gradients/Radial_Eyeball_Blue.ggr similarity index 95% rename from data/gradients/Radial_Eyeball_Blue rename to data/gradients/Radial_Eyeball_Blue.ggr index 223283fa03..9a23068b22 100644 --- a/data/gradients/Radial_Eyeball_Blue +++ b/data/gradients/Radial_Eyeball_Blue.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Radial Eyeball Blue 5 0.000000 0.105175 0.198664 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 0.198664 0.352254 0.492487 0.000000 0.035294 0.729412 1.000000 0.000000 0.015686 0.376471 1.000000 0 0 diff --git a/data/gradients/Radial_Eyeball_Brown b/data/gradients/Radial_Eyeball_Brown.ggr similarity index 95% rename from data/gradients/Radial_Eyeball_Brown rename to data/gradients/Radial_Eyeball_Brown.ggr index 445eec50da..c904944069 100644 --- a/data/gradients/Radial_Eyeball_Brown +++ b/data/gradients/Radial_Eyeball_Brown.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Radial Eyeball Brown 5 0.000000 0.105175 0.198664 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 0.198664 0.352254 0.492487 0.478431 0.380392 0.000000 1.000000 0.298039 0.227451 0.000000 1.000000 0 0 diff --git a/data/gradients/Radial_Eyeball_Green b/data/gradients/Radial_Eyeball_Green.ggr similarity index 95% rename from data/gradients/Radial_Eyeball_Green rename to data/gradients/Radial_Eyeball_Green.ggr index 455294c5c9..5352ec6f11 100644 --- a/data/gradients/Radial_Eyeball_Green +++ b/data/gradients/Radial_Eyeball_Green.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Radial Eyeball Green 5 0.000000 0.105175 0.198664 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 0.198664 0.352254 0.492487 0.000000 0.709804 0.423529 1.000000 0.000000 0.356863 0.094118 1.000000 0 0 diff --git a/data/gradients/Radial_Glow_1 b/data/gradients/Radial_Glow_1.ggr similarity index 96% rename from data/gradients/Radial_Glow_1 rename to data/gradients/Radial_Glow_1.ggr index aa82c0b23b..7169c67bb5 100644 --- a/data/gradients/Radial_Glow_1 +++ b/data/gradients/Radial_Glow_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Radial Glow 1 5 0.000000 0.173623 0.350584 1.000000 1.000000 1.000000 0.809524 1.000000 0.737255 0.737255 0.306122 2 0 0.350584 0.375626 0.400668 1.000000 0.737255 0.737255 0.306122 1.000000 0.636060 0.636060 0.306122 0 0 diff --git a/data/gradients/Radial_Rainbow_Hoop b/data/gradients/Radial_Rainbow_Hoop.ggr similarity index 92% rename from data/gradients/Radial_Rainbow_Hoop rename to data/gradients/Radial_Rainbow_Hoop.ggr index 3f102bca83..b34ad91585 100644 --- a/data/gradients/Radial_Rainbow_Hoop +++ b/data/gradients/Radial_Rainbow_Hoop.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Radial Rainbow Hoop 3 0.000000 0.666110 0.699499 0.000000 1.000000 0.000000 0.000000 1.000000 0.113725 0.000000 1.000000 1 2 0.699499 0.767947 0.849750 1.000000 0.113725 0.000000 1.000000 1.000000 0.000000 0.047059 1.000000 0 1 diff --git a/data/gradients/Romanian_flag b/data/gradients/Romanian_flag.ggr similarity index 94% rename from data/gradients/Romanian_flag rename to data/gradients/Romanian_flag.ggr index 38c6b0411a..bcdb9bca6e 100644 --- a/data/gradients/Romanian_flag +++ b/data/gradients/Romanian_flag.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Romanian flag 3 0.000000 0.166667 0.333333 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 0 0 0.333333 0.500000 0.666667 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/Romanian_flag_smooth b/data/gradients/Romanian_flag_smooth.ggr similarity index 89% rename from data/gradients/Romanian_flag_smooth rename to data/gradients/Romanian_flag_smooth.ggr index e9d0482575..08a3daeb0b 100644 --- a/data/gradients/Romanian_flag_smooth +++ b/data/gradients/Romanian_flag_smooth.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Romanian flag smooth 2 0.000000 0.250000 0.500000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 0.000000 1.000000 0 0 0.500000 0.750000 1.000000 1.000000 1.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 diff --git a/data/gradients/Rounded_edge b/data/gradients/Rounded_edge.ggr similarity index 97% rename from data/gradients/Rounded_edge rename to data/gradients/Rounded_edge.ggr index a2a88209f0..5cb2f6c60a 100644 --- a/data/gradients/Rounded_edge +++ b/data/gradients/Rounded_edge.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Rounded edge 7 0.000000 0.220339 0.440678 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 1 0.440678 0.487288 0.533898 1.000000 1.000000 1.000000 1.000000 0.833333 0.833333 0.833333 1.000000 0 2 diff --git a/data/gradients/Shadows_1 b/data/gradients/Shadows_1.ggr similarity index 97% rename from data/gradients/Shadows_1 rename to data/gradients/Shadows_1.ggr index 8e01fe19d0..14574edcae 100644 --- a/data/gradients/Shadows_1 +++ b/data/gradients/Shadows_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Shadows 1 5 0.000000 0.221580 0.346912 0.113636 0.113636 0.113636 1.000000 0.643939 0.311237 0.107323 1.000000 0 0 0.346912 0.449416 0.538564 0.643939 0.311237 0.107323 1.000000 0.871212 0.820000 0.820000 1.000000 0 0 diff --git a/data/gradients/Shadows_2 b/data/gradients/Shadows_2.ggr similarity index 97% rename from data/gradients/Shadows_2 rename to data/gradients/Shadows_2.ggr index 0ec2f942de..31b4f7f265 100644 --- a/data/gradients/Shadows_2 +++ b/data/gradients/Shadows_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Shadows 2 5 0.000000 0.048414 0.126878 0.462121 0.462121 0.462121 1.000000 0.940000 0.865112 0.817800 1.000000 0 0 0.126878 0.368948 0.499165 0.940000 0.865112 0.817800 1.000000 0.380000 0.328734 0.231331 1.000000 0 0 diff --git a/data/gradients/Shadows_3 b/data/gradients/Shadows_3.ggr similarity index 97% rename from data/gradients/Shadows_3 rename to data/gradients/Shadows_3.ggr index b0866af1af..eb9366d8b7 100644 --- a/data/gradients/Shadows_3 +++ b/data/gradients/Shadows_3.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Shadows 3 6 0.000000 0.143573 0.297162 0.598485 0.598484 0.598484 1.000000 0.492424 0.303700 0.136994 1.000000 1 0 0.297162 0.330551 0.365609 0.492424 0.303700 0.136994 1.000000 0.880909 0.584348 0.509475 1.000000 1 0 diff --git a/data/gradients/Skyline b/data/gradients/Skyline.ggr similarity index 97% rename from data/gradients/Skyline rename to data/gradients/Skyline.ggr index 2762815b76..ba43e817fe 100644 --- a/data/gradients/Skyline +++ b/data/gradients/Skyline.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Skyline 5 0.000000 0.051753 0.365609 0.000000 0.000000 0.000000 1.000000 0.109804 0.066667 0.568627 1.000000 3 0 0.365609 0.602671 0.749583 0.109804 0.066667 0.568627 1.000000 0.917647 0.043137 0.043137 1.000000 0 0 diff --git a/data/gradients/Skyline_polluted b/data/gradients/Skyline_polluted.ggr similarity index 95% rename from data/gradients/Skyline_polluted rename to data/gradients/Skyline_polluted.ggr index fbedc491fb..5677742a47 100644 --- a/data/gradients/Skyline_polluted +++ b/data/gradients/Skyline_polluted.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Skyline polluted 5 0.000000 0.051753 0.365609 0.000000 0.000000 0.000000 1.000000 0.227451 0.207843 0.486275 1.000000 3 0 0.365609 0.602671 0.749583 0.227451 0.207843 0.486275 1.000000 0.709804 0.098039 0.098039 1.000000 0 0 diff --git a/data/gradients/Square_Wood_Frame b/data/gradients/Square_Wood_Frame.ggr similarity index 96% rename from data/gradients/Square_Wood_Frame rename to data/gradients/Square_Wood_Frame.ggr index c9ec67dcae..3314e7b2b6 100644 --- a/data/gradients/Square_Wood_Frame +++ b/data/gradients/Square_Wood_Frame.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Square Wood Frame 6 0.000000 0.394306 0.797162 0.348485 0.187023 0.027070 0.000000 0.348485 0.187023 0.027070 0.000000 0 0 0.797162 0.813856 0.830551 0.348485 0.187023 0.027070 1.000000 0.598485 0.321191 0.046490 1.000000 0 0 diff --git a/data/gradients/Sunrise b/data/gradients/Sunrise.ggr similarity index 97% rename from data/gradients/Sunrise rename to data/gradients/Sunrise.ggr index aadcb1c751..2bb3beffd2 100644 --- a/data/gradients/Sunrise +++ b/data/gradients/Sunrise.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Sunrise 6 0.000000 0.101798 0.203595 1.000000 1.000000 1.000000 1.000000 0.948165 0.969697 0.812122 1.000000 0 0 0.203595 0.379143 0.487479 0.948165 0.969697 0.812122 1.000000 1.000000 0.552632 0.270000 1.000000 0 0 diff --git a/data/gradients/Three_bars_sin b/data/gradients/Three_bars_sin.ggr similarity index 96% rename from data/gradients/Three_bars_sin rename to data/gradients/Three_bars_sin.ggr index bb18eba79d..564d15c752 100644 --- a/data/gradients/Three_bars_sin +++ b/data/gradients/Three_bars_sin.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Three bars sin 6 0.000000 0.083333 0.166667 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 2 0 0.166667 0.250000 0.333333 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 0.000000 1.000000 2 0 diff --git a/data/gradients/Tropical_Colors b/data/gradients/Tropical_Colors.ggr similarity index 97% rename from data/gradients/Tropical_Colors rename to data/gradients/Tropical_Colors.ggr index 04c0660272..bbb0fdac50 100644 --- a/data/gradients/Tropical_Colors +++ b/data/gradients/Tropical_Colors.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Tropical Colors 9 0.000000 0.055556 0.085142 0.036578 0.159091 0.015374 1.000000 0.007899 0.310606 0.000000 1.000000 0 0 0.085142 0.138564 0.193656 0.007899 0.310606 0.000000 1.000000 0.195893 0.575758 0.085655 1.000000 0 0 diff --git a/data/gradients/Tube_Red b/data/gradients/Tube_Red.ggr similarity index 98% rename from data/gradients/Tube_Red rename to data/gradients/Tube_Red.ggr index 8bebc23581..379fe1ccb6 100644 --- a/data/gradients/Tube_Red +++ b/data/gradients/Tube_Red.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Tube Red 7 0.000000 0.189482 0.378965 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0 0.378965 0.624374 0.721202 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1 0 diff --git a/data/gradients/Wood_1 b/data/gradients/Wood_1.ggr similarity index 96% rename from data/gradients/Wood_1 rename to data/gradients/Wood_1.ggr index 52e7cc5c98..15fcd10688 100644 --- a/data/gradients/Wood_1 +++ b/data/gradients/Wood_1.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Wood 1 3 0.000000 0.252087 0.555927 1.000000 0.700000 0.400000 1.000000 0.920000 0.579600 0.239200 1.000000 3 0 0.555927 0.834725 0.981636 0.920000 0.579600 0.239200 1.000000 0.000000 0.000000 0.000000 1.000000 4 0 diff --git a/data/gradients/Wood_2 b/data/gradients/Wood_2.ggr similarity index 98% rename from data/gradients/Wood_2 rename to data/gradients/Wood_2.ggr index f55448718c..b23ea06a90 100644 --- a/data/gradients/Wood_2 +++ b/data/gradients/Wood_2.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Wood 2 9 0.000000 0.069491 0.138982 1.000000 0.700000 0.400000 1.000000 0.944844 0.616991 0.289137 1.000000 3 0 0.138982 0.208472 0.277963 0.800000 0.522406 0.244813 1.000000 0.928860 0.592934 0.257008 1.000000 3 0 diff --git a/data/gradients/Yellow_Contrast b/data/gradients/Yellow_Contrast.ggr similarity index 97% rename from data/gradients/Yellow_Contrast rename to data/gradients/Yellow_Contrast.ggr index f34942054d..dd3d89fba2 100644 --- a/data/gradients/Yellow_Contrast +++ b/data/gradients/Yellow_Contrast.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Yellow Contrast 7 0.000000 0.088481 0.161937 0.000000 0.000000 0.000000 1.000000 0.969697 0.639354 0.000000 1.000000 1 0 0.161937 0.202003 0.247078 0.969697 0.639354 0.000000 1.000000 1.000000 0.988712 0.000000 1.000000 1 0 diff --git a/data/gradients/Yellow_Orange b/data/gradients/Yellow_Orange.ggr similarity index 91% rename from data/gradients/Yellow_Orange rename to data/gradients/Yellow_Orange.ggr index 3d329721cd..ac1fe2338d 100644 --- a/data/gradients/Yellow_Orange +++ b/data/gradients/Yellow_Orange.ggr @@ -1,4 +1,5 @@ GIMP Gradient +Name: Yellow Orange 2 0.000000 0.135225 0.565943 1.000000 0.892593 0.000000 1.000000 1.000000 0.534703 0.000000 1.000000 0 0 0.565943 0.948247 1.000000 1.000000 0.534703 0.000000 1.000000 0.901515 0.428701 0.114311 1.000000 0 0