@hatiolab/things-scene 9.0.0-beta.36 → 9.0.0-beta.37
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/package.json +1 -1
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene.mjs +11 -11
- package/things-scene.mjs.map +1 -1
- package/.cursorignore +0 -62
- package/.prettierrc +0 -21
- package/assets/icon-audio.png +0 -0
- package/assets/icon-gif-viewer.png +0 -0
- package/assets/images/spinner.png +0 -0
- package/babel.config.js +0 -23
- package/db.sqlite +0 -0
- package/dist/animation/animate.js +0 -63
- package/dist/animation/animate.js.map +0 -1
- package/dist/animation/animations/animation.js +0 -122
- package/dist/animation/animations/animation.js.map +0 -1
- package/dist/animation/animations/fade.js +0 -28
- package/dist/animation/animations/fade.js.map +0 -1
- package/dist/animation/animations/heartbeat.js +0 -28
- package/dist/animation/animations/heartbeat.js.map +0 -1
- package/dist/animation/animations/moving.js +0 -24
- package/dist/animation/animations/moving.js.map +0 -1
- package/dist/animation/animations/outline.js +0 -47
- package/dist/animation/animations/outline.js.map +0 -1
- package/dist/animation/animations/rotation.js +0 -22
- package/dist/animation/animations/rotation.js.map +0 -1
- package/dist/animation/animations/vibration.js +0 -31
- package/dist/animation/animations/vibration.js.map +0 -1
- package/dist/animation/compile.js +0 -31
- package/dist/animation/compile.js.map +0 -1
- package/dist/animation/delta.js +0 -51
- package/dist/animation/delta.js.map +0 -1
- package/dist/animation/index.js +0 -14
- package/dist/animation/index.js.map +0 -1
- package/dist/command/command-change.js +0 -33
- package/dist/command/command-change.js.map +0 -1
- package/dist/command/command-migrate.js +0 -103
- package/dist/command/command-migrate.js.map +0 -1
- package/dist/command/command.js +0 -18
- package/dist/command/command.js.map +0 -1
- package/dist/command/snapshot-commander.js +0 -84
- package/dist/command/snapshot-commander.js.map +0 -1
- package/dist/components/anchor/anchor.js +0 -105
- package/dist/components/anchor/anchor.js.map +0 -1
- package/dist/components/anchor/ellipse-anchors.js +0 -53
- package/dist/components/anchor/ellipse-anchors.js.map +0 -1
- package/dist/components/anchor/rect-anchors.js +0 -53
- package/dist/components/anchor/rect-anchors.js.map +0 -1
- package/dist/components/audio.js +0 -154
- package/dist/components/audio.js.map +0 -1
- package/dist/components/cloud.js +0 -44
- package/dist/components/cloud.js.map +0 -1
- package/dist/components/component.js +0 -1086
- package/dist/components/component.js.map +0 -1
- package/dist/components/container-abstract.js +0 -387
- package/dist/components/container-abstract.js.map +0 -1
- package/dist/components/container.js +0 -331
- package/dist/components/container.js.map +0 -1
- package/dist/components/data/data-mapping.js +0 -82
- package/dist/components/data/data-mapping.js.map +0 -1
- package/dist/components/data/data.js +0 -166
- package/dist/components/data/data.js.map +0 -1
- package/dist/components/data/evaluator.js +0 -103
- package/dist/components/data/evaluator.js.map +0 -1
- package/dist/components/donut.js +0 -104
- package/dist/components/donut.js.map +0 -1
- package/dist/components/drawer/draw-image-pendable.js +0 -20
- package/dist/components/drawer/draw-image-pendable.js.map +0 -1
- package/dist/components/drawer/effect.js +0 -19
- package/dist/components/drawer/effect.js.map +0 -1
- package/dist/components/drawer/fill.js +0 -228
- package/dist/components/drawer/fill.js.map +0 -1
- package/dist/components/drawer/format.js +0 -115
- package/dist/components/drawer/format.js.map +0 -1
- package/dist/components/drawer/line.js +0 -191
- package/dist/components/drawer/line.js.map +0 -1
- package/dist/components/drawer/stroke.js +0 -62
- package/dist/components/drawer/stroke.js.map +0 -1
- package/dist/components/drawer/text-wrapper.js +0 -51
- package/dist/components/drawer/text-wrapper.js.map +0 -1
- package/dist/components/drawer/text.js +0 -269
- package/dist/components/drawer/text.js.map +0 -1
- package/dist/components/ellipse.js +0 -110
- package/dist/components/ellipse.js.map +0 -1
- package/dist/components/file/ondropfile.js +0 -19
- package/dist/components/file/ondropfile.js.map +0 -1
- package/dist/components/fit/fit.js +0 -137
- package/dist/components/fit/fit.js.map +0 -1
- package/dist/components/geometry/transcoord.js +0 -339
- package/dist/components/geometry/transcoord.js.map +0 -1
- package/dist/components/geometry/union.js +0 -35
- package/dist/components/geometry/union.js.map +0 -1
- package/dist/components/gif-view.js +0 -128
- package/dist/components/gif-view.js.map +0 -1
- package/dist/components/global-ref.js +0 -154
- package/dist/components/global-ref.js.map +0 -1
- package/dist/components/group.js +0 -171
- package/dist/components/group.js.map +0 -1
- package/dist/components/html/elements.js +0 -24
- package/dist/components/html/elements.js.map +0 -1
- package/dist/components/html/fill.js +0 -126
- package/dist/components/html/fill.js.map +0 -1
- package/dist/components/html/reposition.js +0 -119
- package/dist/components/html/reposition.js.map +0 -1
- package/dist/components/html/shadow.js +0 -24
- package/dist/components/html/shadow.js.map +0 -1
- package/dist/components/html-overlay-container.js +0 -27
- package/dist/components/html-overlay-container.js.map +0 -1
- package/dist/components/html-overlay-element.js +0 -22
- package/dist/components/html-overlay-element.js.map +0 -1
- package/dist/components/image-view.js +0 -193
- package/dist/components/image-view.js.map +0 -1
- package/dist/components/index.js +0 -231
- package/dist/components/index.js.map +0 -1
- package/dist/components/info-window.js +0 -416
- package/dist/components/info-window.js.map +0 -1
- package/dist/components/line.js +0 -374
- package/dist/components/line.js.map +0 -1
- package/dist/components/local-ref.js +0 -114
- package/dist/components/local-ref.js.map +0 -1
- package/dist/components/mixins/connectable.js +0 -128
- package/dist/components/mixins/connectable.js.map +0 -1
- package/dist/components/mixins/data-source.js +0 -34
- package/dist/components/mixins/data-source.js.map +0 -1
- package/dist/components/mixins/html-element.js +0 -107
- package/dist/components/mixins/html-element.js.map +0 -1
- package/dist/components/mixins/move-handle.js +0 -73
- package/dist/components/mixins/move-handle.js.map +0 -1
- package/dist/components/mixins/rect-path.js +0 -113
- package/dist/components/mixins/rect-path.js.map +0 -1
- package/dist/components/mixins/value-holder.js +0 -81
- package/dist/components/mixins/value-holder.js.map +0 -1
- package/dist/components/mutater/bounds.js +0 -68
- package/dist/components/mutater/bounds.js.map +0 -1
- package/dist/components/mutater/path.js +0 -73
- package/dist/components/mutater/path.js.map +0 -1
- package/dist/components/ortholine.js +0 -763
- package/dist/components/ortholine.js.map +0 -1
- package/dist/components/outline/ellipse-outline.js +0 -23
- package/dist/components/outline/ellipse-outline.js.map +0 -1
- package/dist/components/outline/path-outline.js +0 -48
- package/dist/components/outline/path-outline.js.map +0 -1
- package/dist/components/path.js +0 -49
- package/dist/components/path.js.map +0 -1
- package/dist/components/polygon.js +0 -91
- package/dist/components/polygon.js.map +0 -1
- package/dist/components/polyline.js +0 -114
- package/dist/components/polyline.js.map +0 -1
- package/dist/components/popup.js +0 -160
- package/dist/components/popup.js.map +0 -1
- package/dist/components/rect.js +0 -72
- package/dist/components/rect.js.map +0 -1
- package/dist/components/retention/retention-manager.js +0 -81
- package/dist/components/retention/retention-manager.js.map +0 -1
- package/dist/components/root-container.js +0 -519
- package/dist/components/root-container.js.map +0 -1
- package/dist/components/ruler.js +0 -103
- package/dist/components/ruler.js.map +0 -1
- package/dist/components/shape.js +0 -97
- package/dist/components/shape.js.map +0 -1
- package/dist/components/star.js +0 -103
- package/dist/components/star.js.map +0 -1
- package/dist/components/text/substitutor.js +0 -92
- package/dist/components/text/substitutor.js.map +0 -1
- package/dist/components/text.js +0 -21
- package/dist/components/text.js.map +0 -1
- package/dist/components/triangle.js +0 -92
- package/dist/components/triangle.js.map +0 -1
- package/dist/const.js +0 -71
- package/dist/const.js.map +0 -1
- package/dist/core/collection.js +0 -28
- package/dist/core/collection.js.map +0 -1
- package/dist/core/debug.js +0 -12
- package/dist/core/debug.js.map +0 -1
- package/dist/core/deep-equals.js +0 -112
- package/dist/core/deep-equals.js.map +0 -1
- package/dist/core/dom-to-image.js +0 -617
- package/dist/core/dom-to-image.js.map +0 -1
- package/dist/core/event.js +0 -205
- package/dist/core/event.js.map +0 -1
- package/dist/core/index.js +0 -21
- package/dist/core/index.js.map +0 -1
- package/dist/core/list.js +0 -87
- package/dist/core/list.js.map +0 -1
- package/dist/core/logger.js +0 -29
- package/dist/core/logger.js.map +0 -1
- package/dist/core/memoize.js +0 -40
- package/dist/core/memoize.js.map +0 -1
- package/dist/core/mixin.js +0 -26
- package/dist/core/mixin.js.map +0 -1
- package/dist/core/obj-accessor.js +0 -26
- package/dist/core/obj-accessor.js.map +0 -1
- package/dist/core/reference-map.js +0 -147
- package/dist/core/reference-map.js.map +0 -1
- package/dist/core/round-rect.js +0 -62
- package/dist/core/round-rect.js.map +0 -1
- package/dist/core/safe-round.js +0 -10
- package/dist/core/safe-round.js.map +0 -1
- package/dist/core/script-loader.js +0 -148
- package/dist/core/script-loader.js.map +0 -1
- package/dist/core/snapshot-taker.js +0 -59
- package/dist/core/snapshot-taker.js.map +0 -1
- package/dist/core/stack.js +0 -18
- package/dist/core/stack.js.map +0 -1
- package/dist/core/timecapsule.js +0 -88
- package/dist/core/timecapsule.js.map +0 -1
- package/dist/core/utils.js +0 -309
- package/dist/core/utils.js.map +0 -1
- package/dist/decorator/anchors-decorator.js +0 -53
- package/dist/decorator/anchors-decorator.js.map +0 -1
- package/dist/decorator/bouncing-arrow-decorator.js +0 -52
- package/dist/decorator/bouncing-arrow-decorator.js.map +0 -1
- package/dist/decorator/data-spread-decorator.js +0 -69
- package/dist/decorator/data-spread-decorator.js.map +0 -1
- package/dist/decorator/decotag-decorator.js +0 -33
- package/dist/decorator/decotag-decorator.js.map +0 -1
- package/dist/decorator/index.js +0 -31
- package/dist/decorator/index.js.map +0 -1
- package/dist/decorator/link-decorator.js +0 -66
- package/dist/decorator/link-decorator.js.map +0 -1
- package/dist/effect/gradation.js +0 -37
- package/dist/effect/gradation.js.map +0 -1
- package/dist/effect/index.js +0 -23
- package/dist/effect/index.js.map +0 -1
- package/dist/effect/shadow.js +0 -33
- package/dist/effect/shadow.js.map +0 -1
- package/dist/effect/turn.js +0 -25
- package/dist/effect/turn.js.map +0 -1
- package/dist/event/event-engine.js +0 -76
- package/dist/event/event-engine.js.map +0 -1
- package/dist/event/event-pump.js +0 -92
- package/dist/event/event-pump.js.map +0 -1
- package/dist/event/event-tracker.js +0 -97
- package/dist/event/event-tracker.js.map +0 -1
- package/dist/event/index.js +0 -21
- package/dist/event/index.js.map +0 -1
- package/dist/event/ua-event-handler.js +0 -453
- package/dist/event/ua-event-handler.js.map +0 -1
- package/dist/event-map/animator-handler.js +0 -225
- package/dist/event-map/animator-handler.js.map +0 -1
- package/dist/event-map/animators/animated-icon.js +0 -265
- package/dist/event-map/animators/animated-icon.js.map +0 -1
- package/dist/event-map/animators/border-highlighting.js +0 -476
- package/dist/event-map/animators/border-highlighting.js.map +0 -1
- package/dist/event-map/animators/bouncing-arrow.js +0 -226
- package/dist/event-map/animators/bouncing-arrow.js.map +0 -1
- package/dist/event-map/event-map.js +0 -36
- package/dist/event-map/event-map.js.map +0 -1
- package/dist/event-map/index.js +0 -20
- package/dist/event-map/index.js.map +0 -1
- package/dist/event-map/move-handler.js +0 -233
- package/dist/event-map/move-handler.js.map +0 -1
- package/dist/event-map/paste-handler.js +0 -176
- package/dist/event-map/paste-handler.js.map +0 -1
- package/dist/event-map/shift-handler.js +0 -55
- package/dist/event-map/shift-handler.js.map +0 -1
- package/dist/event-map/text-editor-lite.js +0 -276
- package/dist/event-map/text-editor-lite.js.map +0 -1
- package/dist/event-map/zoom-handler.js +0 -49
- package/dist/event-map/zoom-handler.js.map +0 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- package/dist/layer/action/emphasize.js +0 -42
- package/dist/layer/action/emphasize.js.map +0 -1
- package/dist/layer/action/popup.js +0 -461
- package/dist/layer/action/popup.js.map +0 -1
- package/dist/layer/action/pressed.js +0 -31
- package/dist/layer/action/pressed.js.map +0 -1
- package/dist/layer/add-layer.js +0 -180
- package/dist/layer/add-layer.js.map +0 -1
- package/dist/layer/decotag-layer.js +0 -121
- package/dist/layer/decotag-layer.js.map +0 -1
- package/dist/layer/guide-layer.js +0 -292
- package/dist/layer/guide-layer.js.map +0 -1
- package/dist/layer/index.js +0 -70
- package/dist/layer/index.js.map +0 -1
- package/dist/layer/layer.js +0 -230
- package/dist/layer/layer.js.map +0 -1
- package/dist/layer/minimap-layer.js +0 -84
- package/dist/layer/minimap-layer.js.map +0 -1
- package/dist/layer/model-layer.js +0 -465
- package/dist/layer/model-layer.js.map +0 -1
- package/dist/layer/modeler/anchor-handler.js +0 -193
- package/dist/layer/modeler/anchor-handler.js.map +0 -1
- package/dist/layer/modeler/control-handler.js +0 -95
- package/dist/layer/modeler/control-handler.js.map +0 -1
- package/dist/layer/modeler/focus-outline.js +0 -41
- package/dist/layer/modeler/focus-outline.js.map +0 -1
- package/dist/layer/modeler/group-outline.js +0 -30
- package/dist/layer/modeler/group-outline.js.map +0 -1
- package/dist/layer/modeler/index.js +0 -56
- package/dist/layer/modeler/index.js.map +0 -1
- package/dist/layer/modeler/path-handler.js +0 -300
- package/dist/layer/modeler/path-handler.js.map +0 -1
- package/dist/layer/modeler/resizer.js +0 -333
- package/dist/layer/modeler/resizer.js.map +0 -1
- package/dist/layer/modeler/rotator.js +0 -134
- package/dist/layer/modeler/rotator.js.map +0 -1
- package/dist/layer/modeling-layer.js +0 -491
- package/dist/layer/modeling-layer.js.map +0 -1
- package/dist/layer/reaction-layer.js +0 -111
- package/dist/layer/reaction-layer.js.map +0 -1
- package/dist/layer/scroll-layer.js +0 -191
- package/dist/layer/scroll-layer.js.map +0 -1
- package/dist/layer/selection/selected-finder.js +0 -96
- package/dist/layer/selection/selected-finder.js.map +0 -1
- package/dist/layer/selection-layer.js +0 -373
- package/dist/layer/selection-layer.js.map +0 -1
- package/dist/layer/shift-layer.js +0 -83
- package/dist/layer/shift-layer.js.map +0 -1
- package/dist/layout/absolute.js +0 -30
- package/dist/layout/absolute.js.map +0 -1
- package/dist/layout/card.js +0 -52
- package/dist/layout/card.js.map +0 -1
- package/dist/layout/html-absolute.js +0 -32
- package/dist/layout/html-absolute.js.map +0 -1
- package/dist/layout/index.js +0 -56
- package/dist/layout/index.js.map +0 -1
- package/dist/layout/layout.js +0 -36
- package/dist/layout/layout.js.map +0 -1
- package/dist/layout/linear-horizontal.js +0 -56
- package/dist/layout/linear-horizontal.js.map +0 -1
- package/dist/layout/linear-vertical.js +0 -56
- package/dist/layout/linear-vertical.js.map +0 -1
- package/dist/layout/table.js +0 -106
- package/dist/layout/table.js.map +0 -1
- package/dist/license/license.js +0 -170
- package/dist/license/license.js.map +0 -1
- package/dist/model/compile.js +0 -40
- package/dist/model/compile.js.map +0 -1
- package/dist/model/duplicate.js +0 -19
- package/dist/model/duplicate.js.map +0 -1
- package/dist/model/index.js +0 -34
- package/dist/model/index.js.map +0 -1
- package/dist/model/selector.js +0 -104
- package/dist/model/selector.js.map +0 -1
- package/dist/style/compile.js +0 -14
- package/dist/style/compile.js.map +0 -1
- package/dist/style/index.js +0 -14
- package/dist/style/index.js.map +0 -1
- package/dist/things-scene/api/add-start.js +0 -18
- package/dist/things-scene/api/add-start.js.map +0 -1
- package/dist/things-scene/api/add.js +0 -71
- package/dist/things-scene/api/add.js.map +0 -1
- package/dist/things-scene/api/align.js +0 -116
- package/dist/things-scene/api/align.js.map +0 -1
- package/dist/things-scene/api/center-to.js +0 -50
- package/dist/things-scene/api/center-to.js.map +0 -1
- package/dist/things-scene/api/change.js +0 -27
- package/dist/things-scene/api/change.js.map +0 -1
- package/dist/things-scene/api/clipboard.js +0 -45
- package/dist/things-scene/api/clipboard.js.map +0 -1
- package/dist/things-scene/api/distribute.js +0 -57
- package/dist/things-scene/api/distribute.js.map +0 -1
- package/dist/things-scene/api/duplicate.js +0 -47
- package/dist/things-scene/api/duplicate.js.map +0 -1
- package/dist/things-scene/api/fullscreen.js +0 -26
- package/dist/things-scene/api/fullscreen.js.map +0 -1
- package/dist/things-scene/api/group.js +0 -91
- package/dist/things-scene/api/group.js.map +0 -1
- package/dist/things-scene/api/ids.js +0 -28
- package/dist/things-scene/api/ids.js.map +0 -1
- package/dist/things-scene/api/index.js +0 -192
- package/dist/things-scene/api/index.js.map +0 -1
- package/dist/things-scene/api/listener.js +0 -69
- package/dist/things-scene/api/listener.js.map +0 -1
- package/dist/things-scene/api/paste-start.js +0 -27
- package/dist/things-scene/api/paste-start.js.map +0 -1
- package/dist/things-scene/api/place.js +0 -98
- package/dist/things-scene/api/place.js.map +0 -1
- package/dist/things-scene/api/remove.js +0 -57
- package/dist/things-scene/api/remove.js.map +0 -1
- package/dist/things-scene/api/symmetry.js +0 -47
- package/dist/things-scene/api/symmetry.js.map +0 -1
- package/dist/things-scene/api/to-data-url.js +0 -76
- package/dist/things-scene/api/to-data-url.js.map +0 -1
- package/dist/things-scene/api/zorder.js +0 -68
- package/dist/things-scene/api/zorder.js.map +0 -1
- package/dist/things-scene/application-context.js +0 -168
- package/dist/things-scene/application-context.js.map +0 -1
- package/dist/things-scene/config.js +0 -18
- package/dist/things-scene/config.js.map +0 -1
- package/dist/things-scene/create.js +0 -67
- package/dist/things-scene/create.js.map +0 -1
- package/dist/things-scene/fps.js +0 -26
- package/dist/things-scene/fps.js.map +0 -1
- package/dist/things-scene/index.js +0 -152
- package/dist/things-scene/index.js.map +0 -1
- package/dist/things-scene/polyfill.js +0 -111
- package/dist/things-scene/polyfill.js.map +0 -1
- package/dist/things-scene/scene.js +0 -442
- package/dist/things-scene/scene.js.map +0 -1
- package/dist/things-scene/version.js +0 -12
- package/dist/things-scene/version.js.map +0 -1
- package/rollup.config.js +0 -67
- package/schema.graphql +0 -4606
- package/tsconfig.json +0 -31
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _commandChange = _interopRequireDefault(require("../../command/command-change.js"));
|
|
8
|
-
var _commandMigrate = _interopRequireDefault(require("../../command/command-migrate.js"));
|
|
9
|
-
var _index = require("../../model/index.js");
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
/*
|
|
12
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const ANCHOR_HANDLE_RADIUS = 4;
|
|
16
|
-
function theta(p1, p2) {
|
|
17
|
-
return Math.atan2(p2.y - p1.y, p2.x - p1.x);
|
|
18
|
-
}
|
|
19
|
-
function distance(p1, p2) {
|
|
20
|
-
return Math.sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
|
|
21
|
-
}
|
|
22
|
-
function whereis(p, theta, distance) {
|
|
23
|
-
return {
|
|
24
|
-
x: Math.cos(theta) * distance + p.x,
|
|
25
|
-
y: Math.sin(theta) * distance + p.y
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
const THETA_STEP = Math.PI * 15 / 180;
|
|
29
|
-
const PATH_HANDLE_RADIUS = 4;
|
|
30
|
-
class PathHandler {
|
|
31
|
-
constructor(layer) {
|
|
32
|
-
this.layer = layer;
|
|
33
|
-
}
|
|
34
|
-
reset() {
|
|
35
|
-
// 현재 선택된 패스이동 핸들의 정보
|
|
36
|
-
this.active = null;
|
|
37
|
-
this.created = null;
|
|
38
|
-
}
|
|
39
|
-
get selected() {
|
|
40
|
-
return this.layer.selected;
|
|
41
|
-
}
|
|
42
|
-
contains(x, y, component, scale) {
|
|
43
|
-
if (!component.mutable) return false;
|
|
44
|
-
|
|
45
|
-
// 좌표가 컴포넌트 path 핸들에 포함되어있는지 확인함.
|
|
46
|
-
component.path.every((point, index) => {
|
|
47
|
-
if (Math.abs(x - point.x) <= PATH_HANDLE_RADIUS / scale.x && Math.abs(y - point.y) <= PATH_HANDLE_RADIUS / scale.y) {
|
|
48
|
-
// 현재 선택된 패스이동 핸들의 정보
|
|
49
|
-
this.active = {
|
|
50
|
-
component,
|
|
51
|
-
index
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 찾았으면, 스톱한다.
|
|
56
|
-
return !this.active;
|
|
57
|
-
});
|
|
58
|
-
return !!this.active;
|
|
59
|
-
}
|
|
60
|
-
startLinkProcess(linkFrom, linkModel, e) {
|
|
61
|
-
try {
|
|
62
|
-
var created = (0, _index.compile)(linkModel, linkFrom.app);
|
|
63
|
-
linkFrom.rootModel.addComponent(created);
|
|
64
|
-
this.layer.selected = [created];
|
|
65
|
-
this.active = {
|
|
66
|
-
component: created,
|
|
67
|
-
index: 1
|
|
68
|
-
};
|
|
69
|
-
this.ondragstart(e);
|
|
70
|
-
return created;
|
|
71
|
-
} catch (ex) {
|
|
72
|
-
console.warn(e);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
draw(context, component, scale) {
|
|
76
|
-
if (!component.mutable || component.stuck) return;
|
|
77
|
-
|
|
78
|
-
// 패스이동 핸들(Path Move Handle)을 그린다.
|
|
79
|
-
var path = component.path;
|
|
80
|
-
var active = this.active;
|
|
81
|
-
path.forEach((point, index) => {
|
|
82
|
-
context.beginPath();
|
|
83
|
-
context.ellipse(point.x, point.y, PATH_HANDLE_RADIUS / scale.x, PATH_HANDLE_RADIUS / scale.y, 0, 0, 2 * Math.PI, true);
|
|
84
|
-
context.lineWidth = 1 / scale.x;
|
|
85
|
-
context.strokeStyle = '#656565';
|
|
86
|
-
context.fillStyle = '#fff';
|
|
87
|
-
if (active && active.component === component && active.index === index) {
|
|
88
|
-
context.strokeStyle = '#fa7703';
|
|
89
|
-
if (active.toFill) context.fillStyle = '#ffb80c';
|
|
90
|
-
}
|
|
91
|
-
context.fill();
|
|
92
|
-
context.stroke();
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
ondblclick(e) {
|
|
96
|
-
var component = this.active.component;
|
|
97
|
-
if (!component.pathExtendable) return;
|
|
98
|
-
var path = component.path.slice();
|
|
99
|
-
if (path.length < 3) return;
|
|
100
|
-
path.splice(this.active.index, 1);
|
|
101
|
-
component.path = path;
|
|
102
|
-
}
|
|
103
|
-
onmousedown(e) {
|
|
104
|
-
this.active.toFill = true;
|
|
105
|
-
}
|
|
106
|
-
ondragstart(e) {
|
|
107
|
-
var {
|
|
108
|
-
index,
|
|
109
|
-
component
|
|
110
|
-
} = this.active;
|
|
111
|
-
if (!this.created) {
|
|
112
|
-
this.active.changes = _commandChange.default.before([component]);
|
|
113
|
-
}
|
|
114
|
-
if (index === 0 || index === component.path.length - 1) {
|
|
115
|
-
this.layer.counterEnd = index === 0 ? component.toEnd || {
|
|
116
|
-
fromto: 'to'
|
|
117
|
-
} : component.fromEnd || {
|
|
118
|
-
fromto: 'from'
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
ondragmove(e) {
|
|
123
|
-
/* 컴포넌트 패쓰 핸들의 이동을 처리한다. */
|
|
124
|
-
|
|
125
|
-
var {
|
|
126
|
-
component: line,
|
|
127
|
-
index
|
|
128
|
-
} = this.active || {};
|
|
129
|
-
const {
|
|
130
|
-
offsetX,
|
|
131
|
-
offsetY
|
|
132
|
-
} = e;
|
|
133
|
-
var point = line.transcoordC2S(offsetX, offsetY);
|
|
134
|
-
point = line.transcoordS2P(point.x, point.y);
|
|
135
|
-
if (e.shiftKey) {
|
|
136
|
-
/* shift-key를 누른 경우에는 이전 포인트에 대해서 15도의 각도로만 움직인다. */
|
|
137
|
-
var path = line.path;
|
|
138
|
-
var length = path.length;
|
|
139
|
-
var prev = line.isLine() && index == 0 ? line.path[1] : line.path[(index - 1 + length) % length];
|
|
140
|
-
prev = line.transcoordS2P(prev.x, prev.y);
|
|
141
|
-
var ptheta = 0;
|
|
142
|
-
if (length > 2) {
|
|
143
|
-
var pprev;
|
|
144
|
-
if (line.isLine()) {
|
|
145
|
-
if (index == 0) pprev = line.path[2];else if (index != 1) pprev = line.path[index - 2];
|
|
146
|
-
} else {
|
|
147
|
-
pprev = line.path[(index - 2 + length) % length];
|
|
148
|
-
}
|
|
149
|
-
if (pprev) {
|
|
150
|
-
pprev = line.transcoordS2P(pprev.x, pprev.y);
|
|
151
|
-
ptheta = theta(pprev, prev);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
var radian = Math.round((theta(prev, point) - ptheta) / THETA_STEP) * THETA_STEP + ptheta;
|
|
155
|
-
point = whereis(prev, radian, distance(prev, point));
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* 시작점과 끝점인 경우 앵커의 주변에 놓여지게 될때 자석에 효과로 자리를 잡는다.
|
|
160
|
-
*/
|
|
161
|
-
if (index === 0 || index === line.path.length - 1) {
|
|
162
|
-
const dest = this.layer.anchorTarget = line.rootModel.capture(offsetX, offsetY, c => {
|
|
163
|
-
return !c.isConnectable();
|
|
164
|
-
});
|
|
165
|
-
if (dest) {
|
|
166
|
-
const {
|
|
167
|
-
x,
|
|
168
|
-
y
|
|
169
|
-
} = dest.transcoordC2S(offsetX, offsetY);
|
|
170
|
-
const scale = this.layer.get('scale') || {
|
|
171
|
-
x: 1,
|
|
172
|
-
y: 1
|
|
173
|
-
};
|
|
174
|
-
const counterEnd = this.layer.counterEnd;
|
|
175
|
-
const anchor = (dest.anchors || []).find(anchor => {
|
|
176
|
-
const {
|
|
177
|
-
name,
|
|
178
|
-
inout,
|
|
179
|
-
multiplicity = Infinity,
|
|
180
|
-
position,
|
|
181
|
-
filter
|
|
182
|
-
} = anchor;
|
|
183
|
-
if (counterEnd) {
|
|
184
|
-
const {
|
|
185
|
-
anchor: counterAnchor,
|
|
186
|
-
fromto
|
|
187
|
-
} = counterEnd;
|
|
188
|
-
if (counterAnchor && (counterAnchor.inout === 'out' && inout === 'out' || counterAnchor.inout === 'in' && inout === 'in')) {
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
if (fromto === 'from' && inout === 'out' || fromto === 'to' && inout === 'in') {
|
|
192
|
-
return false;
|
|
193
|
-
}
|
|
194
|
-
} else {
|
|
195
|
-
console.error('should not be here.');
|
|
196
|
-
}
|
|
197
|
-
if (Math.abs(x - position.x) > ANCHOR_HANDLE_RADIUS * 2 / scale.x || Math.abs(y - position.y) > ANCHOR_HANDLE_RADIUS * 2 / scale.y) {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
const lines = dest.findInOutLines(name);
|
|
201
|
-
if (lines.includes(line)) {
|
|
202
|
-
return true;
|
|
203
|
-
}
|
|
204
|
-
if (multiplicity !== Infinity && lines.length >= multiplicity) {
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
if (counterEnd && filter) {
|
|
208
|
-
return !!filter.call(anchor, counterEnd);
|
|
209
|
-
}
|
|
210
|
-
return true;
|
|
211
|
-
});
|
|
212
|
-
if (anchor) {
|
|
213
|
-
if (index == 0) {
|
|
214
|
-
line.from = {
|
|
215
|
-
component: dest.get('refid'),
|
|
216
|
-
anchor: anchor.name,
|
|
217
|
-
position: point
|
|
218
|
-
};
|
|
219
|
-
} else {
|
|
220
|
-
line.to = {
|
|
221
|
-
component: dest.get('refid'),
|
|
222
|
-
anchor: anchor.name,
|
|
223
|
-
position: point
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
} else {
|
|
227
|
-
if (index == 0) {
|
|
228
|
-
line.from = {
|
|
229
|
-
position: point
|
|
230
|
-
};
|
|
231
|
-
} else {
|
|
232
|
-
line.to = {
|
|
233
|
-
position: point
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
line.mutatePath(null, function (path) {
|
|
240
|
-
path[index] = point;
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
ondragend(e) {
|
|
244
|
-
var {
|
|
245
|
-
component,
|
|
246
|
-
index,
|
|
247
|
-
changes
|
|
248
|
-
} = this.active;
|
|
249
|
-
if (index === 0 || index === component.path.length - 1) {
|
|
250
|
-
const {
|
|
251
|
-
offsetX,
|
|
252
|
-
offsetY
|
|
253
|
-
} = e;
|
|
254
|
-
const dest = component.rootModel.capture(offsetX, offsetY, c => {
|
|
255
|
-
return c === component || c.isLine();
|
|
256
|
-
});
|
|
257
|
-
const {
|
|
258
|
-
x,
|
|
259
|
-
y
|
|
260
|
-
} = dest.transcoordC2S(offsetX, offsetY);
|
|
261
|
-
const scale = this.layer.get('scale') || {
|
|
262
|
-
x: 1,
|
|
263
|
-
y: 1
|
|
264
|
-
};
|
|
265
|
-
const anchor = (dest.anchors || []).find(anchor => {
|
|
266
|
-
return anchor && Math.abs(x - anchor.position.x) <= ANCHOR_HANDLE_RADIUS * 2 / scale.x && Math.abs(y - anchor.position.y) <= ANCHOR_HANDLE_RADIUS * 2 / scale.y;
|
|
267
|
-
});
|
|
268
|
-
if (anchor) {
|
|
269
|
-
if (index == 0) {
|
|
270
|
-
component.from = {
|
|
271
|
-
component: dest.get('refid'),
|
|
272
|
-
anchor: anchor.name
|
|
273
|
-
};
|
|
274
|
-
} else {
|
|
275
|
-
component.to = {
|
|
276
|
-
component: dest.get('refid'),
|
|
277
|
-
anchor: anchor.name
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
this.layer.endLinkProcess();
|
|
282
|
-
}
|
|
283
|
-
if (this.created) {
|
|
284
|
-
let command = new _commandMigrate.default({
|
|
285
|
-
changes: [{
|
|
286
|
-
component: this.created,
|
|
287
|
-
to_container: this.created.parent
|
|
288
|
-
}]
|
|
289
|
-
});
|
|
290
|
-
created.app.commander.execute(command);
|
|
291
|
-
} else {
|
|
292
|
-
_commandChange.default.after(changes, component.app.commander);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Group의 바운드를 재계산함.
|
|
296
|
-
component.parent && component.parent.calculateBounds && component.parent.calculateBounds();
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
exports.default = PathHandler;
|
|
300
|
-
//# sourceMappingURL=path-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-handler.js","names":["_commandChange","_interopRequireDefault","require","_commandMigrate","_index","e","__esModule","default","ANCHOR_HANDLE_RADIUS","theta","p1","p2","Math","atan2","y","x","distance","sqrt","whereis","p","cos","sin","THETA_STEP","PI","PATH_HANDLE_RADIUS","PathHandler","constructor","layer","reset","active","created","selected","contains","component","scale","mutable","path","every","point","index","abs","startLinkProcess","linkFrom","linkModel","compile","app","rootModel","addComponent","ondragstart","ex","console","warn","draw","context","stuck","forEach","beginPath","ellipse","lineWidth","strokeStyle","fillStyle","toFill","fill","stroke","ondblclick","pathExtendable","slice","length","splice","onmousedown","changes","CommandChange","before","counterEnd","toEnd","fromto","fromEnd","ondragmove","line","offsetX","offsetY","transcoordC2S","transcoordS2P","shiftKey","prev","isLine","ptheta","pprev","radian","round","dest","anchorTarget","capture","c","isConnectable","get","anchor","anchors","find","name","inout","multiplicity","Infinity","position","filter","counterAnchor","error","lines","findInOutLines","includes","call","from","to","mutatePath","ondragend","endLinkProcess","command","CommandMigrate","to_container","parent","commander","execute","after","calculateBounds","exports"],"sources":["../../../src/layer/modeler/path-handler.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport CommandChange from '../../command/command-change.js'\nimport CommandMigrate from '../../command/command-migrate.js'\nimport { compile } from '../../model/index.js'\n\nconst ANCHOR_HANDLE_RADIUS = 4\n\nfunction theta(p1, p2) {\n return Math.atan2(p2.y - p1.y, p2.x - p1.x)\n}\n\nfunction distance(p1, p2) {\n return Math.sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y))\n}\n\nfunction whereis(p, theta, distance) {\n return {\n x: Math.cos(theta) * distance + p.x,\n y: Math.sin(theta) * distance + p.y\n }\n}\n\nconst THETA_STEP = (Math.PI * 15) / 180\nconst PATH_HANDLE_RADIUS = 4\n\nexport default class PathHandler {\n constructor(layer) {\n this.layer = layer\n }\n\n reset() {\n // 현재 선택된 패스이동 핸들의 정보\n this.active = null\n this.created = null\n }\n\n get selected() {\n return this.layer.selected\n }\n\n contains(x, y, component, scale) {\n if (!component.mutable) return false\n\n // 좌표가 컴포넌트 path 핸들에 포함되어있는지 확인함.\n component.path.every((point, index) => {\n if (\n Math.abs(x - point.x) <= PATH_HANDLE_RADIUS / scale.x &&\n Math.abs(y - point.y) <= PATH_HANDLE_RADIUS / 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 startLinkProcess(linkFrom, linkModel, e) {\n try {\n var created = compile(linkModel, linkFrom.app)\n linkFrom.rootModel.addComponent(created)\n\n this.layer.selected = [created]\n this.active = {\n component: created,\n index: 1\n }\n\n this.ondragstart(e)\n\n return created\n } catch (ex) {\n console.warn(e)\n }\n }\n\n draw(context, component, scale) {\n if (!component.mutable || component.stuck) return\n\n // 패스이동 핸들(Path Move Handle)을 그린다.\n var path = component.path\n var active = this.active\n\n path.forEach((point, index) => {\n context.beginPath()\n\n context.ellipse(\n point.x,\n point.y,\n PATH_HANDLE_RADIUS / scale.x,\n PATH_HANDLE_RADIUS / scale.y,\n 0,\n 0,\n 2 * Math.PI,\n true\n )\n context.lineWidth = 1 / scale.x\n context.strokeStyle = '#656565'\n context.fillStyle = '#fff'\n\n if (active && active.component === component && active.index === index) {\n context.strokeStyle = '#fa7703'\n\n if (active.toFill) context.fillStyle = '#ffb80c'\n }\n\n context.fill()\n context.stroke()\n })\n }\n\n ondblclick(e) {\n var component = this.active.component\n\n if (!component.pathExtendable) return\n\n var path = component.path.slice()\n if (path.length < 3) return\n\n path.splice(this.active.index, 1)\n component.path = path\n }\n\n onmousedown(e) {\n this.active.toFill = true\n }\n\n ondragstart(e) {\n var { index, component } = this.active\n\n if (!this.created) {\n this.active.changes = CommandChange.before([component])\n }\n\n if (index === 0 || index === component.path.length - 1) {\n this.layer.counterEnd =\n index === 0 ? component.toEnd || { fromto: 'to' } : component.fromEnd || { fromto: 'from' }\n }\n }\n\n ondragmove(e) {\n /* 컴포넌트 패쓰 핸들의 이동을 처리한다. */\n\n var { component: line, index } = this.active || {}\n const { offsetX, offsetY } = e\n\n var point = line.transcoordC2S(offsetX, offsetY)\n point = line.transcoordS2P(point.x, point.y)\n\n if (e.shiftKey) {\n /* shift-key를 누른 경우에는 이전 포인트에 대해서 15도의 각도로만 움직인다. */\n var path = line.path\n var length = path.length\n\n var prev = line.isLine() && index == 0 ? line.path[1] : line.path[(index - 1 + length) % length]\n prev = line.transcoordS2P(prev.x, prev.y)\n\n var ptheta = 0\n\n if (length > 2) {\n var pprev\n\n if (line.isLine()) {\n if (index == 0) pprev = line.path[2]\n else if (index != 1) pprev = line.path[index - 2]\n } else {\n pprev = line.path[(index - 2 + length) % length]\n }\n\n if (pprev) {\n pprev = line.transcoordS2P(pprev.x, pprev.y)\n ptheta = theta(pprev, prev)\n }\n }\n\n var radian = Math.round((theta(prev, point) - ptheta) / THETA_STEP) * THETA_STEP + ptheta\n point = whereis(prev, radian, distance(prev, point))\n }\n\n /**\n * 시작점과 끝점인 경우 앵커의 주변에 놓여지게 될때 자석에 효과로 자리를 잡는다.\n */\n if (index === 0 || index === line.path.length - 1) {\n const dest = (this.layer.anchorTarget = line.rootModel.capture(offsetX, offsetY, c => {\n return !c.isConnectable()\n }))\n\n if (dest) {\n const { x, y } = dest.transcoordC2S(offsetX, offsetY)\n const scale = this.layer.get('scale') || { x: 1, y: 1 }\n const counterEnd = this.layer.counterEnd\n\n const anchor = (dest.anchors || []).find(anchor => {\n const { name, inout, multiplicity = Infinity, position, filter } = anchor\n\n if (counterEnd) {\n const { anchor: counterAnchor, fromto } = counterEnd\n\n if (\n counterAnchor &&\n ((counterAnchor.inout === 'out' && inout === 'out') || (counterAnchor.inout === 'in' && inout === 'in'))\n ) {\n return false\n }\n\n if ((fromto === 'from' && inout === 'out') || (fromto === 'to' && inout === 'in')) {\n return false\n }\n } else {\n console.error('should not be here.')\n }\n\n if (\n Math.abs(x - position.x) > (ANCHOR_HANDLE_RADIUS * 2) / scale.x ||\n Math.abs(y - position.y) > (ANCHOR_HANDLE_RADIUS * 2) / scale.y\n ) {\n return false\n }\n\n const lines = dest.findInOutLines(name)\n if (lines.includes(line)) {\n return true\n }\n\n if (multiplicity !== Infinity && lines.length >= multiplicity) {\n return false\n }\n\n if (counterEnd && filter) {\n return !!filter.call(anchor, counterEnd)\n }\n\n return true\n })\n\n if (anchor) {\n if (index == 0) {\n line.from = {\n component: dest.get('refid'),\n anchor: anchor.name,\n position: point\n }\n } else {\n line.to = {\n component: dest.get('refid'),\n anchor: anchor.name,\n position: point\n }\n }\n } else {\n if (index == 0) {\n line.from = {\n position: point\n }\n } else {\n line.to = {\n position: point\n }\n }\n }\n }\n }\n\n line.mutatePath(null, function (path) {\n path[index] = point\n })\n }\n\n ondragend(e) {\n var { component, index, changes } = this.active\n\n if (index === 0 || index === component.path.length - 1) {\n const { offsetX, offsetY } = e\n const dest = component.rootModel.capture(offsetX, offsetY, c => {\n return c === component || c.isLine()\n })\n const { x, y } = dest.transcoordC2S(offsetX, offsetY)\n const scale = this.layer.get('scale') || { x: 1, y: 1 }\n\n const anchor = (dest.anchors || []).find(anchor => {\n return (\n anchor &&\n Math.abs(x - anchor.position.x) <= (ANCHOR_HANDLE_RADIUS * 2) / scale.x &&\n Math.abs(y - anchor.position.y) <= (ANCHOR_HANDLE_RADIUS * 2) / scale.y\n )\n })\n\n if (anchor) {\n if (index == 0) {\n component.from = {\n component: dest.get('refid'),\n anchor: anchor.name\n }\n } else {\n component.to = {\n component: dest.get('refid'),\n anchor: anchor.name\n }\n }\n }\n\n this.layer.endLinkProcess()\n }\n\n if (this.created) {\n let command = new CommandMigrate({\n changes: [\n {\n component: this.created,\n to_container: this.created.parent\n }\n ]\n })\n\n created.app.commander.execute(command)\n } else {\n CommandChange.after(changes, component.app.commander)\n }\n\n // Group의 바운드를 재계산함.\n component.parent && component.parent.calculateBounds && component.parent.calculateBounds()\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,333 +0,0 @@
|
|
|
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 RESIZE_HANDLE_HALF_SIZE = 4;
|
|
12
|
-
const RESIZE_HANDLE_FULL_SIZE = 8;
|
|
13
|
-
const RESIZE_HANDLE_THRESHOLD = 50;
|
|
14
|
-
const LEFT_TOP = 0;
|
|
15
|
-
const TOP = 1;
|
|
16
|
-
const RIGHT_TOP = 2;
|
|
17
|
-
const RIGHT = 3;
|
|
18
|
-
const RIGHT_BOTTOM = 4;
|
|
19
|
-
const BOTTOM = 5;
|
|
20
|
-
const LEFT_BOTTOM = 6;
|
|
21
|
-
const LEFT = 7;
|
|
22
|
-
function calcDelta(component, index, point) {
|
|
23
|
-
// 1. 컴포넌트의 원래 바운드를 가져온다.
|
|
24
|
-
var {
|
|
25
|
-
left,
|
|
26
|
-
top,
|
|
27
|
-
width,
|
|
28
|
-
height
|
|
29
|
-
} = component.bounds;
|
|
30
|
-
|
|
31
|
-
// 2. 해당 바운드 인덱스의 이전 값을 가져온다.
|
|
32
|
-
var x, y;
|
|
33
|
-
switch (index) {
|
|
34
|
-
case LEFT_TOP:
|
|
35
|
-
x = left;
|
|
36
|
-
y = top;
|
|
37
|
-
break;
|
|
38
|
-
case TOP:
|
|
39
|
-
x = left + width / 2;
|
|
40
|
-
y = top;
|
|
41
|
-
break;
|
|
42
|
-
case RIGHT_TOP:
|
|
43
|
-
x = left + width;
|
|
44
|
-
y = top;
|
|
45
|
-
break;
|
|
46
|
-
case RIGHT:
|
|
47
|
-
x = left + width;
|
|
48
|
-
y = top + height / 2;
|
|
49
|
-
break;
|
|
50
|
-
case RIGHT_BOTTOM:
|
|
51
|
-
x = left + width;
|
|
52
|
-
y = top + height;
|
|
53
|
-
break;
|
|
54
|
-
case BOTTOM:
|
|
55
|
-
x = left + width / 2;
|
|
56
|
-
y = top + height;
|
|
57
|
-
break;
|
|
58
|
-
case LEFT_BOTTOM:
|
|
59
|
-
x = left;
|
|
60
|
-
y = top + height;
|
|
61
|
-
break;
|
|
62
|
-
case LEFT:
|
|
63
|
-
x = left;
|
|
64
|
-
y = top + height / 2;
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
var old_position = {
|
|
68
|
-
x,
|
|
69
|
-
y
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// 4. 포인트 파라미터를 transcoord 해서 변환된 좌표값을 구한다.
|
|
73
|
-
|
|
74
|
-
var new_position = component.transcoordT2S(point.x, point.y);
|
|
75
|
-
|
|
76
|
-
// 5. 움직인 거리의 가로 방향 거리, 세로 방향 거리를 구한다.
|
|
77
|
-
return {
|
|
78
|
-
dx: new_position.x - old_position.x,
|
|
79
|
-
dy: new_position.y - old_position.y
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function resizeComponent(component, index, diagonal, delta_x, delta_y, final) {
|
|
83
|
-
var {
|
|
84
|
-
left,
|
|
85
|
-
top,
|
|
86
|
-
width,
|
|
87
|
-
height
|
|
88
|
-
} = component.bounds;
|
|
89
|
-
var origin_bounds = {
|
|
90
|
-
left,
|
|
91
|
-
top,
|
|
92
|
-
width,
|
|
93
|
-
height
|
|
94
|
-
};
|
|
95
|
-
switch (index) {
|
|
96
|
-
case LEFT_TOP:
|
|
97
|
-
left += delta_x;
|
|
98
|
-
top += delta_y;
|
|
99
|
-
width -= delta_x;
|
|
100
|
-
height -= delta_y;
|
|
101
|
-
break;
|
|
102
|
-
case TOP:
|
|
103
|
-
top += delta_y;
|
|
104
|
-
height -= delta_y;
|
|
105
|
-
break;
|
|
106
|
-
case RIGHT_TOP:
|
|
107
|
-
top += delta_y;
|
|
108
|
-
width += delta_x;
|
|
109
|
-
height -= delta_y;
|
|
110
|
-
break;
|
|
111
|
-
case RIGHT:
|
|
112
|
-
width += delta_x;
|
|
113
|
-
break;
|
|
114
|
-
case RIGHT_BOTTOM:
|
|
115
|
-
width += delta_x;
|
|
116
|
-
height += delta_y;
|
|
117
|
-
break;
|
|
118
|
-
case BOTTOM:
|
|
119
|
-
height += delta_y;
|
|
120
|
-
break;
|
|
121
|
-
case LEFT_BOTTOM:
|
|
122
|
-
left += delta_x;
|
|
123
|
-
width -= delta_x;
|
|
124
|
-
height += delta_y;
|
|
125
|
-
break;
|
|
126
|
-
case LEFT:
|
|
127
|
-
left += delta_x;
|
|
128
|
-
width -= delta_x;
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/* 최초의 bounds상태로 되돌린 후에, 변량을 적용한다. 여기서 변량은, 최초상태에서의 변화량이기 때문이다. */
|
|
133
|
-
|
|
134
|
-
component.mutateBounds(function (bounds) {
|
|
135
|
-
if (Math.abs(width) <= 0.001) {
|
|
136
|
-
width = 0.001;
|
|
137
|
-
}
|
|
138
|
-
if (Math.abs(height) <= 0.001) {
|
|
139
|
-
height = 0.001;
|
|
140
|
-
}
|
|
141
|
-
return component.adjustResize({
|
|
142
|
-
left,
|
|
143
|
-
top,
|
|
144
|
-
width,
|
|
145
|
-
height
|
|
146
|
-
}, origin_bounds, diagonal);
|
|
147
|
-
}, this);
|
|
148
|
-
|
|
149
|
-
// Absolute Container이고, TOP/LEFT의 위치가 바뀌는 경우에는 하위 컴포넌트들의 위치를 재조정해준다.
|
|
150
|
-
if (component.isContainer() && component.layout.ABSOLUTE && !component.isGroup()) {
|
|
151
|
-
var dl = origin_bounds.left - left;
|
|
152
|
-
var dt = origin_bounds.top - top;
|
|
153
|
-
if (!final) component.components.forEach(component => {
|
|
154
|
-
component.delta('tx', dl);
|
|
155
|
-
component.delta('ty', dt);
|
|
156
|
-
});else component.components.forEach(component => {
|
|
157
|
-
component.delta('tx', 0);
|
|
158
|
-
component.delta('ty', 0);
|
|
159
|
-
component.move({
|
|
160
|
-
x: dl,
|
|
161
|
-
y: dt
|
|
162
|
-
}, false /* relatively - leave relations among components */);
|
|
163
|
-
});
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Group의 바운드를 재계산함.
|
|
168
|
-
var parent = final && component.parent;
|
|
169
|
-
parent && parent.isGroup() && parent.calculateBounds();
|
|
170
|
-
}
|
|
171
|
-
function getResizeHandles(bounds, scale) {
|
|
172
|
-
var {
|
|
173
|
-
left,
|
|
174
|
-
top,
|
|
175
|
-
width,
|
|
176
|
-
height
|
|
177
|
-
} = bounds;
|
|
178
|
-
var centerx = left + width / 2;
|
|
179
|
-
var centery = top + height / 2;
|
|
180
|
-
var right = left + width;
|
|
181
|
-
var bottom = top + height;
|
|
182
|
-
const denseX = width * scale.x > RESIZE_HANDLE_THRESHOLD;
|
|
183
|
-
const denseY = height * scale.y > RESIZE_HANDLE_THRESHOLD;
|
|
184
|
-
return [{
|
|
185
|
-
x: left,
|
|
186
|
-
y: top
|
|
187
|
-
}, denseX ? {
|
|
188
|
-
x: centerx,
|
|
189
|
-
y: top
|
|
190
|
-
} : null, {
|
|
191
|
-
x: right,
|
|
192
|
-
y: top
|
|
193
|
-
}, denseY ? {
|
|
194
|
-
x: right,
|
|
195
|
-
y: centery
|
|
196
|
-
} : null, {
|
|
197
|
-
x: right,
|
|
198
|
-
y: bottom
|
|
199
|
-
}, denseX ? {
|
|
200
|
-
x: centerx,
|
|
201
|
-
y: bottom
|
|
202
|
-
} : null, {
|
|
203
|
-
x: left,
|
|
204
|
-
y: bottom
|
|
205
|
-
}, denseY ? {
|
|
206
|
-
x: left,
|
|
207
|
-
y: centery
|
|
208
|
-
} : null];
|
|
209
|
-
}
|
|
210
|
-
class Resizer {
|
|
211
|
-
constructor(layer) {
|
|
212
|
-
this.layer = layer;
|
|
213
|
-
}
|
|
214
|
-
reset() {
|
|
215
|
-
// 현재 선택된 리사이즈 핸들의 정보
|
|
216
|
-
this.active = null;
|
|
217
|
-
}
|
|
218
|
-
get selected() {
|
|
219
|
-
return this.layer.selected;
|
|
220
|
-
}
|
|
221
|
-
contains(x, y, component, scale) {
|
|
222
|
-
if (!component.resizable) return false;
|
|
223
|
-
|
|
224
|
-
// 좌표가 바운드 핸들에 포함되어있는지 확인함.
|
|
225
|
-
getResizeHandles(component.bounds, scale).every((handle, index) => {
|
|
226
|
-
if (handle && Math.abs(x - handle.x) <= RESIZE_HANDLE_HALF_SIZE / scale.x && Math.abs(y - handle.y) <= RESIZE_HANDLE_HALF_SIZE / scale.y) {
|
|
227
|
-
// 현재 선택된 리사이즈 핸들의 정보
|
|
228
|
-
this.active = {
|
|
229
|
-
component,
|
|
230
|
-
index
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// 찾았으면, 스톱한다.
|
|
235
|
-
return !this.active;
|
|
236
|
-
});
|
|
237
|
-
return !!this.active;
|
|
238
|
-
}
|
|
239
|
-
draw(ctx, component, scale) {
|
|
240
|
-
// Line 같은 경우는 그리지 않는다.
|
|
241
|
-
if (component.isLine()) return;
|
|
242
|
-
|
|
243
|
-
// Bound 박스를 그린다.
|
|
244
|
-
var {
|
|
245
|
-
left,
|
|
246
|
-
top,
|
|
247
|
-
width,
|
|
248
|
-
height
|
|
249
|
-
} = component.bounds;
|
|
250
|
-
ctx.beginPath();
|
|
251
|
-
ctx.rect(left - 4 / scale.x, top - 4 / scale.y, width + 8 / scale.x, height + 8 / scale.y);
|
|
252
|
-
ctx.setLineDash([3 / scale.x, 4 / scale.y]);
|
|
253
|
-
ctx.lineWidth = 1 / scale.x;
|
|
254
|
-
ctx.strokeStyle = 'black';
|
|
255
|
-
ctx.stroke();
|
|
256
|
-
ctx.setLineDash([]); // reset lineDash
|
|
257
|
-
|
|
258
|
-
if (!component.resizable) return;
|
|
259
|
-
|
|
260
|
-
// Bound 핸들(Resize Handle)을 그린다.
|
|
261
|
-
var active = this.active;
|
|
262
|
-
getResizeHandles(component.bounds, scale).forEach((point, index) => {
|
|
263
|
-
if (!point) {
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
ctx.beginPath();
|
|
267
|
-
ctx.rect(point.x - RESIZE_HANDLE_HALF_SIZE / scale.x, point.y - RESIZE_HANDLE_HALF_SIZE / scale.y, RESIZE_HANDLE_FULL_SIZE / scale.x, RESIZE_HANDLE_FULL_SIZE / scale.y);
|
|
268
|
-
ctx.setLineDash([0, 0]);
|
|
269
|
-
ctx.strokeStyle = '#656565';
|
|
270
|
-
ctx.stroke();
|
|
271
|
-
ctx.fillStyle = '#fff';
|
|
272
|
-
if (active && active.component === component && active.index === index) {
|
|
273
|
-
ctx.strokeStyle = '#fa7703';
|
|
274
|
-
if (active.focus) ctx.fillStyle = '#ffb80c';
|
|
275
|
-
}
|
|
276
|
-
ctx.fill();
|
|
277
|
-
ctx.stroke();
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
onmousedown(e) {
|
|
281
|
-
this.active.focus = true;
|
|
282
|
-
}
|
|
283
|
-
ondragstart(e) {
|
|
284
|
-
var {
|
|
285
|
-
component
|
|
286
|
-
} = this.active;
|
|
287
|
-
this.active.bounds = component.bounds;
|
|
288
|
-
this.active.boundsList = this.layer.selected.filter(c => c.resizable).map(c => c.bounds);
|
|
289
|
-
}
|
|
290
|
-
ondragmove(e) {
|
|
291
|
-
/* 리사이즈 핸들의 이동을 처리한다. */
|
|
292
|
-
var {
|
|
293
|
-
component,
|
|
294
|
-
index,
|
|
295
|
-
boundsList,
|
|
296
|
-
bounds
|
|
297
|
-
} = this.active;
|
|
298
|
-
var point = this.layer.transcoordC2S(e.offsetX, e.offsetY);
|
|
299
|
-
|
|
300
|
-
/* 최초의 바운드로 되돌려놓고 다시 계산한다. */
|
|
301
|
-
component.bounds = bounds;
|
|
302
|
-
var delta = calcDelta(component, index, point);
|
|
303
|
-
this.layer.selected.filter(c => c.resizable).forEach((c, i) => {
|
|
304
|
-
/* 최초의 바운드로 되돌려놓고 다시 계산한다. 그룹에 반영은 하지 않는다. */
|
|
305
|
-
c.bounds = boundsList[i];
|
|
306
|
-
resizeComponent(c, index, e.shiftKey, delta.dx, delta.dy, false);
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
ondragend(e) {
|
|
310
|
-
/* 리사이즈 핸들의 이동을 처리한다. */
|
|
311
|
-
var {
|
|
312
|
-
component,
|
|
313
|
-
index,
|
|
314
|
-
boundsList,
|
|
315
|
-
bounds
|
|
316
|
-
} = this.active;
|
|
317
|
-
var point = this.layer.transcoordC2S(e.offsetX, e.offsetY);
|
|
318
|
-
|
|
319
|
-
/* 최초의 바운드로 되돌려놓고 다시 계산한다. */
|
|
320
|
-
component.bounds = bounds;
|
|
321
|
-
var delta = calcDelta(component, index, point);
|
|
322
|
-
this.layer.selected.filter(c => c.resizable).forEach((c, i) => {
|
|
323
|
-
/* 최초의 바운드로 되돌려놓고 다시 계산한다. 그룹에 반영은 하지 않는다. */
|
|
324
|
-
c.bounds = boundsList[i];
|
|
325
|
-
resizeComponent(c, index, e.shiftKey, delta.dx, delta.dy, true);
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
/* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */
|
|
329
|
-
this.active.component.app.commander.execute(null, false);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
exports.default = Resizer;
|
|
333
|
-
//# sourceMappingURL=resizer.js.map
|