asciiblaster- draw irc art in your web browser |
git clone git://git.acid.vegas/asciiblaster.git |
Log | Files | Refs | Archive | README |
controls.js (10723B)
1 var controls = (function(){ 2 3 var controls = {} 4 5 controls.cross = new Tool (cross_el) 6 controls.cross.use = function(){ 7 if (brush.mask == blit.cross) { 8 controls.cross.el.innerHTML = "ssoɹɔ" 9 brush.mask = blit.inverted_cross 10 } 11 else { 12 controls.cross.el.innerHTML = "cross" 13 brush.mask = blit.cross 14 } 15 brush.generate() 16 drawing = true 17 brush.modified = false 18 } 19 controls.cross.done = function(){ 20 controls.cross.el.innerHTML = "cross" 21 drawing = false 22 } 23 24 controls.circle = new Tool (circle_el) 25 controls.circle.use = function(){ 26 brush.mask = blit.circle 27 brush.generate() 28 drawing = true 29 brush.modified = false 30 } 31 controls.circle.done = function(){ 32 drawing = false 33 } 34 35 controls.square = new Tool (square_el) 36 controls.square.use = function(){ 37 brush.mask = blit.square 38 brush.generate() 39 brush.modified = false 40 drawing = true 41 } 42 controls.square.done = function(){ 43 drawing = false 44 } 45 46 controls.text = new Tool (text_el) 47 controls.text.use = function(){ 48 current_filetool && current_filetool.blur() 49 } 50 51 controls.select = new Tool (select_el) 52 controls.select.use = function(){ 53 selection.show() 54 } 55 controls.select.done = function(){ 56 selection.hide() 57 } 58 59 controls.rotate = new Tool (rotate_el) 60 controls.rotate.use = function(){ 61 transform.set_mode('rotate') 62 } 63 controls.rotate.done = function(){ 64 transform.done() 65 } 66 67 controls.scale = new Tool (scale_el) 68 controls.scale.use = function(){ 69 transform.set_mode('scale') 70 } 71 controls.scale.done = function(){ 72 transform.done() 73 } 74 75 controls.slice = new Tool (slice_el) 76 controls.slice.use = function(){ 77 transform.set_mode('slice') 78 } 79 controls.slice.done = function(){ 80 transform.done() 81 } 82 83 controls.translate = new Tool (translate_el) 84 controls.translate.use = function(){ 85 transform.set_mode('translate') 86 } 87 controls.translate.done = function(){ 88 transform.done() 89 } 90 91 controls.fill = new Tool (fill_el) 92 controls.fill.use = function(){ 93 filling = true 94 document.body.classList.add("bucket") 95 } 96 controls.fill.done = function(){ 97 filling = false 98 document.body.classList.remove("bucket") 99 } 100 101 controls.undo = new BlurredTool (undo_el) 102 controls.undo.use = function(){ 103 undo.undo() 104 } 105 106 controls.redo = new BlurredTool (redo_el) 107 controls.redo.use = function(){ 108 undo.redo() 109 } 110 111 controls.clear = new BlurredTool (clear_el) 112 controls.clear.use = function(){ 113 undo.new() 114 undo.save_rect(0, 0, canvas.w, canvas.h) 115 canvas.erase() 116 current_filetool && current_filetool.blur() 117 } 118 119 controls.webcam = new FileTool (webcam_el) 120 controls.webcam.load = function(){ 121 this.loaded = true 122 webcam_close.addEventListener("click", function(){ controls.webcam.blur() }) 123 window.addEventListener("message", function(e){ 124 if (e.origin !== window.location.origin) return 125 controls.webcam.blur() 126 controls.circle.focus() 127 import_textarea.value = e.data 128 clipboard.import_colorcode() 129 }) 130 } 131 controls.webcam.use = function(){ 132 if (! this.loaded) { 133 this.load() 134 } 135 webcam_iframe.src = "webcam.html" 136 webcam_rapper.style.display = "block" 137 } 138 controls.webcam.done = function(){ 139 webcam_iframe.src = "" 140 webcam_rapper.style.display = "none" 141 } 142 143 controls.grid = new BlurredCheckbox (grid_el) 144 controls.grid.memorable = true 145 controls.grid.use = function(state){ 146 state = typeof state == "boolean" ? state : ! document.body.classList.contains("grid") 147 document.body.classList[ state ? "add" : "remove" ]('grid') 148 letters.grid = palette.grid = canvas.grid = state 149 canvas.resize_rapper() 150 palette.resize_rapper() 151 letters.resize_rapper() 152 if (! selection.hidden) selection.reposition() 153 this.update( state ) 154 } 155 ClipboardTool = FileTool.extend({ 156 blur: function(){ 157 this.__blur() 158 clipboard.hide() 159 } 160 }) 161 controls.save = new ClipboardTool (save_el) 162 controls.save.use = function(){ 163 changed && clipboard.upload_png() 164 clipboard.show() 165 clipboard.export_mode() 166 } 167 controls.send_to_irc = new ClipboardTool (send_to_irc_el) 168 controls.send_to_irc.use = function(){ 169 changed && clipboard.upload_png() 170 clipboard.show() 171 clipboard.export_mode() 172 alert('your ascii art is now on display on the IRC channel inside the panke.gallery!') 173 } 174 controls.load = new ClipboardTool (load_el) 175 controls.load.use = function(){ 176 // console.log("use") 177 clipboard.show() 178 clipboard.import_mode() 179 } 180 181 controls.save_format = new RadioGroup(format_el) 182 controls.save_format.name = 'save_format' 183 controls.save_format.memorable = true 184 var cs = controls.save_format.controls 185 cs.mirc.use = cs.irssi.use = cs.ascii.use = function(){ 186 clipboard.export_data() 187 } 188 // 189 190 var ShaderTool = FileTool.extend({ 191 active: false, 192 use: function(state){ 193 this.active = typeof state == "boolean" ? state : ! this.active 194 if (this.active) { 195 shader_rapper.style.display = "block" 196 shader_textarea.focus() 197 } else { 198 shader_rapper.style.display = "none" 199 } 200 }, 201 done: function(){ 202 this.use(false) 203 } 204 }) 205 controls.shader = new ShaderTool (shader_el) 206 shader_textarea.value = shader_textarea.value || demo_shader.innerHTML 207 shader_textarea.addEventListener("input", function(){ 208 var fn = shader.build(shader_textarea.value) 209 fn && shader.run(canvas) 210 }) 211 controls.animate = new BlurredCheckbox (animate_checkbox) 212 controls.animate.use = function(state){ 213 var state = shader.toggle() 214 this.update(state) 215 // controls.shader.focus() 216 controls.shader.use(true) 217 } 218 219 controls.shader_target = new RadioGroup(shader_target_el) 220 var cs = controls.shader_target.controls 221 cs.canvas.use = function(){ shader.canvas = canvas } 222 cs.brush.use = function(){ shader.canvas = brush } 223 cs.selection.use = function(){ shader.canvas = selection.canvas } 224 225 controls.experimental_palette = new HiddenCheckbox (experimental_palette_toggle) 226 controls.experimental_palette.memorable = true 227 controls.experimental_palette.use = function(state){ 228 var state = palette.experimental(state) 229 this.update(state) 230 } 231 232 controls.advanced = new BlurredCheckbox (advanced_checkbox) 233 controls.advanced.memorable = true 234 controls.advanced.use = function(state){ 235 console.log(state) 236 state = typeof state == "boolean" ? state : ! document.body.classList.contains('panke') 237 if (state) 238 document.body.classList.add('panke') 239 else 240 document.body.classList.remove('panke') 241 this.update(state) 242 } 243 244 /* 245 controls.nopaint = new HiddenCheckbox (nopaint_toggle) 246 controls.nopaint.memorable = true 247 controls.nopaint.on = "N" 248 controls.nopaint.use = function(state){ 249 var state = nopaint.toggle(state) 250 this.update(state) 251 } 252 */ 253 254 // 255 256 controls.fg = new BlurredCheckbox (fg_checkbox) 257 controls.fg.use = function(state){ 258 brush.draw_fg = state || ! brush.draw_fg 259 this.update(brush.draw_fg) 260 } 261 262 controls.bg = new BlurredCheckbox (bg_checkbox) 263 controls.bg.use = function(state){ 264 brush.draw_bg = state || ! brush.draw_bg 265 this.update(brush.draw_bg) 266 } 267 268 controls.char = new BlurredCheckbox (char_checkbox) 269 controls.char.use = function(state){ 270 brush.draw_char = state || ! brush.draw_char 271 this.update(brush.draw_char) 272 } 273 274 // 275 276 // controls.turn = new BlurredCheckbox (turn_checkbox) 277 // controls.turn.memorable = true 278 // controls.turn.use = function(state){ 279 // canvas.rotated = typeof state == "boolean" ? state : ! canvas.rotated 280 // canvas.resize_rapper() 281 // this.update(canvas.rotated) 282 // } 283 284 // controls.pixels = new BlurredCheckbox (pixels_checkbox) 285 // controls.pixels.memorable = true 286 // controls.pixels.use = function(state){ 287 // canvas.pixels = typeof state == "boolean" ? state : ! canvas.pixels 288 // document.body.classList.toggle("pixels", canvas.pixels) 289 // this.update(canvas.pixels) 290 // } 291 292 controls.mirror_x = new BlurredCheckbox (mirror_x_checkbox) 293 controls.mirror_x.use = function(state){ 294 window.mirror_x = typeof state == "boolean" ? state : ! window.mirror_x 295 this.update(window.mirror_x) 296 } 297 controls.mirror_y = new BlurredCheckbox (mirror_y_checkbox) 298 controls.mirror_y.use = function(state){ 299 window.mirror_y = typeof state == "boolean" ? state : ! window.mirror_y 300 this.update(window.mirror_y) 301 } 302 303 // 304 305 controls.vertical = new BlurredCheckbox (vertical_checkbox) 306 controls.vertical.memorable = true 307 controls.vertical.use = function(state){ 308 canvas.vertical = typeof state == "boolean" ? state : ! canvas.vertical 309 controls.vertical.refresh() 310 } 311 controls.vertical.refresh = function(){ 312 if (canvas.vertical) { 313 document.body.classList.add("vertical") 314 } 315 else { 316 document.body.classList.remove("vertical") 317 } 318 palette.repaint() 319 letters.repaint() 320 this.update(canvas.vertical) 321 } 322 323 // 324 325 controls.brush_w = new Lex (brush_w_el) 326 controls.brush_h = new Lex (brush_h_el) 327 controls.canvas_w = new Lex (canvas_w_el) 328 controls.canvas_h = new Lex (canvas_h_el) 329 330 // bind 331 332 controls.bind = function(){ 333 334 for (var n in controls){ 335 var control = controls[n] 336 if (typeof control === 'object' && 'bind' in control){ 337 control.bind() 338 } 339 } 340 341 [ 342 controls.brush_w, 343 controls.brush_h, 344 controls.canvas_w, 345 controls.canvas_h 346 ].forEach(function(lex){ 347 lex.span.addEventListener('mousedown', function(e){ 348 lex.focus() 349 if (is_mobile) cursor_input.focus() 350 }) 351 }); 352 353 controls.brush_w.key = keys.single_numeral_key(controls.brush_w, function(w){ brush.resize(w, brush.h) }) 354 controls.brush_w.raw_key = keys.arrow_key(function(w){ brush.size_add(w, 0) }) 355 356 controls.brush_h.key = keys.single_numeral_key(controls.brush_h, function(h){ brush.resize(brush.w, h) }) 357 controls.brush_h.raw_key = keys.arrow_key(function(h){ brush.size_add(0, h) }) 358 359 controls.canvas_w.key = keys.multi_numeral_key(controls.canvas_w, 3) 360 controls.canvas_w.onBlur = keys.multi_numeral_blur(controls.canvas_w, function(w){ canvas.resize(w, canvas.h) }) 361 controls.canvas_w.raw_key = keys.arrow_key(function(w){ canvas.size_add(w, 0) }) 362 363 controls.canvas_h.key = keys.multi_numeral_key(controls.canvas_h, 3) 364 controls.canvas_h.onBlur = keys.multi_numeral_blur(controls.canvas_h, function(h){ canvas.resize(canvas.w, h) }) 365 controls.canvas_h.raw_key = keys.arrow_key(function(h){ canvas.size_add(0, h) }) 366 367 add_custom_el.addEventListener("click", function(){ 368 custom.clone() 369 }) 370 371 } 372 373 return controls 374 })()