@sequent-org/moodboard 1.2.14 → 1.2.15
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
CHANGED
package/src/core/PixiEngine.js
CHANGED
|
@@ -170,12 +170,51 @@ export class PixiEngine {
|
|
|
170
170
|
removeObject(objectId) {
|
|
171
171
|
const pixiObject = this.objects.get(objectId);
|
|
172
172
|
if (pixiObject) {
|
|
173
|
+
console.log('🗑️ PixiEngine: удаляем объект из сцены:', objectId);
|
|
174
|
+
|
|
175
|
+
// Удаляем из родительского контейнера
|
|
173
176
|
if (this.worldLayer) {
|
|
174
177
|
this.worldLayer.removeChild(pixiObject);
|
|
175
178
|
} else {
|
|
176
179
|
this.app.stage.removeChild(pixiObject);
|
|
177
180
|
}
|
|
181
|
+
|
|
182
|
+
// ИСПРАВЛЕНИЕ: Полная очистка для изображений/эмоджи
|
|
183
|
+
if (pixiObject instanceof PIXI.Sprite) {
|
|
184
|
+
console.log('🗑️ PixiEngine: очищаем ресурсы изображения/эмоджи');
|
|
185
|
+
|
|
186
|
+
// Очищаем текстуру (особенно важно для data URL)
|
|
187
|
+
if (pixiObject.texture && pixiObject.texture !== PIXI.Texture.WHITE) {
|
|
188
|
+
// Не уничтожаем базовые текстуры PIXI
|
|
189
|
+
const textureSource = pixiObject.texture.baseTexture?.resource?.src;
|
|
190
|
+
if (textureSource && (textureSource.startsWith('data:') || textureSource.includes('emodji'))) {
|
|
191
|
+
pixiObject.texture.destroy(false); // Уничтожаем только созданную текстуру
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Очищаем все события
|
|
196
|
+
pixiObject.removeAllListeners();
|
|
197
|
+
|
|
198
|
+
// Принудительно уничтожаем спрайт
|
|
199
|
+
pixiObject.destroy({ children: true, texture: false, baseTexture: false });
|
|
200
|
+
} else {
|
|
201
|
+
// Для других типов объектов - стандартная очистка
|
|
202
|
+
if (pixiObject.destroy) {
|
|
203
|
+
pixiObject.destroy({ children: true });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Удаляем из карты объектов
|
|
178
208
|
this.objects.delete(objectId);
|
|
209
|
+
|
|
210
|
+
// ПРИНУДИТЕЛЬНЫЙ РЕНДЕР после удаления
|
|
211
|
+
if (this.app && this.app.renderer) {
|
|
212
|
+
this.app.renderer.render(this.app.stage);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
console.log(`✅ PixiEngine: объект ${objectId} полностью удален и рендер обновлен`);
|
|
216
|
+
} else {
|
|
217
|
+
console.warn(`⚠️ PixiEngine: объект ${objectId} не найден для удаления`);
|
|
179
218
|
}
|
|
180
219
|
}
|
|
181
220
|
|
|
@@ -54,10 +54,14 @@ export class DeleteObjectCommand extends BaseCommand {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
async execute() {
|
|
57
|
+
console.log('🗑️ DeleteObjectCommand: начинаем удаление объекта:', this.objectId);
|
|
58
|
+
|
|
57
59
|
// Удаляем объект из состояния и PIXI
|
|
58
60
|
this.coreMoodboard.state.removeObject(this.objectId);
|
|
59
61
|
this.coreMoodboard.pixi.removeObject(this.objectId);
|
|
60
62
|
|
|
63
|
+
console.log('🗑️ DeleteObjectCommand: объект удален из state и PIXI');
|
|
64
|
+
|
|
61
65
|
// Если это файловый объект с fileId, удаляем файл с сервера
|
|
62
66
|
if (this.fileIdToDelete && this.coreMoodboard.fileUploadService) {
|
|
63
67
|
try {
|
|
@@ -70,9 +74,12 @@ export class DeleteObjectCommand extends BaseCommand {
|
|
|
70
74
|
}
|
|
71
75
|
}
|
|
72
76
|
|
|
77
|
+
// Эмитим событие удаления для обновления всех UI компонентов
|
|
73
78
|
this.coreMoodboard.eventBus.emit(Events.Object.Deleted, {
|
|
74
79
|
objectId: this.objectId
|
|
75
80
|
});
|
|
81
|
+
|
|
82
|
+
console.log('✅ DeleteObjectCommand: событие Events.Object.Deleted отправлено');
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
undo() {
|
|
@@ -135,13 +135,23 @@ export class SelectTool extends BaseTool {
|
|
|
135
135
|
// Обработка удаления объектов (undo создания, delete команды и т.д.)
|
|
136
136
|
this.eventBus.on(Events.Object.Deleted, (data) => {
|
|
137
137
|
const objectId = data?.objectId || data;
|
|
138
|
+
console.log('🗑️ SelectTool: получено событие удаления объекта:', objectId);
|
|
139
|
+
|
|
138
140
|
if (objectId && this.selection.has(objectId)) {
|
|
141
|
+
console.log('🗑️ SelectTool: удаляем объект из selection:', objectId);
|
|
139
142
|
this.removeFromSelection(objectId);
|
|
140
143
|
|
|
141
|
-
//
|
|
144
|
+
// ИСПРАВЛЕНИЕ: Принудительно очищаем selection если он стал пустым
|
|
142
145
|
if (this.selection.size() === 0) {
|
|
146
|
+
console.log('🗑️ SelectTool: selection пустой, скрываем ручки');
|
|
147
|
+
this.emit(Events.Tool.SelectionClear);
|
|
143
148
|
this.updateResizeHandles();
|
|
144
149
|
}
|
|
150
|
+
} else if (objectId) {
|
|
151
|
+
console.log('🗑️ SelectTool: объект не был в selection, но проверяем ручки');
|
|
152
|
+
// Дополнительная проверка - возможно объект был удален не через selection
|
|
153
|
+
// Принудительно обновляем ручки
|
|
154
|
+
this.updateResizeHandles();
|
|
145
155
|
}
|
|
146
156
|
});
|
|
147
157
|
}
|
|
@@ -35,6 +35,22 @@ export class HtmlHandlesLayer {
|
|
|
35
35
|
this.eventBus.on(Events.Tool.SelectionRemove, () => this.update());
|
|
36
36
|
this.eventBus.on(Events.Tool.SelectionClear, () => this.hide());
|
|
37
37
|
this.eventBus.on(Events.Tool.DragUpdate, () => this.update());
|
|
38
|
+
|
|
39
|
+
// ИСПРАВЛЕНИЕ: Обработка удаления объектов
|
|
40
|
+
this.eventBus.on(Events.Object.Deleted, ({ objectId }) => {
|
|
41
|
+
console.log('🗑️ HtmlHandlesLayer: объект удален, принудительно очищаем ручки:', objectId);
|
|
42
|
+
|
|
43
|
+
// Принудительно скрываем и очищаем все ручки
|
|
44
|
+
this.hide();
|
|
45
|
+
|
|
46
|
+
// Очищаем DOM от старых ручек
|
|
47
|
+
this.layer.innerHTML = '';
|
|
48
|
+
|
|
49
|
+
// Обновляем для актуального состояния
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
this.update();
|
|
52
|
+
}, 10); // Небольшая задержка для полной очистки
|
|
53
|
+
});
|
|
38
54
|
this.eventBus.on(Events.Tool.DragStart, () => { this._handlesSuppressed = true; this._setHandlesVisibility(false); });
|
|
39
55
|
this.eventBus.on(Events.Tool.DragEnd, () => { this._handlesSuppressed = false; this._setHandlesVisibility(true); });
|
|
40
56
|
this.eventBus.on(Events.Tool.ResizeUpdate, () => this.update());
|