0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 69 'use strict';..i
0010: 6d 70 6f 72 74 20 6d 61 74 68 20 66 72 6f 6d 20 mport math from
0020: 27 2e 2e 2f 75 74 69 6c 2f 6d 61 74 68 27 3b 0a '../util/math';.
0030: 69 6d 70 6f 72 74 20 54 6f 67 67 6c 65 4d 6f 64 import ToggleMod
0040: 65 6c 20 66 72 6f 6d 20 27 2e 2e 2f 6d 6f 64 65 el from '../mode
0050: 6c 73 2f 74 6f 67 67 6c 65 27 3b 0a 0a 0a 2f 2a ls/toggle';.../*
0060: 0a 68 6f 77 20 74 6f 20 75 73 65 20 3a 0a 0a 64 .how to use :..d
0070: 69 61 6c 2e 69 6e 74 65 72 61 63 74 69 6f 6e 20 ial.interaction
0080: 3d 20 6e 65 77 20 48 61 6e 64 6c 65 28 27 72 61 = new Handle('ra
0090: 64 69 61 6c 27 2c 27 72 65 6c 61 74 69 76 65 27 dial','relative'
00a0: 2c 74 68 69 73 2e 77 69 64 74 68 2c 74 68 69 73 ,this.width,this
00b0: 2e 68 65 69 67 68 74 29 3b 0a 2f 2f 20 64 69 61 .height);.// dia
00c0: 6c 2e 69 6e 74 65 72 61 63 74 69 6f 6e 2e 6d 6f l.interaction.mo
00d0: 64 65 20 3d 20 27 72 65 6c 61 74 69 76 65 27 0a de = 'relative'.
00e0: 2f 2f 20 64 69 61 6c 2e 69 6e 74 65 72 61 63 74 // dial.interact
00f0: 69 6f 6e 2e 64 69 72 65 63 74 69 6f 6e 20 3d 20 ion.direction =
0100: 27 72 61 64 69 61 6c 27 0a 0a 6f 6e 20 63 6c 69 'radial'..on cli
0110: 63 6b 3a 0a 64 69 61 6c 2e 69 6e 74 65 72 61 63 ck:.dial.interac
0120: 74 69 6f 6e 2e 61 6e 63 68 6f 72 20 3d 20 74 68 tion.anchor = th
0130: 69 73 2e 6d 6f 75 73 65 3b 0a 0a 6f 6e 20 6d 6f is.mouse;..on mo
0140: 76 65 3a 0a 64 69 61 6c 2e 69 6e 74 65 72 61 63 ve:.dial.interac
0150: 74 69 6f 6e 2e 75 70 64 61 74 65 28 74 68 69 73 tion.update(this
0160: 2e 6d 6f 75 73 65 29 3b 0a 0a 63 6f 6e 73 6f 6c .mouse);..consol
0170: 65 2e 6c 6f 67 28 20 64 69 61 6c 2e 69 6e 74 65 e.log( dial.inte
0180: 72 61 63 74 69 6f 6e 2e 76 61 6c 75 65 20 29 3b raction.value );
0190: 20 73 68 6f 75 6c 64 20 62 65 20 61 20 6e 6f 72 should be a nor
01a0: 6d 61 6c 69 7a 65 64 20 76 61 6c 75 65 2e 0a 0a malized value...
01b0: 2a 2f 0a 0a 2f 2a 0a 20 20 61 62 73 6f 6c 75 74 */../*. absolut
01c0: 65 2f 72 65 6c 61 74 69 76 65 20 61 72 65 20 70 e/relative are p
01d0: 72 6f 70 65 72 74 79 3a 20 6d 6f 64 65 0a 20 20 roperty: mode.
01e0: 72 61 64 69 61 6c 2f 76 65 72 74 69 63 61 6c 2f radial/vertical/
01f0: 68 6f 72 69 7a 6f 6e 74 61 6c 2f 32 64 20 61 72 horizontal/2d ar
0200: 65 20 70 72 6f 70 65 72 74 79 3a 20 64 69 72 65 e property: dire
0210: 63 74 69 6f 6e 0a 0a 20 20 70 6c 61 6e 20 3a 0a ction.. plan :.
0220: 0a 20 20 69 66 20 72 65 6c 61 74 69 76 65 20 2d . if relative -
0230: 2d 0a 20 20 4e 4f 20 6f 6e 20 63 6c 69 63 6b 2c -. NO on click,
0240: 20 67 65 74 20 76 61 6c 75 65 20 6f 66 66 73 65 get value offse
0250: 74 20 62 65 74 77 65 65 6e 20 63 75 72 72 65 6e t between curren
0260: 74 20 76 61 6c 75 65 20 61 6e 64 20 63 6c 69 63 t value and clic
0270: 6b 20 76 61 6c 75 65 2e 0a 20 20 4e 4f 20 6f 6e k value.. NO on
0280: 20 6d 6f 76 65 2c 20 75 73 65 20 63 6c 69 63 6b move, use click
0290: 20 76 61 6c 75 65 20 2d 20 6f 66 66 73 65 74 0a value - offset.
02a0: 20 20 49 4e 53 54 45 41 44 0a 20 20 75 73 65 20 INSTEAD. use
02b0: 64 65 6c 74 61 20 2d 2d 20 62 63 20 76 65 72 74 delta -- bc vert
02c0: 69 63 61 6c 20 6d 6f 74 69 6f 6e 20 6f 6e 20 64 ical motion on d
02d0: 69 61 6c 20 69 73 20 69 6d 70 6f 73 73 69 62 6c ial is impossibl
02e0: 65 20 6f 74 68 65 72 77 69 73 65 0a 20 20 61 6c e otherwise. al
02f0: 73 6f 20 61 6c 6c 6f 77 20 74 6f 20 73 65 74 20 so allow to set
0300: 73 65 6e 73 69 74 69 76 69 74 79 0a 0a 2a 2f 0a sensitivity..*/.
0310: 0a 65 78 70 6f 72 74 20 63 6c 61 73 73 20 48 61 .export class Ha
0320: 6e 64 6c 65 20 7b 0a 0a 20 20 63 6f 6e 73 74 72 ndle {.. constr
0330: 75 63 74 6f 72 28 6d 6f 64 65 3d 27 61 62 73 6f uctor(mode='abso
0340: 6c 75 74 65 27 2c 64 69 72 65 63 74 69 6f 6e 3d lute',direction=
0350: 27 76 65 72 74 69 63 61 6c 27 2c 78 62 6f 75 6e 'vertical',xboun
0360: 64 3d 5b 30 2c 31 30 30 5d 2c 79 62 6f 75 6e 64 d=[0,100],ybound
0370: 3d 5b 30 2c 31 30 30 5d 29 20 7b 0a 20 20 20 20 =[0,100]) {.
0380: 74 68 69 73 2e 6d 6f 64 65 20 3d 20 6d 6f 64 65 this.mode = mode
0390: 3b 0a 20 20 20 20 74 68 69 73 2e 64 69 72 65 63 ;. this.direc
03a0: 74 69 6f 6e 20 3d 20 64 69 72 65 63 74 69 6f 6e tion = direction
03b0: 3b 0a 20 20 20 20 74 68 69 73 2e 70 72 65 76 69 ;. this.previ
03c0: 6f 75 73 20 3d 20 30 3b 0a 20 20 20 20 74 68 69 ous = 0;. thi
03d0: 73 2e 76 61 6c 75 65 20 3d 20 30 3b 0a 20 20 20 s.value = 0;.
03e0: 20 74 68 69 73 2e 73 65 6e 73 69 74 69 76 69 74 this.sensitivit
03f0: 79 20 3d 20 31 3b 0a 20 20 20 20 74 68 69 73 2e y = 1;. this.
0400: 72 65 73 69 7a 65 28 78 62 6f 75 6e 64 2c 79 62 resize(xbound,yb
0410: 6f 75 6e 64 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 ound);. }.. re
0420: 73 69 7a 65 28 78 62 6f 75 6e 64 2c 79 62 6f 75 size(xbound,ybou
0430: 6e 64 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 62 nd) {. this.b
0440: 6f 75 6e 64 61 72 79 20 3d 20 7b 0a 20 20 20 20 oundary = {.
0450: 20 20 6d 69 6e 3a 20 7b 0a 20 20 20 20 20 20 20 min: {.
0460: 20 78 3a 20 78 62 6f 75 6e 64 5b 30 5d 2c 0a 20 x: xbound[0],.
0470: 20 20 20 20 20 20 20 79 3a 20 79 62 6f 75 6e 64 y: ybound
0480: 5b 30 5d 0a 20 20 20 20 20 20 7d 2c 0a 20 20 20 [0]. },.
0490: 20 20 20 6d 61 78 3a 20 7b 0a 20 20 20 20 20 20 max: {.
04a0: 20 20 78 3a 20 78 62 6f 75 6e 64 5b 31 5d 2c 0a x: xbound[1],.
04b0: 20 20 20 20 20 20 20 20 79 3a 20 79 62 6f 75 6e y: yboun
04c0: 64 5b 31 5d 0a 20 20 20 20 20 20 7d 2c 0a 20 20 d[1]. },.
04d0: 20 20 20 20 63 65 6e 74 65 72 3a 20 7b 0a 20 20 center: {.
04e0: 20 20 20 20 20 20 78 3a 20 28 78 62 6f 75 6e 64 x: (xbound
04f0: 5b 31 5d 20 2d 20 78 62 6f 75 6e 64 5b 30 5d 29 [1] - xbound[0])
0500: 2f 32 20 2b 20 78 62 6f 75 6e 64 5b 30 5d 2c 0a /2 + xbound[0],.
0510: 20 20 20 20 20 20 20 20 79 3a 20 28 79 62 6f 75 y: (ybou
0520: 6e 64 5b 31 5d 20 2d 20 79 62 6f 75 6e 64 5b 30 nd[1] - ybound[0
0530: 5d 29 2f 32 20 2b 20 79 62 6f 75 6e 64 5b 30 5d ])/2 + ybound[0]
0540: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 3b 0a . }. };.
0550: 20 20 7d 0a 0a 20 20 73 65 74 20 61 6e 63 68 6f }.. set ancho
0560: 72 28 6d 6f 75 73 65 29 20 7b 0a 20 20 20 20 74 r(mouse) {. t
0570: 68 69 73 2e 5f 61 6e 63 68 6f 72 20 3d 20 74 68 his._anchor = th
0580: 69 73 2e 63 6f 6e 76 65 72 74 50 6f 73 69 74 69 is.convertPositi
0590: 6f 6e 54 6f 56 61 6c 75 65 28 6d 6f 75 73 65 29 onToValue(mouse)
05a0: 3b 0a 20 20 7d 0a 0a 20 20 67 65 74 20 61 6e 63 ;. }.. get anc
05b0: 68 6f 72 28 29 20 7b 0a 20 20 20 20 72 65 74 75 hor() {. retu
05c0: 72 6e 20 74 68 69 73 2e 5f 61 6e 63 68 6f 72 3b rn this._anchor;
05d0: 0a 20 20 7d 0a 0a 0a 20 20 75 70 64 61 74 65 28 . }... update(
05e0: 6d 6f 75 73 65 29 20 7b 0a 20 20 20 20 69 66 20 mouse) {. if
05f0: 28 74 68 69 73 2e 6d 6f 64 65 3d 3d 3d 27 72 65 (this.mode==='re
0600: 6c 61 74 69 76 65 27 29 20 7b 0a 20 20 20 20 20 lative') {.
0610: 20 6c 65 74 20 69 6e 63 72 65 6d 65 6e 74 20 3d let increment =
0620: 20 74 68 69 73 2e 63 6f 6e 76 65 72 74 50 6f 73 this.convertPos
0630: 69 74 69 6f 6e 54 6f 56 61 6c 75 65 28 6d 6f 75 itionToValue(mou
0640: 73 65 29 20 2d 20 74 68 69 73 2e 61 6e 63 68 6f se) - this.ancho
0650: 72 3b 0a 20 20 20 20 20 20 69 66 20 28 4d 61 74 r;. if (Mat
0660: 68 2e 61 62 73 28 69 6e 63 72 65 6d 65 6e 74 29 h.abs(increment)
0670: 20 3e 20 30 2e 35 29 20 7b 20 69 6e 63 72 65 6d > 0.5) { increm
0680: 65 6e 74 20 3d 20 30 3b 20 7d 0a 20 20 20 20 20 ent = 0; }.
0690: 20 74 68 69 73 2e 61 6e 63 68 6f 72 20 3d 20 6d this.anchor = m
06a0: 6f 75 73 65 3b 0a 20 20 20 20 20 20 74 68 69 73 ouse;. this
06b0: 2e 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 76 61 .value = this.va
06c0: 6c 75 65 20 2b 20 69 6e 63 72 65 6d 65 6e 74 20 lue + increment
06d0: 2a 20 74 68 69 73 2e 73 65 6e 73 69 74 69 76 69 * this.sensitivi
06e0: 74 79 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b ty;. } else {
06f0: 0a 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 . this.valu
0700: 65 20 3d 20 74 68 69 73 2e 63 6f 6e 76 65 72 74 e = this.convert
0710: 50 6f 73 69 74 69 6f 6e 54 6f 56 61 6c 75 65 28 PositionToValue(
0720: 6d 6f 75 73 65 29 3b 0a 20 20 20 20 7d 0a 20 20 mouse);. }.
0730: 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 6d this.value = m
0740: 61 74 68 2e 63 6c 69 70 28 74 68 69 73 2e 76 61 ath.clip(this.va
0750: 6c 75 65 2c 30 2c 31 29 3b 0a 20 20 7d 0a 0a 20 lue,0,1);. }..
0760: 20 63 6f 6e 76 65 72 74 50 6f 73 69 74 69 6f 6e convertPosition
0770: 54 6f 56 61 6c 75 65 28 63 75 72 72 65 6e 74 29 ToValue(current)
0780: 20 7b 0a 20 20 20 20 73 77 69 74 63 68 28 74 68 {. switch(th
0790: 69 73 2e 64 69 72 65 63 74 69 6f 6e 29 20 7b 0a is.direction) {.
07a0: 20 20 20 20 20 20 63 61 73 65 20 27 72 61 64 69 case 'radi
07b0: 61 6c 27 3a 0a 20 20 20 20 20 20 20 20 6c 65 74 al':. let
07c0: 20 70 6f 73 69 74 69 6f 6e 20 3d 20 6d 61 74 68 position = math
07d0: 2e 74 6f 50 6f 6c 61 72 28 63 75 72 72 65 6e 74 .toPolar(current
07e0: 2e 78 20 2d 20 74 68 69 73 2e 62 6f 75 6e 64 61 .x - this.bounda
07f0: 72 79 2e 63 65 6e 74 65 72 2e 78 2c 20 63 75 72 ry.center.x, cur
0800: 72 65 6e 74 2e 79 20 2d 20 74 68 69 73 2e 62 6f rent.y - this.bo
0810: 75 6e 64 61 72 79 2e 63 65 6e 74 65 72 2e 79 29 undary.center.y)
0820: 3b 0a 20 20 20 20 20 20 20 20 70 6f 73 69 74 69 ;. positi
0830: 6f 6e 20 3d 20 70 6f 73 69 74 69 6f 6e 2e 61 6e on = position.an
0840: 67 6c 65 20 2f 20 28 4d 61 74 68 2e 50 49 2a 32 gle / (Math.PI*2
0850: 29 3b 0a 20 20 20 20 20 20 20 20 70 6f 73 69 74 );. posit
0860: 69 6f 6e 20 3d 20 28 28 70 6f 73 69 74 69 6f 6e ion = ((position
0870: 20 2d 20 30 2e 32 35 29 20 2b 20 31 29 20 25 20 - 0.25) + 1) %
0880: 31 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 1;. retur
0890: 6e 20 70 6f 73 69 74 69 6f 6e 3b 0a 20 20 20 20 n position;.
08a0: 20 20 63 61 73 65 20 27 76 65 72 74 69 63 61 6c case 'vertical
08b0: 27 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ':. retur
08c0: 6e 20 6d 61 74 68 2e 73 63 61 6c 65 28 63 75 72 n math.scale(cur
08d0: 72 65 6e 74 2e 79 2c 74 68 69 73 2e 62 6f 75 6e rent.y,this.boun
08e0: 64 61 72 79 2e 6d 69 6e 2e 79 2c 74 68 69 73 2e dary.min.y,this.
08f0: 62 6f 75 6e 64 61 72 79 2e 6d 61 78 2e 79 2c 30 boundary.max.y,0
0900: 2c 31 29 3b 0a 20 20 20 20 20 20 63 61 73 65 20 ,1);. case
0910: 27 68 6f 72 69 7a 6f 6e 74 61 6c 27 3a 0a 20 20 'horizontal':.
0920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61 74 return mat
0930: 68 2e 73 63 61 6c 65 28 63 75 72 72 65 6e 74 2e h.scale(current.
0940: 78 2c 74 68 69 73 2e 62 6f 75 6e 64 61 72 79 2e x,this.boundary.
0950: 6d 69 6e 2e 78 2c 74 68 69 73 2e 62 6f 75 6e 64 min.x,this.bound
0960: 61 72 79 2e 6d 61 78 2e 78 2c 30 2c 31 29 3b 0a ary.max.x,0,1);.
0970: 20 20 20 20 7d 0a 20 20 7d 0a 0a 7d 0a 0a 0a 65 }. }..}...e
0980: 78 70 6f 72 74 20 63 6c 61 73 73 20 42 75 74 74 xport class Butt
0990: 6f 6e 20 7b 0a 0a 20 20 63 6f 6e 73 74 72 75 63 on {.. construc
09a0: 74 6f 72 28 6d 6f 64 65 3d 27 62 75 74 74 6f 6e tor(mode='button
09b0: 27 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 6d 6f ') {. this.mo
09c0: 64 65 20 3d 20 6d 6f 64 65 3b 0a 20 20 20 20 74 de = mode;. t
09d0: 68 69 73 2e 73 74 61 74 65 20 3d 20 6e 65 77 20 his.state = new
09e0: 54 6f 67 67 6c 65 4d 6f 64 65 6c 28 29 3b 0a 20 ToggleModel();.
09f0: 20 20 20 74 68 69 73 2e 70 61 69 6e 74 62 72 75 this.paintbru
0a00: 73 68 20 3d 20 66 61 6c 73 65 3b 0a 20 20 7d 0a sh = false;. }.
0a10: 0a 20 20 63 6c 69 63 6b 28 29 20 7b 0a 20 20 20 . click() {.
0a20: 20 73 77 69 74 63 68 20 28 74 68 69 73 2e 6d 6f switch (this.mo
0a30: 64 65 29 20 7b 0a 20 20 20 20 20 20 63 61 73 65 de) {. case
0a40: 20 27 69 6d 70 75 6c 73 65 27 3a 0a 20 20 20 20 'impulse':.
0a50: 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e 6f this.state.o
0a60: 6e 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 n();. if
0a70: 28 74 68 69 73 2e 74 69 6d 65 6f 75 74 29 20 7b (this.timeout) {
0a80: 0a 20 20 20 20 20 20 20 20 20 20 63 6c 65 61 72 . clear
0a90: 54 69 6d 65 6f 75 74 28 74 68 69 73 2e 74 69 6d Timeout(this.tim
0aa0: 65 6f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 7d eout);. }
0ab0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 69 . this.ti
0ac0: 6d 65 6f 75 74 20 3d 20 73 65 74 54 69 6d 65 6f meout = setTimeo
0ad0: 75 74 28 74 68 69 73 2e 73 74 61 74 65 2e 6f 66 ut(this.state.of
0ae0: 66 2e 62 69 6e 64 28 74 68 69 73 29 2c 33 30 29 f.bind(this),30)
0af0: 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 ;. this.e
0b00: 6d 69 74 28 27 63 68 61 6e 67 65 27 2c 74 68 69 mit('change',thi
0b10: 73 2e 73 74 61 74 65 29 3b 0a 20 20 20 20 20 20 s.state);.
0b20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
0b30: 61 73 65 20 27 62 75 74 74 6f 6e 27 3a 0a 20 20 ase 'button':.
0b40: 20 20 20 20 20 20 74 68 69 73 2e 74 75 72 6e 4f this.turnO
0b50: 6e 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 n();. thi
0b60: 73 2e 65 6d 69 74 28 27 63 68 61 6e 67 65 27 2c s.emit('change',
0b70: 74 68 69 73 2e 73 74 61 74 65 29 3b 0a 20 20 20 this.state);.
0b80: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 break;.
0b90: 20 20 63 61 73 65 20 27 61 66 74 65 72 74 6f 75 case 'aftertou
0ba0: 63 68 27 3a 0a 20 20 20 20 20 20 20 20 74 68 69 ch':. thi
0bb0: 73 2e 70 6f 73 69 74 69 6f 6e 20 3d 20 7b 0a 20 s.position = {.
0bc0: 20 20 20 20 20 20 20 20 20 78 3a 20 6d 61 74 68 x: math
0bd0: 2e 63 6c 69 70 28 74 68 69 73 2e 6d 6f 75 73 65 .clip(this.mouse
0be0: 2e 78 20 2f 20 74 68 69 73 2e 77 69 64 74 68 2c .x / this.width,
0bf0: 30 2c 31 29 2c 0a 20 20 20 20 20 20 20 20 20 20 0,1),.
0c00: 79 3a 20 6d 61 74 68 2e 63 6c 69 70 28 31 20 2d y: math.clip(1 -
0c10: 20 74 68 69 73 2e 6d 6f 75 73 65 2e 79 20 2f 20 this.mouse.y /
0c20: 74 68 69 73 2e 68 65 69 67 68 74 2c 30 2c 31 29 this.height,0,1)
0c30: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 . };.
0c40: 20 20 20 20 74 68 69 73 2e 74 75 72 6e 4f 6e 28 this.turnOn(
0c50: 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e );. this.
0c60: 65 6d 69 74 28 27 63 68 61 6e 67 65 27 2c 7b 0a emit('change',{.
0c70: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 3a state:
0c80: 20 74 68 69 73 2e 73 74 61 74 65 2c 0a 20 20 20 this.state,.
0c90: 20 20 20 20 20 20 20 78 3a 20 74 68 69 73 2e 70 x: this.p
0ca0: 6f 73 69 74 69 6f 6e 2e 78 2c 0a 20 20 20 20 20 osition.x,.
0cb0: 20 20 20 20 20 79 3a 20 74 68 69 73 2e 70 6f 73 y: this.pos
0cc0: 69 74 69 6f 6e 2e 79 2c 0a 20 20 20 20 20 20 20 ition.y,.
0cd0: 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 });. bre
0ce0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 ak;. case '
0cf0: 74 6f 67 67 6c 65 27 3a 0a 20 20 20 20 20 20 20 toggle':.
0d00: 20 74 68 69 73 2e 66 6c 69 70 28 29 3b 0a 20 20 this.flip();.
0d10: 20 20 20 20 20 20 74 68 69 73 2e 65 6d 69 74 28 this.emit(
0d20: 27 63 68 61 6e 67 65 27 2c 74 68 69 73 2e 73 74 'change',this.st
0d30: 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20 62 72 ate);. br
0d40: 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d 0a eak;. }.. }.
0d50: 0a 20 20 6d 6f 76 65 28 29 20 7b 0a 20 20 20 20 . move() {.
0d60: 69 66 20 28 74 68 69 73 2e 6d 6f 64 65 3d 3d 3d if (this.mode===
0d70: 27 61 66 74 65 72 74 6f 75 63 68 27 29 20 7b 0a 'aftertouch') {.
0d80: 20 20 20 20 20 20 74 68 69 73 2e 70 6f 73 69 74 this.posit
0d90: 69 6f 6e 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 ion = {.
0da0: 78 3a 20 6d 61 74 68 2e 63 6c 69 70 28 74 68 69 x: math.clip(thi
0db0: 73 2e 6d 6f 75 73 65 2e 78 20 2f 20 74 68 69 73 s.mouse.x / this
0dc0: 2e 77 69 64 74 68 2c 30 2c 31 29 2c 0a 20 20 20 .width,0,1),.
0dd0: 20 20 20 20 20 79 3a 20 6d 61 74 68 2e 63 6c 69 y: math.cli
0de0: 70 28 31 20 2d 20 74 68 69 73 2e 6d 6f 75 73 65 p(1 - this.mouse
0df0: 2e 79 20 2f 20 74 68 69 73 2e 68 65 69 67 68 74 .y / this.height
0e00: 2c 30 2c 31 29 0a 20 20 20 20 20 20 7d 3b 0a 20 ,0,1). };.
0e10: 20 20 20 20 20 74 68 69 73 2e 65 6d 69 74 28 27 this.emit('
0e20: 63 68 61 6e 67 65 27 2c 7b 0a 20 20 20 20 20 20 change',{.
0e30: 20 20 73 74 61 74 65 3a 20 74 68 69 73 2e 73 74 state: this.st
0e40: 61 74 65 2c 0a 20 20 20 20 20 20 20 20 78 3a 20 ate,. x:
0e50: 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e 2e 78 2c this.position.x,
0e60: 0a 20 20 20 20 20 20 20 20 79 3a 20 74 68 69 73 . y: this
0e70: 2e 70 6f 73 69 74 69 6f 6e 2e 79 2c 0a 20 20 20 .position.y,.
0e80: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 74 68 69 });. thi
0e90: 73 2e 72 65 6e 64 65 72 28 29 3b 0a 20 20 20 20 s.render();.
0ea0: 7d 0a 20 20 7d 0a 0a 20 20 72 65 6c 65 61 73 65 }. }.. release
0eb0: 28 29 20 7b 0a 20 20 20 20 73 77 69 74 63 68 20 () {. switch
0ec0: 28 74 68 69 73 2e 6d 6f 64 65 29 20 7b 0a 20 20 (this.mode) {.
0ed0: 20 20 20 20 63 61 73 65 20 27 62 75 74 74 6f 6e case 'button
0ee0: 27 3a 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e ':. this.
0ef0: 74 75 72 6e 4f 66 66 28 29 3b 0a 20 20 20 20 20 turnOff();.
0f00: 20 20 20 74 68 69 73 2e 65 6d 69 74 28 27 63 68 this.emit('ch
0f10: 61 6e 67 65 27 2c 74 68 69 73 2e 73 74 61 74 65 ange',this.state
0f20: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b );. break
0f30: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 61 66 ;. case 'af
0f40: 74 65 72 74 6f 75 63 68 27 3a 0a 20 20 20 20 20 tertouch':.
0f50: 20 20 20 74 68 69 73 2e 74 75 72 6e 4f 66 66 28 this.turnOff(
0f60: 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e );. this.
0f70: 70 6f 73 69 74 69 6f 6e 20 3d 20 7b 0a 20 20 20 position = {.
0f80: 20 20 20 20 20 20 20 78 3a 20 74 68 69 73 2e 6d x: this.m
0f90: 6f 75 73 65 2e 78 20 2f 20 74 68 69 73 2e 77 69 ouse.x / this.wi
0fa0: 64 74 68 2c 0a 20 20 20 20 20 20 20 20 20 20 79 dth,. y
0fb0: 3a 20 31 20 2d 20 74 68 69 73 2e 6d 6f 75 73 65 : 1 - this.mouse
0fc0: 2e 79 20 2f 20 74 68 69 73 2e 68 65 69 67 68 74 .y / this.height
0fd0: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 . };.
0fe0: 20 20 20 20 74 68 69 73 2e 65 6d 69 74 28 27 63 this.emit('c
0ff0: 68 61 6e 67 65 27 2c 7b 0a 20 20 20 20 20 20 20 hange',{.
1000: 20 20 20 73 74 61 74 65 3a 20 74 68 69 73 2e 73 state: this.s
1010: 74 61 74 65 2c 0a 20 20 20 20 20 20 20 20 20 20 tate,.
1020: 78 3a 20 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e x: this.position
1030: 2e 78 2c 0a 20 20 20 20 20 20 20 20 20 20 79 3a .x,. y:
1040: 20 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e 2e 79 this.position.y
1050: 2c 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 ,. });.
1060: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
1070: 20 7d 0a 20 20 7d 0a 7d 0a }. }.}.