@sequent-org/moodboard 1.2.105 → 1.2.107
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
|
@@ -38,6 +38,8 @@ export class PlacementTool extends BaseTool {
|
|
|
38
38
|
// Состояние выбранного изображения
|
|
39
39
|
this.selectedImage = null; // { file, fileName, fileSize, mimeType, properties }
|
|
40
40
|
this.ghostContainer = null; // Контейнер для "призрака" файла, изображения, текста, записки, эмоджи, фрейма или фигур
|
|
41
|
+
// Оригинальные стили курсора PIXI, чтобы можно было временно переопределить pointer/default для текстового инструмента
|
|
42
|
+
this._origCursorStyles = null;
|
|
41
43
|
|
|
42
44
|
if (this.eventBus) {
|
|
43
45
|
this.eventBus.on(Events.Place.Set, (cfg) => {
|
|
@@ -47,6 +49,8 @@ export class PlacementTool extends BaseTool {
|
|
|
47
49
|
const cur = this._getPendingCursor();
|
|
48
50
|
this.app.view.style.cursor = (cur === 'default') ? '' : cur;
|
|
49
51
|
}
|
|
52
|
+
// При выборе текста заставляем pointer вести себя как текстовый курсор
|
|
53
|
+
this._updateCursorOverride();
|
|
50
54
|
|
|
51
55
|
// Показываем призрак для записки, эмоджи, фрейма или фигур, если они активны
|
|
52
56
|
if (this.pending && this.app && this.world) {
|
|
@@ -96,6 +100,8 @@ export class PlacementTool extends BaseTool {
|
|
|
96
100
|
this.selectedFile = null;
|
|
97
101
|
this.selectedImage = null;
|
|
98
102
|
this.hideGhost();
|
|
103
|
+
// Возвращаем стандартное поведение курсора, когда уходим с PlacementTool
|
|
104
|
+
this._updateCursorOverride();
|
|
99
105
|
}
|
|
100
106
|
});
|
|
101
107
|
|
|
@@ -145,6 +151,8 @@ export class PlacementTool extends BaseTool {
|
|
|
145
151
|
// Добавляем обработчик движения мыши для "призрака"
|
|
146
152
|
this.app.view.addEventListener('mousemove', this._onMouseMove.bind(this));
|
|
147
153
|
}
|
|
154
|
+
// При активации синхронизируем переопределение курсора pointer для текста
|
|
155
|
+
this._updateCursorOverride();
|
|
148
156
|
|
|
149
157
|
// Если есть выбранный файл или изображение, показываем призрак
|
|
150
158
|
if (this.selectedFile) {
|
|
@@ -171,6 +179,8 @@ export class PlacementTool extends BaseTool {
|
|
|
171
179
|
// Убираем обработчик движения мыши
|
|
172
180
|
this.app.view.removeEventListener('mousemove', this._onMouseMove.bind(this));
|
|
173
181
|
}
|
|
182
|
+
// Восстанавливаем стандартные стили курсора при выходе из инструмента
|
|
183
|
+
this._updateCursorOverride(true);
|
|
174
184
|
this.hideGhost();
|
|
175
185
|
this.app = null;
|
|
176
186
|
this.world = null;
|
|
@@ -564,6 +574,48 @@ export class PlacementTool extends BaseTool {
|
|
|
564
574
|
}
|
|
565
575
|
}
|
|
566
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Включает/выключает временное переопределение cursorStyles.pointer/default в PIXI,
|
|
579
|
+
* чтобы во время работы с текстом курсор оставался системным 'text' даже при наведении на объекты.
|
|
580
|
+
* @param {boolean} forceReset - если true, всегда восстанавливает оригинальные стили
|
|
581
|
+
*/
|
|
582
|
+
_updateCursorOverride(forceReset = false) {
|
|
583
|
+
try {
|
|
584
|
+
const renderer = this.app && this.app.renderer;
|
|
585
|
+
if (!renderer) return;
|
|
586
|
+
const events = renderer.events || (renderer.plugins && renderer.plugins.interaction);
|
|
587
|
+
const cursorStyles = events && events.cursorStyles;
|
|
588
|
+
if (!cursorStyles) return;
|
|
589
|
+
|
|
590
|
+
const needTextOverride = !forceReset && this.pending && this.pending.type === 'text';
|
|
591
|
+
|
|
592
|
+
if (needTextOverride) {
|
|
593
|
+
// Сохраняем оригинальные стили только один раз
|
|
594
|
+
if (!this._origCursorStyles) {
|
|
595
|
+
this._origCursorStyles = {
|
|
596
|
+
pointer: cursorStyles.pointer,
|
|
597
|
+
default: cursorStyles.default
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
// И pointer, и default делаем системным текстовым курсором,
|
|
601
|
+
// чтобы при наведении/уходе с объектов тип курсора не менялся.
|
|
602
|
+
cursorStyles.pointer = 'text';
|
|
603
|
+
cursorStyles.default = 'text';
|
|
604
|
+
} else if (this._origCursorStyles) {
|
|
605
|
+
// Восстанавливаем оригинальные значения
|
|
606
|
+
if (Object.prototype.hasOwnProperty.call(this._origCursorStyles, 'pointer')) {
|
|
607
|
+
cursorStyles.pointer = this._origCursorStyles.pointer;
|
|
608
|
+
}
|
|
609
|
+
if (Object.prototype.hasOwnProperty.call(this._origCursorStyles, 'default')) {
|
|
610
|
+
cursorStyles.default = this._origCursorStyles.default;
|
|
611
|
+
}
|
|
612
|
+
this._origCursorStyles = null;
|
|
613
|
+
}
|
|
614
|
+
} catch (_) {
|
|
615
|
+
// Если что-то пошло не так, не ломаем остальной функционал
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
567
619
|
/**
|
|
568
620
|
* Показать "призрак" файла
|
|
569
621
|
*/
|