{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/visualization/viewport.js"],"names":["Vector2","Viewport","mini","Class","subclass","initialize","canvas","middlePoint","extent","point","scaleX","d3","scale","linear","scaleY","resetScaleRange","updateScales","screenToWorldCoordinates","vector","invert","x","y","worldToScreenCoordinates","jumpToPoint","set","translateBy","addSelf","divVector","width","height","mulVector","zoomIn","mulFloatSelf","zoomOut","extend","domain","range"],"mappings":";;;;;;AAAOA,U;;;;;;;;;;;;;;;;;;;;AAEN,OAAIC,WAAWC,KAAKC,KAAL,CAAWC,QAAX,CAAoB;AAClCC,gBAAY,UAASC,MAAT,EAAiBC,WAAjB,EAA8BC,MAA9B,EAAsC;AACjD,UAAKF,MAAL,GAAcA,MAAd;AACA,UAAKG,KAAL,GAAaF,WAAb;AACA,UAAKC,MAAL,GAAcA,MAAd;;AAEA;AACA,UAAKE,MAAL,GAAcC,GAAGC,KAAH,CAASC,MAAT,EAAd;AACA,UAAKC,MAAL,GAAcH,GAAGC,KAAH,CAASC,MAAT,EAAd;;AAEA,UAAKE,eAAL;AACA,UAAKC,YAAL;AACA,KAZiC;;AAclCC,8BAA0B,UAASC,MAAT,EAAiB;AAC1C,YAAO,IAAIlB,OAAJ,CACN,KAAKU,MAAL,CAAYS,MAAZ,CAAmBD,OAAOE,CAA1B,CADM,EAEN,KAAKN,MAAL,CAAYK,MAAZ,CAAmBD,OAAOG,CAA1B,CAFM,CAAP;AAIA,KAnBiC;;AAqBlCC,8BAA0B,UAASJ,MAAT,EAAiB;AAC1C,YAAO,IAAIlB,OAAJ,CACN,KAAKU,MAAL,CAAYQ,OAAOE,CAAnB,CADM,EAEN,KAAKN,MAAL,CAAYI,OAAOG,CAAnB,CAFM,CAAP;AAIA,KA1BiC;;AA4BlCE,iBAAa,UAASL,MAAT,EAAiB;AAC7B,UAAKT,KAAL,CAAWe,GAAX,CAAeN,MAAf;AACA,UAAKF,YAAL;AACA,KA/BiC;;AAiClCS,iBAAa,UAASP,MAAT,EAAiB;AAC7B,UAAKT,KAAL,CAAWiB,OAAX,CAAmB,KAAKlB,MAAL,CAAYmB,SAAZ,CAClB,IAAI3B,OAAJ,CAAY,KAAKM,MAAL,CAAYsB,KAAxB,EAA+B,CAAC,KAAKtB,MAAL,CAAYuB,MAA5C,CADkB,EAEjBC,SAFiB,CAEPZ,MAFO,CAAnB;AAGA,UAAKF,YAAL;AACA,KAtCiC;;AAwClCe,YAAQ,YAAW;AAClB,UAAKvB,MAAL,CAAYwB,YAAZ,CAAyB,GAAzB;AACA,UAAKhB,YAAL;AACA,KA3CiC;;AA6ClCiB,aAAS,YAAW;AACnB,UAAKzB,MAAL,CAAYwB,YAAZ,CAAyB,GAAzB;AACA,UAAKhB,YAAL;AACA,KAhDiC;;AAkDlCA,kBAAc,YAAW;AACxB,SAAIT,cAAc,KAAKE,KAAvB;AACA,SAAIyB,SAAS,KAAK1B,MAAlB;;AAEA,UAAKE,MAAL,CAAYyB,MAAZ,CAAmB,CAClB5B,YAAYa,CAAZ,GAAgBc,OAAOd,CAAP,GAAW,CADT,EAElBb,YAAYa,CAAZ,GAAgBc,OAAOd,CAAP,GAAW,CAFT,CAAnB;AAIA,UAAKN,MAAL,CAAYqB,MAAZ,CAAmB,CAClB5B,YAAYc,CAAZ,GAAgBa,OAAOb,CAAP,GAAW,CADT,EAElBd,YAAYc,CAAZ,GAAgBa,OAAOb,CAAP,GAAW,CAFT,CAAnB;AAIA,KA9DiC;;AAgElC;AACAN,qBAAiB,YAAW;AAC3B,UAAKL,MAAL,CAAY0B,KAAZ,CAAkB,CAAC,CAAD,EAAI,KAAK9B,MAAL,CAAYsB,KAAhB,CAAlB;AACA,UAAKd,MAAL,CAAYsB,KAAZ,CAAkB,CAAC,KAAK9B,MAAL,CAAYuB,MAAb,EAAqB,CAArB,CAAlB;AACA;AApEiC,IAApB,CAAf;;;;;;;;;;;;;;;;sBAuEe5B,Q","file":"viewport.js","sourcesContent":["import Vector2 from \"./../external/vector2.js\";\n\n\tvar Viewport = mini.Class.subclass({\n\t\tinitialize: function(canvas, middlePoint, extent) {\n\t\t\tthis.canvas = canvas;\n\t\t\tthis.point = middlePoint;\n\t\t\tthis.extent = extent;\n\n\t\t\t// scaling\n\t\t\tthis.scaleX = d3.scale.linear();\n\t\t\tthis.scaleY = d3.scale.linear();\n\n\t\t\tthis.resetScaleRange();\n\t\t\tthis.updateScales();\n\t\t},\n\t\n\t\tscreenToWorldCoordinates: function(vector) {\n\t\t\treturn new Vector2(\n\t\t\t\tthis.scaleX.invert(vector.x),\n\t\t\t\tthis.scaleY.invert(vector.y)\n\t\t\t);\n\t\t},\n\t\n\t\tworldToScreenCoordinates: function(vector) {\n\t\t\treturn new Vector2(\n\t\t\t\tthis.scaleX(vector.x),\n\t\t\t\tthis.scaleY(vector.y)\n\t\t\t);\n\t\t},\n\t\n\t\tjumpToPoint: function(vector) {\n\t\t\tthis.point.set(vector);\n\t\t\tthis.updateScales();\n\t\t},\n\t\n\t\ttranslateBy: function(vector) {\n\t\t\tthis.point.addSelf(this.extent.divVector(\n\t\t\t\tnew Vector2(this.canvas.width, -this.canvas.height)\n\t\t\t).mulVector(vector));\n\t\t\tthis.updateScales();\n\t\t},\n\t\t\n\t\tzoomIn: function() {\n\t\t\tthis.extent.mulFloatSelf(1.1);\n\t\t\tthis.updateScales();\n\t\t},\n\n\t\tzoomOut: function() {\n\t\t\tthis.extent.mulFloatSelf(0.9);\n\t\t\tthis.updateScales();\n\t\t},\n\t\t\n\t\tupdateScales: function() {\n\t\t\tvar middlePoint = this.point;\n\t\t\tvar extend = this.extent;\n\t\t\t\n\t\t\tthis.scaleX.domain([\n\t\t\t\tmiddlePoint.x - extend.x / 2,\n\t\t\t\tmiddlePoint.x + extend.x / 2\n\t\t\t]);\n\t\t\tthis.scaleY.domain([\n\t\t\t\tmiddlePoint.y - extend.y / 2,\n\t\t\t\tmiddlePoint.y + extend.y / 2\n\t\t\t]);\n\t\t},\n\t\t\n\t\t// Ranges are given in screen coordinates.\n\t\tresetScaleRange: function() {\n\t\t\tthis.scaleX.range([0, this.canvas.width]);\n\t\t\tthis.scaleY.range([this.canvas.height, 0]);\n\t\t}\n\t});\n\t\n\texport default Viewport;\n"]}