import "ImageManipulation.lib"

constant:
	LOGO_IMG    0
	TEXTURE_IMG 1
hidden:

rem Create font.
create font 0, "arial", 72, true

rem Create texture with the midpoint displacement thingie.
proc MD_GenerateImage TEXTURE_IMG, 129, 1.0, 0.1, 3
proc Blur TEXTURE_IMG, 16, true

rem Create logo image.
create image LOGO_IMG, 416, 72

set image LOGO_IMG
set color 255, 255, 255
wln "BrowserBasic"
proc MakeColorTransparent LOGO_IMG, 0, 0, 0
proc PatternFill LOGO_IMG, TEXTURE_IMG
proc Bevel LOGO_IMG, 2, 2, 200
proc Multiply LOGO_IMG, 1.0, 1.0, 1.2
proc ChangeBrightness LOGO_IMG, 24
proc ChangeContrast LOGO_IMG, 1.2
proc DropShadow LOGO_IMG, 4, 2, 2, 0, 0, 0, 200



set image primary
set color 255, 255, 255
cls
draw image 0, 100, 100

wait keydown


rem ==================================================================
rem Generate image. contrast and smooth should both be in the
rem range [0..1].
rem ==================================================================
procedure MD_GenerateImage(img, size, contrast#, smooth#, seed)
	a#[][] = MD_Generate(size, contrast, smooth, seed)
	create image img, size, size
	set image img
		for y = 0 to size - 1
			for x = 0 to size - 1
				i = int(a[x][y]*255.0)
				set color i, i, i
				set pixel x, y
			next
		next
	set image primary
endproc

rem ==================================================================
rem Generate array with elements in the range [0..1].
rem ==================================================================
function MD_Generate#[][](size, contrast#, smooth#, seed)
	randomize seed
	contrast = min#(contrast, 1.0)
	contrast = max#(contrast, 0.0)
	smooth = min#(smooth, 1.0)
	smooth = max#(smooth, 0.0)
	smooth = 1.0 - smooth
	md#[size][size]
	md[0][0] = 0.5 + contrast*float(rnd(100))*0.01 - contrast*0.5
	md[size - 1][0] = 0.5 + contrast*float(rnd(100))*0.01 - contrast*0.5
	md[size - 1][size - 1] = 0.5 + contrast*float(rnd(100))*0.01 - contrast*0.5
	md[0][size - 1] = 0.5 + contrast*float(rnd(100))*0.01 - contrast*0.5
	proc MD_Rec md, 0, 0, size - 1, size - 1, contrast, smooth
	return md
endfunc

rem ==================================================================
rem Recursive step.
rem ==================================================================
procedure MD_Rec(&md#[][], xmin, ymin, xmax, ymax, contrast#, smooth#)
	if xmax - xmin <= 1 then return
	if ymax - ymin <= 1 then return
	hw = (xmin + xmax)/2
	hh = (ymin + ymax)/2
	md[hw][hh] = (md[xmin][ymin] + md[xmax][ymin] + md[xmax][ymax] + md[xmin][ymax])*0.25 + contrast*float(rnd(100))*0.01 - contrast*0.5
	md[hw][hh] = max#(md[hw][hh], 0.0)
	md[hw][hh] = min#(md[hw][hh], 1.0)
	md[xmin][hh] = (md[xmin][ymin] + md[xmin][ymax])*0.5
	md[xmax][hh] = (md[xmax][ymin] + md[xmax][ymax])*0.5
	md[hw][ymin] = (md[xmin][ymin] + md[xmax][ymin])*0.5
	md[hw][ymax] = (md[xmin][ymax] + md[xmax][ymax])*0.5
	proc MD_Rec md, xmin, ymin, hw, hh, contrast*smooth, smooth
	proc MD_Rec md, hw, ymin, xmax, hh, contrast*smooth, smooth
	proc MD_Rec md, xmin, hh, hw, ymax, contrast*smooth, smooth
	proc MD_Rec md, hw, hh, xmax, ymax, contrast*smooth, smooth
endproc