diff --git a/index.html b/index.html index 1cc4168e9..bca2f17ca 100644 --- a/index.html +++ b/index.html @@ -1564,11 +1564,13 @@ + - - + + + diff --git a/src/js/controller/application/HistoryArea/usecase/HistoryRedoCommandUseCase.ts b/src/js/controller/application/HistoryArea/usecase/HistoryRedoCommandUseCase.ts index 30420da52..3284fe58f 100644 --- a/src/js/controller/application/HistoryArea/usecase/HistoryRedoCommandUseCase.ts +++ b/src/js/controller/application/HistoryArea/usecase/HistoryRedoCommandUseCase.ts @@ -302,7 +302,7 @@ export const execute = async ( // レイヤーの移動 case $TIMELINE_MOVE_LAYER_COMMAND: - timelineLayerControllerMoveLayerHistoryRedoUseCase( + await timelineLayerControllerMoveLayerHistoryRedoUseCase( messages[0] as number, // workSpaceId messages[1] as number, // MovieClip ID messages[2] as number, // Before Index diff --git a/src/js/controller/application/HistoryArea/usecase/HistoryUndoCommandUseCase.ts b/src/js/controller/application/HistoryArea/usecase/HistoryUndoCommandUseCase.ts index 13e58442e..e3a727b57 100644 --- a/src/js/controller/application/HistoryArea/usecase/HistoryUndoCommandUseCase.ts +++ b/src/js/controller/application/HistoryArea/usecase/HistoryUndoCommandUseCase.ts @@ -299,7 +299,7 @@ export const execute = async ( // レイヤーの移動 case $TIMELINE_MOVE_LAYER_COMMAND: - timelineLayerControllerMoveLayerHistoryUndoUseCase( + await timelineLayerControllerMoveLayerHistoryUndoUseCase( messages[0] as number, // workSpaceId messages[1] as number, // MovieClip ID messages[2] as number, // Before Index diff --git a/src/js/external/core/application/ExternalLayer/usecase/ExternalLayerUpdateLockUseCase.ts b/src/js/external/core/application/ExternalLayer/usecase/ExternalLayerUpdateLockUseCase.ts index 0035ca4f1..54ef86ef6 100644 --- a/src/js/external/core/application/ExternalLayer/usecase/ExternalLayerUpdateLockUseCase.ts +++ b/src/js/external/core/application/ExternalLayer/usecase/ExternalLayerUpdateLockUseCase.ts @@ -69,10 +69,10 @@ export const execute = async ( propertyAreaChangeDisplayUseCase(); // マスクレイヤーなら、子レイヤーの表示を更新 - screenDisplayObjectMaskLockUpdateElementService(layer); + await screenDisplayObjectMaskLockUpdateElementService(layer); // マスクインのレイヤーのDisplayObjectのElemnet表示を更新 - screenDisplayObjectUpdateLayerMaskElementUseCase(layer); + await screenDisplayObjectUpdateLayerMaskElementUseCase(layer); } // 受け取り処理ではなく、画面共有していれば共有者に送信 diff --git a/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryRedoUseCase.ts b/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryRedoUseCase.ts index 2019daa7a..c906ae8d7 100644 --- a/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryRedoUseCase.ts +++ b/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryRedoUseCase.ts @@ -9,6 +9,7 @@ import { $MASK_MODE } from "@/config/LayerModeConfig"; import { execute as screenAreaUpdateMovedLayerService } from "@/screen/application/ScreenArea/service/ScreenAreaUpdateMovedLayerService"; +import { execute as screenDisplayObjectUpdateLayerMaskInElementUseCase } from "@/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase"; /** * @description レイヤーの移動を変更後に戻す @@ -20,18 +21,18 @@ import { execute as screenAreaUpdateMovedLayerService } from "@/screen/applicati * @param {number} after_index * @param {number} after_mode * @param {number} after_parent_id - * @return {void} + * @return {Promise} * @method * @public */ -export const execute = ( +export const execute = async ( work_space_id: number, library_id: number, before_index: number, after_index: number, after_mode: LayerModeImpl, after_parent_id: number -): void => { +): Promise => { const workSpace = $getWorkSpace(work_space_id); if (!workSpace) { @@ -96,5 +97,9 @@ export const execute = ( // スクリーンの表示を更新 screenAreaUpdateMovedLayerService(layer); + + if (after_parent_id) { + await screenDisplayObjectUpdateLayerMaskInElementUseCase(movieClip, layer); + } } }; \ No newline at end of file diff --git a/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryUndoUseCase.ts b/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryUndoUseCase.ts index 102b8a3f4..2e2e4cd51 100644 --- a/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryUndoUseCase.ts +++ b/src/js/history/application/timeline/application/TimelineLayerController/MoveLayer/usecase/TimelineLayerControllerMoveLayerHistoryUndoUseCase.ts @@ -9,6 +9,7 @@ import { $MASK_MODE } from "@/config/LayerModeConfig"; import { execute as screenAreaUpdateMovedLayerService } from "@/screen/application/ScreenArea/service/ScreenAreaUpdateMovedLayerService"; +import { execute as screenDisplayObjectUpdateLayerMaskInElementUseCase } from "@/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase"; /** * @description レイヤーの移動を元に戻す @@ -20,18 +21,18 @@ import { execute as screenAreaUpdateMovedLayerService } from "@/screen/applicati * @param {number} after_index * @param {number} before_mode * @param {number} before_parent_id - * @return {void} + * @return {Promise} * @method * @public */ -export const execute = ( +export const execute = async ( work_space_id: number, library_id: number, before_index: number, after_index: number, before_mode: LayerModeImpl, before_parent_id: number -): void => { +): Promise => { const workSpace = $getWorkSpace(work_space_id); if (!workSpace) { @@ -50,6 +51,7 @@ export const execute = ( } const layer = layers[0]; + const parentId = layer.parentId; layer.mode = before_mode; layer.parentId = before_parent_id; @@ -97,5 +99,10 @@ export const execute = ( // スクリーンの表示を更新 screenAreaUpdateMovedLayerService(layer); + + // マスク表示を更新 + if (parentId > -1) { + await screenDisplayObjectUpdateLayerMaskInElementUseCase(movieClip, layer); + } } }; \ No newline at end of file diff --git a/src/js/screen/application/DisplayObject/service/ScreenDisplayObjectMaskLockUpdateElementService.ts b/src/js/screen/application/DisplayObject/service/ScreenDisplayObjectMaskLockUpdateElementService.ts index 9e7794b61..5eec51969 100644 --- a/src/js/screen/application/DisplayObject/service/ScreenDisplayObjectMaskLockUpdateElementService.ts +++ b/src/js/screen/application/DisplayObject/service/ScreenDisplayObjectMaskLockUpdateElementService.ts @@ -1,17 +1,18 @@ +import type { Layer } from "@/core/domain/model/Layer"; import { $MASK_MODE } from "@/config/LayerModeConfig"; import { $SCREEN_STAGE_AREA_ID } from "@/config/ScreenConfig"; -import type { Layer } from "@/core/domain/model/Layer"; - +import { $getCurrentWorkSpace } from "@/core/application/CoreUtil"; +import { execute as screenAreaAppendCharacterService } from "@/screen/application/ScreenArea/service/ScreenAreaAppendCharacterService"; /** * @description マスクの表示と子のレイヤーの表示を更新 * Update mask display and child layer display * * @param {Layer} layer - * @return {void} + * @return {Promise} * @method * @public */ -export const execute = (layer: Layer): void => +export const execute = async (layer: Layer): Promise => { if (layer.mode !== $MASK_MODE) { return ; @@ -35,15 +36,31 @@ export const execute = (layer: Layer): void => // 配置がなければ終了 const length = elements.length; if (!length) { - return ; - } + const workSpace = $getCurrentWorkSpace(); + const movieClip = workSpace.scene; - for (let idx = 0; idx < length; ++idx) { - const node = elements[idx] as HTMLElement; - if (!node) { - continue ; + const activeCharacters = layer.getActiveCharacters(movieClip.currentFrame); + if (!activeCharacters.length) { + return ; } - node.style.display = layer.lock ? "none" : ""; + // elmentが生成されてない場合は、レイヤー指定で再生成 + for (let idx = 0; activeCharacters.length > idx; ++idx) { + const character = activeCharacters[idx]; + if (!character) { + continue; + } + + await screenAreaAppendCharacterService(character, layer); + } + } else { + for (let idx = 0; idx < length; ++idx) { + const node = elements[idx] as HTMLElement; + if (!node) { + continue ; + } + + node.style.display = layer.lock ? "none" : ""; + } } }; \ No newline at end of file diff --git a/src/js/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase.ts b/src/js/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase.ts index f7f4c8d13..323331afd 100644 --- a/src/js/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase.ts +++ b/src/js/screen/application/DisplayObject/usecase/ScreenDisplayObjectUpdateLayerMaskInElementUseCase.ts @@ -28,7 +28,7 @@ export const execute = async (movie_clip: MovieClip, layer: Layer): Promise => // 非表示になる前の位置を取得 const left = rectElement.offsetLeft; const top = rectElement.offsetTop; - console.log(left, top); // 範囲選択を非表示に drawRectHideService();