summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-10-27 15:51:26 -0400
committerJesse Luehrs <doy@tozt.net>2014-10-27 15:51:26 -0400
commitf3627b9d9744ba67762448cd2fd9eff703dab4fd (patch)
tree203e9c29cb15fa75244773c158a231a11575c101
parent458a226a3fec55de9c5af7b6068406c825e1ff1e (diff)
downloadjulia-fractals-f3627b9d9744ba67762448cd2fd9eff703dab4fd.tar.gz
julia-fractals-f3627b9d9744ba67762448cd2fd9eff703dab4fd.zip
factor this out into a type
-rw-r--r--src/renderer.jl49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/renderer.jl b/src/renderer.jl
index d8f97ff..0381eb6 100644
--- a/src/renderer.jl
+++ b/src/renderer.jl
@@ -3,31 +3,43 @@ using Images
using ImageView
using Color
-mandelbrot() = mandelbrot(createwindow())
-function mandelbrot(canvas::Canvas)
- fractal(canvas, z -> z, (z, c) -> z.^2 + c)
+type FractalCanvas
+ c::Canvas
+ f::FractalExplorer.Fractal
+ image::Array{HSV{Float64}, 2}
+
+ function FractalCanvas(c::Canvas, make_c::Function, step::Function)
+ winsize = tuple(get_size(c)...)
+ f = FractalExplorer.Fractal{Float64}(winsize, make_c, step)
+ image = [ HSV(0, 0, 0) for y=1:winsize[1], x=1:winsize[2] ]
+ view(c, image, interactive=false)
+ setup_handlers(c)
+ return new(c, f, image)
+ end
+end
+
+mandelbrot(fc::FractalCanvas) = mandelbrot(fc.c)
+function mandelbrot(canvas::Canvas = createwindow())
+ return fractal(canvas, z -> z, (z, c) -> z.^2 + c)
end
-julia(c = 0) = julia(createwindow(), c)
-function julia(canvas::Canvas, c::Union(Number, Array{Number, 2}) = 0)
- fractal(canvas, z -> c, (z, c) -> z.^2 + c)
+julia(fc::FractalCanvas, c = 0) = julia(fc.c, c)
+function julia(canvas::Canvas = createwindow(), c::Union(Number, Array{Number, 2}) = 0)
+ return fractal(canvas, z -> c, (z, c) -> z.^2 + c)
end
fractal(make_c, step) = fractal(createwindow(), make_c, step)
+fractal(fc::FractalCanvas, make_c, step) = fractal(fc.c, make_c, step)
function fractal(canvas::Canvas, make_c::Function, step::Function)
- imgsize = tuple(get_size(canvas)...)
- img = [ HSV(0, 0, 0) for y=1:imgsize[1], x=1:imgsize[2] ]
- view(canvas, img, interactive=false)
-
- f = FractalExplorer.Fractal{Float64}(imgsize, make_c, step)
+ fc = FractalCanvas(canvas, make_c, step)
i = 0
while true
- FractalExplorer.step(f)
- new_pixels = (abs(f.z) .> 2) & (img .== HSV(0, 0, 0))
- img[new_pixels] = HSV(i * 4, 1, 1)
+ FractalExplorer.step(fc.f)
+ new_pixels = (abs(fc.f.z) .> 2) & (fc.image .== HSV(0, 0, 0))
+ fc.image[new_pixels] = HSV(i * 4, 1, 1)
i = i + 1
- view(canvas, img, interactive=false)
+ view(fc.c, fc.image, interactive=false)
if length(find(new_pixels)) <= 1
break
end
@@ -35,10 +47,12 @@ function fractal(canvas::Canvas, make_c::Function, step::Function)
if (!isinteractive())
cv = Condition()
- win = Tk.toplevel(canvas)
+ win = Tk.toplevel(fc.c)
bind(win, "<Destroy>", e->notify(cv))
wait(cv)
end
+
+ return fc
end
function createwindow(winsize::(Integer, Integer) = (640, 480))
@@ -51,3 +65,6 @@ function createwindow(winsize::(Integer, Integer) = (640, 480))
view(canvas, [ 0.0 for y=1:winsize[2], x=1:winsize[1] ], interactive=false)
return canvas
end
+
+function setup_handlers(c::Canvas)
+end