Commit 4b22d03f authored by Tor Lillqvist's avatar Tor Lillqvist
Browse files

Fix it. Now the hose itself, interpreted as a pixmap brush (which the hose

	* app/gimpbrushhose.c (gimp_brush_hose_load): Fix it. Now the hose
	itself, interpreted as a pixmap brush (which the hose is a
	subclass of), is the first brush in its list. The rest of the
	pixmap brushes in the list are separately allocated ones. Don't
	read the pattern names into dummy buffers, just seek past.

	* app/pixmapbrush.c (pixmapbrush_motion): Now works better, and
	actually steps through the pixmaps in the hose's list. The
	paint_core->brush (which points to a brush hose in the cases we're
	interested in) is temporarily replaced with the current pixmap
	brush to use, and restored after applying the pixmap brush.

	* app/makefile.{cygwin,msc}: Add new files.
parent ffd97288
1999-08-18 Tor Lillqvist <tml@iki.fi>
* app/gimpbrushhose.c (gimp_brush_hose_load): Fix it. Now the hose
itself, interpreted as a pixmap brush (which the hose is a
subclass of), is the first brush in its list. The rest of the
pixmap brushes in the list are separately allocated ones. Don't
read the pattern names into dummy buffers, just seek past.
* app/pixmapbrush.c (pixmapbrush_motion): Now works better, and
actually steps through the pixmaps in the hose's list. The
paint_core->brush (which points to a brush hose in the cases we're
interested in) is temporarily replaced with the current pixmap
brush to use, and restored after applying the pixmap brush.
* app/makefile.{cygwin,msc}: Add new files.
Tue Aug 17 16:36:54 1999 ape@gandalf.spacetec.no (Asbjorn Pettersen)
* libgimp/gimp.c (gimp_uninstall_temp_proc): Prevent calling free with
......
......@@ -37,8 +37,6 @@ gimp_brush_hose_class_init (GimpBrushHoseClass *klass)
parent_class = gtk_type_class (GIMP_TYPE_BRUSH_PIXMAP);
object_class->destroy = gimp_brush_hose_destroy;
}
void
......@@ -74,29 +72,27 @@ gimp_brush_hose_load (char *file_name)
GimpBrushHose *hose;
GimpBrushPixmap *brush;
GimpBrushList *list;
GimpObject o;
FILE *fp;
unsigned char buf[sz_BrushHeader];
gchar buf2[1024];
BrushHeader header;
int bn_size;
unsigned int *hp;
char *nothing;
int i;
int num_of_brushes;
int brush_count=0;
hose = GIMP_BRUSH_HOSE(gimp_type_new(gimp_brush_hose_get_type()));
GIMP_BRUSH_HOSE(hose)->filename = g_strdup(file_name);
// hose = gimp_brush_hose_new
brush = GIMP_BRUSH_PIXMAP(gimp_type_new(gimp_brush_pixmap_get_type()));
GIMP_BRUSH(brush)->filename = g_strdup(file_name);
brush = GIMP_BRUSH (hose);
list = gimp_brush_list_new();
printf("filename: %s\n list->num_brushes: %i", file_name, list->num_brushes);
printf("opening hose: %s\n", file_name);
if ((fp =fopen(file_name, "rb")) == NULL)
if ((fp = fopen(file_name, "rb")) == NULL)
return NULL;
/* the file format starts with a painfully simple text header
......@@ -132,11 +128,16 @@ gimp_brush_hose_load (char *file_name)
if ((fread (buf, 1, sz_BrushHeader, fp)) < sz_BrushHeader)
{
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
if (brush_count > 0)
brush = GIMP_BRUSH_PIXMAP(gimp_type_new(gimp_brush_pixmap_get_type()));
GIMP_BRUSH(brush)->filename = g_strdup(file_name);
/* rearrange the bytes in each unsigned int */
hp = (unsigned int *) &header;
for (i = 0; i < (sz_BrushHeader / 4); i++)
......@@ -151,6 +152,7 @@ gimp_brush_hose_load (char *file_name)
if (header.version != 1)
{
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
......@@ -175,6 +177,7 @@ gimp_brush_hose_load (char *file_name)
{
g_message ("Error in GIMP brush file...aborting.");
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
......@@ -204,6 +207,7 @@ gimp_brush_hose_load (char *file_name)
header.version, file_name);
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
......@@ -213,6 +217,8 @@ gimp_brush_hose_load (char *file_name)
if ((fread (buf, 1, sz_PatternHeader, fp)) < sz_PatternHeader)
{
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
......@@ -229,26 +235,16 @@ gimp_brush_hose_load (char *file_name)
0, 0, NULL);
/* Read in the pattern name */
/* Skip the pattern name */
if ((bn_size = (header.header_size - sz_PatternHeader)))
{
nothing = (char *) g_malloc (sizeof (char) * bn_size);
if ((fread (nothing, 1, bn_size, fp)) < bn_size)
{
g_message ("Error in GIMP pattern file...aborting.");
fclose (fp);
return NULL;
}
}
else
{
nothing = g_strdup ("Unnamed");
}
if ((fseek (fp, bn_size, SEEK_CUR)) < 0)
{
g_message ("Error in GIMP pattern file...aborting.");
fclose (fp);
gimp_object_destroy (hose);
gimp_object_destroy (brush);
return NULL;
}
if ((fread (temp_buf_data (brush->pixmap_mask), 1,
header.width * header.height * header.bytes, fp))
......@@ -256,8 +252,7 @@ gimp_brush_hose_load (char *file_name)
g_message ("GIMP pattern file appears to be truncated.");
if(brush != NULL)
gimp_brush_list_add(list,GIMP_BRUSH(brush));
gimp_brush_list_add(list,GIMP_BRUSH(brush));
printf("got here brush_count: %i\n", brush_count);
printf("brush_list_count: %i \n", gimp_brush_list_length(list));
......@@ -268,8 +263,13 @@ gimp_brush_hose_load (char *file_name)
}
fclose (fp);
brush =GIMP_BRUSH_PIXMAP((gimp_brush_list_get_brush_by_index(list,0)));
if (!GIMP_IS_BRUSH_HOSE(hose))
g_print ("Is not BRUSH_HOSE???\n");
#if 0
brush = GIMP_BRUSH_PIXMAP((gimp_brush_list_get_brush_by_index(list,0)));
hose->pixmap_brush = *brush;
#endif
hose->brush_list = list;
/* random test code */
......@@ -277,4 +277,3 @@ gimp_brush_hose_load (char *file_name)
return hose;
}
......@@ -135,6 +135,7 @@ gimp_OBJECTS = \
gimage_mask_cmds.o \
gimpbrush.o \
gimpbrushgenerated.o \
gimpbrushhose.o \
gimpbrushlist.o \
gimpbrushpixmap.o \
gimpcontext.o \
......
......@@ -142,6 +142,7 @@ gimp_OBJECTS = \
gimage_mask_cmds.obj \
gimpbrush.obj \
gimpbrushgenerated.obj \
gimpbrushhose.obj \
gimpbrushlist.obj \
gimpbrushpixmap.obj \
gimpcontext.obj \
......
......@@ -44,7 +44,16 @@ static void pixmapbrush_motion (PaintCore *, GimpDrawable *);
/* static Argument * pixmapbrush_extended_gradient_invoker (Argument *); */
static void paint_line_pixmap_mask (GImage *dest,
GimpDrawable *drawable,
GimpBrushPixmap *brush,
unsigned char *d,
int x,
int offset_x,
int y,
int offset_y,
int bytes,
int width);
/* defines */
......@@ -200,36 +209,35 @@ pixmapbrush_motion (PaintCore *paint_core,
GimpDrawable *drawable)
{
GImage *gimage;
TempBuf * area = NULL;
/* unsigned char col[MAX_CHANNELS]; */
void * pr;
GimpBrush *saved_brush;
TempBuf * area;
int opacity;
GimpBrushHose *brush;
pr = NULL;
if(GIMP_IS_BRUSH_PIXMAP(paint_core->brush)){
printf("looks like were a pixmap\n");
}
static int index = 0;
if(!( GIMP_IS_BRUSH_HOSE(paint_core->brush))){
printf("not gimpbrushhose apparently...but why not i have no idea\n");
}
// brush = GIMP_BRUSH_HOSE(paint_core->brush);
//paint_core->brush = gimp_brush_list_get_brush_by_index(&(GIMP_BRUSH_HOSE(brush))->brush_list, 0);
/* We always need a destination image */
if (! (gimage = drawable_gimage (drawable)))
return;
/* Get a region which can be used to p\\aint to */
if(!( GIMP_IS_BRUSH_HOSE(paint_core->brush))){
g_print("not gimpbrushhose apparently...but why not i have no idea\n");
return;
} else
{
saved_brush = paint_core->brush;
/* Set paint_core->brush, restore below before returning.
* I wonder if this is wise?
*/
paint_core->brush = gimp_brush_list_get_brush_by_index(GIMP_BRUSH_HOSE(paint_core->brush)->brush_list, index++);
if (index == gimp_brush_list_length (GIMP_BRUSH_HOSE(saved_brush)->brush_list))
index = 0;
}
/* Get a region which can be used to paint to */
if (! (area = paint_core_get_paint_area (paint_core, drawable)))
return;
{
paint_core->brush = saved_brush;
return;
}
color_area_with_pixmap(gimage, drawable, area, paint_core->brush);
......@@ -242,6 +250,8 @@ pixmapbrush_motion (PaintCore *paint_core,
(int) (gimp_context_get_opacity (NULL) * 255),
gimp_context_get_paint_mode (NULL), SOFT,
INCREMENTAL);
paint_core->brush = saved_brush;
}
......@@ -323,7 +333,7 @@ color_area_with_pixmap (GImage *dest,
}
void
static void
paint_line_pixmap_mask (GImage *dest,
GimpDrawable *drawable,
GimpBrushPixmap *brush,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment