OROCHI
 
Loading...
Searching...
No Matches
GxInputImeText.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14//===========================================================================
16//===========================================================================
18{
19 //-------------------------------------------------------------
21 //-------------------------------------------------------------
23public:
24 GX_RTTI_CLASS(GxImeText, GxInputDevice)
25 // GxClassBase継承クラス用禁止宣言
27
28
29 static constexpr u32 MAX_CANDLIST = 10;
31 static constexpr u32 MAX_CANDIDATE_LENGTH = GxMath::VALUE_256;
33 static constexpr u32 MAX_COMPOSITION_LENGTH = GxMath::VALUE_256;
34
36 struct GxImeData
37 {
38 //-------------------------------------------------------------
40 //-------------------------------------------------------------
42
43 // コマンド
44 static constexpr u8 COMMAND_BACK_SPACE = 8;
45 static constexpr u8 COMMAND_CUT = 24;
46 static constexpr u8 COMMAND_COPY = 3;
47 static constexpr u8 COMMAND_PASTE = 22;
48 static constexpr u8 COMMAND_SELECT_ALL = 1;
49 static constexpr u8 COMMAND_ENTER = 13;
50 static constexpr u8 COMMAND_BELL = 7;
51 static constexpr u8 COMMAND_LEFT = 17;
52 static constexpr u8 COMMAND_UP = 18;
53 static constexpr u8 COMMAND_RIGHT = 19;
54 static constexpr u8 COMMAND_DOWN = 20;
55 static constexpr u8 COMMAND_INSERT = 21;
56 static constexpr u8 COMMAND_DELETE = 23;
57 static constexpr u8 COMMAND_END = 25;
58 static constexpr u8 COMMAND_HOME = 26;
59
60 // アクセラレート
61 static constexpr u8 ACCELERATE_MASK_SHIFT = 1;
62 static constexpr u8 ACCELERATE_MASK_CONTROL = 2;
63 static constexpr u8 ACCELERATE_MASK_ALT = 4;
64 // コールバック戻り値
65 // 0b 00000000
66 // ^^exec
67 // |break
68 static constexpr s32 CALLBACK_MASK_EXECUTE = 1;
69 static constexpr s32 CALLBACK_MASK_BREAK = 2;
70
71 union
72 {
73 struct
74 {
77 u8 _data2;
78 u8 _data3;
79 };
81 };
82
84 //-------------------------------------------------------------
86 //-------------------------------------------------------------
88
90 static GX_STR concatenate(GX_STR dst, GxImeData* pSrc);
92 static GX_STR backSpace(GX_STR dst);
94 static GX_STR addEnter(GX_STR dst);
96 static u32 leftCharByte(GX_STR start, GX_STR src);
98 static u32 rightCharByte(GX_STR src);
100 static u32 endOfLineByte(GX_STR src);
102 static u32 begOfLineByte(GX_STR start, GX_STR src);
104 static void trimLeft(GX_STR dst, u32 bytes);
105
107 };
108
111 {
112 //-------------------------------------------------------------
114 //-------------------------------------------------------------
116
117 // _compositionAttr のフラグ (see Imm.h)
119 static constexpr u8 COMPOSITION_ATTRIBUTE_INPUT = 0x00;
121 static constexpr u8 COMPOSITION_ATTRIBUTE_TARGET_CONVERTED = 0x01;
123 static constexpr u8 COMPOSITION_ATTRIBUTE_CONVERTED = 0x02;
125 static constexpr u8 COMPOSITION_ATTRIBUTE_TARGET_NOT_CONVERTED = 0x03;
127 static constexpr u8 COMPOSITION_ATTRIBUTE_INPUT_ERROR = 0x04;
129 static constexpr u8 COMPOSITION_ATTRIBUTE_FIXED_CONVERTED = 0x05;
130
132 //-------------------------------------------------------------
134 //-------------------------------------------------------------
136
138 void update(void);
139
141 //-------------------------------------------------------------
143 //-------------------------------------------------------------
145
146 GX_CHAR _indicator[4];
147 GX_CHAR _currentIndicator[4];
148 GX_CHAR _composition[MAX_COMPOSITION_LENGTH * 3];
149 u8 _compositionAttr[MAX_COMPOSITION_LENGTH];
150 GX_CHAR _candidate[MAX_CANDLIST][MAX_CANDIDATE_LENGTH * 3];
153
155 };
156
158 enum class UPDATE
159 {
160 READY = 0,
161 FINALIZE_STRING_REQUEST,
162 FINALIZE_STRING_DONE,
163 };
164
166 //-------------------------------------------------------------
168 //-------------------------------------------------------------
170
172 GxImeText(void);
174 ~GxImeText(void) override;
176 GX_FORCE_INLINE void clear(void) override {}
178 b32 initialize(void) override;
180 void setBufferSizeNum(u32 sizeNum);
181
183 //-----------------------------------------------------------
185 //-----------------------------------------------------------
187
189 GX_FORCE_INLINE void getInputDataDevice(void) override {};
191 void update(void) override;
192#if GX_DEVELOP
194 GX_FORCE_INLINE void developRender(void) override {}
196 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
197#endif //GX_DEVELOP
199 GX_FORCE_INLINE void saveInput(void) override {};
201 GX_FORCE_INLINE void loadInput(void) override {};
202
204 //-----------------------------------------------------------
206 //-----------------------------------------------------------
208
210 b32 isEnable(void) const override;
212 GX_FORCE_INLINE b32 isOk(void) override { return false; };
214 GX_FORCE_INLINE b32 isCancel(void) override { return false; };
215
217 GxImeData* map(void);
219 void unmap(void);
221 s32 decode(GX_STR dst, GX_STR dstWork, u32 bufSize, u32& cursorStart, u32& cursorEnd, GxCallback::GxHandlerBase* pFunction = nullptr);
222
224 GxImeRenderData* mapRenderData(void);
226 void unmapRenderData(void);
227
229 void copyClipboard(GX_STR src);
231 GX_STR pasteClipboard(GX_STR src, u32 maxBytes);
232
234 GX_FORCE_INLINE b32 getIsEnableImeSystem(void) const { return _isEnableImeSystem; }
235
237 GX_FORCE_INLINE b32 getIsEnableIme(void) const { return _isEnableIme; }
238
240 GX_FORCE_INLINE b32 getIsImeOpened(void) const { return _isImeOpened; }
241
243 // フォーカスから離れるときには pOwner に nullptr を設定する
244 // フォーカスから離れるときには useIme に false を設定すると IME off になる
245 // 戻り値が true の場合は内部処理中でリクエストは無視される
246 b32 enterFocus(b32 useIme, void* pOwner);
248 b32 isFocus(void *pOwner);
249
250#if defined(_WINDOWS)
252 LRESULT wndProc(HWND windowHandle, UINT uMessage, WPARAM wParam, LPARAM lParam, b32& noDefProc, b32& inTextEdit);
253
254private:
256 b32 wndProcText(HWND windowHandle, UINT uMessage, WPARAM wParam, LPARAM lParam);
257#endif //_WINDOWS
258
259private:
261 void clearBuffer(void);
262
264 //-------------------------------------------------------------
266 //-------------------------------------------------------------
268private:
269 b32 _isEnableImeSystem;
270 b32 _isEnableIme;
271 b32 _isEnableImeDelay;
272 b32 _isImeOpened;
273 b32 _hasFocus;
274 GxCriticalSection _criticalSectionBuffer;
275 GxCriticalSection _criticalSectionRender;
276 GxCriticalSection _criticalSectionState;
277 GxImeData* _pBuffer;
278 GxImeRenderData _renderData;
279 u32 _bufferSizeNum;
280 u32 _bufferPosition;
281 void* _pOwner;
282 void* _pOwnerDelay;
283 UPDATE _updateState;
284
286};
287
288GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
void GxTypedObject
その他
Definition GxDefine.h:213
ハンドラ基本クラス
Definition GxCallback.h:27
クリティカルセクションクラス
Definition GxThread.h:20
キーボードクラス
Definition GxInputImeText.h:18
GX_FORCE_INLINE b32 getIsEnableImeSystem(void) const
システム的に IME が利用可能かを取得
Definition GxInputImeText.h:234
UPDATE
_updateState の状態
Definition GxInputImeText.h:159
GX_FORCE_INLINE b32 isOk(void) override
決定ボタンの判定
Definition GxInputImeText.h:212
GX_FORCE_INLINE b32 getIsImeOpened(void) const
IME がオープン ("あ"の状態) されているかを得る
Definition GxInputImeText.h:240
GX_FORCE_INLINE b32 getIsEnableIme(void) const
IME の利用を許可しているかを取得。enterFocus() で決まる。
Definition GxInputImeText.h:237
GX_FORCE_INLINE void loadInput(void) override
入力状態を復元
Definition GxInputImeText.h:201
GX_FORCE_INLINE void clear(void) override
クリア
Definition GxInputImeText.h:176
GX_FORCE_INLINE void getInputDataDevice(void) override
デバイスから入力を取得
Definition GxInputImeText.h:189
GX_FORCE_INLINE b32 isCancel(void) override
キャンセルボタンの判定
Definition GxInputImeText.h:214
入力デバイスクラス
Definition GxSysInput.h:78
算術演算クラス
Definition GxMath.h:84
プロパティクラス
Definition GxProperty.h:48
実行時型情報クラス
Definition GxRtti.h:154
イベント構造体
Definition GxInputImeText.h:37
u8 _command
コマンド
Definition GxInputImeText.h:75
u32 _access32
データ
Definition GxInputImeText.h:80
u8 _accelerate
アクセラレート
Definition GxInputImeText.h:76
u8 _data3
データ
Definition GxInputImeText.h:78
u8 _data2
データ
Definition GxInputImeText.h:77
IME 描画データ構造体(UTF8)
Definition GxInputImeText.h:111
b32 _isVerticalCandidate
候補リストは縦か?
Definition GxInputImeText.h:152
u32 _candidateSelection
選択中の候補リスト
Definition GxInputImeText.h:151
32bitブーリアン
Definition GxDefine.h:173