function Type(rune)
{
  Module.call(this,rune);

  this.add_method(new Method("write",["Position","Text"],"Add position"));
  this.add_mode(new Mode("write"));
  this.add_setting(new Setting("color","#ffffff"));
  this.add_setting(new Setting("size","20"));
  this.add_setting(new Setting("font","Din"));

  this.write = function(cmd,preview = false)
  {
    if(!this.layer){ this.create_layer(); this.layer.is_blinking = true; }
    
    this.layer.clear();

    var text = cmd.text() ? cmd.text() : "Placeholder";
    var position = cmd.position() ? cmd.position() : new Position(40,80);
    var color = this.settings["color"].value;
    var size = parseFloat(this.settings["size"].value);
    var font = this.settings["font"].value;

    var target_layer = preview ? this.layer : ronin.frame.active_layer;
    target_layer.context().font = size+"px "+font;
    target_layer.context().fillStyle = color; 
    target_layer.context().fillText(text,position.x,position.y);

    if(!preview){ this.layer.remove(this); }

    return 1, "Wrote "+text+" at "+position.render();
  }

  // Mouse

  this.mouse_mode = function()
  {
    return "Write";
  }

  this.mouse_down = function(position)
  {
    var str = ronin.terminal.cmd().text() ? ronin.terminal.cmd().text() : "Placeholder";
    var line = "type.write "+position.render()+" \""+str+"\"";
    ronin.terminal.update(line);
  }
  
  this.mouse_move = function(position,rect)
  {
  }
  
  this.mouse_up = function(position)
  {
    var str = ronin.terminal.cmd().text() ? ronin.terminal.cmd().text() : "Placeholder";
    var line = "type.write "+position.render()+" \""+str+"\"";
    ronin.terminal.update(line);
  }

  this.key_escape = function()
  {
    if(this.layer){ this.layer.remove(this); }
  }
}