@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,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.transcoordC2S = transcoordC2S;
|
|
7
|
+
exports.transcoordP2S = transcoordP2S;
|
|
8
|
+
exports.transcoordR = transcoordR;
|
|
9
|
+
exports.transcoordRR = transcoordRR;
|
|
10
|
+
exports.transcoordS2C = transcoordS2C;
|
|
11
|
+
exports.transcoordS2O = transcoordS2O;
|
|
12
|
+
exports.transcoordS2P = transcoordS2P;
|
|
13
|
+
exports.transcoordS2T = transcoordS2T;
|
|
14
|
+
exports.transcoordS2TR = transcoordS2TR;
|
|
15
|
+
exports.transcoordT2P = transcoordT2P;
|
|
16
|
+
exports.transcoordT2S = transcoordT2S;
|
|
17
|
+
/*
|
|
18
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* 좌표 변환 API.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* transcoordR은 부모 기준의 좌표를, 자신의 회전각을 감안하여 부모의 원점을 이동시킨 후의 좌표값으로 변환하는 기능.
|
|
27
|
+
* (기존의 transcoord와 동일함 - R은 Rotation을 의미함.)
|
|
28
|
+
*/
|
|
29
|
+
function transcoordR(x, y, rotatePoint = {
|
|
30
|
+
x: 0,
|
|
31
|
+
y: 0
|
|
32
|
+
}, rotation = 0, scale = {
|
|
33
|
+
x: 1,
|
|
34
|
+
y: 1
|
|
35
|
+
}) {
|
|
36
|
+
const cos = Math.cos(-rotation);
|
|
37
|
+
const sin = Math.sin(-rotation);
|
|
38
|
+
x -= rotatePoint.x;
|
|
39
|
+
y -= rotatePoint.y;
|
|
40
|
+
return {
|
|
41
|
+
x: (x * cos - y * sin + rotatePoint.x) / scale.x,
|
|
42
|
+
y: (x * sin + y * cos + rotatePoint.y) / scale.y
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* transcoordRR은 자신의 회전각을 감안하여 부모의 원점을 이동시킨 상태의 좌표값을 (반대로 회전시켜서)
|
|
48
|
+
* 부모 원점 기준의 좌표로 변환하는 기능.
|
|
49
|
+
* (기존의 reverseTranscoord와 동일함 - RR은 Reverse Rotation을 의미함.)
|
|
50
|
+
*/
|
|
51
|
+
function transcoordRR(x, y, rotatePoint = {
|
|
52
|
+
x: 0,
|
|
53
|
+
y: 0
|
|
54
|
+
}, rotation = 0, scale = {
|
|
55
|
+
x: 1,
|
|
56
|
+
y: 1
|
|
57
|
+
}) {
|
|
58
|
+
const cos = Math.cos(rotation);
|
|
59
|
+
const sin = Math.sin(rotation);
|
|
60
|
+
x -= rotatePoint.x;
|
|
61
|
+
y -= rotatePoint.y;
|
|
62
|
+
return {
|
|
63
|
+
x: (x * cos - y * sin + rotatePoint.x) * scale.x,
|
|
64
|
+
y: (x * sin + y * cos + rotatePoint.y) * scale.y
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* transcoordP2S는 부모(Parent) 컨테이너 기준의 논리좌표를 현재 컴포넌트(Self) 기준의 논리좌표로 변환한다.
|
|
70
|
+
*/
|
|
71
|
+
function transcoordP2S(x, y, rotatePoint) {
|
|
72
|
+
// 1. 최상위 루트 컴포넌트이면, 변환하지 않는다.
|
|
73
|
+
if (!this.parent) return {
|
|
74
|
+
x,
|
|
75
|
+
y
|
|
76
|
+
};
|
|
77
|
+
const {
|
|
78
|
+
rotation = 0,
|
|
79
|
+
scale = {
|
|
80
|
+
x: 1,
|
|
81
|
+
y: 1
|
|
82
|
+
}
|
|
83
|
+
} = this.state;
|
|
84
|
+
|
|
85
|
+
// 2. Canvas를 가진 레이어 모델이면
|
|
86
|
+
if (this.isLayer()) {
|
|
87
|
+
const translate = this.state.translate;
|
|
88
|
+
let point = transcoordR(x, y, translate, rotation, scale);
|
|
89
|
+
if (translate) {
|
|
90
|
+
point.x -= translate.x / scale.x;
|
|
91
|
+
point.y -= translate.y / scale.y;
|
|
92
|
+
}
|
|
93
|
+
return point;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 3. 그 외..
|
|
97
|
+
rotatePoint = rotatePoint || this.rotatePoint;
|
|
98
|
+
const point = transcoordR(x, y, rotatePoint, rotation, scale);
|
|
99
|
+
|
|
100
|
+
// 4. 컴포넌트별 스케일에 대한 처리
|
|
101
|
+
// TODO 컴포넌트별 스케이 처리가 미진함. 정리할 것.(또는, 지원하지 말것.)
|
|
102
|
+
return {
|
|
103
|
+
x: point.x + (rotatePoint.x - rotatePoint.x / scale.x),
|
|
104
|
+
y: point.y + (rotatePoint.y - rotatePoint.y / scale.y)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
* transcoordS2P는 현재 컴포넌트(Self) 기준의 논리좌표를 부모(Parent) 컨테이너 기준의 논리좌표로 변환한다.
|
|
110
|
+
*/
|
|
111
|
+
function transcoordS2P(x, y, rotatePoint) {
|
|
112
|
+
// 1. 최상위 루트 컴포넌트이면, 변환하지 않는다.
|
|
113
|
+
if (!this.parent) return {
|
|
114
|
+
x,
|
|
115
|
+
y
|
|
116
|
+
};
|
|
117
|
+
let {
|
|
118
|
+
rotation = 0,
|
|
119
|
+
scale = {
|
|
120
|
+
x: 1,
|
|
121
|
+
y: 1
|
|
122
|
+
}
|
|
123
|
+
} = this.state;
|
|
124
|
+
|
|
125
|
+
// 2. Canvas를 가진 레이어 모델이면
|
|
126
|
+
if (this.isLayer()) {
|
|
127
|
+
const translate = this.state.translate;
|
|
128
|
+
let point = transcoordRR(x, y, undefined, rotation + this._delta.theta, scale);
|
|
129
|
+
if (translate) {
|
|
130
|
+
point.x += translate.x;
|
|
131
|
+
point.y += translate.y;
|
|
132
|
+
}
|
|
133
|
+
return point;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// 3. 그 외..
|
|
137
|
+
rotatePoint = rotatePoint || this.rotatePoint;
|
|
138
|
+
const {
|
|
139
|
+
theta = 0,
|
|
140
|
+
tx = 0,
|
|
141
|
+
ty = 0,
|
|
142
|
+
sx = 1,
|
|
143
|
+
sy = 1
|
|
144
|
+
} = this._delta || {};
|
|
145
|
+
rotatePoint = {
|
|
146
|
+
x: rotatePoint.x + tx,
|
|
147
|
+
y: rotatePoint.y + ty
|
|
148
|
+
};
|
|
149
|
+
scale = {
|
|
150
|
+
x: scale.x * sx,
|
|
151
|
+
y: scale.y * sy
|
|
152
|
+
};
|
|
153
|
+
const point = transcoordRR(x + tx, y + ty, rotatePoint, rotation + theta, scale);
|
|
154
|
+
|
|
155
|
+
// 4. 컴포넌트별 스케일에 대한 처리
|
|
156
|
+
// TODO 컴포넌트별 스케일 처리가 미진함. 정리할 것.(또는, 지원하지 말것.)
|
|
157
|
+
return {
|
|
158
|
+
x: point.x - (rotatePoint.x * scale.x - rotatePoint.x),
|
|
159
|
+
y: point.y - (rotatePoint.y * scale.y - rotatePoint.y)
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
* transcoordS2TR는 현재 컴포넌트(Self) 기준의 논리좌표를 TOP 모델 컨테이너 기준의 논리좌표로 변환한 후에,
|
|
165
|
+
* 루트의 회전까지만 감안한다.
|
|
166
|
+
* 현재 컴포넌트 기준의 논리좌표에 해당하는 포인트가 화면상의 특정 영역에 포함되는지 비교할 때 사용할 수 있다.
|
|
167
|
+
*/
|
|
168
|
+
function transcoordS2TR(x, y, top) {
|
|
169
|
+
top = top || this.rootModel;
|
|
170
|
+
const point = this.transcoordS2T(x, y, top);
|
|
171
|
+
return transcoordRR(point.x, point.y, undefined, (top.get('rotation') || 0) + top._delta.theta);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/*
|
|
175
|
+
* transcoordS2T는 현재 컴포넌트(Self) 기준의 논리좌표를 TOP 모델 컨테이너 기준의 논리좌표로 변환한다.
|
|
176
|
+
*/
|
|
177
|
+
function transcoordS2T(x, y, top) {
|
|
178
|
+
// 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.
|
|
179
|
+
// 2. 주어진 좌표에 대해서 자신 컴포넌트의 회전과 스케일을 감안한 리버스를 수행하여 부모 컨테이너의 TOP-LEFT를 원점으로 하는 좌표로 변환한다.
|
|
180
|
+
// 3. 부모 컨테이너 기준의 좌표로 변환하기 위해서 부모의 바운드의 TOP-LEFT만큼의 시프트를 해준다.
|
|
181
|
+
// 4. 시프트된 포인트에 대해서 부모 컨테이너의 리버스를 수행한 결과를 TOP 바로 하위까지 반복한다.
|
|
182
|
+
|
|
183
|
+
top = top || this.rootModel;
|
|
184
|
+
const ancestors = [];
|
|
185
|
+
for (let parent = this.parent; parent && parent !== top; parent = parent.parent) ancestors.push(parent);
|
|
186
|
+
let point = this.transcoordS2P(x, y);
|
|
187
|
+
ancestors.forEach(parent => {
|
|
188
|
+
const {
|
|
189
|
+
scale
|
|
190
|
+
} = parent.model;
|
|
191
|
+
const bounds = parent.bounds;
|
|
192
|
+
if (scale) {
|
|
193
|
+
/* TODO 스케일이 있는 경우에 대해서 구현하시오. 아래 로직은 맞지 않음 */
|
|
194
|
+
const rotatePoint = parent.rotatePoint;
|
|
195
|
+
point.x += (rotatePoint.x - bounds.left) * scale.x;
|
|
196
|
+
point.y += (rotatePoint.y - bounds.top) * scale.y;
|
|
197
|
+
} else {
|
|
198
|
+
point.x += bounds.left;
|
|
199
|
+
point.y += bounds.top;
|
|
200
|
+
}
|
|
201
|
+
point = parent.transcoordS2P(point.x, point.y);
|
|
202
|
+
});
|
|
203
|
+
return point;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/*
|
|
207
|
+
* transcoordT2P는 TOP 모델 컨테이너 기준의 논리좌표를 부모 컴포넌트(Parent) 기준의 논리좌표로 변환한다.
|
|
208
|
+
*/
|
|
209
|
+
function transcoordT2P(x, y, top) {
|
|
210
|
+
// 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.
|
|
211
|
+
// 2. TOP 모델 컨테이너의 차상위 조상에 대한 트랜스코드를 수행한다.
|
|
212
|
+
// 3. 변환된 좌표에 차상위 조상의 TOP-LEFT 좌표 시프트를 수행한다.
|
|
213
|
+
top = top || this.rootModel;
|
|
214
|
+
const ancestors = [];
|
|
215
|
+
for (let parent = this.parent; parent && parent !== top; parent = parent.parent) ancestors.splice(0, 0, parent);
|
|
216
|
+
let point = {
|
|
217
|
+
x,
|
|
218
|
+
y
|
|
219
|
+
};
|
|
220
|
+
ancestors.forEach(parent => {
|
|
221
|
+
const {
|
|
222
|
+
scale
|
|
223
|
+
} = parent.model;
|
|
224
|
+
point = parent.transcoordP2S(point.x, point.y);
|
|
225
|
+
const bounds = parent.bounds;
|
|
226
|
+
if (scale) {
|
|
227
|
+
/* TODO 스케일이 있는 경우에 대해서 구현하시오. 아래 로직은 맞지 않음 */
|
|
228
|
+
const rotatePoint = parent.rotatePoint;
|
|
229
|
+
point.x -= (rotatePoint.x - bounds.left) / scale.x;
|
|
230
|
+
point.y -= (rotatePoint.y - bounds.top) / scale.y;
|
|
231
|
+
} else {
|
|
232
|
+
point.x -= bounds.left;
|
|
233
|
+
point.y -= bounds.top;
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
return point;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
* transcoordT2S는 TOP 모델 컨테이너 기준의 논리좌표를 현재 컴포넌트(Self) 기준의 논리좌표로 변환한다.
|
|
241
|
+
*/
|
|
242
|
+
function transcoordT2S(x, y, top) {
|
|
243
|
+
// 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.
|
|
244
|
+
// 2. TOP 모델 컨테이너의 차상위 조상에 대한 트랜스코드를 수행한다.
|
|
245
|
+
// 3. 변환된 좌표에 차상위 조상의 TOP-LEFT 좌표 시프트를 수행한다.
|
|
246
|
+
// 4. 이 과정을 컴포넌트 자신까지 트랜스코드를 반복한다.
|
|
247
|
+
const point = this.transcoordT2P(x, y, top);
|
|
248
|
+
return this.transcoordP2S(point.x, point.y);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/*
|
|
252
|
+
* transcoordL2L은 현재 컴포넌트(Self) 기준의 논리좌표를 대상 컴포넌트(Other)의 논리좌표로 변환한다.
|
|
253
|
+
*/
|
|
254
|
+
function transcoordS2O(x, y, to) {
|
|
255
|
+
// 1. 현재컴포넌트의 좌표를 탑모델의 좌표로 변환한다.
|
|
256
|
+
// 2. 변환된 좌표를 to 컴포넌트의 논리좌표로 변환한다.
|
|
257
|
+
// TODO 만일 두 컴포넌트가 직계 관계인 경우에는 좀 더 빠른 변환 로직을 찾을 수 있을 것 같다.
|
|
258
|
+
const top = this.rootModel;
|
|
259
|
+
const point = this.transcoordS2T(x, y, top);
|
|
260
|
+
return to.transcoordT2S(point.x, point.y, top);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/*
|
|
264
|
+
* transcoordC2S은 캔바스의 좌표를 컴포넌트(Self)의 논리좌표로 변환한다.
|
|
265
|
+
*/
|
|
266
|
+
function transcoordC2S(x, y, top) {
|
|
267
|
+
// 1. 컴포넌트로부터 ROOT 컨테이너까지의 조상 계보를 구한다. (ROOT 컨테이너까지 구하면, TOP 모델(캔바스를 가진)까지 포함된다.)
|
|
268
|
+
// 2. 루트 컨테이너의 차상위 조상(캔바스를 포함한 TOP 모델)에 대한 트랜스코드를 수행한다.
|
|
269
|
+
// 3. 변환된 좌표에 transcoordT2S을 수행한다.
|
|
270
|
+
|
|
271
|
+
if (!top) {
|
|
272
|
+
top = this;
|
|
273
|
+
while (top && !top.isLayer()) top = top.parent;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* 캔바스와 디스플레이의 물리적인 상태를 고려한다. */
|
|
277
|
+
|
|
278
|
+
const {
|
|
279
|
+
translate = {
|
|
280
|
+
x: 0,
|
|
281
|
+
y: 0
|
|
282
|
+
},
|
|
283
|
+
scale = {
|
|
284
|
+
x: 1,
|
|
285
|
+
y: 1
|
|
286
|
+
},
|
|
287
|
+
rotation = 0
|
|
288
|
+
} = top.model;
|
|
289
|
+
let point = transcoordR(x, y, translate, rotation, scale);
|
|
290
|
+
if (translate) {
|
|
291
|
+
point.x -= translate.x / scale.x;
|
|
292
|
+
point.y -= translate.y / scale.y;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* 논리적인 좌표 변환을 진행한다. */
|
|
296
|
+
|
|
297
|
+
if (top === this) return point;
|
|
298
|
+
return this.transcoordT2S(point.x, point.y, top);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/*
|
|
302
|
+
* transcoordS2C는 컴포넌트(Self)의 논리좌표를 캔바스의 좌표로 변환한다.
|
|
303
|
+
*/
|
|
304
|
+
function transcoordS2C(x, y, top) {
|
|
305
|
+
// 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.
|
|
306
|
+
// 2. 변환된 좌표에 transcoordS2T를 수행한다.
|
|
307
|
+
// 3. 결과 좌표에 대해서 TOP 모델의 transcoordRR 수행한다.
|
|
308
|
+
|
|
309
|
+
if (!top) {
|
|
310
|
+
top = this;
|
|
311
|
+
while (top && !top.isLayer()) top = top.parent;
|
|
312
|
+
}
|
|
313
|
+
let point;
|
|
314
|
+
if (top !== this) point = this.transcoordS2T(x, y, top);else point = {
|
|
315
|
+
x,
|
|
316
|
+
y
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
/* 캔바스와 디스플레이의 물리적인 상태를 고려한다. */
|
|
320
|
+
|
|
321
|
+
const {
|
|
322
|
+
translate = {
|
|
323
|
+
x: 0,
|
|
324
|
+
y: 0
|
|
325
|
+
},
|
|
326
|
+
rotation = 0,
|
|
327
|
+
scale = {
|
|
328
|
+
x: 1,
|
|
329
|
+
y: 1
|
|
330
|
+
}
|
|
331
|
+
} = top.model;
|
|
332
|
+
point = transcoordRR(point.x, point.y, undefined, rotation + top._delta.theta, scale);
|
|
333
|
+
if (translate) {
|
|
334
|
+
point.x += translate.x;
|
|
335
|
+
point.y += translate.y;
|
|
336
|
+
}
|
|
337
|
+
return point;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=transcoord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcoord.js","names":["transcoordR","x","y","rotatePoint","rotation","scale","cos","Math","sin","transcoordRR","transcoordP2S","parent","state","isLayer","translate","point","transcoordS2P","undefined","_delta","theta","tx","ty","sx","sy","transcoordS2TR","top","rootModel","transcoordS2T","get","ancestors","push","forEach","model","bounds","left","transcoordT2P","splice","transcoordT2S","transcoordS2O","to","transcoordC2S","transcoordS2C"],"sources":["../../../src/components/geometry/transcoord.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\n/*\n * 좌표 변환 API.\n */\n\n/*\n * transcoordR은 부모 기준의 좌표를, 자신의 회전각을 감안하여 부모의 원점을 이동시킨 후의 좌표값으로 변환하는 기능.\n * (기존의 transcoord와 동일함 - R은 Rotation을 의미함.)\n */\nexport function transcoordR(x, y, rotatePoint = { x: 0, y: 0 }, rotation = 0, scale = { x: 1, y: 1 }) {\n const cos = Math.cos(-rotation)\n const sin = Math.sin(-rotation)\n x -= rotatePoint.x\n y -= rotatePoint.y\n\n return {\n x: (x * cos - y * sin + rotatePoint.x) / scale.x,\n y: (x * sin + y * cos + rotatePoint.y) / scale.y\n }\n}\n\n/*\n * transcoordRR은 자신의 회전각을 감안하여 부모의 원점을 이동시킨 상태의 좌표값을 (반대로 회전시켜서)\n * 부모 원점 기준의 좌표로 변환하는 기능.\n * (기존의 reverseTranscoord와 동일함 - RR은 Reverse Rotation을 의미함.)\n */\nexport function transcoordRR(x, y, rotatePoint = { x: 0, y: 0 }, rotation = 0, scale = { x: 1, y: 1 }) {\n const cos = Math.cos(rotation)\n const sin = Math.sin(rotation)\n x -= rotatePoint.x\n y -= rotatePoint.y\n\n return {\n x: (x * cos - y * sin + rotatePoint.x) * scale.x,\n y: (x * sin + y * cos + rotatePoint.y) * scale.y\n }\n}\n\n/*\n * transcoordP2S는 부모(Parent) 컨테이너 기준의 논리좌표를 현재 컴포넌트(Self) 기준의 논리좌표로 변환한다.\n */\nexport function transcoordP2S(x, y, rotatePoint) {\n // 1. 최상위 루트 컴포넌트이면, 변환하지 않는다.\n if (!this.parent) return { x, y }\n\n const { rotation = 0, scale = { x: 1, y: 1 } } = this.state\n\n // 2. Canvas를 가진 레이어 모델이면\n if (this.isLayer()) {\n const translate = this.state.translate\n\n let point = transcoordR(x, y, translate, rotation, scale)\n\n if (translate) {\n point.x -= translate.x / scale.x\n point.y -= translate.y / scale.y\n }\n\n return point\n }\n\n // 3. 그 외..\n rotatePoint = rotatePoint || this.rotatePoint\n\n const point = transcoordR(x, y, rotatePoint, rotation, scale)\n\n // 4. 컴포넌트별 스케일에 대한 처리\n // TODO 컴포넌트별 스케이 처리가 미진함. 정리할 것.(또는, 지원하지 말것.)\n return {\n x: point.x + (rotatePoint.x - rotatePoint.x / scale.x),\n y: point.y + (rotatePoint.y - rotatePoint.y / scale.y)\n }\n}\n\n/*\n * transcoordS2P는 현재 컴포넌트(Self) 기준의 논리좌표를 부모(Parent) 컨테이너 기준의 논리좌표로 변환한다.\n */\nexport function transcoordS2P(x, y, rotatePoint) {\n // 1. 최상위 루트 컴포넌트이면, 변환하지 않는다.\n if (!this.parent) return { x, y }\n\n let { rotation = 0, scale = { x: 1, y: 1 } } = this.state\n\n // 2. Canvas를 가진 레이어 모델이면\n if (this.isLayer()) {\n const translate = this.state.translate\n\n let point = transcoordRR(x, y, undefined, rotation + this._delta.theta, scale)\n\n if (translate) {\n point.x += translate.x\n point.y += translate.y\n }\n\n return point\n }\n\n // 3. 그 외..\n rotatePoint = rotatePoint || this.rotatePoint\n\n const { theta = 0, tx = 0, ty = 0, sx = 1, sy = 1 } = this._delta || {}\n\n rotatePoint = {\n x: rotatePoint.x + tx,\n y: rotatePoint.y + ty\n }\n\n scale = {\n x: scale.x * sx,\n y: scale.y * sy\n }\n\n const point = transcoordRR(x + tx, y + ty, rotatePoint, rotation + theta, scale)\n\n // 4. 컴포넌트별 스케일에 대한 처리\n // TODO 컴포넌트별 스케일 처리가 미진함. 정리할 것.(또는, 지원하지 말것.)\n return {\n x: point.x - (rotatePoint.x * scale.x - rotatePoint.x),\n y: point.y - (rotatePoint.y * scale.y - rotatePoint.y)\n }\n}\n\n/*\n * transcoordS2TR는 현재 컴포넌트(Self) 기준의 논리좌표를 TOP 모델 컨테이너 기준의 논리좌표로 변환한 후에,\n * 루트의 회전까지만 감안한다.\n * 현재 컴포넌트 기준의 논리좌표에 해당하는 포인트가 화면상의 특정 영역에 포함되는지 비교할 때 사용할 수 있다.\n */\nexport function transcoordS2TR(x, y, top) {\n top = top || this.rootModel\n const point = this.transcoordS2T(x, y, top)\n return transcoordRR(point.x, point.y, undefined, (top.get('rotation') || 0) + top._delta.theta)\n}\n\n/*\n * transcoordS2T는 현재 컴포넌트(Self) 기준의 논리좌표를 TOP 모델 컨테이너 기준의 논리좌표로 변환한다.\n */\nexport function transcoordS2T(x, y, top) {\n // 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.\n // 2. 주어진 좌표에 대해서 자신 컴포넌트의 회전과 스케일을 감안한 리버스를 수행하여 부모 컨테이너의 TOP-LEFT를 원점으로 하는 좌표로 변환한다.\n // 3. 부모 컨테이너 기준의 좌표로 변환하기 위해서 부모의 바운드의 TOP-LEFT만큼의 시프트를 해준다.\n // 4. 시프트된 포인트에 대해서 부모 컨테이너의 리버스를 수행한 결과를 TOP 바로 하위까지 반복한다.\n\n top = top || this.rootModel\n\n const ancestors = []\n\n for (let parent = this.parent; parent && parent !== top; parent = parent.parent) ancestors.push(parent)\n\n let point = this.transcoordS2P(x, y)\n\n ancestors.forEach(parent => {\n const { scale } = parent.model\n\n const bounds = parent.bounds\n\n if (scale) {\n /* TODO 스케일이 있는 경우에 대해서 구현하시오. 아래 로직은 맞지 않음 */\n const rotatePoint = parent.rotatePoint\n\n point.x += (rotatePoint.x - bounds.left) * scale.x\n point.y += (rotatePoint.y - bounds.top) * scale.y\n } else {\n point.x += bounds.left\n point.y += bounds.top\n }\n\n point = parent.transcoordS2P(point.x, point.y)\n })\n\n return point\n}\n\n/*\n * transcoordT2P는 TOP 모델 컨테이너 기준의 논리좌표를 부모 컴포넌트(Parent) 기준의 논리좌표로 변환한다.\n */\nexport function transcoordT2P(x, y, top) {\n // 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.\n // 2. TOP 모델 컨테이너의 차상위 조상에 대한 트랜스코드를 수행한다.\n // 3. 변환된 좌표에 차상위 조상의 TOP-LEFT 좌표 시프트를 수행한다.\n top = top || this.rootModel\n\n const ancestors = []\n\n for (let parent = this.parent; parent && parent !== top; parent = parent.parent) ancestors.splice(0, 0, parent)\n\n let point = { x, y }\n\n ancestors.forEach(parent => {\n const { scale } = parent.model\n\n point = parent.transcoordP2S(point.x, point.y)\n\n const bounds = parent.bounds\n\n if (scale) {\n /* TODO 스케일이 있는 경우에 대해서 구현하시오. 아래 로직은 맞지 않음 */\n const rotatePoint = parent.rotatePoint\n\n point.x -= (rotatePoint.x - bounds.left) / scale.x\n point.y -= (rotatePoint.y - bounds.top) / scale.y\n } else {\n point.x -= bounds.left\n point.y -= bounds.top\n }\n })\n\n return point\n}\n\n/*\n * transcoordT2S는 TOP 모델 컨테이너 기준의 논리좌표를 현재 컴포넌트(Self) 기준의 논리좌표로 변환한다.\n */\nexport function transcoordT2S(x, y, top) {\n // 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.\n // 2. TOP 모델 컨테이너의 차상위 조상에 대한 트랜스코드를 수행한다.\n // 3. 변환된 좌표에 차상위 조상의 TOP-LEFT 좌표 시프트를 수행한다.\n // 4. 이 과정을 컴포넌트 자신까지 트랜스코드를 반복한다.\n const point = this.transcoordT2P(x, y, top)\n\n return this.transcoordP2S(point.x, point.y)\n}\n\n/*\n * transcoordL2L은 현재 컴포넌트(Self) 기준의 논리좌표를 대상 컴포넌트(Other)의 논리좌표로 변환한다.\n */\nexport function transcoordS2O(x, y, to) {\n // 1. 현재컴포넌트의 좌표를 탑모델의 좌표로 변환한다.\n // 2. 변환된 좌표를 to 컴포넌트의 논리좌표로 변환한다.\n // TODO 만일 두 컴포넌트가 직계 관계인 경우에는 좀 더 빠른 변환 로직을 찾을 수 있을 것 같다.\n const top = this.rootModel\n\n const point = this.transcoordS2T(x, y, top)\n return to.transcoordT2S(point.x, point.y, top)\n}\n\n/*\n * transcoordC2S은 캔바스의 좌표를 컴포넌트(Self)의 논리좌표로 변환한다.\n */\nexport function transcoordC2S(x, y, top) {\n // 1. 컴포넌트로부터 ROOT 컨테이너까지의 조상 계보를 구한다. (ROOT 컨테이너까지 구하면, TOP 모델(캔바스를 가진)까지 포함된다.)\n // 2. 루트 컨테이너의 차상위 조상(캔바스를 포함한 TOP 모델)에 대한 트랜스코드를 수행한다.\n // 3. 변환된 좌표에 transcoordT2S을 수행한다.\n\n if (!top) {\n top = this\n while (top && !top.isLayer()) top = top.parent\n }\n\n /* 캔바스와 디스플레이의 물리적인 상태를 고려한다. */\n\n const { translate = { x: 0, y: 0 }, scale = { x: 1, y: 1 }, rotation = 0 } = top.model\n\n let point = transcoordR(x, y, translate, rotation, scale)\n\n if (translate) {\n point.x -= translate.x / scale.x\n point.y -= translate.y / scale.y\n }\n\n /* 논리적인 좌표 변환을 진행한다. */\n\n if (top === this) return point\n\n return this.transcoordT2S(point.x, point.y, top)\n}\n\n/*\n * transcoordS2C는 컴포넌트(Self)의 논리좌표를 캔바스의 좌표로 변환한다.\n */\nexport function transcoordS2C(x, y, top) {\n // 1. 자신으로부터 TOP 모델 컨테이너까지의 조상 계보를 구한다.\n // 2. 변환된 좌표에 transcoordS2T를 수행한다.\n // 3. 결과 좌표에 대해서 TOP 모델의 transcoordRR 수행한다.\n\n if (!top) {\n top = this\n while (top && !top.isLayer()) top = top.parent\n }\n\n let point\n if (top !== this) point = this.transcoordS2T(x, y, top)\n else point = { x, y }\n\n /* 캔바스와 디스플레이의 물리적인 상태를 고려한다. */\n\n const { translate = { x: 0, y: 0 }, rotation = 0, scale = { x: 1, y: 1 } } = top.model\n\n point = transcoordRR(point.x, point.y, undefined, rotation + top._delta.theta, scale)\n\n if (translate) {\n point.x += translate.x\n point.y += translate.y\n }\n\n return point\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = union;
|
|
7
|
+
/*
|
|
8
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* bounds 들의 총 합을 구하는 함수 */
|
|
12
|
+
|
|
13
|
+
function union(boundsList) {
|
|
14
|
+
var left, top, right, bottom;
|
|
15
|
+
boundsList.forEach(bounds => {
|
|
16
|
+
if (left === undefined) {
|
|
17
|
+
left = bounds.left;
|
|
18
|
+
top = bounds.top;
|
|
19
|
+
right = bounds.left + bounds.width;
|
|
20
|
+
bottom = bounds.top + bounds.height;
|
|
21
|
+
} else {
|
|
22
|
+
left = Math.min(bounds.left, left);
|
|
23
|
+
top = Math.min(bounds.top, top);
|
|
24
|
+
right = Math.max(bounds.left + bounds.width, right);
|
|
25
|
+
bottom = Math.max(bounds.top + bounds.height, bottom);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
left,
|
|
30
|
+
top,
|
|
31
|
+
width: right - left,
|
|
32
|
+
height: bottom - top
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=union.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.js","names":["union","boundsList","left","top","right","bottom","forEach","bounds","undefined","width","height","Math","min","max"],"sources":["../../../src/components/geometry/union.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\n/* bounds 들의 총 합을 구하는 함수 */\n\nexport default function union(boundsList) {\n var left, top, right, bottom\n\n boundsList.forEach(bounds => {\n if (left === undefined) {\n left = bounds.left\n top = bounds.top\n right = bounds.left + bounds.width\n bottom = bounds.top + bounds.height\n } else {\n left = Math.min(bounds.left, left)\n top = Math.min(bounds.top, top)\n right = Math.max(bounds.left + bounds.width, right)\n bottom = Math.max(bounds.top + bounds.height, bottom)\n }\n })\n\n return {\n left,\n top,\n width: right - left,\n height: bottom - top\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAEA;;AAEe,SAASA,KAAKA,CAACC,UAAU,EAAE;EACxC,IAAIC,IAAI,EAAEC,GAAG,EAAEC,KAAK,EAAEC,MAAM;EAE5BJ,UAAU,CAACK,OAAO,CAACC,MAAM,IAAI;IAC3B,IAAIL,IAAI,KAAKM,SAAS,EAAE;MACtBN,IAAI,GAAGK,MAAM,CAACL,IAAI;MAClBC,GAAG,GAAGI,MAAM,CAACJ,GAAG;MAChBC,KAAK,GAAGG,MAAM,CAACL,IAAI,GAAGK,MAAM,CAACE,KAAK;MAClCJ,MAAM,GAAGE,MAAM,CAACJ,GAAG,GAAGI,MAAM,CAACG,MAAM;IACrC,CAAC,MAAM;MACLR,IAAI,GAAGS,IAAI,CAACC,GAAG,CAACL,MAAM,CAACL,IAAI,EAAEA,IAAI,CAAC;MAClCC,GAAG,GAAGQ,IAAI,CAACC,GAAG,CAACL,MAAM,CAACJ,GAAG,EAAEA,GAAG,CAAC;MAC/BC,KAAK,GAAGO,IAAI,CAACE,GAAG,CAACN,MAAM,CAACL,IAAI,GAAGK,MAAM,CAACE,KAAK,EAAEL,KAAK,CAAC;MACnDC,MAAM,GAAGM,IAAI,CAACE,GAAG,CAACN,MAAM,CAACJ,GAAG,GAAGI,MAAM,CAACG,MAAM,EAAEL,MAAM,CAAC;IACvD;EACF,CAAC,CAAC;EAEF,OAAO;IACLH,IAAI;IACJC,GAAG;IACHM,KAAK,EAAEL,KAAK,GAAGF,IAAI;IACnBQ,MAAM,EAAEL,MAAM,GAAGF;EACnB,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _component = _interopRequireDefault(require("./component.js"));
|
|
8
|
+
var _htmlOverlayElement = _interopRequireDefault(require("./html-overlay-element.js"));
|
|
9
|
+
var _superGif = require("@wizpanda/super-gif");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/*
|
|
12
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const NATURE = {
|
|
16
|
+
mutable: false,
|
|
17
|
+
resizable: true,
|
|
18
|
+
rotatable: true,
|
|
19
|
+
properties: [{
|
|
20
|
+
type: 'image-selector',
|
|
21
|
+
label: 'src',
|
|
22
|
+
name: 'src'
|
|
23
|
+
}, {
|
|
24
|
+
type: 'checkbox',
|
|
25
|
+
label: 'play',
|
|
26
|
+
name: 'play'
|
|
27
|
+
}],
|
|
28
|
+
'value-property': 'src',
|
|
29
|
+
help: 'scene/component/gif-view'
|
|
30
|
+
};
|
|
31
|
+
const NOIMAGE_DATA_URI = 'data:image/gif;base64,R0lGODlhYABIAPcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKio+Pj5iYmKCgoKampqurq66urrCwsLGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrOzs7S0tLa2tre3t7m5ubu7u7+/v8DAwMHBwcPDw8XFxcfHx8vLy8/Pz9LS0tXV1dfX193d3eTk5Onp6fj4+Pz8/P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v///////////////////////////////////////////////////////////////////////////////yH5BAkAAPUAIf47R2VuZXJhdGVkIGJ5IGpzZ2lmIChodHRwczovL2dpdGh1Yi5jb20vYW50aW1hdHRlcjE1L2pzZ2lmLykALAAAAABgAEgAAAj+AGcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmR9VKqXMmypcuXMGPKnJkSIs2bOHPqZGlzp8+fQOv1DEq0KMyhRpMmRaq0KVCmTqPmhCq1qkyqLrFRSyYwGTVsVo1iZXmNa8Fk18ISHasSm1mDycCq/ck2JTWF1ObSfTjz7cFken3WFbow8M7BDA3rHOwXruKpfGXeTZg3qDVrUge7RRg3KLZjx+Q2HVyvLNy0QaMJjBaVdD2tZr2K/mmNIObRkR+n9AsYt0Pddg1WXppb8bWDx1CLLW74GcJnSl3TtDY8Zu2Et4tKl7n52eyWnxXvhl7+26jqrspbnlfIWjtz2gWPZV95neH8veU9NxZYfbfD3kFt99J6Bnmn0mQO9XfYezrVxxlmx0GUXIAM4hSeffsxBN1TFd5E4Ef3QZbfTg6CNJ5gHXJ3TEntLThiTh+KFCJNAqZU4kgAitjQTheepOBMNcZI0oQ6JpbTjSZtiNN2PZ400IxHpdiSc07G911M0iFZZYtAStnWilUeBGVLrlEZpmM0elmPlmfO8iOZXl4DZpsGEYmll2bSWWCXLwJXVY1+urhjoGEBSuiSah6K36CKtpZoo4s9CimielZq6aWYZqrpppx26umnoIZ6UkAAOw==';
|
|
32
|
+
class GifView extends _htmlOverlayElement.default {
|
|
33
|
+
async oncreate_element(div) {
|
|
34
|
+
var {
|
|
35
|
+
src,
|
|
36
|
+
play
|
|
37
|
+
} = this.state;
|
|
38
|
+
this.onchangesrc(src);
|
|
39
|
+
this.onchangeplay(play);
|
|
40
|
+
}
|
|
41
|
+
buildImg() {
|
|
42
|
+
/* clear first */
|
|
43
|
+
var div = this.element;
|
|
44
|
+
div.innerHTML = '';
|
|
45
|
+
var gif = document.createElement('img');
|
|
46
|
+
gif.style.width = '100%';
|
|
47
|
+
gif.style.height = '100%';
|
|
48
|
+
div.appendChild(gif);
|
|
49
|
+
return gif;
|
|
50
|
+
}
|
|
51
|
+
onchange(after, before) {
|
|
52
|
+
super.onchange(after, before);
|
|
53
|
+
'src' in after && this.onchangesrc(after.src);
|
|
54
|
+
'play' in after && this.onchangeplay(after.play);
|
|
55
|
+
}
|
|
56
|
+
setElementProperties(div) {}
|
|
57
|
+
onchangeplay(play) {
|
|
58
|
+
var superGif = this._superGif;
|
|
59
|
+
if (!superGif || !superGif.isReady()) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (play) {
|
|
63
|
+
superGif.play();
|
|
64
|
+
} else {
|
|
65
|
+
superGif.pause();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
onchangesrc(src) {
|
|
69
|
+
var gif = this.buildImg();
|
|
70
|
+
if (!src) {
|
|
71
|
+
src = NOIMAGE_DATA_URI;
|
|
72
|
+
}
|
|
73
|
+
gif.src = src;
|
|
74
|
+
gif.setAttribute('rel:animated_src', src);
|
|
75
|
+
gif.setAttribute('rel:auto_play', 0);
|
|
76
|
+
this._superGif = new _superGif.SuperGif(gif, {
|
|
77
|
+
autoPlay: false /* Without this setting, the first play's framerate is too fast. */
|
|
78
|
+
});
|
|
79
|
+
this._superGif.init();
|
|
80
|
+
for (const child of this.element.children) {
|
|
81
|
+
child.style.width = '100%';
|
|
82
|
+
child.style.height = '100%';
|
|
83
|
+
}
|
|
84
|
+
var canvas = this._superGif.getCanvas();
|
|
85
|
+
canvas.style.width = '100%';
|
|
86
|
+
canvas.style.height = '100%';
|
|
87
|
+
this._superGif.load(() => {
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
this._superGif.moveTo(0);
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* FIXME. this.play 는 컴포넌트의 getState()를 통해서 가져오게 되는데, 체크박스의 경우 문제가 있는 것 같다.
|
|
93
|
+
* 문제 해결 후 this.get("play") => this.play로 수정할 것.
|
|
94
|
+
*/
|
|
95
|
+
this.play && this._superGif.play();
|
|
96
|
+
}, 100);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
ondropfile(transfered, files) {
|
|
100
|
+
for (let i = 0; i < transfered.length; i++) {
|
|
101
|
+
if (/\.gif$/.test(transfered[i].name)) {
|
|
102
|
+
this.src = files[i];
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
get src() {
|
|
108
|
+
return this.getState('src');
|
|
109
|
+
}
|
|
110
|
+
set src(src) {
|
|
111
|
+
this.set('src', src);
|
|
112
|
+
}
|
|
113
|
+
get play() {
|
|
114
|
+
return this.getState('play');
|
|
115
|
+
}
|
|
116
|
+
set play(play) {
|
|
117
|
+
this.setState('play', play);
|
|
118
|
+
}
|
|
119
|
+
get nature() {
|
|
120
|
+
return NATURE;
|
|
121
|
+
}
|
|
122
|
+
get tagName() {
|
|
123
|
+
return 'div';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.default = GifView;
|
|
127
|
+
_component.default.register('gif-view', GifView);
|
|
128
|
+
//# sourceMappingURL=gif-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gif-view.js","names":["_component","_interopRequireDefault","require","_htmlOverlayElement","_superGif","e","__esModule","default","NATURE","mutable","resizable","rotatable","properties","type","label","name","help","NOIMAGE_DATA_URI","GifView","HTMLOverlayElement","oncreate_element","div","src","play","state","onchangesrc","onchangeplay","buildImg","element","innerHTML","gif","document","createElement","style","width","height","appendChild","onchange","after","before","setElementProperties","superGif","isReady","pause","setAttribute","SuperGif","autoPlay","init","child","children","canvas","getCanvas","load","setTimeout","moveTo","ondropfile","transfered","files","i","length","test","getState","set","setState","nature","tagName","exports","Component","register"],"sources":["../../src/components/gif-view.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'image-selector',\n label: 'src',\n name: 'src'\n },\n {\n type: 'checkbox',\n label: 'play',\n name: 'play'\n }\n ],\n 'value-property': 'src',\n help: 'scene/component/gif-view'\n}\n\nconst NOIMAGE_DATA_URI =\n 'data:image/gif;base64,R0lGODlhYABIAPcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKio+Pj5iYmKCgoKampqurq66urrCwsLGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrOzs7S0tLa2tre3t7m5ubu7u7+/v8DAwMHBwcPDw8XFxcfHx8vLy8/Pz9LS0tXV1dfX193d3eTk5Onp6fj4+Pz8/P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v///////////////////////////////////////////////////////////////////////////////yH5BAkAAPUAIf47R2VuZXJhdGVkIGJ5IGpzZ2lmIChodHRwczovL2dpdGh1Yi5jb20vYW50aW1hdHRlcjE1L2pzZ2lmLykALAAAAABgAEgAAAj+AGcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmR9VKqXMmypcuXMGPKnJkSIs2bOHPqZGlzp8+fQOv1DEq0KMyhRpMmRaq0KVCmTqPmhCq1qkyqLrFRSyYwGTVsVo1iZXmNa8Fk18ISHasSm1mDycCq/ck2JTWF1ObSfTjz7cFken3WFbow8M7BDA3rHOwXruKpfGXeTZg3qDVrUge7RRg3KLZjx+Q2HVyvLNy0QaMJjBaVdD2tZr2K/mmNIObRkR+n9AsYt0Pddg1WXppb8bWDx1CLLW74GcJnSl3TtDY8Zu2Et4tKl7n52eyWnxXvhl7+26jqrspbnlfIWjtz2gWPZV95neH8veU9NxZYfbfD3kFt99J6Bnmn0mQO9XfYezrVxxlmx0GUXIAM4hSeffsxBN1TFd5E4Ef3QZbfTg6CNJ5gHXJ3TEntLThiTh+KFCJNAqZU4kgAitjQTheepOBMNcZI0oQ6JpbTjSZtiNN2PZ400IxHpdiSc07G911M0iFZZYtAStnWilUeBGVLrlEZpmM0elmPlmfO8iOZXl4DZpsGEYmll2bSWWCXLwJXVY1+urhjoGEBSuiSah6K36CKtpZoo4s9CimielZq6aWYZqrpppx26umnoIZ6UkAAOw=='\n\nimport Component from './component.js'\nimport HTMLOverlayElement from './html-overlay-element.js'\n\nimport { SuperGif } from '@wizpanda/super-gif'\n\nexport default class GifView extends HTMLOverlayElement {\n async oncreate_element(div) {\n var { src, play } = this.state\n\n this.onchangesrc(src)\n this.onchangeplay(play)\n }\n\n buildImg() {\n /* clear first */\n var div = this.element\n div.innerHTML = ''\n\n var gif = document.createElement('img')\n gif.style.width = '100%'\n gif.style.height = '100%'\n\n div.appendChild(gif)\n\n return gif\n }\n\n onchange(after, before) {\n super.onchange(after, before)\n\n 'src' in after && this.onchangesrc(after.src)\n 'play' in after && this.onchangeplay(after.play)\n }\n\n setElementProperties(div) {}\n\n onchangeplay(play) {\n var superGif = this._superGif\n\n if (!superGif || !superGif.isReady()) {\n return\n }\n\n if (play) {\n superGif.play()\n } else {\n superGif.pause()\n }\n }\n\n onchangesrc(src) {\n var gif = this.buildImg()\n\n if (!src) {\n src = NOIMAGE_DATA_URI\n }\n\n gif.src = src\n gif.setAttribute('rel:animated_src', src)\n gif.setAttribute('rel:auto_play', 0)\n\n this._superGif = new SuperGif(gif, {\n autoPlay: false /* Without this setting, the first play's framerate is too fast. */\n })\n\n this._superGif.init()\n\n for (const child of this.element.children) {\n child.style.width = '100%'\n child.style.height = '100%'\n }\n\n var canvas = this._superGif.getCanvas()\n canvas.style.width = '100%'\n canvas.style.height = '100%'\n\n this._superGif.load(() => {\n setTimeout(() => {\n this._superGif.moveTo(0)\n\n /*\n * FIXME. this.play 는 컴포넌트의 getState()를 통해서 가져오게 되는데, 체크박스의 경우 문제가 있는 것 같다.\n * 문제 해결 후 this.get(\"play\") => this.play로 수정할 것.\n */\n this.play && this._superGif.play()\n }, 100)\n })\n }\n\n ondropfile(transfered, files) {\n for (let i = 0; i < transfered.length; i++) {\n if (/\\.gif$/.test(transfered[i].name)) {\n this.src = files[i]\n return\n }\n }\n }\n\n get src() {\n return this.getState('src')\n }\n\n set src(src) {\n this.set('src', src)\n }\n\n get play() {\n return this.getState('play')\n }\n\n set play(play) {\n this.setState('play', play)\n }\n\n get nature() {\n return NATURE\n }\n\n get tagName() {\n return 'div'\n }\n}\n\nComponent.register('gif-view', GifView)\n"],"mappings":"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","ignoreList":[]}
|