| Index: chrome/browser/chromeos/input_method/candidate_window.cc
|
| ===================================================================
|
| --- chrome/browser/chromeos/input_method/candidate_window.cc (revision 104959)
|
| +++ chrome/browser/chromeos/input_method/candidate_window.cc (working copy)
|
| @@ -119,26 +119,20 @@
|
| }
|
|
|
| // Creates shortcut text from the given index and the orientation.
|
| -std::wstring CreateShortcutText(
|
| - int index,
|
| - InputMethodLookupTable::Orientation orientation) {
|
| +string16 CreateShortcutText(int index,
|
| + InputMethodLookupTable::Orientation orientation) {
|
| // Choose the character used for the shortcut label.
|
| - const wchar_t kShortcutCharacters[] = L"1234567890ABCDEF";
|
| + const char kShortcutCharacters[] = "1234567890ABCDEF";
|
| // The default character should not be used but just in case.
|
| - wchar_t shortcut_character = L'?';
|
| + char shortcut_character = L'?';
|
| // -1 to exclude the null character at the end.
|
| - if (index < static_cast<int>(arraysize(kShortcutCharacters) - 1)) {
|
| + if (index < static_cast<int>(arraysize(kShortcutCharacters) - 1))
|
| shortcut_character = kShortcutCharacters[index];
|
| - }
|
|
|
| - std::wstring shortcut_text;
|
| - if (orientation == InputMethodLookupTable::kVertical) {
|
| - shortcut_text = base::StringPrintf(L"%lc", shortcut_character);
|
| - } else {
|
| - shortcut_text = base::StringPrintf(L"%lc.", shortcut_character);
|
| - }
|
| -
|
| - return shortcut_text;
|
| + std::string shortcut_text(1, shortcut_character);
|
| + if (orientation != InputMethodLookupTable::kVertical)
|
| + shortcut_text += '.';
|
| + return ASCIIToUTF16(shortcut_text);
|
| }
|
|
|
| // Creates the shortcut label, and returns it (never returns NULL).
|
| @@ -159,7 +153,8 @@
|
| }
|
| // TODO(satorux): Maybe we need to use language specific fonts for
|
| // candidate_label, like Chinese font for Chinese input method?
|
| - shortcut_label->SetColor(kShortcutColor);
|
| + shortcut_label->SetEnabledColor(kShortcutColor);
|
| + shortcut_label->SetDisabledColor(kDisabledShortcutColor);
|
|
|
| return shortcut_label;
|
| }
|
| @@ -186,6 +181,8 @@
|
| wrapped_shortcut_label->set_background(
|
| views::Background::CreateSolidBackground(
|
| kShortcutBackgroundColor));
|
| + shortcut_label->SetBackgroundColor(
|
| + wrapped_shortcut_label->background()->get_color());
|
| }
|
|
|
| return wrapped_shortcut_label;
|
| @@ -223,7 +220,7 @@
|
| // Change the font size and color.
|
| annotation_label->SetFont(
|
| annotation_label->font().DeriveFont(kFontSizeDelta));
|
| - annotation_label->SetColor(kAnnotationColor);
|
| + annotation_label->SetEnabledColor(kAnnotationColor);
|
| annotation_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
|
|
|
| return annotation_label;
|
| @@ -243,8 +240,7 @@
|
| // Compute the max width in shortcut labels.
|
| // We'll create temporary shortcut labels, and choose the largest width.
|
| for (int i = 0; i < lookup_table.page_size; ++i) {
|
| - shortcut_label->SetText(
|
| - WideToUTF16Hack(CreateShortcutText(i, lookup_table.orientation)));
|
| + shortcut_label->SetText(CreateShortcutText(i, lookup_table.orientation));
|
| shortcut_column_width =
|
| std::max(shortcut_column_width,
|
| wrapped_shortcut_label->GetPreferredSize().width());
|
| @@ -392,6 +388,7 @@
|
| views::Background::CreateVerticalGradientBackground(
|
| kFooterTopColor,
|
| kFooterBottomColor));
|
| + label_->SetBackgroundColor(contents->background()->get_color());
|
| }
|
|
|
| // Set the displayed text.
|
| @@ -596,13 +593,13 @@
|
| int annotation_column_width);
|
|
|
| // Sets candidate text to the given text.
|
| - void SetCandidateText(const std::wstring& text);
|
| + void SetCandidateText(const string16& text);
|
|
|
| // Sets shortcut text to the given text.
|
| - void SetShortcutText(const std::wstring& text);
|
| + void SetShortcutText(const string16& text);
|
|
|
| // Sets annotation text to the given text.
|
| - void SetAnnotationText(const std::wstring& text);
|
| + void SetAnnotationText(const string16& text);
|
|
|
| // Sets infolist icon.
|
| void SetInfolistIcon(bool enable);
|
| @@ -626,6 +623,10 @@
|
| // Overridden from View:
|
| virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE;
|
|
|
| + // Notifies labels of their new background colors. Called whenever the view's
|
| + // background color changes.
|
| + void UpdateLabelBackgroundColors();
|
| +
|
| // Zero-origin index in the current page.
|
| int index_in_page_;
|
|
|
| @@ -655,8 +656,8 @@
|
| // InfolistWindowView is the main container of the infolist window UI.
|
| class InfolistWindowView : public views::View {
|
| public:
|
| - InfolistWindowView(
|
| - views::Widget* parent_frame, views::Widget* candidate_window_frame);
|
| + InfolistWindowView(views::Widget* parent_frame,
|
| + views::Widget* candidate_window_frame);
|
| virtual ~InfolistWindowView();
|
| void Init();
|
| void Show();
|
| @@ -722,6 +723,10 @@
|
| void Unselect();
|
|
|
| private:
|
| + // Notifies labels of their new background colors. Called whenever the view's
|
| + // background color changes.
|
| + void UpdateLabelBackgroundColors();
|
| +
|
| // The parent candidate window that contains this view.
|
| InfolistWindowView* parent_infolist_window_;
|
|
|
| @@ -861,40 +866,36 @@
|
| layout->AddView(WrapWithPadding(infolist_label_,
|
| gfx::Insets(2, 0, 2, 0)));
|
| }
|
| + UpdateLabelBackgroundColors();
|
| }
|
|
|
| -void CandidateView::SetCandidateText(const std::wstring& text) {
|
| - candidate_label_->SetText(WideToUTF16Hack(text));
|
| +void CandidateView::SetCandidateText(const string16& text) {
|
| + candidate_label_->SetText(text);
|
| }
|
|
|
| -void CandidateView::SetShortcutText(const std::wstring& text) {
|
| - shortcut_label_->SetText(WideToUTF16Hack(text));
|
| +void CandidateView::SetShortcutText(const string16& text) {
|
| + shortcut_label_->SetText(text);
|
| }
|
|
|
| -void CandidateView::SetAnnotationText(const std::wstring& text) {
|
| - annotation_label_->SetText(WideToUTF16Hack(text));
|
| +void CandidateView::SetAnnotationText(const string16& text) {
|
| + annotation_label_->SetText(text);
|
| }
|
|
|
| void CandidateView::SetInfolistIcon(bool enable) {
|
| - if (!infolist_label_) {
|
| + if (!infolist_label_ || (infolist_icon_enabled_ == enable))
|
| return;
|
| - }
|
| - if (enable) {
|
| - infolist_label_->set_background(
|
| - views::Background::CreateSolidBackground(kSelectedRowFrameColor));
|
| - } else {
|
| - infolist_label_->set_background(NULL);
|
| - }
|
| - if (infolist_icon_enabled_ != enable) {
|
| - SchedulePaint();
|
| - }
|
| infolist_icon_enabled_ = enable;
|
| + infolist_label_->set_background(enable ?
|
| + views::Background::CreateSolidBackground(kSelectedRowFrameColor) : NULL);
|
| + UpdateLabelBackgroundColors();
|
| + SchedulePaint();
|
| }
|
|
|
| void CandidateView::Select() {
|
| set_background(
|
| views::Background::CreateSolidBackground(kSelectedRowBackgroundColor));
|
| set_border(views::Border::CreateSolidBorder(1, kSelectedRowFrameColor));
|
| + UpdateLabelBackgroundColors();
|
| // Need to call SchedulePaint() for background and border color changes.
|
| SchedulePaint();
|
| }
|
| @@ -902,12 +903,12 @@
|
| void CandidateView::Unselect() {
|
| set_background(NULL);
|
| set_border(NULL);
|
| + UpdateLabelBackgroundColors();
|
| SchedulePaint(); // See comments at Select().
|
| }
|
|
|
| void CandidateView::SetRowEnabled(bool enabled) {
|
| - shortcut_label_->SetColor(
|
| - enabled ? kShortcutColor : kDisabledShortcutColor);
|
| + shortcut_label_->SetEnabled(enabled);
|
| }
|
|
|
| gfx::Point CandidateView::GetCandidateLabelPosition() const {
|
| @@ -957,8 +958,20 @@
|
| return false;
|
| }
|
|
|
| -CandidateWindowView::CandidateWindowView(
|
| - views::Widget* parent_frame)
|
| +void CandidateView::UpdateLabelBackgroundColors() {
|
| + SkColor color = background() ?
|
| + background()->get_color() : kDefaultBackgroundColor;
|
| + if (orientation_ != InputMethodLookupTable::kVertical)
|
| + shortcut_label_->SetBackgroundColor(color);
|
| + candidate_label_->SetBackgroundColor(color);
|
| + annotation_label_->SetBackgroundColor(color);
|
| + if (infolist_label_) {
|
| + infolist_label_->SetBackgroundColor(infolist_label_->background() ?
|
| + infolist_label_->background()->get_color() : color);
|
| + }
|
| +}
|
| +
|
| +CandidateWindowView::CandidateWindowView(views::Widget* parent_frame)
|
| : selected_candidate_index_in_page_(0),
|
| parent_frame_(parent_frame),
|
| preedit_area_(NULL),
|
| @@ -1105,14 +1118,14 @@
|
| // case, we should not show shortcut labels.
|
| const bool no_shortcut_mode =
|
| (start_from < new_lookup_table.labels.size() &&
|
| - new_lookup_table.labels[start_from] == "");
|
| + new_lookup_table.labels[start_from].empty());
|
| for (size_t i = 0; i < candidate_views_.size(); ++i) {
|
| const size_t index_in_page = i;
|
| const size_t candidate_index = start_from + index_in_page;
|
| CandidateView* candidate_view = candidate_views_[index_in_page];
|
| // Set the shortcut text.
|
| if (no_shortcut_mode) {
|
| - candidate_view->SetShortcutText(L"");
|
| + candidate_view->SetShortcutText(string16());
|
| } else {
|
| // At this moment, we don't use labels sent from engines for UX
|
| // reasons. First, we want to show shortcut labels in empty rows
|
| @@ -1126,9 +1139,9 @@
|
| if (candidate_index < new_lookup_table.candidates.size() &&
|
| candidate_index < new_lookup_table.annotations.size()) {
|
| candidate_view->SetCandidateText(
|
| - UTF8ToWide(new_lookup_table.candidates[candidate_index]));
|
| + UTF8ToUTF16(new_lookup_table.candidates[candidate_index]));
|
| candidate_view->SetAnnotationText(
|
| - UTF8ToWide(new_lookup_table.annotations[candidate_index]));
|
| + UTF8ToUTF16(new_lookup_table.annotations[candidate_index]));
|
| candidate_view->SetRowEnabled(true);
|
|
|
| if ((new_lookup_table.mozc_candidates.candidate_size() >
|
| @@ -1141,8 +1154,8 @@
|
| }
|
| } else {
|
| // Disable the empty row.
|
| - candidate_view->SetCandidateText(L"");
|
| - candidate_view->SetAnnotationText(L"");
|
| + candidate_view->SetCandidateText(string16());
|
| + candidate_view->SetAnnotationText(string16());
|
| candidate_view->SetRowEnabled(false);
|
| candidate_view->SetInfolistIcon(false);
|
| }
|
| @@ -1412,6 +1425,7 @@
|
| layout->AddView(wrapped_title_label);
|
| layout->StartRow(0, 0);
|
| layout->AddView(wrapped_description_label);
|
| + UpdateLabelBackgroundColors();
|
| }
|
|
|
|
|
| @@ -1424,11 +1438,11 @@
|
| }
|
|
|
| void InfolistView::Select() {
|
| - set_background(
|
| - views::Background::CreateSolidBackground(
|
| - kSelectedInfolistRowBackgroundColor));
|
| + set_background(views::Background::CreateSolidBackground(
|
| + kSelectedInfolistRowBackgroundColor));
|
| set_border(
|
| views::Border::CreateSolidBorder(1, kSelectedInfolistRowFrameColor));
|
| + UpdateLabelBackgroundColors();
|
| // Need to call SchedulePaint() for background and border color changes.
|
| SchedulePaint();
|
| }
|
| @@ -1436,11 +1450,19 @@
|
| void InfolistView::Unselect() {
|
| set_background(NULL);
|
| set_border(NULL);
|
| + UpdateLabelBackgroundColors();
|
| SchedulePaint(); // See comments at Select().
|
| }
|
|
|
| -InfolistWindowView::InfolistWindowView(
|
| - views::Widget* parent_frame, views::Widget* candidate_window_frame)
|
| +void InfolistView::UpdateLabelBackgroundColors() {
|
| + SkColor color = background() ?
|
| + background()->get_color() : kDefaultBackgroundColor;
|
| + title_label_->SetBackgroundColor(color);
|
| + description_label_->SetBackgroundColor(color);
|
| +}
|
| +
|
| +InfolistWindowView::InfolistWindowView(views::Widget* parent_frame,
|
| + views::Widget* candidate_window_frame)
|
| : parent_frame_(parent_frame),
|
| candidate_window_frame_(candidate_window_frame),
|
| infolist_area_(NULL),
|
| @@ -1484,6 +1506,8 @@
|
| WrapWithPadding(caption_label, gfx::Insets(2, 2, 2, 2));
|
| wrapped_caption_label->set_background(
|
| views::Background::CreateSolidBackground(kInfolistTitleBackgroundColor));
|
| + caption_label->SetBackgroundColor(
|
| + wrapped_caption_label->background()->get_color());
|
| layout->AddView(wrapped_caption_label);
|
|
|
| layout->StartRow(0, 0);
|
|
|