Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |