@next2d/text 1.18.11 → 2.0.0
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 +14 -18
- package/src/TextArea/service/TextAreaMovePositionService.d.ts +11 -0
- package/src/TextArea/service/TextAreaMovePositionService.js +42 -0
- package/src/TextArea/usecase/TextAreaCompositionEndUseCase.d.ts +9 -0
- package/src/TextArea/usecase/TextAreaCompositionEndUseCase.js +17 -0
- package/src/TextArea/usecase/TextAreaCompositionStartUseCase.d.ts +9 -0
- package/src/TextArea/usecase/TextAreaCompositionStartUseCase.js +17 -0
- package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.js +18 -0
- package/src/TextArea/usecase/TextAreaInputUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaInputUseCase.js +25 -0
- package/src/TextArea/usecase/TextAreaRegisterEventUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaRegisterEventUseCase.js +21 -0
- package/src/TextData.d.ts +103 -0
- package/src/TextData.js +183 -0
- package/src/TextField/service/TextFieldApplyChangesService.d.ts +11 -0
- package/src/TextField/service/TextFieldApplyChangesService.js +16 -0
- package/src/TextField/service/TextFieldBlinkingClearTimeoutService.d.ts +9 -0
- package/src/TextField/service/TextFieldBlinkingClearTimeoutService.js +16 -0
- package/src/TextField/service/TextFieldCompositionStartService.d.ts +11 -0
- package/src/TextField/service/TextFieldCompositionStartService.js +12 -0
- package/src/TextField/service/TextFieldPasteService.d.ts +11 -0
- package/src/TextField/service/TextFieldPasteService.js +16 -0
- package/src/TextField/usecase/TextFieldArrowDownUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowDownUseCase.js +191 -0
- package/src/TextField/usecase/TextFieldArrowLeftUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowLeftUseCase.js +98 -0
- package/src/TextField/usecase/TextFieldArrowRightUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowRightUseCase.js +92 -0
- package/src/TextField/usecase/TextFieldArrowUpUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowUpUseCase.js +156 -0
- package/src/TextField/usecase/TextFieldBlinkingUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldBlinkingUseCase.js +21 -0
- package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.d.ts +13 -0
- package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.js +58 -0
- package/src/TextField/usecase/TextFieldCompositionEndUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldCompositionEndUseCase.js +32 -0
- package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.js +109 -0
- package/src/TextField/usecase/TextFieldCopyUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldCopyUseCase.js +38 -0
- package/src/TextField/usecase/TextFieldDeleteTextUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldDeleteTextUseCase.js +108 -0
- package/src/TextField/usecase/TextFieldGetLineTextUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldGetLineTextUseCase.js +32 -0
- package/src/TextField/usecase/TextFieldGetTextDataUseCase.d.ts +15 -0
- package/src/TextField/usecase/TextFieldGetTextDataUseCase.js +26 -0
- package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.js +31 -0
- package/src/TextField/usecase/TextFieldInsertTextUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldInsertTextUseCase.js +79 -0
- package/src/TextField/usecase/TextFieldKeyDownEventUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldKeyDownEventUseCase.js +60 -0
- package/src/TextField/usecase/TextFieldReloadUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldReloadUseCase.js +25 -0
- package/src/TextField/usecase/TextFieldReplaceTextUseCase.d.ts +14 -0
- package/src/TextField/usecase/TextFieldReplaceTextUseCase.js +24 -0
- package/src/TextField/usecase/TextFieldResetUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResetUseCase.js +20 -0
- package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.js +37 -0
- package/src/TextField/usecase/TextFieldResizeUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResizeUseCase.js +49 -0
- package/src/TextField/usecase/TextFieldSelectAllUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSelectAllUseCase.js +20 -0
- package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.js +90 -0
- package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.d.ts +14 -0
- package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.js +197 -0
- package/src/TextField/usecase/TextFieldSetFocusUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSetFocusUseCase.js +43 -0
- package/src/TextField/usecase/TextFieldSetScrollXUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldSetScrollXUseCase.js +66 -0
- package/src/TextField/usecase/TextFieldSetScrollYUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldSetScrollYUseCase.js +66 -0
- package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.js +82 -0
- package/src/TextField.d.ts +602 -0
- package/src/TextField.js +1292 -0
- package/src/TextFormat/service/TextFormatGenerateFontStyleService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatGenerateFontStyleService.js +19 -0
- package/src/TextFormat/service/TextFormatGetWidthMarginService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatGetWidthMarginService.js +19 -0
- package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.js +51 -0
- package/src/TextFormat/service/TextFormatIsSameService.d.ts +12 -0
- package/src/TextFormat/service/TextFormatIsSameService.js +28 -0
- package/src/TextFormat/service/TextFormatSetDefaultService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatSetDefaultService.js +22 -0
- package/{dist → src}/TextFormat.d.ts +42 -128
- package/src/TextFormat.js +233 -0
- package/src/TextParser/service/TextParserAdjustmentHeightService.d.ts +11 -0
- package/src/TextParser/service/TextParserAdjustmentHeightService.js +24 -0
- package/src/TextParser/service/TextParserParseStyleService.d.ts +11 -0
- package/src/TextParser/service/TextParserParseStyleService.js +80 -0
- package/src/TextParser/usecase/TextParserCreateNewLineUseCase.d.ts +13 -0
- package/src/TextParser/usecase/TextParserCreateNewLineUseCase.js +35 -0
- package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.d.ts +15 -0
- package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.js +37 -0
- package/src/TextParser/usecase/TextParserParseTagUseCase.d.ts +17 -0
- package/src/TextParser/usecase/TextParserParseTagUseCase.js +57 -0
- package/src/TextParser/usecase/TextParserParseTextUseCase.d.ts +16 -0
- package/src/TextParser/usecase/TextParserParseTextUseCase.js +140 -0
- package/src/TextParser/usecase/TextParserSetAttributesUseCase.d.ts +14 -0
- package/src/TextParser/usecase/TextParserSetAttributesUseCase.js +63 -0
- package/src/TextUtil.d.ts +114 -0
- package/src/TextUtil.js +186 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +3 -0
- package/src/interface/IAttributeObject.d.ts +4 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/ICharacter.d.ts +5 -0
- package/src/interface/ICharacter.js +1 -0
- package/src/interface/IDictionaryTag.d.ts +8 -0
- package/src/interface/IDictionaryTag.js +1 -0
- package/src/interface/IElementPosition.d.ts +4 -0
- package/src/interface/IElementPosition.js +1 -0
- package/src/interface/IFilterArray.d.ts +2 -0
- package/src/interface/IFilterArray.js +1 -0
- package/src/interface/IGrid.d.ts +6 -0
- package/src/interface/IGrid.js +1 -0
- package/src/interface/ILoopConfig.d.ts +8 -0
- package/src/interface/ILoopConfig.js +1 -0
- package/src/interface/ILoopType.d.ts +1 -0
- package/src/interface/ILoopType.js +1 -0
- package/src/interface/IMovieClipActionObject.d.ts +5 -0
- package/src/interface/IMovieClipActionObject.js +1 -0
- package/src/interface/IMovieClipCharacter.d.ts +17 -0
- package/src/interface/IMovieClipCharacter.js +1 -0
- package/src/interface/IMovieClipLabelObject.d.ts +4 -0
- package/src/interface/IMovieClipLabelObject.js +1 -0
- package/src/interface/IMovieClipSoundObject.d.ts +5 -0
- package/src/interface/IMovieClipSoundObject.js +1 -0
- package/src/interface/IOptions.d.ts +8 -0
- package/src/interface/IOptions.js +1 -0
- package/src/interface/IPlaceObject.d.ts +14 -0
- package/src/interface/IPlaceObject.js +1 -0
- package/src/interface/IRGBA.d.ts +6 -0
- package/src/interface/IRGBA.js +1 -0
- package/src/interface/IShapeCharacter.d.ts +14 -0
- package/src/interface/IShapeCharacter.js +1 -0
- package/src/interface/ISoundTag.d.ts +6 -0
- package/src/interface/ISoundTag.js +1 -0
- package/src/interface/ISurfaceFilter.d.ts +6 -0
- package/src/interface/ISurfaceFilter.js +1 -0
- package/src/interface/ITextFieldAutoSize.d.ts +1 -0
- package/src/interface/ITextFieldAutoSize.js +1 -0
- package/src/interface/ITextFieldCharacter copy.d.ts +26 -0
- package/src/interface/ITextFieldCharacter copy.js +1 -0
- package/src/interface/ITextFieldCharacter.d.ts +26 -0
- package/src/interface/ITextFieldCharacter.js +1 -0
- package/src/interface/ITextFieldType copy.d.ts +1 -0
- package/src/interface/ITextFieldType copy.js +1 -0
- package/src/interface/ITextFieldType.d.ts +1 -0
- package/src/interface/ITextFieldType.js +1 -0
- package/src/interface/ITextFormatAlign copy.d.ts +1 -0
- package/src/interface/ITextFormatAlign copy.js +1 -0
- package/src/interface/ITextFormatAlign.d.ts +1 -0
- package/src/interface/ITextFormatAlign.js +1 -0
- package/src/interface/ITextFormatObject.d.ts +14 -0
- package/src/interface/ITextFormatObject.js +1 -0
- package/src/interface/ITextObject.d.ts +12 -0
- package/src/interface/ITextObject.js +1 -0
- package/src/interface/ITextObjectMode.d.ts +1 -0
- package/src/interface/ITextObjectMode.js +1 -0
- package/src/interface/IVideoCharacter.d.ts +11 -0
- package/src/interface/IVideoCharacter.js +1 -0
- package/dist/TextData.d.ts +0 -74
- package/dist/TextData.js +0 -132
- package/dist/TextFormat.js +0 -493
- package/dist/TextParser.d.ts +0 -23
- package/dist/TextParser.js +0 -459
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/interface/OptionsImpl.d.ts +0 -8
- package/dist/interface/TextObjectImpl.d.ts +0 -12
- package/dist/interface/TextObjectModeImpl.d.ts +0 -1
- /package/{dist/interface/OptionsImpl.js → src/interface/IAttributeObject.js} +0 -0
- /package/{dist/interface/TextObjectImpl.js → src/interface/IBlendMode.js} +0 -0
- /package/{dist/interface/TextObjectModeImpl.js → src/interface/IBounds.js} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { execute as textFieldResetUseCase } from "./TextFieldResetUseCase";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
3
|
+
import { execute as textFieldResizeUseCase } from "./TextFieldResizeUseCase";
|
|
4
|
+
import { execute as textFieldResizeAutoFontSizeUseCase } from "./TextFieldResizeAutoFontSizeUseCase";
|
|
5
|
+
/**
|
|
6
|
+
* @description テキストフィールドの描画生成情報を再計算します
|
|
7
|
+
* Recalculates the drawing generation information of the text field
|
|
8
|
+
*
|
|
9
|
+
* @param {TextField} text_field
|
|
10
|
+
* @return {void}
|
|
11
|
+
* @method
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
export const execute = (text_field) => {
|
|
15
|
+
// 初期化
|
|
16
|
+
textFieldResetUseCase(text_field);
|
|
17
|
+
// 描画情報を生成
|
|
18
|
+
textFieldGetTextDataUseCase(text_field);
|
|
19
|
+
// テキストフィールドの自動フォントサイズ設定がonならば、自動フォントサイズを適用する
|
|
20
|
+
if (text_field.autoSize === "none" && text_field.autoFontSize) {
|
|
21
|
+
textFieldResizeAutoFontSizeUseCase(text_field);
|
|
22
|
+
}
|
|
23
|
+
// テキストエリアをリサイズ
|
|
24
|
+
textFieldResizeUseCase(text_field);
|
|
25
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 指定した範囲の文字列を置き換える
|
|
4
|
+
* Replaces strings in the specified range
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_filed
|
|
7
|
+
* @param {string} new_text
|
|
8
|
+
* @param {number} begin_index
|
|
9
|
+
* @param {number} end_index
|
|
10
|
+
* @return {void}
|
|
11
|
+
* @method
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
export declare const execute: (text_filed: TextField, new_text: string, begin_index: number, end_index: number) => void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 指定した範囲の文字列を置き換える
|
|
3
|
+
* Replaces strings in the specified range
|
|
4
|
+
*
|
|
5
|
+
* @param {TextField} text_filed
|
|
6
|
+
* @param {string} new_text
|
|
7
|
+
* @param {number} begin_index
|
|
8
|
+
* @param {number} end_index
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export const execute = (text_filed, new_text, begin_index, end_index) => {
|
|
14
|
+
if (0 > begin_index || begin_index > end_index) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const text = text_filed.text;
|
|
18
|
+
const beginText = begin_index
|
|
19
|
+
? text.slice(0, begin_index)
|
|
20
|
+
: "";
|
|
21
|
+
text_filed.text = beginText
|
|
22
|
+
+ new_text
|
|
23
|
+
+ text.slice(end_index, text.length);
|
|
24
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 指定したテキストフィールドのテキストデータをリセットします。
|
|
4
|
+
* Resets the text data in the specified text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { $cacheStore } from "@next2d/cache";
|
|
2
|
+
import { execute as textFieldApplyChangesService } from "../service/TextFieldApplyChangesService";
|
|
3
|
+
/**
|
|
4
|
+
* @description 指定したテキストフィールドのテキストデータをリセットします。
|
|
5
|
+
* Resets the text data in the specified text field.
|
|
6
|
+
*
|
|
7
|
+
* @param {TextField} text_field
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field) => {
|
|
13
|
+
text_field.$textData = null;
|
|
14
|
+
textFieldApplyChangesService(text_field);
|
|
15
|
+
// Remove cache
|
|
16
|
+
if (text_field.uniqueKey !== "" && $cacheStore.has(text_field.uniqueKey)) {
|
|
17
|
+
$cacheStore.removeById(text_field.uniqueKey);
|
|
18
|
+
$cacheStore.$removeIds.push(+text_field.uniqueKey);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 現在の TextField のエリア内に収まる最大のフォントサイズを計算し、描画情報を生成します
|
|
4
|
+
* Calculates the maximum font size that will fit within the current TextField area and generates drawing information
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
2
|
+
import { execute as textFieldResetUseCase } from "./TextFieldResetUseCase";
|
|
3
|
+
import { execute as textFieldApplyChangesService } from "../service/TextFieldApplyChangesService";
|
|
4
|
+
/**
|
|
5
|
+
* @description 現在の TextField のエリア内に収まる最大のフォントサイズを計算し、描画情報を生成します
|
|
6
|
+
* Calculates the maximum font size that will fit within the current TextField area and generates drawing information
|
|
7
|
+
*
|
|
8
|
+
* @param {TextField} text_field
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export const execute = (text_field) => {
|
|
14
|
+
let maxFontSize = 0;
|
|
15
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
16
|
+
for (let idx = 0; idx < textData.textTable.length; ++idx) {
|
|
17
|
+
const textObject = textData.textTable[idx];
|
|
18
|
+
maxFontSize = Math.max(maxFontSize, textObject.textFormat.size || 0);
|
|
19
|
+
}
|
|
20
|
+
let subSize = 1;
|
|
21
|
+
if (text_field.width && text_field.textWidth) {
|
|
22
|
+
while (maxFontSize > subSize
|
|
23
|
+
&& text_field.textWidth + 4 > text_field.width) {
|
|
24
|
+
textFieldResetUseCase(text_field);
|
|
25
|
+
textFieldGetTextDataUseCase(text_field, subSize++);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (text_field.height && text_field.textHeight) {
|
|
29
|
+
while (maxFontSize > subSize
|
|
30
|
+
&& text_field.textHeight + 4 > text_field.height) {
|
|
31
|
+
textFieldResetUseCase(text_field);
|
|
32
|
+
textFieldGetTextDataUseCase(text_field, subSize++);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Apply changes
|
|
36
|
+
textFieldApplyChangesService(text_field);
|
|
37
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 設定に合わせてテキストフィールドのサイズを変更します
|
|
4
|
+
* Resize the text field to fit your settings
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { execute as textFormatGetWidthMarginService } from "../../TextFormat/service/TextFormatGetWidthMarginService";
|
|
2
|
+
import { execute as textFieldApplyChangesService } from "../../TextField/service/TextFieldApplyChangesService";
|
|
3
|
+
/**
|
|
4
|
+
* @description 設定に合わせてテキストフィールドのサイズを変更します
|
|
5
|
+
* Resize the text field to fit your settings
|
|
6
|
+
*
|
|
7
|
+
* @param {TextField} text_field
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field) => {
|
|
13
|
+
// apply changes
|
|
14
|
+
textFieldApplyChangesService(text_field);
|
|
15
|
+
// update bounds
|
|
16
|
+
if (text_field.autoSize === "none") {
|
|
17
|
+
text_field.xMin = text_field.bounds.xMin;
|
|
18
|
+
text_field.yMin = text_field.bounds.yMin;
|
|
19
|
+
text_field.xMax = text_field.bounds.xMax;
|
|
20
|
+
text_field.yMax = text_field.bounds.yMax;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const textFormat = text_field.defaultTextFormat;
|
|
24
|
+
// 4は左右の1pxのボーダーと1pxのマージンの合計値
|
|
25
|
+
const width = text_field.textWidth + 4 + textFormatGetWidthMarginService(textFormat);
|
|
26
|
+
if (text_field.wordWrap) {
|
|
27
|
+
text_field.xMin = text_field.bounds.xMin;
|
|
28
|
+
text_field.xMax = text_field.bounds.xMax;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
switch (text_field.autoSize) {
|
|
32
|
+
case "left":
|
|
33
|
+
text_field.xMax = width + text_field.xMin;
|
|
34
|
+
break;
|
|
35
|
+
case "center":
|
|
36
|
+
text_field.xMax = width + text_field.xMin;
|
|
37
|
+
break;
|
|
38
|
+
case "right":
|
|
39
|
+
text_field.xMax = text_field.bounds.xMax
|
|
40
|
+
- (text_field.bounds.xMax - text_field.bounds.xMin
|
|
41
|
+
- (width - text_field.bounds.xMin));
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 4は上下の1pxのボーダーと1pxのマージンの合計値
|
|
48
|
+
text_field.yMax = text_field.textHeight + text_field.bounds.yMin + 4;
|
|
49
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "@next2d/text";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの全選択を実行する
|
|
4
|
+
* Execute the text field's select all
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { execute as textFieldApplyChangesService } from "../service/TextFieldApplyChangesService";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
3
|
+
/**
|
|
4
|
+
* @description テキストフィールドの全選択を実行する
|
|
5
|
+
* Execute the text field's select all
|
|
6
|
+
*
|
|
7
|
+
* @param {TextField} text_field
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field) => {
|
|
13
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
14
|
+
if (2 > textData.textTable.length) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
text_field.selectIndex = 1;
|
|
18
|
+
text_field.focusIndex = textData.textTable.length;
|
|
19
|
+
textFieldApplyChangesService(text_field);
|
|
20
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの選択中のテキスト位置にスクロールを移動します。
|
|
4
|
+
* Move the scroll to the selected text position in the text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの選択中のテキスト位置にスクロールを移動します。
|
|
4
|
+
* Move the scroll to the selected text position in the text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export const execute = (text_field) => {
|
|
12
|
+
if (text_field.selectIndex === -1) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
16
|
+
if (2 > textData.textTable.length) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const textObject = textData.textTable[text_field.selectIndex];
|
|
20
|
+
if (!textObject) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const line = textObject.mode === "text"
|
|
24
|
+
? textObject.line
|
|
25
|
+
: textObject.line - 1;
|
|
26
|
+
const height = text_field.height;
|
|
27
|
+
const scaleY = (text_field.textHeight - height) / height;
|
|
28
|
+
let currentHeight = -text_field.scrollY * scaleY - 2;
|
|
29
|
+
let endLine = 0;
|
|
30
|
+
for (let idx = 0; idx < textData.heightTable.length; ++idx) {
|
|
31
|
+
currentHeight += textData.heightTable[idx];
|
|
32
|
+
if (currentHeight > height) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
endLine++;
|
|
36
|
+
}
|
|
37
|
+
currentHeight = -text_field.scrollY * scaleY - 2;
|
|
38
|
+
let startLine = 0;
|
|
39
|
+
for (let idx = 0; idx < textData.heightTable.length; ++idx) {
|
|
40
|
+
currentHeight += textData.heightTable[idx];
|
|
41
|
+
if (currentHeight > 0) {
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
startLine++;
|
|
45
|
+
}
|
|
46
|
+
if (startLine >= textObject.line) {
|
|
47
|
+
if (text_field.xScrollShape.hasLocalVariable("job")) {
|
|
48
|
+
text_field.xScrollShape.deleteLocalVariable("job");
|
|
49
|
+
}
|
|
50
|
+
text_field.scrollY -= textData.heightTable[textObject.line] / scaleY;
|
|
51
|
+
}
|
|
52
|
+
if (textObject.line >= endLine) {
|
|
53
|
+
if (text_field.xScrollShape.hasLocalVariable("job")) {
|
|
54
|
+
text_field.xScrollShape.deleteLocalVariable("job");
|
|
55
|
+
}
|
|
56
|
+
text_field.scrollY += textData.heightTable[textObject.line] / scaleY;
|
|
57
|
+
}
|
|
58
|
+
const width = text_field.width;
|
|
59
|
+
const scaleX = (text_field.textWidth - width) / width;
|
|
60
|
+
let textWidth = 2;
|
|
61
|
+
let limitWidth = text_field.scrollX * scaleX - 2 + width;
|
|
62
|
+
for (let idx = 1; text_field.selectIndex >= idx; ++idx) {
|
|
63
|
+
const textObject = textData.textTable[idx];
|
|
64
|
+
if (!textObject || textObject.line > line) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
if (textObject.line !== line) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (text_field.selectIndex !== idx) {
|
|
71
|
+
textWidth += textObject.w;
|
|
72
|
+
}
|
|
73
|
+
limitWidth -= textObject.w;
|
|
74
|
+
if (limitWidth > 0) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (text_field.yScrollShape.hasLocalVariable("job")) {
|
|
78
|
+
text_field.yScrollShape.deleteLocalVariable("job");
|
|
79
|
+
}
|
|
80
|
+
text_field.scrollX += textObject.w / scaleX;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
const scrollWidth = text_field.scrollX * scaleX - 2;
|
|
84
|
+
if (scrollWidth > textWidth) {
|
|
85
|
+
if (text_field.yScrollShape.hasLocalVariable("job")) {
|
|
86
|
+
text_field.yScrollShape.deleteLocalVariable("job");
|
|
87
|
+
}
|
|
88
|
+
text_field.scrollX = text_field.width * ((textWidth - 2) / text_field.textWidth);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドのフォーカスしてるテキスト位置(インデックス)を設定します。
|
|
4
|
+
* Set the text position (index) that the text field is focusing on.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {number} stage_x
|
|
8
|
+
* @param {number} stage_y
|
|
9
|
+
* @param {boolean} [selected=false]
|
|
10
|
+
* @return {void}
|
|
11
|
+
* @method
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
export declare const execute: (text_field: TextField, stage_x: number, stage_y: number, selected?: boolean) => void;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { Point } from "@next2d/geom";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
3
|
+
import { execute as textFieldBlinkingUseCase } from "./TextFieldBlinkingUseCase";
|
|
4
|
+
import { execute as textFieldApplyChangesService } from "../service/TextFieldApplyChangesService";
|
|
5
|
+
import { execute as textFieldBlinkingClearTimeoutService } from "../service/TextFieldBlinkingClearTimeoutService";
|
|
6
|
+
import { execute as textFieldSelectedFocusMoveUseCase } from "./TextFieldSelectedFocusMoveUseCase";
|
|
7
|
+
import { $getBlinkingTimerId } from "../../TextUtil";
|
|
8
|
+
/**
|
|
9
|
+
* @description テキストフィールドのフォーカスしてるテキスト位置(インデックス)を設定します。
|
|
10
|
+
* Set the text position (index) that the text field is focusing on.
|
|
11
|
+
*
|
|
12
|
+
* @param {TextField} text_field
|
|
13
|
+
* @param {number} stage_x
|
|
14
|
+
* @param {number} stage_y
|
|
15
|
+
* @param {boolean} [selected=false]
|
|
16
|
+
* @return {void}
|
|
17
|
+
* @method
|
|
18
|
+
* @protected
|
|
19
|
+
*/
|
|
20
|
+
export const execute = (text_field, stage_x, stage_y, selected = false) => {
|
|
21
|
+
if (text_field.type !== "input") {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
25
|
+
if (2 > textData.textTable.length) {
|
|
26
|
+
text_field.focusIndex = 1;
|
|
27
|
+
text_field.selectIndex = -1;
|
|
28
|
+
if ($getBlinkingTimerId() === undefined) {
|
|
29
|
+
textFieldBlinkingUseCase(text_field);
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const width = text_field.width;
|
|
34
|
+
const height = text_field.height;
|
|
35
|
+
let tx = 0;
|
|
36
|
+
if (text_field.scrollX > 0) {
|
|
37
|
+
tx += text_field.scrollX * (text_field.textWidth - width) / width;
|
|
38
|
+
}
|
|
39
|
+
let ty = 0;
|
|
40
|
+
if (text_field.scrollY > 0) {
|
|
41
|
+
ty += text_field.scrollY * (text_field.textHeight - height) / height;
|
|
42
|
+
}
|
|
43
|
+
const point = text_field.globalToLocal(new Point(stage_x, stage_y));
|
|
44
|
+
const x = point.x + tx;
|
|
45
|
+
const y = point.y + ty;
|
|
46
|
+
let w = 2;
|
|
47
|
+
let yMin = 2;
|
|
48
|
+
let yMax = yMin + textData.heightTable[0];
|
|
49
|
+
for (let idx = 1; idx < textData.textTable.length; ++idx) {
|
|
50
|
+
const textObject = textData.textTable[idx];
|
|
51
|
+
if (!textObject) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
switch (textObject.mode) {
|
|
55
|
+
case "break":
|
|
56
|
+
case "wrap":
|
|
57
|
+
if (x > w && y > yMin
|
|
58
|
+
&& yMax > y
|
|
59
|
+
&& width > x) {
|
|
60
|
+
const index = idx;
|
|
61
|
+
if (selected) {
|
|
62
|
+
if (text_field.selectIndex !== index) {
|
|
63
|
+
text_field.selectIndex = index;
|
|
64
|
+
if (text_field.focusVisible) {
|
|
65
|
+
text_field.focusVisible = false;
|
|
66
|
+
textFieldBlinkingClearTimeoutService();
|
|
67
|
+
}
|
|
68
|
+
textFieldSelectedFocusMoveUseCase(text_field);
|
|
69
|
+
textFieldApplyChangesService(text_field);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
if (text_field.focusIndex !== index || text_field.selectIndex > -1) {
|
|
74
|
+
text_field.focusIndex = index;
|
|
75
|
+
text_field.selectIndex = -1;
|
|
76
|
+
textFieldApplyChangesService(text_field);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
w = 2;
|
|
82
|
+
yMin += textData.heightTable[textObject.line - 1];
|
|
83
|
+
yMax = yMin + textData.heightTable[textObject.line];
|
|
84
|
+
break;
|
|
85
|
+
case "text":
|
|
86
|
+
if (x > w && y > yMin
|
|
87
|
+
&& yMax > y
|
|
88
|
+
&& w + textObject.w > x) {
|
|
89
|
+
let index = idx;
|
|
90
|
+
if (selected) {
|
|
91
|
+
if (text_field.focusIndex > index) {
|
|
92
|
+
// left
|
|
93
|
+
if (text_field.focusIndex === index + 1) {
|
|
94
|
+
if (w + textObject.w / 2 < x) {
|
|
95
|
+
index = -1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
if (w + textObject.w / 2 < x) {
|
|
100
|
+
index += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// right
|
|
106
|
+
if (text_field.focusIndex === index) {
|
|
107
|
+
if (w + textObject.w / 2 > x) {
|
|
108
|
+
index = -1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (w + textObject.w / 2 > x) {
|
|
113
|
+
index -= 1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (text_field.selectIndex !== index) {
|
|
118
|
+
text_field.selectIndex = index;
|
|
119
|
+
if (text_field.selectIndex > -1) {
|
|
120
|
+
text_field.focusVisible = false;
|
|
121
|
+
textFieldBlinkingClearTimeoutService();
|
|
122
|
+
}
|
|
123
|
+
textFieldSelectedFocusMoveUseCase(text_field);
|
|
124
|
+
textFieldApplyChangesService(text_field);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
if (w + textObject.w / 2 < x) {
|
|
129
|
+
const textObject = textData.textTable[index + 1];
|
|
130
|
+
if (!textObject || textObject.mode === "text") {
|
|
131
|
+
index += 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (text_field.focusIndex !== index || text_field.selectIndex > -1) {
|
|
135
|
+
text_field.focusIndex = index;
|
|
136
|
+
text_field.selectIndex = -1;
|
|
137
|
+
textFieldApplyChangesService(text_field);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (idx === textData.textTable.length - 1
|
|
143
|
+
&& x > w && y > yMin && yMax > y
|
|
144
|
+
&& width > x) {
|
|
145
|
+
const index = textData.textTable.length;
|
|
146
|
+
if (selected) {
|
|
147
|
+
if (text_field.selectIndex !== index) {
|
|
148
|
+
text_field.selectIndex = index;
|
|
149
|
+
if (text_field.focusVisible) {
|
|
150
|
+
text_field.focusVisible = false;
|
|
151
|
+
textFieldBlinkingClearTimeoutService();
|
|
152
|
+
}
|
|
153
|
+
textFieldApplyChangesService(text_field);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
if (text_field.focusIndex !== index || text_field.selectIndex > -1) {
|
|
158
|
+
text_field.focusIndex = index;
|
|
159
|
+
text_field.selectIndex = -1;
|
|
160
|
+
textFieldApplyChangesService(text_field);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
w += textObject.w;
|
|
166
|
+
break;
|
|
167
|
+
default:
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (!selected) {
|
|
171
|
+
text_field.focusIndex = textData.textTable.length;
|
|
172
|
+
text_field.selectIndex = -1;
|
|
173
|
+
if ($getBlinkingTimerId() === undefined) {
|
|
174
|
+
textFieldBlinkingUseCase(text_field);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
textFieldApplyChangesService(text_field);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
let height = 0;
|
|
182
|
+
for (let idx = 0; textData.heightTable.length > idx; ++idx) {
|
|
183
|
+
height += textData.heightTable[idx];
|
|
184
|
+
}
|
|
185
|
+
if (y > height || 2 > y) {
|
|
186
|
+
text_field.selectIndex = 2 > y
|
|
187
|
+
? 1
|
|
188
|
+
: textData.textTable.length;
|
|
189
|
+
if (text_field.focusVisible) {
|
|
190
|
+
text_field.focusVisible = false;
|
|
191
|
+
textFieldBlinkingClearTimeoutService();
|
|
192
|
+
}
|
|
193
|
+
textFieldApplyChangesService(text_field);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description フォーカス
|
|
4
|
+
*
|
|
5
|
+
* @param {TextField} text_field
|
|
6
|
+
* @param {string} name
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField, name: string) => void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FocusEvent } from "@next2d/events";
|
|
2
|
+
import { execute as textFieldApplyChangesService } from "../service/TextFieldApplyChangesService";
|
|
3
|
+
import { execute as textFieldBlinkingClearTimeoutService } from "../service/TextFieldBlinkingClearTimeoutService";
|
|
4
|
+
import { execute as textFieldBlinkingUseCase } from "./TextFieldBlinkingUseCase";
|
|
5
|
+
import { $textArea, $getBlinkingTimerId } from "../../TextUtil";
|
|
6
|
+
/**
|
|
7
|
+
* @description フォーカス
|
|
8
|
+
*
|
|
9
|
+
* @param {TextField} text_field
|
|
10
|
+
* @param {string} name
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (text_field, name) => {
|
|
16
|
+
if (text_field.willTrigger(name)) {
|
|
17
|
+
text_field.dispatchEvent(new FocusEvent(name));
|
|
18
|
+
}
|
|
19
|
+
$textArea.value = "";
|
|
20
|
+
if (text_field.focus) {
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
$textArea.focus();
|
|
23
|
+
}, 300);
|
|
24
|
+
if ($getBlinkingTimerId() === undefined) {
|
|
25
|
+
if (text_field.focusIndex === -1) {
|
|
26
|
+
text_field.focusIndex = 1;
|
|
27
|
+
text_field.selectIndex = -1;
|
|
28
|
+
}
|
|
29
|
+
textFieldBlinkingUseCase(text_field);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// params reset
|
|
34
|
+
text_field.focusIndex = -1;
|
|
35
|
+
text_field.selectIndex = -1;
|
|
36
|
+
text_field.focusVisible = false;
|
|
37
|
+
// clear blinking
|
|
38
|
+
textFieldBlinkingClearTimeoutService();
|
|
39
|
+
// blur event
|
|
40
|
+
$textArea.blur();
|
|
41
|
+
}
|
|
42
|
+
textFieldApplyChangesService(text_field);
|
|
43
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description xスクロール位置を設定します
|
|
4
|
+
* x Sets the scroll position.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {number} scroll_x
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (text_field: TextField, scroll_x: number) => void;
|