Heres the best I can manage, slight display twitch as there is a noticable delay (not major I think) when filling large areas.
The delay is about 0.25 seconds for a 64 X 64 bit block filled on my P4 3.0g 512Mb machine.
Maybe you can fine tune it better. If you can I would be interested to see the resulting code.

This change to be made in paint_1.c
Click to reveal..
Code:
function mouseleft()
{
	if (tool == 1)
	{
		while (mouse_left)
		{
			if (mouse_in)
			{
				paint_begin();
				paint_blend(mousepos,vector(0,192,255),100);
				paint_end();
			}
			wait(1);
		}
	}
	if (tool == 2)
	{
		if (mouse_in)
		{
			paint_fill(mousepos, vector(0,255,192));
			wait_for(paint_fill);
		}
	}
}
And both these functions to replace "paint_fill" in paint_functions.c
Click to reveal..
Code:
function paint_fill(VECTOR* pPos, COLOR* pCol)
{
	paint_begin();
	COLOR pOldCol;
	var start_pixel = pixel_for_bmap(paint_bmap, pPos.x, pPos.y);	//start pixel
	pixel_to_vec(pOldCol, NULL, paint_txtype, start_pixel);		//start pixel color
	paint_fill_spread(pPos, pCol, pOldCol);					//replace pixels
	wait_for(paint_fill_spread);				//wait till all pixels done
	paint_end();	//   maybe the "draw_quad(paint_bmap, ..." is causing the bmap to unlock.
	paint_begin();	//paint_begin required to re-fresh BMAP.  I DONT KNOW why this is needed,
	paint_end();	//   maybe the "draw_quad(paint_bmap, ..." is causing the bmap to unlock.
}

function paint_fill_spread(VECTOR* ppPos, COLOR* ppCol, COLOR* ppOldCol)
{	VECTOR	pPos;	COLOR this_color, pCol, pOldCol;
	vec_set(pPos, ppPos);	vec_set(pCol, ppCol);	vec_set(pOldCol, ppOldCol);
	//
	paint_point(pPos, pCol);
	wait(1);				//*** CRITICAL PLACEMENT ***
	if (pPos.x<paint_w-1)
	{
		var this_pixel = pixel_for_bmap(paint_bmap,pPos.x+1,pPos.y);
		pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
		if(abs(vec_dist(pOldCol,this_color))<=16)
			if(vec_dist(this_color, pCol)!=0)    		
				paint_fill_spread(vector(pPos.x+1,pPos.y,0), pCol, pOldCol);
	}
	if (pPos.y<paint_h-1)
	{
		var this_pixel = pixel_for_bmap(paint_bmap,pPos.x,pPos.y+1);
		pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
		if(abs(vec_dist(pOldCol,this_color))<=16)
			if(vec_dist(this_color, pCol)!=0)    		
				paint_fill_spread(vector(pPos.x,pPos.y+1,0), pCol, pOldCol);
	}
	if (pPos.x>0)
	{
		var this_pixel = pixel_for_bmap(paint_bmap, pPos.x-1, pPos.y);
		pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
		if(abs(vec_dist(pOldCol,this_color))<=16)
			if(vec_dist(this_color, pCol)!=0)    		
				paint_fill_spread(vector(pPos.x-1,pPos.y,0), pCol, pOldCol);
	}
	if (pPos.y>0)
	{
		var this_pixel = pixel_for_bmap(paint_bmap,pPos.x,pPos.y-1);
		pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
		if(abs(vec_dist(pOldCol,this_color))<=16)
			if(vec_dist(this_color, pCol)!=0)    		
				paint_fill_spread(vector(pPos.x,pPos.y-1,0), pCol, pOldCol);
	}
}


Last edited by EvilSOB; 03/05/09 19:50. Reason: Code optimised slightly

"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial