package mb;
public class ProgressiveLinesMandComp extends MandComp {
	
	private double dx, dy;
	
	public void run(int myDrawCount) {
		dx = (xmax - xmin)/imageWidth;
		dy = (ymax - ymin)/imageHeight;
		int[] rgb = new int[imageHeight];
		boolean done[] = new boolean[imageWidth];
		for (int block = 128; block >=  1; block /= 2)
			for (int col = block/2; col + block/2 < imageWidth; col += block) {
				if (done[col])
					continue;
				if (!running || drawCount != myDrawCount)
					return;
				computeColumn(col,rgb);
				synchronized(this) {
					if (!running || drawCount != myDrawCount)
						return;
					if (block == 1)
						raster.setPixels(col,0,1,imageHeight,rgb);
					else
						for (int i = col-block/2; i < col+block/2 && i < imageWidth; i++)
							if (!done[i])
								raster.setPixels(i,0,1,imageHeight,rgb);
					done[col] = true;
					owner.newData(col-block/2,0,block,imageHeight);
				}
				Thread.yield();
			}
	}
	
	private void computeColumn(int columnNumber, int[] data){
		double x = xmin + dx*columnNumber;
		for (int i = 0; i < imageHeight; i++) {
			double y = ymax - dy*i;
			int iter = countIterations(x,y);
			data[i] = getIndexFor(iter);
		}
	}
	
}
