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

Unified Diff: services/keyboard_native/text_update_key.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, 5 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 side-by-side diff with in-line comments
Download patch
Index: services/keyboard_native/text_update_key.cc
diff --git a/services/keyboard_native/text_update_key.cc b/services/keyboard_native/text_update_key.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c29deff01b5efc9eb1e4645f69d4366b810a71b1
--- /dev/null
+++ b/services/keyboard_native/text_update_key.cc
@@ -0,0 +1,80 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/keyboard_native/text_update_key.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkPaint.h"
+#include "third_party/skia/include/core/SkScalar.h"
+#include "ui/gfx/geometry/rect_f.h"
+
+namespace keyboard {
+
+TextUpdateKey::TextUpdateKey(
+ std::string text,
+ base::Callback<void(const TextUpdateKey&)> touch_up_callback)
+ : text_(text), touch_up_callback_(touch_up_callback) {
+}
+
+TextUpdateKey::~TextUpdateKey() {
+}
+
+// Key implementation.
+void TextUpdateKey::Draw(SkCanvas* canvas,
+ SkPaint& paint,
+ const gfx::RectF& rect) {
+ std::string text_to_fit = text_;
+ SkRect bounds;
+ paint.measureText((const void*)(text_.c_str()), strlen(text_.c_str()),
+ &bounds);
+ int text_need_scale = 0;
APW 2015/07/31 22:36:42 boolean?
riajiang 2015/08/01 01:23:08 Done.
+ if (bounds.width() > rect.width() * 0.8) {
+ text_need_scale = 1;
+
+ paint.setTextScaleX(SkFloatToScalar(0.6));
APW 2015/07/31 22:36:43 Can you try using copy constructor to make copy of
riajiang 2015/08/01 01:23:08 Made a copy of the paint and changed it back to co
+ paint.measureText((const void*)(text_.c_str()), strlen(text_.c_str()),
+ &bounds);
+ paint.setTextScaleX(SkIntToScalar(1));
+ if (bounds.width() > rect.width() * 0.8) {
+ int dot_size = SkScalarTruncToInt((SkScalarToFloat(bounds.width()) -
APW 2015/07/31 22:36:43 dot_count
riajiang 2015/08/01 01:23:08 Done.
+ SkScalarToFloat(rect.width()) * 0.8) /
+ SkScalarToFloat(bounds.width()) *
+ strlen(text_.c_str())) +
+ 1;
+ if (dot_size >= 3) {
APW 2015/07/31 22:36:43 You can do this better in a loop.
riajiang 2015/08/01 01:23:08 Done.
+ text_to_fit =
+ "..." +
+ text_to_fit.substr(dot_size, text_to_fit.length() - dot_size);
+ } else if (dot_size == 1) {
+ text_to_fit =
+ "." + text_to_fit.substr(dot_size, text_to_fit.length() - dot_size);
+ } else if (dot_size == 2) {
+ text_to_fit =
+ ".." +
+ text_to_fit.substr(dot_size, text_to_fit.length() - dot_size);
+ }
+ }
+ }
+
+ float text_baseline_offset = rect.height() / 5.0f;
+ if (text_need_scale)
+ paint.setTextScaleX(SkFloatToScalar(0.6));
APW 2015/07/31 22:36:42 use braces around this if
riajiang 2015/08/01 01:23:08 Done.
+ canvas->drawText(text_to_fit.c_str(), strlen(text_to_fit.c_str()),
+ rect.x() + (rect.width() / 2.0f),
+ rect.y() + rect.height() - text_baseline_offset, paint);
+ paint.setTextScaleX(SkIntToScalar(1));
+}
+
+const char* TextUpdateKey::ToText() const {
+ const char* text_char = text_.c_str();
+ return text_char;
+}
+
+void TextUpdateKey::OnTouchUp() {
+ touch_up_callback_.Run(*this);
+}
+
+void TextUpdateKey::ChangeText(std::string new_text) {
+ text_ = new_text;
+}
+} // namespace keyboard

Powered by Google App Engine
This is Rietveld 408576698