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 })()