@hatiolab/things-scene 9.0.0-beta.35 → 9.0.0-beta.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/babel.config.js +4 -3
- package/db.sqlite +0 -0
- package/dist/animation/animate.js +63 -0
- package/dist/animation/animate.js.map +1 -0
- package/dist/animation/animations/animation.js +122 -0
- package/dist/animation/animations/animation.js.map +1 -0
- package/dist/animation/animations/fade.js +28 -0
- package/dist/animation/animations/fade.js.map +1 -0
- package/dist/animation/animations/heartbeat.js +28 -0
- package/dist/animation/animations/heartbeat.js.map +1 -0
- package/dist/animation/animations/moving.js +24 -0
- package/dist/animation/animations/moving.js.map +1 -0
- package/dist/animation/animations/outline.js +47 -0
- package/dist/animation/animations/outline.js.map +1 -0
- package/dist/animation/animations/rotation.js +22 -0
- package/dist/animation/animations/rotation.js.map +1 -0
- package/dist/animation/animations/vibration.js +31 -0
- package/dist/animation/animations/vibration.js.map +1 -0
- package/dist/animation/compile.js +31 -0
- package/dist/animation/compile.js.map +1 -0
- package/dist/animation/delta.js +51 -0
- package/dist/animation/delta.js.map +1 -0
- package/dist/animation/index.js +14 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/command/command-change.js +33 -0
- package/dist/command/command-change.js.map +1 -0
- package/dist/command/command-migrate.js +103 -0
- package/dist/command/command-migrate.js.map +1 -0
- package/dist/command/command.js +18 -0
- package/dist/command/command.js.map +1 -0
- package/dist/command/snapshot-commander.js +84 -0
- package/dist/command/snapshot-commander.js.map +1 -0
- package/dist/components/anchor/anchor.js +105 -0
- package/dist/components/anchor/anchor.js.map +1 -0
- package/dist/components/anchor/ellipse-anchors.js +53 -0
- package/dist/components/anchor/ellipse-anchors.js.map +1 -0
- package/dist/components/anchor/rect-anchors.js +53 -0
- package/dist/components/anchor/rect-anchors.js.map +1 -0
- package/dist/components/audio.js +154 -0
- package/dist/components/audio.js.map +1 -0
- package/dist/components/cloud.js +44 -0
- package/dist/components/cloud.js.map +1 -0
- package/dist/components/component.js +1086 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/container-abstract.js +387 -0
- package/dist/components/container-abstract.js.map +1 -0
- package/dist/components/container.js +331 -0
- package/dist/components/container.js.map +1 -0
- package/dist/components/data/data-mapping.js +82 -0
- package/dist/components/data/data-mapping.js.map +1 -0
- package/dist/components/data/data.js +166 -0
- package/dist/components/data/data.js.map +1 -0
- package/dist/components/data/evaluator.js +103 -0
- package/dist/components/data/evaluator.js.map +1 -0
- package/dist/components/donut.js +104 -0
- package/dist/components/donut.js.map +1 -0
- package/dist/components/drawer/draw-image-pendable.js +20 -0
- package/dist/components/drawer/draw-image-pendable.js.map +1 -0
- package/dist/components/drawer/effect.js +19 -0
- package/dist/components/drawer/effect.js.map +1 -0
- package/dist/components/drawer/fill.js +228 -0
- package/dist/components/drawer/fill.js.map +1 -0
- package/dist/components/drawer/format.js +115 -0
- package/dist/components/drawer/format.js.map +1 -0
- package/dist/components/drawer/line.js +191 -0
- package/dist/components/drawer/line.js.map +1 -0
- package/dist/components/drawer/stroke.js +62 -0
- package/dist/components/drawer/stroke.js.map +1 -0
- package/dist/components/drawer/text-wrapper.js +51 -0
- package/dist/components/drawer/text-wrapper.js.map +1 -0
- package/dist/components/drawer/text.js +269 -0
- package/dist/components/drawer/text.js.map +1 -0
- package/dist/components/ellipse.js +110 -0
- package/dist/components/ellipse.js.map +1 -0
- package/dist/components/file/ondropfile.js +19 -0
- package/dist/components/file/ondropfile.js.map +1 -0
- package/dist/components/fit/fit.js +137 -0
- package/dist/components/fit/fit.js.map +1 -0
- package/dist/components/geometry/transcoord.js +339 -0
- package/dist/components/geometry/transcoord.js.map +1 -0
- package/dist/components/geometry/union.js +35 -0
- package/dist/components/geometry/union.js.map +1 -0
- package/dist/components/gif-view.js +128 -0
- package/dist/components/gif-view.js.map +1 -0
- package/dist/components/global-ref.js +154 -0
- package/dist/components/global-ref.js.map +1 -0
- package/dist/components/group.js +171 -0
- package/dist/components/group.js.map +1 -0
- package/dist/components/html/elements.js +24 -0
- package/dist/components/html/elements.js.map +1 -0
- package/dist/components/html/fill.js +126 -0
- package/dist/components/html/fill.js.map +1 -0
- package/dist/components/html/reposition.js +119 -0
- package/dist/components/html/reposition.js.map +1 -0
- package/dist/components/html/shadow.js +24 -0
- package/dist/components/html/shadow.js.map +1 -0
- package/dist/components/html-overlay-container.js +27 -0
- package/dist/components/html-overlay-container.js.map +1 -0
- package/dist/components/html-overlay-element.js +22 -0
- package/dist/components/html-overlay-element.js.map +1 -0
- package/dist/components/image-view.js +193 -0
- package/dist/components/image-view.js.map +1 -0
- package/dist/components/index.js +231 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/info-window.js +416 -0
- package/dist/components/info-window.js.map +1 -0
- package/dist/components/line.js +374 -0
- package/dist/components/line.js.map +1 -0
- package/dist/components/local-ref.js +114 -0
- package/dist/components/local-ref.js.map +1 -0
- package/dist/components/mixins/connectable.js +128 -0
- package/dist/components/mixins/connectable.js.map +1 -0
- package/dist/components/mixins/data-source.js +34 -0
- package/dist/components/mixins/data-source.js.map +1 -0
- package/dist/components/mixins/html-element.js +107 -0
- package/dist/components/mixins/html-element.js.map +1 -0
- package/dist/components/mixins/move-handle.js +73 -0
- package/dist/components/mixins/move-handle.js.map +1 -0
- package/dist/components/mixins/rect-path.js +113 -0
- package/dist/components/mixins/rect-path.js.map +1 -0
- package/dist/components/mixins/value-holder.js +81 -0
- package/dist/components/mixins/value-holder.js.map +1 -0
- package/dist/components/mutater/bounds.js +68 -0
- package/dist/components/mutater/bounds.js.map +1 -0
- package/dist/components/mutater/path.js +73 -0
- package/dist/components/mutater/path.js.map +1 -0
- package/dist/components/ortholine.js +763 -0
- package/dist/components/ortholine.js.map +1 -0
- package/dist/components/outline/ellipse-outline.js +23 -0
- package/dist/components/outline/ellipse-outline.js.map +1 -0
- package/dist/components/outline/path-outline.js +48 -0
- package/dist/components/outline/path-outline.js.map +1 -0
- package/dist/components/path.js +49 -0
- package/dist/components/path.js.map +1 -0
- package/dist/components/polygon.js +91 -0
- package/dist/components/polygon.js.map +1 -0
- package/dist/components/polyline.js +114 -0
- package/dist/components/polyline.js.map +1 -0
- package/dist/components/popup.js +160 -0
- package/dist/components/popup.js.map +1 -0
- package/dist/components/rect.js +72 -0
- package/dist/components/rect.js.map +1 -0
- package/dist/components/retention/retention-manager.js +81 -0
- package/dist/components/retention/retention-manager.js.map +1 -0
- package/dist/components/root-container.js +519 -0
- package/dist/components/root-container.js.map +1 -0
- package/dist/components/ruler.js +103 -0
- package/dist/components/ruler.js.map +1 -0
- package/dist/components/shape.js +97 -0
- package/dist/components/shape.js.map +1 -0
- package/dist/components/star.js +103 -0
- package/dist/components/star.js.map +1 -0
- package/dist/components/text/substitutor.js +92 -0
- package/dist/components/text/substitutor.js.map +1 -0
- package/dist/components/text.js +21 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/triangle.js +92 -0
- package/dist/components/triangle.js.map +1 -0
- package/dist/const.js +71 -0
- package/dist/const.js.map +1 -0
- package/dist/core/collection.js +28 -0
- package/dist/core/collection.js.map +1 -0
- package/dist/core/debug.js +12 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/deep-equals.js +112 -0
- package/dist/core/deep-equals.js.map +1 -0
- package/dist/core/dom-to-image.js +617 -0
- package/dist/core/dom-to-image.js.map +1 -0
- package/dist/core/event.js +205 -0
- package/dist/core/event.js.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/list.js +87 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/logger.js +29 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memoize.js +40 -0
- package/dist/core/memoize.js.map +1 -0
- package/dist/core/mixin.js +26 -0
- package/dist/core/mixin.js.map +1 -0
- package/dist/core/obj-accessor.js +26 -0
- package/dist/core/obj-accessor.js.map +1 -0
- package/dist/core/reference-map.js +147 -0
- package/dist/core/reference-map.js.map +1 -0
- package/dist/core/round-rect.js +62 -0
- package/dist/core/round-rect.js.map +1 -0
- package/dist/core/safe-round.js +10 -0
- package/dist/core/safe-round.js.map +1 -0
- package/dist/core/script-loader.js +148 -0
- package/dist/core/script-loader.js.map +1 -0
- package/dist/core/snapshot-taker.js +59 -0
- package/dist/core/snapshot-taker.js.map +1 -0
- package/dist/core/stack.js +18 -0
- package/dist/core/stack.js.map +1 -0
- package/dist/core/timecapsule.js +88 -0
- package/dist/core/timecapsule.js.map +1 -0
- package/dist/core/utils.js +309 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/decorator/anchors-decorator.js +53 -0
- package/dist/decorator/anchors-decorator.js.map +1 -0
- package/dist/decorator/bouncing-arrow-decorator.js +52 -0
- package/dist/decorator/bouncing-arrow-decorator.js.map +1 -0
- package/dist/decorator/data-spread-decorator.js +69 -0
- package/dist/decorator/data-spread-decorator.js.map +1 -0
- package/dist/decorator/decotag-decorator.js +33 -0
- package/dist/decorator/decotag-decorator.js.map +1 -0
- package/dist/decorator/index.js +31 -0
- package/dist/decorator/index.js.map +1 -0
- package/dist/decorator/link-decorator.js +66 -0
- package/dist/decorator/link-decorator.js.map +1 -0
- package/dist/effect/gradation.js +37 -0
- package/dist/effect/gradation.js.map +1 -0
- package/dist/effect/index.js +23 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/shadow.js +33 -0
- package/dist/effect/shadow.js.map +1 -0
- package/dist/effect/turn.js +25 -0
- package/dist/effect/turn.js.map +1 -0
- package/dist/event/event-engine.js +76 -0
- package/dist/event/event-engine.js.map +1 -0
- package/dist/event/event-pump.js +92 -0
- package/dist/event/event-pump.js.map +1 -0
- package/dist/event/event-tracker.js +97 -0
- package/dist/event/event-tracker.js.map +1 -0
- package/dist/event/index.js +21 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/ua-event-handler.js +453 -0
- package/dist/event/ua-event-handler.js.map +1 -0
- package/dist/event-map/animator-handler.js +225 -0
- package/dist/event-map/animator-handler.js.map +1 -0
- package/dist/event-map/animators/animated-icon.js +265 -0
- package/dist/event-map/animators/animated-icon.js.map +1 -0
- package/dist/event-map/animators/border-highlighting.js +476 -0
- package/dist/event-map/animators/border-highlighting.js.map +1 -0
- package/dist/event-map/animators/bouncing-arrow.js +226 -0
- package/dist/event-map/animators/bouncing-arrow.js.map +1 -0
- package/dist/event-map/event-map.js +36 -0
- package/dist/event-map/event-map.js.map +1 -0
- package/dist/event-map/index.js +20 -0
- package/dist/event-map/index.js.map +1 -0
- package/dist/event-map/move-handler.js +233 -0
- package/dist/event-map/move-handler.js.map +1 -0
- package/dist/event-map/paste-handler.js +176 -0
- package/dist/event-map/paste-handler.js.map +1 -0
- package/dist/event-map/shift-handler.js +55 -0
- package/dist/event-map/shift-handler.js.map +1 -0
- package/dist/event-map/text-editor-lite.js +276 -0
- package/dist/event-map/text-editor-lite.js.map +1 -0
- package/dist/event-map/zoom-handler.js +49 -0
- package/dist/event-map/zoom-handler.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/layer/action/emphasize.js +42 -0
- package/dist/layer/action/emphasize.js.map +1 -0
- package/dist/layer/action/popup.js +461 -0
- package/dist/layer/action/popup.js.map +1 -0
- package/dist/layer/action/pressed.js +31 -0
- package/dist/layer/action/pressed.js.map +1 -0
- package/dist/layer/add-layer.js +180 -0
- package/dist/layer/add-layer.js.map +1 -0
- package/dist/layer/decotag-layer.js +121 -0
- package/dist/layer/decotag-layer.js.map +1 -0
- package/dist/layer/guide-layer.js +292 -0
- package/dist/layer/guide-layer.js.map +1 -0
- package/dist/layer/index.js +70 -0
- package/dist/layer/index.js.map +1 -0
- package/dist/layer/layer.js +230 -0
- package/dist/layer/layer.js.map +1 -0
- package/dist/layer/minimap-layer.js +84 -0
- package/dist/layer/minimap-layer.js.map +1 -0
- package/dist/layer/model-layer.js +465 -0
- package/dist/layer/model-layer.js.map +1 -0
- package/dist/layer/modeler/anchor-handler.js +193 -0
- package/dist/layer/modeler/anchor-handler.js.map +1 -0
- package/dist/layer/modeler/control-handler.js +95 -0
- package/dist/layer/modeler/control-handler.js.map +1 -0
- package/dist/layer/modeler/focus-outline.js +41 -0
- package/dist/layer/modeler/focus-outline.js.map +1 -0
- package/dist/layer/modeler/group-outline.js +30 -0
- package/dist/layer/modeler/group-outline.js.map +1 -0
- package/dist/layer/modeler/index.js +56 -0
- package/dist/layer/modeler/index.js.map +1 -0
- package/dist/layer/modeler/path-handler.js +300 -0
- package/dist/layer/modeler/path-handler.js.map +1 -0
- package/dist/layer/modeler/resizer.js +333 -0
- package/dist/layer/modeler/resizer.js.map +1 -0
- package/dist/layer/modeler/rotator.js +134 -0
- package/dist/layer/modeler/rotator.js.map +1 -0
- package/dist/layer/modeling-layer.js +491 -0
- package/dist/layer/modeling-layer.js.map +1 -0
- package/dist/layer/reaction-layer.js +111 -0
- package/dist/layer/reaction-layer.js.map +1 -0
- package/dist/layer/scroll-layer.js +191 -0
- package/dist/layer/scroll-layer.js.map +1 -0
- package/dist/layer/selection/selected-finder.js +96 -0
- package/dist/layer/selection/selected-finder.js.map +1 -0
- package/dist/layer/selection-layer.js +373 -0
- package/dist/layer/selection-layer.js.map +1 -0
- package/dist/layer/shift-layer.js +83 -0
- package/dist/layer/shift-layer.js.map +1 -0
- package/dist/layout/absolute.js +30 -0
- package/dist/layout/absolute.js.map +1 -0
- package/dist/layout/card.js +52 -0
- package/dist/layout/card.js.map +1 -0
- package/dist/layout/html-absolute.js +32 -0
- package/dist/layout/html-absolute.js.map +1 -0
- package/dist/layout/index.js +56 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layout.js +36 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/layout/linear-horizontal.js +56 -0
- package/dist/layout/linear-horizontal.js.map +1 -0
- package/dist/layout/linear-vertical.js +56 -0
- package/dist/layout/linear-vertical.js.map +1 -0
- package/dist/layout/table.js +106 -0
- package/dist/layout/table.js.map +1 -0
- package/dist/license/license.js +170 -0
- package/dist/license/license.js.map +1 -0
- package/dist/model/compile.js +40 -0
- package/dist/model/compile.js.map +1 -0
- package/dist/model/duplicate.js +19 -0
- package/dist/model/duplicate.js.map +1 -0
- package/dist/model/index.js +34 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/selector.js +104 -0
- package/dist/model/selector.js.map +1 -0
- package/dist/style/compile.js +14 -0
- package/dist/style/compile.js.map +1 -0
- package/dist/style/index.js +14 -0
- package/dist/style/index.js.map +1 -0
- package/dist/things-scene/api/add-start.js +18 -0
- package/dist/things-scene/api/add-start.js.map +1 -0
- package/dist/things-scene/api/add.js +71 -0
- package/dist/things-scene/api/add.js.map +1 -0
- package/dist/things-scene/api/align.js +116 -0
- package/dist/things-scene/api/align.js.map +1 -0
- package/dist/things-scene/api/center-to.js +50 -0
- package/dist/things-scene/api/center-to.js.map +1 -0
- package/dist/things-scene/api/change.js +27 -0
- package/dist/things-scene/api/change.js.map +1 -0
- package/dist/things-scene/api/clipboard.js +45 -0
- package/dist/things-scene/api/clipboard.js.map +1 -0
- package/dist/things-scene/api/distribute.js +57 -0
- package/dist/things-scene/api/distribute.js.map +1 -0
- package/dist/things-scene/api/duplicate.js +47 -0
- package/dist/things-scene/api/duplicate.js.map +1 -0
- package/dist/things-scene/api/fullscreen.js +26 -0
- package/dist/things-scene/api/fullscreen.js.map +1 -0
- package/dist/things-scene/api/group.js +91 -0
- package/dist/things-scene/api/group.js.map +1 -0
- package/dist/things-scene/api/ids.js +28 -0
- package/dist/things-scene/api/ids.js.map +1 -0
- package/dist/things-scene/api/index.js +192 -0
- package/dist/things-scene/api/index.js.map +1 -0
- package/dist/things-scene/api/listener.js +69 -0
- package/dist/things-scene/api/listener.js.map +1 -0
- package/dist/things-scene/api/paste-start.js +27 -0
- package/dist/things-scene/api/paste-start.js.map +1 -0
- package/dist/things-scene/api/place.js +98 -0
- package/dist/things-scene/api/place.js.map +1 -0
- package/dist/things-scene/api/remove.js +57 -0
- package/dist/things-scene/api/remove.js.map +1 -0
- package/dist/things-scene/api/symmetry.js +47 -0
- package/dist/things-scene/api/symmetry.js.map +1 -0
- package/dist/things-scene/api/to-data-url.js +76 -0
- package/dist/things-scene/api/to-data-url.js.map +1 -0
- package/dist/things-scene/api/zorder.js +68 -0
- package/dist/things-scene/api/zorder.js.map +1 -0
- package/dist/things-scene/application-context.js +168 -0
- package/dist/things-scene/application-context.js.map +1 -0
- package/dist/things-scene/config.js +18 -0
- package/dist/things-scene/config.js.map +1 -0
- package/dist/things-scene/create.js +67 -0
- package/dist/things-scene/create.js.map +1 -0
- package/dist/things-scene/fps.js +26 -0
- package/dist/things-scene/fps.js.map +1 -0
- package/dist/things-scene/index.js +152 -0
- package/dist/things-scene/index.js.map +1 -0
- package/dist/things-scene/polyfill.js +111 -0
- package/dist/things-scene/polyfill.js.map +1 -0
- package/dist/things-scene/scene.js +442 -0
- package/dist/things-scene/scene.js.map +1 -0
- package/dist/things-scene/version.js +12 -0
- package/dist/things-scene/version.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizer.js","names":["RESIZE_HANDLE_HALF_SIZE","RESIZE_HANDLE_FULL_SIZE","RESIZE_HANDLE_THRESHOLD","LEFT_TOP","TOP","RIGHT_TOP","RIGHT","RIGHT_BOTTOM","BOTTOM","LEFT_BOTTOM","LEFT","calcDelta","component","index","point","left","top","width","height","bounds","x","y","old_position","new_position","transcoordT2S","dx","dy","resizeComponent","diagonal","delta_x","delta_y","final","origin_bounds","mutateBounds","Math","abs","adjustResize","isContainer","layout","ABSOLUTE","isGroup","dl","dt","components","forEach","delta","move","parent","calculateBounds","getResizeHandles","scale","centerx","centery","right","bottom","denseX","denseY","Resizer","constructor","layer","reset","active","selected","contains","resizable","every","handle","draw","ctx","isLine","beginPath","rect","setLineDash","lineWidth","strokeStyle","stroke","fillStyle","focus","fill","onmousedown","e","ondragstart","boundsList","filter","c","map","ondragmove","transcoordC2S","offsetX","offsetY","i","shiftKey","ondragend","app","commander","execute","exports","default"],"sources":["../../../src/layer/modeler/resizer.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nconst RESIZE_HANDLE_HALF_SIZE = 4\nconst RESIZE_HANDLE_FULL_SIZE = 8\n\nconst RESIZE_HANDLE_THRESHOLD = 50\n\nconst LEFT_TOP = 0\nconst TOP = 1\nconst RIGHT_TOP = 2\nconst RIGHT = 3\nconst RIGHT_BOTTOM = 4\nconst BOTTOM = 5\nconst LEFT_BOTTOM = 6\nconst LEFT = 7\n\nfunction calcDelta(component, index, point) {\n // 1. 컴포넌트의 원래 바운드를 가져온다.\n var { left, top, width, height } = component.bounds\n\n // 2. 해당 바운드 인덱스의 이전 값을 가져온다.\n var x, y\n\n switch (index) {\n case LEFT_TOP:\n x = left\n y = top\n break\n\n case TOP:\n x = left + width / 2\n y = top\n break\n\n case RIGHT_TOP:\n x = left + width\n y = top\n break\n\n case RIGHT:\n x = left + width\n y = top + height / 2\n break\n\n case RIGHT_BOTTOM:\n x = left + width\n y = top + height\n break\n\n case BOTTOM:\n x = left + width / 2\n y = top + height\n break\n\n case LEFT_BOTTOM:\n x = left\n y = top + height\n break\n\n case LEFT:\n x = left\n y = top + height / 2\n break\n }\n\n var old_position = { x, y }\n\n // 4. 포인트 파라미터를 transcoord 해서 변환된 좌표값을 구한다.\n\n var new_position = component.transcoordT2S(point.x, point.y)\n\n // 5. 움직인 거리의 가로 방향 거리, 세로 방향 거리를 구한다.\n return {\n dx: new_position.x - old_position.x,\n dy: new_position.y - old_position.y\n }\n}\n\nfunction resizeComponent(component, index, diagonal, delta_x, delta_y, final) {\n var { left, top, width, height } = component.bounds\n var origin_bounds = { left, top, width, height }\n\n switch (index) {\n case LEFT_TOP:\n left += delta_x\n top += delta_y\n width -= delta_x\n height -= delta_y\n break\n\n case TOP:\n top += delta_y\n height -= delta_y\n break\n\n case RIGHT_TOP:\n top += delta_y\n width += delta_x\n height -= delta_y\n break\n\n case RIGHT:\n width += delta_x\n break\n\n case RIGHT_BOTTOM:\n width += delta_x\n height += delta_y\n break\n\n case BOTTOM:\n height += delta_y\n break\n\n case LEFT_BOTTOM:\n left += delta_x\n width -= delta_x\n height += delta_y\n break\n\n case LEFT:\n left += delta_x\n width -= delta_x\n break\n }\n\n /* 최초의 bounds상태로 되돌린 후에, 변량을 적용한다. 여기서 변량은, 최초상태에서의 변화량이기 때문이다. */\n\n component.mutateBounds(function (bounds) {\n if (Math.abs(width) <= 0.001) {\n width = 0.001\n }\n if (Math.abs(height) <= 0.001) {\n height = 0.001\n }\n\n return component.adjustResize({ left, top, width, height }, origin_bounds, diagonal)\n }, this)\n\n // Absolute Container이고, TOP/LEFT의 위치가 바뀌는 경우에는 하위 컴포넌트들의 위치를 재조정해준다.\n if (component.isContainer() && component.layout.ABSOLUTE && !component.isGroup()) {\n var dl = origin_bounds.left - left\n var dt = origin_bounds.top - top\n\n if (!final)\n component.components.forEach(component => {\n component.delta('tx', dl)\n component.delta('ty', dt)\n })\n else\n component.components.forEach(component => {\n component.delta('tx', 0)\n component.delta('ty', 0)\n component.move({ x: dl, y: dt }, false /* relatively - leave relations among components */)\n })\n\n return\n }\n\n // Group의 바운드를 재계산함.\n var parent = final && component.parent\n parent && parent.isGroup() && parent.calculateBounds()\n}\n\nfunction getResizeHandles(bounds, scale) {\n var { left, top, width, height } = bounds\n\n var centerx = left + width / 2\n var centery = top + height / 2\n var right = left + width\n var bottom = top + height\n\n const denseX = width * scale.x > RESIZE_HANDLE_THRESHOLD\n const denseY = height * scale.y > RESIZE_HANDLE_THRESHOLD\n\n return [\n { x: left, y: top },\n denseX ? { x: centerx, y: top } : null,\n { x: right, y: top },\n denseY ? { x: right, y: centery } : null,\n { x: right, y: bottom },\n denseX ? { x: centerx, y: bottom } : null,\n { x: left, y: bottom },\n denseY ? { x: left, y: centery } : null\n ]\n}\n\nexport default class Resizer {\n constructor(layer) {\n this.layer = layer\n }\n\n reset() {\n // 현재 선택된 리사이즈 핸들의 정보\n this.active = null\n }\n\n get selected() {\n return this.layer.selected\n }\n\n contains(x, y, component, scale) {\n if (!component.resizable) return false\n\n // 좌표가 바운드 핸들에 포함되어있는지 확인함.\n getResizeHandles(component.bounds, scale).every((handle, index) => {\n if (\n handle &&\n Math.abs(x - handle.x) <= RESIZE_HANDLE_HALF_SIZE / scale.x &&\n Math.abs(y - handle.y) <= RESIZE_HANDLE_HALF_SIZE / scale.y\n ) {\n // 현재 선택된 리사이즈 핸들의 정보\n this.active = { component, index }\n }\n\n // 찾았으면, 스톱한다.\n return !this.active\n })\n\n return !!this.active\n }\n\n draw(ctx, component, scale) {\n // Line 같은 경우는 그리지 않는다.\n if (component.isLine()) return\n\n // Bound 박스를 그린다.\n var { left, top, width, height } = component.bounds\n\n ctx.beginPath()\n ctx.rect(left - 4 / scale.x, top - 4 / scale.y, width + 8 / scale.x, height + 8 / scale.y)\n ctx.setLineDash([3 / scale.x, 4 / scale.y])\n ctx.lineWidth = 1 / scale.x\n ctx.strokeStyle = 'black'\n\n ctx.stroke()\n\n ctx.setLineDash([]) // reset lineDash\n\n if (!component.resizable) return\n\n // Bound 핸들(Resize Handle)을 그린다.\n var active = this.active\n\n getResizeHandles(component.bounds, scale).forEach((point, index) => {\n if (!point) {\n return\n }\n\n ctx.beginPath()\n\n ctx.rect(\n point.x - RESIZE_HANDLE_HALF_SIZE / scale.x,\n point.y - RESIZE_HANDLE_HALF_SIZE / scale.y,\n RESIZE_HANDLE_FULL_SIZE / scale.x,\n RESIZE_HANDLE_FULL_SIZE / scale.y\n )\n ctx.setLineDash([0, 0])\n ctx.strokeStyle = '#656565'\n ctx.stroke()\n ctx.fillStyle = '#fff'\n\n if (active && active.component === component && active.index === index) {\n ctx.strokeStyle = '#fa7703'\n\n if (active.focus) ctx.fillStyle = '#ffb80c'\n }\n\n ctx.fill()\n ctx.stroke()\n })\n }\n\n onmousedown(e) {\n this.active.focus = true\n }\n\n ondragstart(e) {\n var { component } = this.active\n\n this.active.bounds = component.bounds\n this.active.boundsList = this.layer.selected.filter(c => c.resizable).map(c => c.bounds)\n }\n\n ondragmove(e) {\n /* 리사이즈 핸들의 이동을 처리한다. */\n var { component, index, boundsList, bounds } = this.active\n\n var point = this.layer.transcoordC2S(e.offsetX, e.offsetY)\n\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. */\n component.bounds = bounds\n var delta = calcDelta(component, index, point)\n\n this.layer.selected\n .filter(c => c.resizable)\n .forEach((c, i) => {\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. 그룹에 반영은 하지 않는다. */\n c.bounds = boundsList[i]\n resizeComponent(c, index, e.shiftKey, delta.dx, delta.dy, false)\n })\n }\n\n ondragend(e) {\n /* 리사이즈 핸들의 이동을 처리한다. */\n var { component, index, boundsList, bounds } = this.active\n\n var point = this.layer.transcoordC2S(e.offsetX, e.offsetY)\n\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. */\n component.bounds = bounds\n var delta = calcDelta(component, index, point)\n\n this.layer.selected\n .filter(c => c.resizable)\n .forEach((c, i) => {\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. 그룹에 반영은 하지 않는다. */\n c.bounds = boundsList[i]\n resizeComponent(c, index, e.shiftKey, delta.dx, delta.dy, true)\n })\n\n /* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */\n this.active.component.app.commander.execute(null, false)\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
/*
|
|
8
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const ROTATION_HANDLE_RADIUS = 4;
|
|
12
|
+
const ROTATION_HANDLE_HEIGHT = 20;
|
|
13
|
+
const THETA_360 = Math.PI * 2;
|
|
14
|
+
const THETA_90 = Math.PI / 2;
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* 컴포넌트의 회전 핸들은 컴포넌트 바운드의 탑라인 중앙 상단에 위치한다.
|
|
18
|
+
*/
|
|
19
|
+
function getRotateHandle(component, scale) {
|
|
20
|
+
var bounds = component.bounds;
|
|
21
|
+
return {
|
|
22
|
+
x: bounds.left + bounds.width / 2,
|
|
23
|
+
y: bounds.top - ROTATION_HANDLE_HEIGHT / scale.y
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
class Rotator {
|
|
27
|
+
constructor(layer) {
|
|
28
|
+
this.layer = layer;
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
// 현재 선택된 로테이트 핸들의 정보
|
|
32
|
+
this.active = null;
|
|
33
|
+
}
|
|
34
|
+
get selected() {
|
|
35
|
+
return this.layer.selected;
|
|
36
|
+
}
|
|
37
|
+
contains(x, y, component, scale) {
|
|
38
|
+
if (!component.rotatable) return false;
|
|
39
|
+
|
|
40
|
+
// 좌표가 회전 핸들에 포함되어있는지 확인함.
|
|
41
|
+
var handle = getRotateHandle(component, scale);
|
|
42
|
+
if (Math.abs(x - handle.x) <= ROTATION_HANDLE_RADIUS / scale.x && Math.abs(y - handle.y) <= ROTATION_HANDLE_RADIUS / scale.y) {
|
|
43
|
+
// 현재 선택된 로테이트 핸들의 정보
|
|
44
|
+
this.active = {
|
|
45
|
+
component
|
|
46
|
+
};
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
draw(context, component, scale) {
|
|
52
|
+
if (!component.rotatable) return;
|
|
53
|
+
context.beginPath();
|
|
54
|
+
var rh = getRotateHandle(component, scale);
|
|
55
|
+
context.lineWidth = 1.5 / scale.x;
|
|
56
|
+
context.moveTo(rh.x, rh.y + ROTATION_HANDLE_HEIGHT / scale.y);
|
|
57
|
+
context.lineTo(rh.x, rh.y);
|
|
58
|
+
context.strokeStyle = '#656565';
|
|
59
|
+
context.stroke();
|
|
60
|
+
context.beginPath();
|
|
61
|
+
context.ellipse(rh.x, rh.y, ROTATION_HANDLE_RADIUS / scale.x, ROTATION_HANDLE_RADIUS / scale.y, 0, 0, THETA_360, true);
|
|
62
|
+
context.stroke();
|
|
63
|
+
context.fillStyle = '#fff';
|
|
64
|
+
context.fill();
|
|
65
|
+
var active = this.active;
|
|
66
|
+
if (active && active.component === component) {
|
|
67
|
+
context.strokeStyle = '#fa7703';
|
|
68
|
+
context.stroke();
|
|
69
|
+
if (active.toFill) {
|
|
70
|
+
context.fillStyle = '#ffb80c';
|
|
71
|
+
context.fill();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
onmousedown(e) {
|
|
76
|
+
this.active.toFill = true;
|
|
77
|
+
}
|
|
78
|
+
ondragstart(e) {
|
|
79
|
+
var active = this.active;
|
|
80
|
+
var component = active.component;
|
|
81
|
+
active.start_rotation = active.component.get('rotation');
|
|
82
|
+
active.rotations = this.layer.selected.filter(c => c.rotatable).map(c => c.get('rotation'));
|
|
83
|
+
}
|
|
84
|
+
ondragmove(e) {
|
|
85
|
+
/* 로테이트 핸들의 이동을 처리한다. */
|
|
86
|
+
var {
|
|
87
|
+
component
|
|
88
|
+
} = this.active;
|
|
89
|
+
|
|
90
|
+
// 회전을 시키려는 대상 컴포넌트의 중심점과 이벤트 포인트와의 각도가 중요하므로,
|
|
91
|
+
// 컴포넌트 스케일과 회전이 감안되지 않은 부모의 좌표로 변환하여 계산한다.
|
|
92
|
+
|
|
93
|
+
var point = component.transcoordC2S(e.offsetX, e.offsetY);
|
|
94
|
+
point = component.transcoordS2P(point.x, point.y);
|
|
95
|
+
var rotatePoint = component.rotatePoint;
|
|
96
|
+
var oldTheta = component.get('rotation') || 0;
|
|
97
|
+
var newTheta = Math.atan((rotatePoint.y - point.y) / (rotatePoint.x - point.x));
|
|
98
|
+
newTheta = rotatePoint.x >= point.x ? newTheta - THETA_90 : THETA_90 + newTheta;
|
|
99
|
+
var deltaTheta = newTheta - oldTheta;
|
|
100
|
+
this.layer.selected.filter(c => c.rotatable).forEach((c, i) => {
|
|
101
|
+
/* 최초의 바운드로 되돌려놓고 다시 계산한다. */
|
|
102
|
+
let rotation = ((c.get('rotation') || 0) + deltaTheta) % THETA_360;
|
|
103
|
+
c.set('rotation', c.adjustRotation(rotation, e.shiftKey));
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
ondragend(e) {
|
|
107
|
+
var {
|
|
108
|
+
component,
|
|
109
|
+
rotations
|
|
110
|
+
} = this.active;
|
|
111
|
+
|
|
112
|
+
// var command = new CommandChange({
|
|
113
|
+
// changes: this.layer.selected.filter(c => {
|
|
114
|
+
// return c.rotatable
|
|
115
|
+
// }).map((c, i) => {
|
|
116
|
+
// return {
|
|
117
|
+
// component: c,
|
|
118
|
+
// before: {
|
|
119
|
+
// rotation: rotations[i]
|
|
120
|
+
// },
|
|
121
|
+
// after: {
|
|
122
|
+
// rotation: c.get('rotation')
|
|
123
|
+
// }
|
|
124
|
+
// }
|
|
125
|
+
// })
|
|
126
|
+
// })
|
|
127
|
+
|
|
128
|
+
/* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */
|
|
129
|
+
// component.app.commander.execute(command, false)
|
|
130
|
+
component.app.commander.execute(null, false);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.default = Rotator;
|
|
134
|
+
//# sourceMappingURL=rotator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotator.js","names":["ROTATION_HANDLE_RADIUS","ROTATION_HANDLE_HEIGHT","THETA_360","Math","PI","THETA_90","getRotateHandle","component","scale","bounds","x","left","width","y","top","Rotator","constructor","layer","reset","active","selected","contains","rotatable","handle","abs","draw","context","beginPath","rh","lineWidth","moveTo","lineTo","strokeStyle","stroke","ellipse","fillStyle","fill","toFill","onmousedown","e","ondragstart","start_rotation","get","rotations","filter","c","map","ondragmove","point","transcoordC2S","offsetX","offsetY","transcoordS2P","rotatePoint","oldTheta","newTheta","atan","deltaTheta","forEach","i","rotation","set","adjustRotation","shiftKey","ondragend","app","commander","execute","exports","default"],"sources":["../../../src/layer/modeler/rotator.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nconst ROTATION_HANDLE_RADIUS = 4\nconst ROTATION_HANDLE_HEIGHT = 20\n\nconst THETA_360 = Math.PI * 2\nconst THETA_90 = Math.PI / 2\n\n/*\n * 컴포넌트의 회전 핸들은 컴포넌트 바운드의 탑라인 중앙 상단에 위치한다.\n */\nfunction getRotateHandle(component, scale) {\n var bounds = component.bounds\n\n return {\n x: bounds.left + bounds.width / 2,\n y: bounds.top - ROTATION_HANDLE_HEIGHT / scale.y\n }\n}\n\nexport default class Rotator {\n constructor(layer) {\n this.layer = layer\n }\n\n reset() {\n // 현재 선택된 로테이트 핸들의 정보\n this.active = null\n }\n\n get selected() {\n return this.layer.selected\n }\n\n contains(x, y, component, scale) {\n if (!component.rotatable) return false\n\n // 좌표가 회전 핸들에 포함되어있는지 확인함.\n var handle = getRotateHandle(component, scale)\n\n if (\n Math.abs(x - handle.x) <= ROTATION_HANDLE_RADIUS / scale.x &&\n Math.abs(y - handle.y) <= ROTATION_HANDLE_RADIUS / scale.y\n ) {\n // 현재 선택된 로테이트 핸들의 정보\n this.active = { component }\n return true\n }\n\n return false\n }\n\n draw(context, component, scale) {\n if (!component.rotatable) return\n\n context.beginPath()\n\n var rh = getRotateHandle(component, scale)\n context.lineWidth = 1.5 / scale.x\n context.moveTo(rh.x, rh.y + ROTATION_HANDLE_HEIGHT / scale.y)\n context.lineTo(rh.x, rh.y)\n\n context.strokeStyle = '#656565'\n context.stroke()\n\n context.beginPath()\n context.ellipse(\n rh.x,\n rh.y,\n ROTATION_HANDLE_RADIUS / scale.x,\n ROTATION_HANDLE_RADIUS / scale.y,\n 0,\n 0,\n THETA_360,\n true\n )\n\n context.stroke()\n context.fillStyle = '#fff'\n context.fill()\n\n var active = this.active\n\n if (active && active.component === component) {\n context.strokeStyle = '#fa7703'\n context.stroke()\n\n if (active.toFill) {\n context.fillStyle = '#ffb80c'\n context.fill()\n }\n }\n }\n\n onmousedown(e) {\n this.active.toFill = true\n }\n\n ondragstart(e) {\n var active = this.active\n var component = active.component\n\n active.start_rotation = active.component.get('rotation')\n active.rotations = this.layer.selected.filter(c => c.rotatable).map(c => c.get('rotation'))\n }\n\n ondragmove(e) {\n /* 로테이트 핸들의 이동을 처리한다. */\n var { component } = this.active\n\n // 회전을 시키려는 대상 컴포넌트의 중심점과 이벤트 포인트와의 각도가 중요하므로,\n // 컴포넌트 스케일과 회전이 감안되지 않은 부모의 좌표로 변환하여 계산한다.\n\n var point = component.transcoordC2S(e.offsetX, e.offsetY)\n point = component.transcoordS2P(point.x, point.y)\n\n var rotatePoint = component.rotatePoint\n\n var oldTheta = component.get('rotation') || 0\n var newTheta = Math.atan((rotatePoint.y - point.y) / (rotatePoint.x - point.x))\n newTheta = rotatePoint.x >= point.x ? newTheta - THETA_90 : THETA_90 + newTheta\n\n var deltaTheta = newTheta - oldTheta\n\n this.layer.selected\n .filter(c => c.rotatable)\n .forEach((c, i) => {\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. */\n let rotation = ((c.get('rotation') || 0) + deltaTheta) % THETA_360\n c.set('rotation', c.adjustRotation(rotation, e.shiftKey))\n })\n }\n\n ondragend(e) {\n var { component, rotations } = this.active\n\n // var command = new CommandChange({\n // changes: this.layer.selected.filter(c => {\n // return c.rotatable\n // }).map((c, i) => {\n // return {\n // component: c,\n // before: {\n // rotation: rotations[i]\n // },\n // after: {\n // rotation: c.get('rotation')\n // }\n // }\n // })\n // })\n\n /* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */\n // component.app.commander.execute(command, false)\n component.app.commander.execute(null, false)\n }\n}\n"],"mappings":"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","ignoreList":[]}
|