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

Unified Diff: ash/ime/candidate_view.cc

Issue 680383008: Move ash/ime to ui/chromeos/ime (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@athena_do_not_use_ash48_global_command
Patch Set: Created 6 years, 1 month 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: ash/ime/candidate_view.cc
diff --git a/ash/ime/candidate_view.cc b/ash/ime/candidate_view.cc
deleted file mode 100644
index b13cb0a53f2ca4f5d4a29ed1d472d0da971e6223..0000000000000000000000000000000000000000
--- a/ash/ime/candidate_view.cc
+++ /dev/null
@@ -1,301 +0,0 @@
-// Copyright 2014 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 "ash/ime/candidate_view.h"
-
-#include "ash/ime/candidate_window_constants.h"
-#include "base/strings/utf_string_conversions.h"
-#include "ui/base/ime/candidate_window.h"
-#include "ui/gfx/color_utils.h"
-#include "ui/native_theme/native_theme.h"
-#include "ui/views/background.h"
-#include "ui/views/border.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/widget/widget.h"
-
-namespace ash {
-namespace ime {
-
-namespace {
-
-// VerticalCandidateLabel is used for rendering candidate text in
-// the vertical candidate window.
-class VerticalCandidateLabel : public views::Label {
- public:
- VerticalCandidateLabel() {}
-
- private:
- ~VerticalCandidateLabel() override {}
-
- // Returns the preferred size, but guarantees that the width has at
- // least kMinCandidateLabelWidth pixels.
- gfx::Size GetPreferredSize() const override {
- gfx::Size size = Label::GetPreferredSize();
- size.SetToMax(gfx::Size(kMinCandidateLabelWidth, 0));
- size.SetToMin(gfx::Size(kMaxCandidateLabelWidth, size.height()));
- return size;
- }
-
- DISALLOW_COPY_AND_ASSIGN(VerticalCandidateLabel);
-};
-
-// Creates the shortcut label, and returns it (never returns NULL).
-// The label text is not set in this function.
-views::Label* CreateShortcutLabel(
- ui::CandidateWindow::Orientation orientation,
- const ui::NativeTheme& theme) {
- // Create the shortcut label. The label will be owned by
- // |wrapped_shortcut_label|, hence it's deleted when
- // |wrapped_shortcut_label| is deleted.
- views::Label* shortcut_label = new views::Label;
-
- if (orientation == ui::CandidateWindow::VERTICAL) {
- shortcut_label->SetFontList(
- shortcut_label->font_list().Derive(kFontSizeDelta, gfx::Font::BOLD));
- } else {
- shortcut_label->SetFontList(
- shortcut_label->font_list().DeriveWithSizeDelta(kFontSizeDelta));
- }
- // TODO(satorux): Maybe we need to use language specific fonts for
- // candidate_label, like Chinese font for Chinese input method?
- shortcut_label->SetEnabledColor(theme.GetSystemColor(
- ui::NativeTheme::kColorId_LabelEnabledColor));
- shortcut_label->SetDisabledColor(theme.GetSystemColor(
- ui::NativeTheme::kColorId_LabelDisabledColor));
-
- // Setup paddings.
- const gfx::Insets kVerticalShortcutLabelInsets(1, 6, 1, 6);
- const gfx::Insets kHorizontalShortcutLabelInsets(1, 3, 1, 0);
- const gfx::Insets insets =
- (orientation == ui::CandidateWindow::VERTICAL ?
- kVerticalShortcutLabelInsets :
- kHorizontalShortcutLabelInsets);
- shortcut_label->SetBorder(views::Border::CreateEmptyBorder(
- insets.top(), insets.left(), insets.bottom(), insets.right()));
-
- // Add decoration based on the orientation.
- if (orientation == ui::CandidateWindow::VERTICAL) {
- // Set the background color.
- SkColor blackish = color_utils::AlphaBlend(
- SK_ColorBLACK,
- theme.GetSystemColor(ui::NativeTheme::kColorId_WindowBackground),
- 0x40);
- SkColor transparent_blakish = color_utils::AlphaBlend(
- SK_ColorTRANSPARENT, blackish, 0xE0);
- shortcut_label->set_background(
- views::Background::CreateSolidBackground(transparent_blakish));
- }
-
- return shortcut_label;
-}
-
-// Creates the candidate label, and returns it (never returns NULL).
-// The label text is not set in this function.
-views::Label* CreateCandidateLabel(
- ui::CandidateWindow::Orientation orientation) {
- views::Label* candidate_label = NULL;
-
- // Create the candidate label. The label will be added to |this| as a
- // child view, hence it's deleted when |this| is deleted.
- if (orientation == ui::CandidateWindow::VERTICAL) {
- candidate_label = new VerticalCandidateLabel;
- } else {
- candidate_label = new views::Label;
- }
-
- // Change the font size.
- candidate_label->SetFontList(
- candidate_label->font_list().DeriveWithSizeDelta(kFontSizeDelta));
- candidate_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-
- return candidate_label;
-}
-
-// Creates the annotation label, and return it (never returns NULL).
-// The label text is not set in this function.
-views::Label* CreateAnnotationLabel(
- ui::CandidateWindow::Orientation orientation,
- const ui::NativeTheme& theme) {
- // Create the annotation label.
- views::Label* annotation_label = new views::Label;
-
- // Change the font size and color.
- annotation_label->SetFontList(
- annotation_label->font_list().DeriveWithSizeDelta(kFontSizeDelta));
- annotation_label->SetEnabledColor(theme.GetSystemColor(
- ui::NativeTheme::kColorId_LabelDisabledColor));
- annotation_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-
- return annotation_label;
-}
-
-} // namespace
-
-CandidateView::CandidateView(
- views::ButtonListener* listener,
- ui::CandidateWindow::Orientation orientation)
- : views::CustomButton(listener),
- orientation_(orientation),
- shortcut_label_(NULL),
- candidate_label_(NULL),
- annotation_label_(NULL),
- infolist_icon_(NULL),
- shortcut_width_(0),
- candidate_width_(0),
- highlighted_(false) {
- SetBorder(views::Border::CreateEmptyBorder(1, 1, 1, 1));
-
- const ui::NativeTheme& theme = *GetNativeTheme();
- shortcut_label_ = CreateShortcutLabel(orientation, theme);
- candidate_label_ = CreateCandidateLabel(orientation);
- annotation_label_ = CreateAnnotationLabel(orientation, theme);
-
- AddChildView(shortcut_label_);
- AddChildView(candidate_label_);
- AddChildView(annotation_label_);
-
- if (orientation == ui::CandidateWindow::VERTICAL) {
- infolist_icon_ = new views::View;
- infolist_icon_->set_background(
- views::Background::CreateSolidBackground(theme.GetSystemColor(
- ui::NativeTheme::kColorId_FocusedBorderColor)));
- AddChildView(infolist_icon_);
- }
-}
-
-void CandidateView::GetPreferredWidths(int* shortcut_width,
- int* candidate_width) {
- *shortcut_width = shortcut_label_->GetPreferredSize().width();
- *candidate_width = candidate_label_->GetPreferredSize().width();
-}
-
-void CandidateView::SetWidths(int shortcut_width, int candidate_width) {
- shortcut_width_ = shortcut_width;
- shortcut_label_->SetVisible(shortcut_width_ != 0);
- candidate_width_ = candidate_width;
-}
-
-void CandidateView::SetEntry(const ui::CandidateWindow::Entry& entry) {
- base::string16 label = entry.label;
- if (!label.empty() && orientation_ != ui::CandidateWindow::VERTICAL)
- label += base::ASCIIToUTF16(".");
- shortcut_label_->SetText(label);
- candidate_label_->SetText(entry.value);
- annotation_label_->SetText(entry.annotation);
-}
-
-void CandidateView::SetInfolistIcon(bool enable) {
- if (infolist_icon_)
- infolist_icon_->SetVisible(enable);
- SchedulePaint();
-}
-
-void CandidateView::SetHighlighted(bool highlighted) {
- if (highlighted_ == highlighted)
- return;
-
- highlighted_ = highlighted;
- if (highlighted) {
- ui::NativeTheme* theme = GetNativeTheme();
- set_background(
- views::Background::CreateSolidBackground(theme->GetSystemColor(
- ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused)));
- SetBorder(views::Border::CreateSolidBorder(
- 1,
- theme->GetSystemColor(ui::NativeTheme::kColorId_FocusedBorderColor)));
-
- // Cancel currently focused one.
- for (int i = 0; i < parent()->child_count(); ++i) {
- CandidateView* view =
- static_cast<CandidateView*>((parent()->child_at(i)));
- if (view != this)
- view->SetHighlighted(false);
- }
- } else {
- set_background(NULL);
- SetBorder(views::Border::CreateEmptyBorder(1, 1, 1, 1));
- }
- SchedulePaint();
-}
-
-void CandidateView::StateChanged() {
- shortcut_label_->SetEnabled(state() != STATE_DISABLED);
- if (state() == STATE_PRESSED)
- SetHighlighted(true);
-}
-
-bool CandidateView::OnMouseDragged(const ui::MouseEvent& event) {
- if (!HitTestPoint(event.location())) {
- // Moves the drag target to the sibling view.
- gfx::Point location_in_widget(event.location());
- ConvertPointToWidget(this, &location_in_widget);
- for (int i = 0; i < parent()->child_count(); ++i) {
- CandidateView* sibling =
- static_cast<CandidateView*>(parent()->child_at(i));
- if (sibling == this)
- continue;
- gfx::Point location_in_sibling(location_in_widget);
- ConvertPointFromWidget(sibling, &location_in_sibling);
- if (sibling->HitTestPoint(location_in_sibling)) {
- GetWidget()->GetRootView()->SetMouseHandler(sibling);
- sibling->SetHighlighted(true);
- return sibling->OnMouseDragged(ui::MouseEvent(event, this, sibling));
- }
- }
-
- return false;
- }
-
- return views::CustomButton::OnMouseDragged(event);
-}
-
-void CandidateView::Layout() {
- const int padding_width =
- orientation_ == ui::CandidateWindow::VERTICAL ? 4 : 6;
- int x = 0;
- shortcut_label_->SetBounds(x, 0, shortcut_width_, height());
- if (shortcut_width_ > 0)
- x += shortcut_width_ + padding_width;
- candidate_label_->SetBounds(x, 0, candidate_width_, height());
- x += candidate_width_ + padding_width;
-
- int right = bounds().right();
- if (infolist_icon_ && infolist_icon_->visible()) {
- infolist_icon_->SetBounds(
- right - kInfolistIndicatorIconWidth - kInfolistIndicatorIconPadding,
- kInfolistIndicatorIconPadding,
- kInfolistIndicatorIconWidth,
- height() - kInfolistIndicatorIconPadding * 2);
- right -= kInfolistIndicatorIconWidth + kInfolistIndicatorIconPadding * 2;
- }
- annotation_label_->SetBounds(x, 0, right - x, height());
-}
-
-gfx::Size CandidateView::GetPreferredSize() const {
- const int padding_width =
- orientation_ == ui::CandidateWindow::VERTICAL ? 4 : 6;
- gfx::Size size;
- if (shortcut_label_->visible()) {
- size = shortcut_label_->GetPreferredSize();
- size.SetToMax(gfx::Size(shortcut_width_, 0));
- size.Enlarge(padding_width, 0);
- }
- gfx::Size candidate_size = candidate_label_->GetPreferredSize();
- candidate_size.SetToMax(gfx::Size(candidate_width_, 0));
- size.Enlarge(candidate_size.width() + padding_width, 0);
- size.SetToMax(candidate_size);
- if (annotation_label_->visible()) {
- gfx::Size annotation_size = annotation_label_->GetPreferredSize();
- size.Enlarge(annotation_size.width() + padding_width, 0);
- size.SetToMax(annotation_size);
- }
-
- // Reserves the margin for infolist_icon even if it's not visible.
- size.Enlarge(
- kInfolistIndicatorIconWidth + kInfolistIndicatorIconPadding * 2, 0);
- return size;
-}
-
-} // namespace ime
-} // namespace ash
« no previous file with comments | « ash/ime/candidate_view.h ('k') | ash/ime/candidate_view_unittest.cc » ('j') | ui/base/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698