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

Side by Side Diff: services/keyboard_native/key_layout.cc

Issue 1247903003: Add spellcheck and word suggestion to the prediction service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 4 months 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "mojo/tools/embed/data.h" 8 #include "mojo/tools/embed/data.h"
9 #include "services/keyboard_native/kActionIcon.h" 9 #include "services/keyboard_native/kActionIcon.h"
10 #include "services/keyboard_native/kDeleteIcon.h" 10 #include "services/keyboard_native/kDeleteIcon.h"
11 #include "services/keyboard_native/kLowerCaseIcon.h" 11 #include "services/keyboard_native/kLowerCaseIcon.h"
12 #include "services/keyboard_native/kUpperCaseIcon.h" 12 #include "services/keyboard_native/kUpperCaseIcon.h"
13 #include "services/keyboard_native/key_layout.h" 13 #include "services/keyboard_native/key_layout.h"
14 #include "services/keyboard_native/predictor.h"
15 #include "services/keyboard_native/text_update_key.h"
14 #include "skia/ext/refptr.h" 16 #include "skia/ext/refptr.h"
15 #include "third_party/skia/include/core/SkCanvas.h" 17 #include "third_party/skia/include/core/SkCanvas.h"
16 #include "third_party/skia/include/core/SkImageDecoder.h" 18 #include "third_party/skia/include/core/SkImageDecoder.h"
17 #include "third_party/skia/include/core/SkStream.h" 19 #include "third_party/skia/include/core/SkStream.h"
18 #include "third_party/skia/include/core/SkTypeface.h" 20 #include "third_party/skia/include/core/SkTypeface.h"
19 #include "ui/gfx/codec/png_codec.h" 21 #include "ui/gfx/codec/png_codec.h"
20 #include "ui/gfx/geometry/point_f.h" 22 #include "ui/gfx/geometry/point_f.h"
21 #include "ui/gfx/shadow_value.h" 23 #include "ui/gfx/shadow_value.h"
22 #include "ui/gfx/skia_util.h" 24 #include "ui/gfx/skia_util.h"
23 #include "ui/gfx/vector2d.h" 25 #include "ui/gfx/vector2d.h"
24 26
25 namespace keyboard { 27 namespace keyboard {
26 28
27 // An implementation of Key that draws itself as ASCII text. 29 // An implementation of Key that draws itself as ASCII text.
28 class KeyLayout::TextKey : public Key { 30 class KeyLayout::TextKey : public Key {
29 public: 31 public:
30 TextKey(const char* text, 32 TextKey(const char* text,
31 base::Callback<void(const TextKey&)> touch_up_callback) 33 base::Callback<void(const TextKey&)> touch_up_callback)
32 : text_(text), touch_up_callback_(touch_up_callback) {} 34 : text_(text), touch_up_callback_(touch_up_callback) {}
33 35
34 ~TextKey() override {} 36 ~TextKey() override {}
35 37
36 void Draw(SkCanvas* canvas, 38 void Draw(SkCanvas* canvas, SkPaint& paint, const gfx::RectF& rect) override {
37 const SkPaint& paint,
38 const gfx::RectF& rect) override {
39 float text_baseline_offset = rect.height() / 5.0f; 39 float text_baseline_offset = rect.height() / 5.0f;
40 canvas->drawText(text_, strlen(text_), rect.x() + (rect.width() / 2.0f), 40 canvas->drawText(text_, strlen(text_), rect.x() + (rect.width() / 2.0f),
41 rect.y() + rect.height() - text_baseline_offset, paint); 41 rect.y() + rect.height() - text_baseline_offset, paint);
42 } 42 }
43 43
44 const char* ToText() const override { return text_; } 44 const char* ToText() const override { return text_; }
45 45
46 void OnTouchUp() override { touch_up_callback_.Run(*this); } 46 void OnTouchUp() override { touch_up_callback_.Run(*this); }
47 47
48 private: 48 private:
(...skipping 11 matching lines...) Expand all
60 const mojo::embed::Data& data) 60 const mojo::embed::Data& data)
61 : text_key_(text, touch_up_callback), bitmap_valid_(false), bitmap_() { 61 : text_key_(text, touch_up_callback), bitmap_valid_(false), bitmap_() {
62 bool result = gfx::PNGCodec::Decode( 62 bool result = gfx::PNGCodec::Decode(
63 reinterpret_cast<const unsigned char*>(data.data), data.size, &bitmap_); 63 reinterpret_cast<const unsigned char*>(data.data), data.size, &bitmap_);
64 bitmap_valid_ = result && bitmap_.width() > 0 && bitmap_.height() > 0; 64 bitmap_valid_ = result && bitmap_.width() > 0 && bitmap_.height() > 0;
65 DCHECK(bitmap_valid_); 65 DCHECK(bitmap_valid_);
66 } 66 }
67 ~ImageKey() override {} 67 ~ImageKey() override {}
68 68
69 // Key implementation. 69 // Key implementation.
70 void Draw(SkCanvas* canvas, 70 void Draw(SkCanvas* canvas, SkPaint& paint, const gfx::RectF& rect) override {
71 const SkPaint& paint,
72 const gfx::RectF& rect) override {
73 // If our bitmap is somehow invalid, default to drawing the text of the key. 71 // If our bitmap is somehow invalid, default to drawing the text of the key.
74 if (!bitmap_valid_) { 72 if (!bitmap_valid_) {
75 text_key_.Draw(canvas, paint, rect); 73 text_key_.Draw(canvas, paint, rect);
76 return; 74 return;
77 } 75 }
78 76
79 float width_scale = rect.width() / bitmap_.width(); 77 float width_scale = rect.width() / bitmap_.width();
80 float height_scale = rect.height() / bitmap_.height(); 78 float height_scale = rect.height() / bitmap_.height();
81 float scale = width_scale > height_scale ? height_scale : width_scale; 79 float scale = width_scale > height_scale ? height_scale : width_scale;
82 float target_width = bitmap_.width() * scale; 80 float target_width = bitmap_.width() * scale;
(...skipping 13 matching lines...) Expand all
96 private: 94 private:
97 KeyLayout::TextKey text_key_; 95 KeyLayout::TextKey text_key_;
98 bool bitmap_valid_; 96 bool bitmap_valid_;
99 SkBitmap bitmap_; 97 SkBitmap bitmap_;
100 98
101 DISALLOW_COPY_AND_ASSIGN(ImageKey); 99 DISALLOW_COPY_AND_ASSIGN(ImageKey);
102 }; 100 };
103 101
104 KeyLayout::KeyLayout() 102 KeyLayout::KeyLayout()
105 : on_text_callback_(), 103 : on_text_callback_(),
104 on_suggest_text_callback_(),
106 layout_(&letters_layout_), 105 layout_(&letters_layout_),
107 key_map_(&lower_case_key_map_), 106 key_map_(&lower_case_key_map_),
107 predictor_(nullptr),
108 weak_factory_(this) { 108 weak_factory_(this) {
109 InitLayouts(); 109 InitLayouts();
110 InitKeyMaps(); 110 InitKeyMaps();
111 } 111 }
112 112
113 KeyLayout::~KeyLayout() { 113 KeyLayout::~KeyLayout() {
114 for (auto& row : lower_case_key_map_) { 114 for (size_t i = 0; i < lower_case_key_map_.size(); i++) {
115 auto& row = lower_case_key_map_[i];
115 for (auto& key : row) { 116 for (auto& key : row) {
116 delete key; 117 delete key;
117 } 118 }
118 } 119 }
119 for (auto& row : upper_case_key_map_) { 120 for (size_t i = 0; i < upper_case_key_map_.size(); i++) {
121 auto& row = upper_case_key_map_[i];
120 for (auto& key : row) { 122 for (auto& key : row) {
121 delete key; 123 delete key;
122 } 124 }
123 } 125 }
124 for (auto& row : symbols_key_map_) { 126 for (size_t i = 0; i < symbols_key_map_.size(); i++) {
APW 2015/07/31 22:36:43 UNDO!
riajiang 2015/08/01 01:23:09 Done.
127 auto& row = symbols_key_map_[i];
125 for (auto& key : row) { 128 for (auto& key : row) {
126 delete key; 129 delete key;
127 } 130 }
128 } 131 }
129 } 132 }
130 133
131 void KeyLayout::SetTextCallback( 134 void KeyLayout::SetTextCallback(
132 base::Callback<void(const std::string&)> on_text_callback) { 135 base::Callback<void(const std::string&)> on_text_callback) {
133 on_text_callback_ = on_text_callback; 136 on_text_callback_ = on_text_callback;
134 } 137 }
135 138
136 void KeyLayout::SetDeleteCallback(base::Callback<void()> on_delete_callback) { 139 void KeyLayout::SetDeleteCallback(base::Callback<void()> on_delete_callback) {
137 on_delete_callback_ = on_delete_callback; 140 on_delete_callback_ = on_delete_callback;
138 } 141 }
139 142
143 void KeyLayout::SetSuggestTextCallback(
144 base::Callback<void(const std::string&)> on_suggest_text_callback) {
145 on_suggest_text_callback_ = on_suggest_text_callback;
146 }
147
140 void KeyLayout::SetKeyArea(const gfx::RectF& key_area) { 148 void KeyLayout::SetKeyArea(const gfx::RectF& key_area) {
141 key_area_ = key_area; 149 key_area_ = key_area;
142 } 150 }
143 151
144 void KeyLayout::Draw(SkCanvas* canvas) { 152 void KeyLayout::Draw(SkCanvas* canvas) {
145 // Add shadow beneath the key area. 153 // Add shadow beneath the key area.
146 int blur = 20; 154 int blur = 20;
147 SkColor color = SkColorSetARGB(0x80, 0, 0, 0); 155 SkColor color = SkColorSetARGB(0x80, 0, 0, 0);
148 std::vector<gfx::ShadowValue> shadows; 156 std::vector<gfx::ShadowValue> shadows;
149 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(0, 0), blur, color)); 157 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(0, 0), blur, color));
(...skipping 17 matching lines...) Expand all
167 text_paint.setTextAlign(SkPaint::kCenter_Align); 175 text_paint.setTextAlign(SkPaint::kCenter_Align);
168 176
169 SkPaint paint; 177 SkPaint paint;
170 for (size_t row_index = 0; row_index < layout_->size(); row_index++) { 178 for (size_t row_index = 0; row_index < layout_->size(); row_index++) {
171 float current_top = key_area_.y() + row_index * row_height; 179 float current_top = key_area_.y() + row_index * row_height;
172 float current_left = key_area_.x(); 180 float current_left = key_area_.x();
173 for (size_t key_index = 0; key_index < (*layout_)[row_index].size(); 181 for (size_t key_index = 0; key_index < (*layout_)[row_index].size();
174 key_index++) { 182 key_index++) {
175 float key_width = static_cast<float>(key_area_.width()) * 183 float key_width = static_cast<float>(key_area_.width()) *
176 (*layout_)[row_index][key_index]; 184 (*layout_)[row_index][key_index];
177
178 (*key_map_)[row_index][key_index]->Draw( 185 (*key_map_)[row_index][key_index]->Draw(
179 canvas, text_paint, 186 canvas, text_paint,
180 gfx::RectF(current_left, current_top, key_width, row_height)); 187 gfx::RectF(current_left, current_top, key_width, row_height));
181 current_left += key_width; 188 current_left += key_width;
182 } 189 }
183 } 190 }
184 } 191 }
185 192
186 KeyLayout::Key* KeyLayout::GetKeyAtPoint(const gfx::PointF& point) { 193 KeyLayout::Key* KeyLayout::GetKeyAtPoint(const gfx::PointF& point) {
187 if (!key_area_.Contains(point)) { 194 if (!key_area_.Contains(point)) {
(...skipping 13 matching lines...) Expand all
201 return (*key_map_)[row_index][key_index]; 208 return (*key_map_)[row_index][key_index];
202 } 209 }
203 210
204 void KeyLayout::OnTouchUp(const gfx::PointF& touch_up) { 211 void KeyLayout::OnTouchUp(const gfx::PointF& touch_up) {
205 Key* key = GetKeyAtPoint(touch_up); 212 Key* key = GetKeyAtPoint(touch_up);
206 if (key != nullptr) { 213 if (key != nullptr) {
207 key->OnTouchUp(); 214 key->OnTouchUp();
208 } 215 }
209 } 216 }
210 217
218 void KeyLayout::SetPredictor(Predictor* predictor) {
219 predictor_ = predictor;
220 predictor_->SetSuggestionKeys(lower_case_key_map_[0]);
221 }
222
211 void KeyLayout::InitLayouts() { 223 void KeyLayout::InitLayouts() {
212 // Row layouts are specified by a vector of floats which indicate the percent 224 // Row layouts are specified by a vector of floats which indicate the percent
213 // width a given key takes up in that row. The floats of a given row *MUST* 225 // width a given key takes up in that row. The floats of a given row *MUST*
214 // add up to 1. 226 // add up to 1.
215 std::vector<float> ten_key_row_layout = { 227 std::vector<float> ten_key_row_layout = {
216 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f}; 228 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f};
217 std::vector<float> nine_key_row_layout = { 229 std::vector<float> nine_key_row_layout = {
218 0.15f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.15f}; 230 0.15f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.15f};
219 std::vector<float> seven_key_row_layout = { 231 std::vector<float> seven_key_row_layout = {
220 0.15f, 0.1f, 0.1f, 0.3f, 0.1f, 0.1f, 0.15f}; 232 0.15f, 0.1f, 0.1f, 0.3f, 0.1f, 0.1f, 0.15f};
221 std::vector<float> five_key_row_layout = {0.15f, 0.1f, 0.5f, 0.1f, 0.15f}; 233 std::vector<float> five_key_row_layout = {0.15f, 0.1f, 0.5f, 0.1f, 0.15f};
234 std::vector<float> three_key_row_layout = {0.33f, 0.33f, 0.33f};
222 235
236 letters_layout_.push_back(three_key_row_layout);
223 letters_layout_.push_back(ten_key_row_layout); 237 letters_layout_.push_back(ten_key_row_layout);
224 letters_layout_.push_back(nine_key_row_layout); 238 letters_layout_.push_back(nine_key_row_layout);
225 letters_layout_.push_back(nine_key_row_layout); 239 letters_layout_.push_back(nine_key_row_layout);
226 letters_layout_.push_back(five_key_row_layout); 240 letters_layout_.push_back(five_key_row_layout);
227 241
242 symbols_layout_.push_back(three_key_row_layout);
228 symbols_layout_.push_back(ten_key_row_layout); 243 symbols_layout_.push_back(ten_key_row_layout);
229 symbols_layout_.push_back(nine_key_row_layout); 244 symbols_layout_.push_back(nine_key_row_layout);
230 symbols_layout_.push_back(nine_key_row_layout); 245 symbols_layout_.push_back(nine_key_row_layout);
231 symbols_layout_.push_back(seven_key_row_layout); 246 symbols_layout_.push_back(seven_key_row_layout);
232 } 247 }
233 248
234 void KeyLayout::OnKeyDoNothing(const TextKey& key) { 249 void KeyLayout::OnKeyDoNothing(const TextKey& key) {
235 // do nothing 250 // do nothing
236 } 251 }
237 252
238 void KeyLayout::OnKeyEmitText(const TextKey& key) { 253 void KeyLayout::OnKeyEmitText(const TextKey& key) {
254 predictor_->StoreCurWord(std::string(key.ToText()));
239 on_text_callback_.Run(std::string(key.ToText())); 255 on_text_callback_.Run(std::string(key.ToText()));
240 } 256 }
241 257
242 void KeyLayout::OnKeyDelete(const TextKey& key) { 258 void KeyLayout::OnKeyDelete(const TextKey& key) {
259 predictor_->DeleteCharInCurWord();
243 on_delete_callback_.Run(); 260 on_delete_callback_.Run();
244 } 261 }
245 262
263 void KeyLayout::OnSuggestKeyEmitText(const TextUpdateKey& key) {
264 std::string update_string = std::string(key.ToText());
265 int delete_size = predictor_->ChoseSuggestWord(std::string(key.ToText()));
APW 2015/07/31 22:36:43 ChooseSuggestedWord
riajiang 2015/08/01 01:23:09 Done.
266 for (int i = 0; i < delete_size; i++) {
267 on_delete_callback_.Run();
268 }
269 on_suggest_text_callback_.Run(update_string);
270 }
271
246 void KeyLayout::OnKeySwitchToUpperCase(const TextKey& key) { 272 void KeyLayout::OnKeySwitchToUpperCase(const TextKey& key) {
247 layout_ = &letters_layout_; 273 layout_ = &letters_layout_;
248 key_map_ = &upper_case_key_map_; 274 key_map_ = &upper_case_key_map_;
249 } 275 }
250 276
251 void KeyLayout::OnKeySwitchToLowerCase(const TextKey& key) { 277 void KeyLayout::OnKeySwitchToLowerCase(const TextKey& key) {
252 layout_ = &letters_layout_; 278 layout_ = &letters_layout_;
253 key_map_ = &lower_case_key_map_; 279 key_map_ = &lower_case_key_map_;
254 } 280 }
255 281
256 void KeyLayout::OnKeySwitchToSymbols(const TextKey& key) { 282 void KeyLayout::OnKeySwitchToSymbols(const TextKey& key) {
257 layout_ = &symbols_layout_; 283 layout_ = &symbols_layout_;
258 key_map_ = &symbols_key_map_; 284 key_map_ = &symbols_key_map_;
259 } 285 }
260 286
261 void KeyLayout::InitKeyMaps() { 287 void KeyLayout::InitKeyMaps() {
262 base::Callback<void(const TextKey&)> do_nothing_callback = 288 base::Callback<void(const TextKey&)> do_nothing_callback =
263 base::Bind(&KeyLayout::OnKeyDoNothing, weak_factory_.GetWeakPtr()); 289 base::Bind(&KeyLayout::OnKeyDoNothing, weak_factory_.GetWeakPtr());
264 base::Callback<void(const TextKey&)> emit_text_callback = 290 base::Callback<void(const TextKey&)> emit_text_callback =
265 base::Bind(&KeyLayout::OnKeyEmitText, weak_factory_.GetWeakPtr()); 291 base::Bind(&KeyLayout::OnKeyEmitText, weak_factory_.GetWeakPtr());
266 base::Callback<void(const TextKey&)> delete_callback = 292 base::Callback<void(const TextKey&)> delete_callback =
267 base::Bind(&KeyLayout::OnKeyDelete, weak_factory_.GetWeakPtr()); 293 base::Bind(&KeyLayout::OnKeyDelete, weak_factory_.GetWeakPtr());
294 base::Callback<void(const TextUpdateKey&)> suggest_emit_text_callback =
295 base::Bind(&KeyLayout::OnSuggestKeyEmitText, weak_factory_.GetWeakPtr());
268 base::Callback<void(const TextKey&)> switch_to_upper_case_callback = 296 base::Callback<void(const TextKey&)> switch_to_upper_case_callback =
269 base::Bind(&KeyLayout::OnKeySwitchToUpperCase, 297 base::Bind(&KeyLayout::OnKeySwitchToUpperCase,
270 weak_factory_.GetWeakPtr()); 298 weak_factory_.GetWeakPtr());
271 base::Callback<void(const TextKey&)> switch_to_lower_case_callback = 299 base::Callback<void(const TextKey&)> switch_to_lower_case_callback =
272 base::Bind(&KeyLayout::OnKeySwitchToLowerCase, 300 base::Bind(&KeyLayout::OnKeySwitchToLowerCase,
273 weak_factory_.GetWeakPtr()); 301 weak_factory_.GetWeakPtr());
274 base::Callback<void(const TextKey&)> switch_to_symbols_callback = 302 base::Callback<void(const TextKey&)> switch_to_symbols_callback =
275 base::Bind(&KeyLayout::OnKeySwitchToSymbols, weak_factory_.GetWeakPtr()); 303 base::Bind(&KeyLayout::OnKeySwitchToSymbols, weak_factory_.GetWeakPtr());
276 304
277 ImageKey* switch_to_upper_case_image_key = new ImageKey( 305 ImageKey* switch_to_upper_case_image_key = new ImageKey(
278 "/\\", switch_to_upper_case_callback, keyboard_native::kUpperCaseIcon); 306 "/\\", switch_to_upper_case_callback, keyboard_native::kUpperCaseIcon);
279 ImageKey* switch_to_lower_case_image_key = new ImageKey( 307 ImageKey* switch_to_lower_case_image_key = new ImageKey(
280 "\\/", switch_to_lower_case_callback, keyboard_native::kLowerCaseIcon); 308 "\\/", switch_to_lower_case_callback, keyboard_native::kLowerCaseIcon);
281 ImageKey* delete_image_key = 309 ImageKey* delete_image_key =
282 new ImageKey("<-", delete_callback, keyboard_native::kDeleteIcon); 310 new ImageKey("<-", delete_callback, keyboard_native::kDeleteIcon);
283 ImageKey* action_image_key = 311 ImageKey* action_image_key =
284 new ImageKey(":)", do_nothing_callback, keyboard_native::kActionIcon); 312 new ImageKey(":)", do_nothing_callback, keyboard_native::kActionIcon);
285 313
286 std::vector<Key*> lower_case_key_map_row_one = { 314 std::vector<KeyLayout::Key*> suggestion_strip_key_map_row = {
APW 2015/07/31 22:36:43 lets make copies of these for each layout and then
riajiang 2015/08/01 01:23:09 Done.
315 new TextUpdateKey("", suggest_emit_text_callback),
316 new TextUpdateKey("", suggest_emit_text_callback),
317 new TextUpdateKey("", suggest_emit_text_callback)};
318
319 std::vector<KeyLayout::Key*> lower_case_key_map_row_one = {
287 new TextKey("q", emit_text_callback), 320 new TextKey("q", emit_text_callback),
288 new TextKey("w", emit_text_callback), 321 new TextKey("w", emit_text_callback),
289 new TextKey("e", emit_text_callback), 322 new TextKey("e", emit_text_callback),
290 new TextKey("r", emit_text_callback), 323 new TextKey("r", emit_text_callback),
291 new TextKey("t", emit_text_callback), 324 new TextKey("t", emit_text_callback),
292 new TextKey("y", emit_text_callback), 325 new TextKey("y", emit_text_callback),
293 new TextKey("u", emit_text_callback), 326 new TextKey("u", emit_text_callback),
294 new TextKey("o", emit_text_callback), 327 new TextKey("o", emit_text_callback),
295 new TextKey("i", emit_text_callback), 328 new TextKey("i", emit_text_callback),
296 new TextKey("p", emit_text_callback)}; 329 new TextKey("p", emit_text_callback)};
297 330
298 std::vector<Key*> lower_case_key_map_row_two = { 331 std::vector<KeyLayout::Key*> lower_case_key_map_row_two = {
APW 2015/07/31 22:36:43 why are these all now KeyLayout::?
riajiang 2015/08/01 01:23:09 Deleted
299 new TextKey("a", emit_text_callback), 332 new TextKey("a", emit_text_callback),
300 new TextKey("s", emit_text_callback), 333 new TextKey("s", emit_text_callback),
301 new TextKey("d", emit_text_callback), 334 new TextKey("d", emit_text_callback),
302 new TextKey("f", emit_text_callback), 335 new TextKey("f", emit_text_callback),
303 new TextKey("g", emit_text_callback), 336 new TextKey("g", emit_text_callback),
304 new TextKey("h", emit_text_callback), 337 new TextKey("h", emit_text_callback),
305 new TextKey("j", emit_text_callback), 338 new TextKey("j", emit_text_callback),
306 new TextKey("k", emit_text_callback), 339 new TextKey("k", emit_text_callback),
307 new TextKey("l", emit_text_callback)}; 340 new TextKey("l", emit_text_callback)};
308 341
309 std::vector<Key*> lower_case_key_map_row_three = { 342 std::vector<KeyLayout::Key*> lower_case_key_map_row_three = {
310 switch_to_upper_case_image_key, 343 switch_to_upper_case_image_key,
311 new TextKey("z", emit_text_callback), 344 new TextKey("z", emit_text_callback),
312 new TextKey("x", emit_text_callback), 345 new TextKey("x", emit_text_callback),
313 new TextKey("c", emit_text_callback), 346 new TextKey("c", emit_text_callback),
314 new TextKey("v", emit_text_callback), 347 new TextKey("v", emit_text_callback),
315 new TextKey("b", emit_text_callback), 348 new TextKey("b", emit_text_callback),
316 new TextKey("n", emit_text_callback), 349 new TextKey("n", emit_text_callback),
317 new TextKey("m", emit_text_callback), 350 new TextKey("m", emit_text_callback),
318 delete_image_key}; 351 delete_image_key};
319 352
320 std::vector<Key*> lower_case_key_map_row_four = { 353 std::vector<KeyLayout::Key*> lower_case_key_map_row_four = {
321 new TextKey("sym", switch_to_symbols_callback), 354 new TextKey("sym", switch_to_symbols_callback),
322 new TextKey(",", emit_text_callback), 355 new TextKey(",", emit_text_callback),
323 new TextKey(" ", emit_text_callback), 356 new TextKey(" ", emit_text_callback),
324 new TextKey(".", emit_text_callback), 357 new TextKey(".", emit_text_callback),
325 action_image_key}; 358 action_image_key};
326 359
327 lower_case_key_map_ = {lower_case_key_map_row_one, 360 lower_case_key_map_ = {suggestion_strip_key_map_row,
361 lower_case_key_map_row_one,
328 lower_case_key_map_row_two, 362 lower_case_key_map_row_two,
329 lower_case_key_map_row_three, 363 lower_case_key_map_row_three,
330 lower_case_key_map_row_four}; 364 lower_case_key_map_row_four};
331 365
332 std::vector<Key*> upper_case_key_map_row_one = { 366 std::vector<KeyLayout::Key*> upper_case_key_map_row_one = {
333 new TextKey("Q", emit_text_callback), 367 new TextKey("Q", emit_text_callback),
334 new TextKey("W", emit_text_callback), 368 new TextKey("W", emit_text_callback),
335 new TextKey("E", emit_text_callback), 369 new TextKey("E", emit_text_callback),
336 new TextKey("R", emit_text_callback), 370 new TextKey("R", emit_text_callback),
337 new TextKey("T", emit_text_callback), 371 new TextKey("T", emit_text_callback),
338 new TextKey("Y", emit_text_callback), 372 new TextKey("Y", emit_text_callback),
339 new TextKey("U", emit_text_callback), 373 new TextKey("U", emit_text_callback),
340 new TextKey("O", emit_text_callback), 374 new TextKey("O", emit_text_callback),
341 new TextKey("I", emit_text_callback), 375 new TextKey("I", emit_text_callback),
342 new TextKey("P", emit_text_callback)}; 376 new TextKey("P", emit_text_callback)};
343 377
344 std::vector<Key*> upper_case_key_map_row_two = { 378 std::vector<KeyLayout::Key*> upper_case_key_map_row_two = {
345 new TextKey("A", emit_text_callback), 379 new TextKey("A", emit_text_callback),
346 new TextKey("S", emit_text_callback), 380 new TextKey("S", emit_text_callback),
347 new TextKey("D", emit_text_callback), 381 new TextKey("D", emit_text_callback),
348 new TextKey("F", emit_text_callback), 382 new TextKey("F", emit_text_callback),
349 new TextKey("G", emit_text_callback), 383 new TextKey("G", emit_text_callback),
350 new TextKey("H", emit_text_callback), 384 new TextKey("H", emit_text_callback),
351 new TextKey("J", emit_text_callback), 385 new TextKey("J", emit_text_callback),
352 new TextKey("K", emit_text_callback), 386 new TextKey("K", emit_text_callback),
353 new TextKey("L", emit_text_callback)}; 387 new TextKey("L", emit_text_callback)};
354 388
355 std::vector<Key*> upper_case_key_map_row_three = { 389 std::vector<KeyLayout::Key*> upper_case_key_map_row_three = {
356 switch_to_lower_case_image_key, 390 switch_to_lower_case_image_key,
357 new TextKey("Z", emit_text_callback), 391 new TextKey("Z", emit_text_callback),
358 new TextKey("X", emit_text_callback), 392 new TextKey("X", emit_text_callback),
359 new TextKey("C", emit_text_callback), 393 new TextKey("C", emit_text_callback),
360 new TextKey("V", emit_text_callback), 394 new TextKey("V", emit_text_callback),
361 new TextKey("B", emit_text_callback), 395 new TextKey("B", emit_text_callback),
362 new TextKey("N", emit_text_callback), 396 new TextKey("N", emit_text_callback),
363 new TextKey("M", emit_text_callback), 397 new TextKey("M", emit_text_callback),
364 delete_image_key}; 398 delete_image_key};
365 399
366 std::vector<Key*> upper_case_key_map_row_four = { 400 std::vector<KeyLayout::Key*> upper_case_key_map_row_four = {
367 new TextKey("SYM", switch_to_symbols_callback), 401 new TextKey("SYM", switch_to_symbols_callback),
368 new TextKey(",", emit_text_callback), 402 new TextKey(",", emit_text_callback),
369 new TextKey(" ", emit_text_callback), 403 new TextKey(" ", emit_text_callback),
370 new TextKey(".", emit_text_callback), 404 new TextKey(".", emit_text_callback),
371 action_image_key}; 405 action_image_key};
372 406
373 upper_case_key_map_ = {upper_case_key_map_row_one, 407 upper_case_key_map_ = {suggestion_strip_key_map_row,
408 upper_case_key_map_row_one,
374 upper_case_key_map_row_two, 409 upper_case_key_map_row_two,
375 upper_case_key_map_row_three, 410 upper_case_key_map_row_three,
376 upper_case_key_map_row_four}; 411 upper_case_key_map_row_four};
377 412
378 std::vector<Key*> symbols_key_map_row_one = { 413 std::vector<KeyLayout::Key*> symbols_key_map_row_one = {
379 new TextKey("1", emit_text_callback), 414 new TextKey("1", emit_text_callback),
380 new TextKey("2", emit_text_callback), 415 new TextKey("2", emit_text_callback),
381 new TextKey("3", emit_text_callback), 416 new TextKey("3", emit_text_callback),
382 new TextKey("4", emit_text_callback), 417 new TextKey("4", emit_text_callback),
383 new TextKey("5", emit_text_callback), 418 new TextKey("5", emit_text_callback),
384 new TextKey("6", emit_text_callback), 419 new TextKey("6", emit_text_callback),
385 new TextKey("7", emit_text_callback), 420 new TextKey("7", emit_text_callback),
386 new TextKey("8", emit_text_callback), 421 new TextKey("8", emit_text_callback),
387 new TextKey("9", emit_text_callback), 422 new TextKey("9", emit_text_callback),
388 new TextKey("0", emit_text_callback)}; 423 new TextKey("0", emit_text_callback)};
389 424
390 std::vector<Key*> symbols_key_map_row_two = { 425 std::vector<KeyLayout::Key*> symbols_key_map_row_two = {
391 new TextKey("@", emit_text_callback), 426 new TextKey("@", emit_text_callback),
392 new TextKey("#", emit_text_callback), 427 new TextKey("#", emit_text_callback),
393 new TextKey("$", emit_text_callback), 428 new TextKey("$", emit_text_callback),
394 new TextKey("%", emit_text_callback), 429 new TextKey("%", emit_text_callback),
395 new TextKey("&", emit_text_callback), 430 new TextKey("&", emit_text_callback),
396 new TextKey("-", emit_text_callback), 431 new TextKey("-", emit_text_callback),
397 new TextKey("+", emit_text_callback), 432 new TextKey("+", emit_text_callback),
398 new TextKey("(", emit_text_callback), 433 new TextKey("(", emit_text_callback),
399 new TextKey(")", emit_text_callback)}; 434 new TextKey(")", emit_text_callback)};
400 435
401 std::vector<Key*> symbols_key_map_row_three = { 436 std::vector<KeyLayout::Key*> symbols_key_map_row_three = {
402 new TextKey("=\\<", switch_to_symbols_callback), 437 new TextKey("=\\<", switch_to_symbols_callback),
403 new TextKey("*", emit_text_callback), 438 new TextKey("*", emit_text_callback),
404 new TextKey("\"", emit_text_callback), 439 new TextKey("\"", emit_text_callback),
405 new TextKey("'", emit_text_callback), 440 new TextKey("'", emit_text_callback),
406 new TextKey(":", emit_text_callback), 441 new TextKey(":", emit_text_callback),
407 new TextKey(";", emit_text_callback), 442 new TextKey(";", emit_text_callback),
408 new TextKey("!", emit_text_callback), 443 new TextKey("!", emit_text_callback),
409 new TextKey("?", emit_text_callback), 444 new TextKey("?", emit_text_callback),
410 delete_image_key}; 445 delete_image_key};
411 446
412 std::vector<Key*> symbols_key_map_row_four = { 447 std::vector<KeyLayout::Key*> symbols_key_map_row_four = {
413 new TextKey("ABC", switch_to_lower_case_callback), 448 new TextKey("ABC", switch_to_lower_case_callback),
414 new TextKey(",", emit_text_callback), 449 new TextKey(",", emit_text_callback),
415 new TextKey("_", emit_text_callback), 450 new TextKey("_", emit_text_callback),
416 new TextKey(" ", emit_text_callback), 451 new TextKey(" ", emit_text_callback),
417 new TextKey("/", emit_text_callback), 452 new TextKey("/", emit_text_callback),
418 new TextKey(".", emit_text_callback), 453 new TextKey(".", emit_text_callback),
419 action_image_key}; 454 action_image_key};
420 455
421 symbols_key_map_ = {symbols_key_map_row_one, 456 symbols_key_map_ = {suggestion_strip_key_map_row,
457 symbols_key_map_row_one,
422 symbols_key_map_row_two, 458 symbols_key_map_row_two,
423 symbols_key_map_row_three, 459 symbols_key_map_row_three,
424 symbols_key_map_row_four}; 460 symbols_key_map_row_four};
425 } 461 }
426 } 462
427 // namespace keyboard 463 } // namespace keyboard
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698