@next2d/text 1.18.12 → 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.
Files changed (181) hide show
  1. package/package.json +14 -18
  2. package/src/TextArea/service/TextAreaMovePositionService.d.ts +11 -0
  3. package/src/TextArea/service/TextAreaMovePositionService.js +42 -0
  4. package/src/TextArea/usecase/TextAreaCompositionEndUseCase.d.ts +9 -0
  5. package/src/TextArea/usecase/TextAreaCompositionEndUseCase.js +17 -0
  6. package/src/TextArea/usecase/TextAreaCompositionStartUseCase.d.ts +9 -0
  7. package/src/TextArea/usecase/TextAreaCompositionStartUseCase.js +17 -0
  8. package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.d.ts +10 -0
  9. package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.js +18 -0
  10. package/src/TextArea/usecase/TextAreaInputUseCase.d.ts +10 -0
  11. package/src/TextArea/usecase/TextAreaInputUseCase.js +25 -0
  12. package/src/TextArea/usecase/TextAreaRegisterEventUseCase.d.ts +10 -0
  13. package/src/TextArea/usecase/TextAreaRegisterEventUseCase.js +21 -0
  14. package/src/TextData.d.ts +103 -0
  15. package/src/TextData.js +183 -0
  16. package/src/TextField/service/TextFieldApplyChangesService.d.ts +11 -0
  17. package/src/TextField/service/TextFieldApplyChangesService.js +16 -0
  18. package/src/TextField/service/TextFieldBlinkingClearTimeoutService.d.ts +9 -0
  19. package/src/TextField/service/TextFieldBlinkingClearTimeoutService.js +16 -0
  20. package/src/TextField/service/TextFieldCompositionStartService.d.ts +11 -0
  21. package/src/TextField/service/TextFieldCompositionStartService.js +12 -0
  22. package/src/TextField/service/TextFieldPasteService.d.ts +11 -0
  23. package/src/TextField/service/TextFieldPasteService.js +16 -0
  24. package/src/TextField/usecase/TextFieldArrowDownUseCase.d.ts +12 -0
  25. package/src/TextField/usecase/TextFieldArrowDownUseCase.js +191 -0
  26. package/src/TextField/usecase/TextFieldArrowLeftUseCase.d.ts +12 -0
  27. package/src/TextField/usecase/TextFieldArrowLeftUseCase.js +98 -0
  28. package/src/TextField/usecase/TextFieldArrowRightUseCase.d.ts +12 -0
  29. package/src/TextField/usecase/TextFieldArrowRightUseCase.js +92 -0
  30. package/src/TextField/usecase/TextFieldArrowUpUseCase.d.ts +12 -0
  31. package/src/TextField/usecase/TextFieldArrowUpUseCase.js +156 -0
  32. package/src/TextField/usecase/TextFieldBlinkingUseCase.d.ts +11 -0
  33. package/src/TextField/usecase/TextFieldBlinkingUseCase.js +21 -0
  34. package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.d.ts +13 -0
  35. package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.js +58 -0
  36. package/src/TextField/usecase/TextFieldCompositionEndUseCase.d.ts +11 -0
  37. package/src/TextField/usecase/TextFieldCompositionEndUseCase.js +32 -0
  38. package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.d.ts +12 -0
  39. package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.js +109 -0
  40. package/src/TextField/usecase/TextFieldCopyUseCase.d.ts +11 -0
  41. package/src/TextField/usecase/TextFieldCopyUseCase.js +38 -0
  42. package/src/TextField/usecase/TextFieldDeleteTextUseCase.d.ts +11 -0
  43. package/src/TextField/usecase/TextFieldDeleteTextUseCase.js +108 -0
  44. package/src/TextField/usecase/TextFieldGetLineTextUseCase.d.ts +12 -0
  45. package/src/TextField/usecase/TextFieldGetLineTextUseCase.js +32 -0
  46. package/src/TextField/usecase/TextFieldGetTextDataUseCase.d.ts +15 -0
  47. package/src/TextField/usecase/TextFieldGetTextDataUseCase.js +26 -0
  48. package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.d.ts +11 -0
  49. package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.js +31 -0
  50. package/src/TextField/usecase/TextFieldInsertTextUseCase.d.ts +12 -0
  51. package/src/TextField/usecase/TextFieldInsertTextUseCase.js +79 -0
  52. package/src/TextField/usecase/TextFieldKeyDownEventUseCase.d.ts +12 -0
  53. package/src/TextField/usecase/TextFieldKeyDownEventUseCase.js +60 -0
  54. package/src/TextField/usecase/TextFieldReloadUseCase.d.ts +11 -0
  55. package/src/TextField/usecase/TextFieldReloadUseCase.js +25 -0
  56. package/src/TextField/usecase/TextFieldReplaceTextUseCase.d.ts +14 -0
  57. package/src/TextField/usecase/TextFieldReplaceTextUseCase.js +24 -0
  58. package/src/TextField/usecase/TextFieldResetUseCase.d.ts +11 -0
  59. package/src/TextField/usecase/TextFieldResetUseCase.js +20 -0
  60. package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.d.ts +11 -0
  61. package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.js +37 -0
  62. package/src/TextField/usecase/TextFieldResizeUseCase.d.ts +11 -0
  63. package/src/TextField/usecase/TextFieldResizeUseCase.js +49 -0
  64. package/src/TextField/usecase/TextFieldSelectAllUseCase.d.ts +11 -0
  65. package/src/TextField/usecase/TextFieldSelectAllUseCase.js +20 -0
  66. package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.d.ts +11 -0
  67. package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.js +90 -0
  68. package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.d.ts +14 -0
  69. package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.js +197 -0
  70. package/src/TextField/usecase/TextFieldSetFocusUseCase.d.ts +11 -0
  71. package/src/TextField/usecase/TextFieldSetFocusUseCase.js +43 -0
  72. package/src/TextField/usecase/TextFieldSetScrollXUseCase.d.ts +12 -0
  73. package/src/TextField/usecase/TextFieldSetScrollXUseCase.js +66 -0
  74. package/src/TextField/usecase/TextFieldSetScrollYUseCase.d.ts +12 -0
  75. package/src/TextField/usecase/TextFieldSetScrollYUseCase.js +66 -0
  76. package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.d.ts +12 -0
  77. package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.js +82 -0
  78. package/src/TextField.d.ts +602 -0
  79. package/src/TextField.js +1292 -0
  80. package/src/TextFormat/service/TextFormatGenerateFontStyleService.d.ts +11 -0
  81. package/src/TextFormat/service/TextFormatGenerateFontStyleService.js +19 -0
  82. package/src/TextFormat/service/TextFormatGetWidthMarginService.d.ts +11 -0
  83. package/src/TextFormat/service/TextFormatGetWidthMarginService.js +19 -0
  84. package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.d.ts +11 -0
  85. package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.js +51 -0
  86. package/src/TextFormat/service/TextFormatIsSameService.d.ts +12 -0
  87. package/src/TextFormat/service/TextFormatIsSameService.js +28 -0
  88. package/src/TextFormat/service/TextFormatSetDefaultService.d.ts +11 -0
  89. package/src/TextFormat/service/TextFormatSetDefaultService.js +22 -0
  90. package/{dist → src}/TextFormat.d.ts +42 -128
  91. package/src/TextFormat.js +233 -0
  92. package/src/TextParser/service/TextParserAdjustmentHeightService.d.ts +11 -0
  93. package/src/TextParser/service/TextParserAdjustmentHeightService.js +24 -0
  94. package/src/TextParser/service/TextParserParseStyleService.d.ts +11 -0
  95. package/src/TextParser/service/TextParserParseStyleService.js +80 -0
  96. package/src/TextParser/usecase/TextParserCreateNewLineUseCase.d.ts +13 -0
  97. package/src/TextParser/usecase/TextParserCreateNewLineUseCase.js +35 -0
  98. package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.d.ts +15 -0
  99. package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.js +37 -0
  100. package/src/TextParser/usecase/TextParserParseTagUseCase.d.ts +17 -0
  101. package/src/TextParser/usecase/TextParserParseTagUseCase.js +57 -0
  102. package/src/TextParser/usecase/TextParserParseTextUseCase.d.ts +16 -0
  103. package/src/TextParser/usecase/TextParserParseTextUseCase.js +140 -0
  104. package/src/TextParser/usecase/TextParserSetAttributesUseCase.d.ts +14 -0
  105. package/src/TextParser/usecase/TextParserSetAttributesUseCase.js +63 -0
  106. package/src/TextUtil.d.ts +114 -0
  107. package/src/TextUtil.js +186 -0
  108. package/src/index.d.ts +3 -0
  109. package/src/index.js +3 -0
  110. package/src/interface/IAttributeObject.d.ts +4 -0
  111. package/src/interface/IBlendMode.d.ts +1 -0
  112. package/src/interface/IBounds.d.ts +6 -0
  113. package/src/interface/ICharacter.d.ts +5 -0
  114. package/src/interface/ICharacter.js +1 -0
  115. package/src/interface/IDictionaryTag.d.ts +8 -0
  116. package/src/interface/IDictionaryTag.js +1 -0
  117. package/src/interface/IElementPosition.d.ts +4 -0
  118. package/src/interface/IElementPosition.js +1 -0
  119. package/src/interface/IFilterArray.d.ts +2 -0
  120. package/src/interface/IFilterArray.js +1 -0
  121. package/src/interface/IGrid.d.ts +6 -0
  122. package/src/interface/IGrid.js +1 -0
  123. package/src/interface/ILoopConfig.d.ts +8 -0
  124. package/src/interface/ILoopConfig.js +1 -0
  125. package/src/interface/ILoopType.d.ts +1 -0
  126. package/src/interface/ILoopType.js +1 -0
  127. package/src/interface/IMovieClipActionObject.d.ts +5 -0
  128. package/src/interface/IMovieClipActionObject.js +1 -0
  129. package/src/interface/IMovieClipCharacter.d.ts +17 -0
  130. package/src/interface/IMovieClipCharacter.js +1 -0
  131. package/src/interface/IMovieClipLabelObject.d.ts +4 -0
  132. package/src/interface/IMovieClipLabelObject.js +1 -0
  133. package/src/interface/IMovieClipSoundObject.d.ts +5 -0
  134. package/src/interface/IMovieClipSoundObject.js +1 -0
  135. package/src/interface/IOptions.d.ts +8 -0
  136. package/src/interface/IOptions.js +1 -0
  137. package/src/interface/IPlaceObject.d.ts +14 -0
  138. package/src/interface/IPlaceObject.js +1 -0
  139. package/src/interface/IRGBA.d.ts +6 -0
  140. package/src/interface/IRGBA.js +1 -0
  141. package/src/interface/IShapeCharacter.d.ts +14 -0
  142. package/src/interface/IShapeCharacter.js +1 -0
  143. package/src/interface/ISoundTag.d.ts +6 -0
  144. package/src/interface/ISoundTag.js +1 -0
  145. package/src/interface/ISurfaceFilter.d.ts +6 -0
  146. package/src/interface/ISurfaceFilter.js +1 -0
  147. package/src/interface/ITextFieldAutoSize.d.ts +1 -0
  148. package/src/interface/ITextFieldAutoSize.js +1 -0
  149. package/src/interface/ITextFieldCharacter copy.d.ts +26 -0
  150. package/src/interface/ITextFieldCharacter copy.js +1 -0
  151. package/src/interface/ITextFieldCharacter.d.ts +26 -0
  152. package/src/interface/ITextFieldCharacter.js +1 -0
  153. package/src/interface/ITextFieldType copy.d.ts +1 -0
  154. package/src/interface/ITextFieldType copy.js +1 -0
  155. package/src/interface/ITextFieldType.d.ts +1 -0
  156. package/src/interface/ITextFieldType.js +1 -0
  157. package/src/interface/ITextFormatAlign copy.d.ts +1 -0
  158. package/src/interface/ITextFormatAlign copy.js +1 -0
  159. package/src/interface/ITextFormatAlign.d.ts +1 -0
  160. package/src/interface/ITextFormatAlign.js +1 -0
  161. package/src/interface/ITextFormatObject.d.ts +14 -0
  162. package/src/interface/ITextFormatObject.js +1 -0
  163. package/src/interface/ITextObject.d.ts +12 -0
  164. package/src/interface/ITextObject.js +1 -0
  165. package/src/interface/ITextObjectMode.d.ts +1 -0
  166. package/src/interface/ITextObjectMode.js +1 -0
  167. package/src/interface/IVideoCharacter.d.ts +11 -0
  168. package/src/interface/IVideoCharacter.js +1 -0
  169. package/dist/TextData.d.ts +0 -74
  170. package/dist/TextData.js +0 -132
  171. package/dist/TextFormat.js +0 -493
  172. package/dist/TextParser.d.ts +0 -23
  173. package/dist/TextParser.js +0 -459
  174. package/dist/index.d.ts +0 -3
  175. package/dist/index.js +0 -3
  176. package/dist/interface/OptionsImpl.d.ts +0 -8
  177. package/dist/interface/TextObjectImpl.d.ts +0 -12
  178. package/dist/interface/TextObjectModeImpl.d.ts +0 -1
  179. /package/{dist/interface/OptionsImpl.js → src/interface/IAttributeObject.js} +0 -0
  180. /package/{dist/interface/TextObjectImpl.js → src/interface/IBlendMode.js} +0 -0
  181. /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;