summaryrefslogtreecommitdiff
path: root/js/draw.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/draw.js')
-rw-r--r--js/draw.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/draw.js b/js/draw.js
index 8a12467..6bf55bd 100644
--- a/js/draw.js
+++ b/js/draw.js
@@ -51,6 +51,48 @@ var draw = (function(){
}
})
}
+
+ function fill (lex, x, y) {
+ var q = [ [x,y] ]
+ var target = canvas.aa[y][x].copy()
+ var n, w = 0, e = 0, j = 0
+ var kk = 0
+ // gets into a weird infinite loop if we don't break here.. :\
+ if (target.eq(lex)) { return }
+ LOOP: while (q.length) {
+ n = q.shift()
+ if (canvas.aa[n[1]][n[0]].ne(target)) {
+ continue LOOP
+ }
+ w = e = n[0]
+ j = n[1]
+ WEST: while (w > 0) {
+ if (canvas.aa[j][w-1].eq(target)) {
+ w = w-1
+ }
+ else {
+ break WEST
+ }
+ }
+ EAST: while (e < canvas.w-1) {
+ if (canvas.aa[j][e+1].eq(target)) {
+ e = e+1
+ }
+ else {
+ break EAST
+ }
+ }
+ for (var i = w; i <= e; i++) {
+ canvas.aa[j][i].clone(lex)
+ if (j > 0 && canvas.aa[j-1][i].eq(target)) {
+ q.push([ i, j-1 ])
+ }
+ if (j < canvas.h-1 && canvas.aa[j+1][i].eq(target)) {
+ q.push([ i, j+1 ])
+ }
+ }
+ }
+ }
var draw = {}
draw.down = down
@@ -58,6 +100,7 @@ var draw = (function(){
draw.stamp = stamp
draw.line = line
draw.point = point
+ draw.fill = fill
return draw
})()