Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: win8/metro_driver/ime/text_store.h

Issue 83233002: Enable basic IME functionality under Ash on Windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix warnings (that are treated as an error) on 64-bit build Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « win8/metro_driver/ime/text_service_delegate.h ('k') | win8/metro_driver/ime/text_store.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_BASE_IME_WIN_TSF_TEXT_STORE_H_ 5 #ifndef WIN8_METRO_DRIVER_IME_TEXT_STORE_H_
6 #define UI_BASE_IME_WIN_TSF_TEXT_STORE_H_ 6 #define WIN8_METRO_DRIVER_IME_TEXT_STORE_H_
7 7
8 #include <inputscope.h>
8 #include <msctf.h> 9 #include <msctf.h>
10
9 #include <deque> 11 #include <deque>
12 #include <vector>
10 13
11 #include "base/basictypes.h" 14 #include "base/basictypes.h"
12 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/memory/ref_counted.h"
13 #include "base/strings/string16.h" 17 #include "base/strings/string16.h"
14 #include "base/win/scoped_comptr.h" 18 #include "base/win/scoped_comptr.h"
15 #include "ui/base/ime/composition_underline.h" 19 #include "ui/metro_viewer/ime_types.h"
16 #include "ui/base/ui_export.h"
17 #include "ui/gfx/range/range.h"
18 20
19 namespace ui { 21 namespace metro_driver {
20 class TextInputClient; 22
23 class TextStoreDelegate;
21 24
22 // TSFTextStore is used to interact with the input method via TSF manager. 25 // TSFTextStore is used to interact with the input method via TSF manager.
23 // TSFTextStore have a string buffer which is manipulated by TSF manager through 26 // TSFTextStore have a string buffer which is manipulated by TSF manager through
24 // ITextStoreACP interface methods such as SetText(). 27 // ITextStoreACP interface methods such as SetText().
25 // When the input method updates the composition, TSFTextStore calls 28 // When the input method updates the composition, TSFTextStore calls
26 // TextInputClient::SetCompositionText(). And when the input method finishes the 29 // TextInputClient::SetCompositionText(). And when the input method finishes the
27 // composition, TSFTextStore calls TextInputClient::InsertText() and clears the 30 // composition, TSFTextStore calls TextInputClient::InsertText() and clears the
28 // buffer. 31 // buffer.
29 // 32 //
30 // How TSFTextStore works: 33 // How TSFTextStore works:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 // RequestLock() is called from only one thread, but called recursively in 77 // RequestLock() is called from only one thread, but called recursively in
75 // OnLockGranted() or OnSelectionChange() or OnLayoutChange() or OnTextChange(). 78 // OnLockGranted() or OnSelectionChange() or OnLayoutChange() or OnTextChange().
76 // If the document is locked and the lock request is asynchronous, TSFTextStore 79 // If the document is locked and the lock request is asynchronous, TSFTextStore
77 // queues the request. The queued requests will be handled after the current 80 // queues the request. The queued requests will be handled after the current
78 // lock is removed. 81 // lock is removed.
79 // More information about document locks can be found here: 82 // More information about document locks can be found here:
80 // http://msdn.microsoft.com/en-us/library/ms538064 83 // http://msdn.microsoft.com/en-us/library/ms538064
81 // 84 //
82 // More information about TSF can be found here: 85 // More information about TSF can be found here:
83 // http://msdn.microsoft.com/en-us/library/ms629032 86 // http://msdn.microsoft.com/en-us/library/ms629032
84 class UI_EXPORT TSFTextStore : public ITextStoreACP, 87 // TODO(yukawa): Rename TSFTextStore to TextStore.
85 public ITfContextOwnerCompositionSink, 88 class TSFTextStore : public ITextStoreACP,
86 public ITfTextEditSink { 89 public ITfContextOwnerCompositionSink,
90 public ITfTextEditSink {
87 public: 91 public:
88 TSFTextStore();
89 virtual ~TSFTextStore(); 92 virtual ~TSFTextStore();
90 93
91 // ITextStoreACP: 94 // ITextStoreACP:
92 STDMETHOD_(ULONG, AddRef)() OVERRIDE; 95 STDMETHOD_(ULONG, AddRef)() OVERRIDE;
93 STDMETHOD_(ULONG, Release)() OVERRIDE; 96 STDMETHOD_(ULONG, Release)() OVERRIDE;
94 STDMETHOD(QueryInterface)(REFIID iid, void** ppv) OVERRIDE; 97 STDMETHOD(QueryInterface)(REFIID iid, void** ppv) OVERRIDE;
95 STDMETHOD(AdviseSink)(REFIID iid, IUnknown* unknown, DWORD mask) OVERRIDE; 98 STDMETHOD(AdviseSink)(REFIID iid, IUnknown* unknown, DWORD mask) OVERRIDE;
96 STDMETHOD(FindNextAttrTransition)(LONG acp_start, 99 STDMETHOD(FindNextAttrTransition)(LONG acp_start,
97 LONG acp_halt, 100 LONG acp_halt,
98 ULONG num_filter_attributes, 101 ULONG num_filter_attributes,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 STDMETHOD(OnStartComposition)(ITfCompositionView* composition_view, 192 STDMETHOD(OnStartComposition)(ITfCompositionView* composition_view,
190 BOOL* ok) OVERRIDE; 193 BOOL* ok) OVERRIDE;
191 STDMETHOD(OnUpdateComposition)(ITfCompositionView* composition_view, 194 STDMETHOD(OnUpdateComposition)(ITfCompositionView* composition_view,
192 ITfRange* range) OVERRIDE; 195 ITfRange* range) OVERRIDE;
193 STDMETHOD(OnEndComposition)(ITfCompositionView* composition_view) OVERRIDE; 196 STDMETHOD(OnEndComposition)(ITfCompositionView* composition_view) OVERRIDE;
194 197
195 // ITfTextEditSink: 198 // ITfTextEditSink:
196 STDMETHOD(OnEndEdit)(ITfContext* context, TfEditCookie read_only_edit_cookie, 199 STDMETHOD(OnEndEdit)(ITfContext* context, TfEditCookie read_only_edit_cookie,
197 ITfEditRecord* edit_record) OVERRIDE; 200 ITfEditRecord* edit_record) OVERRIDE;
198 201
199 // Sets currently focused TextInputClient.
200 void SetFocusedTextInputClient(HWND focused_window,
201 TextInputClient* text_input_client);
202 // Removes currently focused TextInputClient.
203 void RemoveFocusedTextInputClient(TextInputClient* text_input_client);
204
205 // Cancels the ongoing composition if exists. 202 // Cancels the ongoing composition if exists.
206 bool CancelComposition(); 203 bool CancelComposition();
207 204
208 // Confirms the ongoing composition if exists. 205 // Confirms the ongoing composition if exists.
209 bool ConfirmComposition(); 206 bool ConfirmComposition();
210 207
211 // Sends OnLayoutChange() via |text_store_acp_sink_|. 208 // Sends OnLayoutChange() via |text_store_acp_sink_|.
212 void SendOnLayoutChange(); 209 void SendOnLayoutChange();
213 210
211 // Creates an instance of TSFTextStore. Returns NULL if fails.
212 static scoped_refptr<TSFTextStore> Create(
213 HWND window_handle,
214 const std::vector<InputScope>& input_scopes,
215 TextStoreDelegate* delegate);
216
214 private: 217 private:
215 friend class TSFTextStoreTest; 218 TSFTextStore(HWND window_handle,
216 friend class TSFTextStoreTestCallback; 219 ITfCategoryMgr* category_manager,
220 ITfDisplayAttributeMgr* display_attribute_manager,
221 ITfInputScope* input_scope,
222 TextStoreDelegate* delegate);
217 223
218 // Checks if the document has a read-only lock. 224 // Checks if the document has a read-only lock.
219 bool HasReadLock() const; 225 bool HasReadLock() const;
220 226
221 // Checks if the document has a read and write lock. 227 // Checks if the document has a read and write lock.
222 bool HasReadWriteLock() const; 228 bool HasReadWriteLock() const;
223 229
224 // Gets the display attribute structure. 230 // Gets the display attribute structure.
225 bool GetDisplayAttribute(TfGuidAtom guid_atom, 231 bool GetDisplayAttribute(TfGuidAtom guid_atom,
226 TF_DISPLAYATTRIBUTE* attribute); 232 TF_DISPLAYATTRIBUTE* attribute);
227 233
228 // Gets the committed string size and underline information of the context. 234 // Gets the committed string size and underline information of the context.
229 bool GetCompositionStatus(ITfContext* context, 235 bool GetCompositionStatus(
230 const TfEditCookie read_only_edit_cookie, 236 ITfContext* context,
231 size_t* committed_size, 237 const TfEditCookie read_only_edit_cookie,
232 CompositionUnderlines* undelines); 238 uint32* committed_size,
239 std::vector<metro_viewer::UnderlineInfo>* undelines);
233 240
234 // The refrence count of this instance. 241 // The refrence count of this instance.
235 volatile LONG ref_count_; 242 volatile LONG ref_count_;
236 243
237 // A pointer of ITextStoreACPSink, this instance is given in AdviseSink. 244 // A pointer of ITextStoreACPSink, this instance is given in AdviseSink.
238 base::win::ScopedComPtr<ITextStoreACPSink> text_store_acp_sink_; 245 base::win::ScopedComPtr<ITextStoreACPSink> text_store_acp_sink_;
239 246
240 // The current mask of |text_store_acp_sink_|. 247 // The current mask of |text_store_acp_sink_|.
241 DWORD text_store_acp_sink_mask_; 248 DWORD text_store_acp_sink_mask_;
242 249
243 // HWND of the current view window which is set in SetFocusedTextInputClient. 250 // HWND of the attached window.
244 HWND window_handle_; 251 HWND window_handle_;
245 252
246 // Current TextInputClient which is set in SetFocusedTextInputClient. 253 // The delegate attached to this text store.
247 TextInputClient* text_input_client_; 254 TextStoreDelegate* delegate_;
248 255
249 // |string_buffer_| contains committed string and composition string. 256 // |string_buffer_| contains committed string and composition string.
250 // Example: "aoi" is committed, and "umi" is under composition. 257 // Example: "aoi" is committed, and "umi" is under composition.
251 // |string_buffer_|: "aoiumi" 258 // |string_buffer_|: "aoiumi"
252 // |committed_size_|: 3 259 // |committed_size_|: 3
253 string16 string_buffer_; 260 string16 string_buffer_;
254 size_t committed_size_; 261 uint32 committed_size_;
255 262
256 // |selection_start_| and |selection_end_| indicates the selection range. 263 // |selection_start_| and |selection_end_| indicates the selection range.
257 // Example: "iue" is selected 264 // Example: "iue" is selected
258 // |string_buffer_|: "aiueo" 265 // |string_buffer_|: "aiueo"
259 // |selection_.start()|: 1 266 // |selection_start_|: 1
260 // |selection_.end()|: 4 267 // |selection_end_|: 4
261 gfx::Range selection_; 268 uint32 selection_start_;
269 uint32 selection_end_;
262 270
263 // |start_offset| and |end_offset| of |composition_undelines_| indicates 271 // |start_offset| and |end_offset| of |composition_undelines_| indicates
264 // the offsets in |string_buffer_|. 272 // the offsets in |string_buffer_|.
265 // Example: "aoi" is committed. There are two underlines in "umi" and "no". 273 // Example: "aoi" is committed. There are two underlines in "umi" and "no".
266 // |string_buffer_|: "aoiumino" 274 // |string_buffer_|: "aoiumino"
267 // |committed_size_|: 3 275 // |committed_size_|: 3
268 // composition_undelines_.underlines[0].start_offset: 3 276 // underlines_[0].start_offset: 3
269 // composition_undelines_.underlines[0].end_offset: 6 277 // underlines_[0].end_offset: 6
270 // composition_undelines_.underlines[1].start_offset: 6 278 // underlines_[1].start_offset: 6
271 // composition_undelines_.underlines[1].end_offset: 8 279 // underlines_[1].end_offset: 8
272 CompositionUnderlines composition_undelines_; 280 std::vector<metro_viewer::UnderlineInfo> underlines_;
273 281
274 // |edit_flag_| indicates that the status is edited during 282 // |edit_flag_| indicates that the status is edited during
275 // ITextStoreACPSink::OnLockGranted(). 283 // ITextStoreACPSink::OnLockGranted().
276 bool edit_flag_; 284 bool edit_flag_;
277 285
278 // The type of current lock. 286 // The type of current lock.
279 // 0: No lock. 287 // 0: No lock.
280 // TS_LF_READ: read-only lock. 288 // TS_LF_READ: read-only lock.
281 // TS_LF_READWRITE: read/write lock. 289 // TS_LF_READWRITE: read/write lock.
282 DWORD current_lock_type_; 290 DWORD current_lock_type_;
283 291
284 // Queue of the lock request used in RequestLock(). 292 // Queue of the lock request used in RequestLock().
285 std::deque<DWORD> lock_queue_; 293 std::deque<DWORD> lock_queue_;
286 294
287 // Category manager and Display attribute manager are used to obtain the 295 // Category manager and Display attribute manager are used to obtain the
288 // attributes of the composition string. 296 // attributes of the composition string.
289 base::win::ScopedComPtr<ITfCategoryMgr> category_manager_; 297 base::win::ScopedComPtr<ITfCategoryMgr> category_manager_;
290 base::win::ScopedComPtr<ITfDisplayAttributeMgr> display_attribute_manager_; 298 base::win::ScopedComPtr<ITfDisplayAttributeMgr> display_attribute_manager_;
291 299
300 // Represents the context information of this text.
301 base::win::ScopedComPtr<ITfInputScope> input_scope_;
302
292 DISALLOW_COPY_AND_ASSIGN(TSFTextStore); 303 DISALLOW_COPY_AND_ASSIGN(TSFTextStore);
293 }; 304 };
294 305
295 } // namespace ui 306 } // namespace metro_driver
296 307
297 #endif // UI_BASE_IME_WIN_TSF_TEXT_STORE_H_ 308 #endif // WIN8_METRO_DRIVER_IME_TEXT_STORE_H_
OLDNEW
« no previous file with comments | « win8/metro_driver/ime/text_service_delegate.h ('k') | win8/metro_driver/ime/text_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698