| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/views/controls/combobox/combobox.h" | 5 #include "ui/views/controls/combobox/combobox.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 size_to_largest_label_(style_ == STYLE_NORMAL), | 399 size_to_largest_label_(style_ == STYLE_NORMAL), |
| 400 weak_ptr_factory_(this) { | 400 weak_ptr_factory_(this) { |
| 401 ModelChanged(); | 401 ModelChanged(); |
| 402 #if defined(OS_MACOSX) | 402 #if defined(OS_MACOSX) |
| 403 SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); | 403 SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); |
| 404 #else | 404 #else |
| 405 SetFocusBehavior(FocusBehavior::ALWAYS); | 405 SetFocusBehavior(FocusBehavior::ALWAYS); |
| 406 #endif | 406 #endif |
| 407 | 407 |
| 408 UpdateBorder(); | 408 UpdateBorder(); |
| 409 // set_background() takes ownership but takes a raw pointer. | 409 if (UseMd()) { |
| 410 std::unique_ptr<Background> b = | 410 // set_background() takes ownership but takes a raw pointer. |
| 411 PlatformStyle::CreateComboboxBackground(GetArrowContainerWidth()); | 411 std::unique_ptr<Background> b = |
| 412 set_background(b.release()); | 412 PlatformStyle::CreateComboboxBackground(GetArrowContainerWidth()); |
| 413 set_background(b.release()); |
| 414 } |
| 413 | 415 |
| 414 // Initialize the button images. | 416 // Initialize the button images. |
| 415 Button::ButtonState button_states[] = { | 417 Button::ButtonState button_states[] = { |
| 416 Button::STATE_DISABLED, | 418 Button::STATE_DISABLED, |
| 417 Button::STATE_NORMAL, | 419 Button::STATE_NORMAL, |
| 418 Button::STATE_HOVERED, | 420 Button::STATE_HOVERED, |
| 419 Button::STATE_PRESSED, | 421 Button::STATE_PRESSED, |
| 420 }; | 422 }; |
| 421 for (int i = 0; i < 2; i++) { | 423 for (int i = 0; i < 2; i++) { |
| 422 for (size_t state_index = 0; state_index < arraysize(button_states); | 424 for (size_t state_index = 0; state_index < arraysize(button_states); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 } | 532 } |
| 531 } | 533 } |
| 532 | 534 |
| 533 int arrow_button_x = std::max(0, text_button_width); | 535 int arrow_button_x = std::max(0, text_button_width); |
| 534 text_button_->SetBounds(0, 0, std::max(0, text_button_width), height()); | 536 text_button_->SetBounds(0, 0, std::max(0, text_button_width), height()); |
| 535 arrow_button_->SetBounds(arrow_button_x, 0, arrow_button_width, height()); | 537 arrow_button_->SetBounds(arrow_button_x, 0, arrow_button_width, height()); |
| 536 } | 538 } |
| 537 | 539 |
| 538 void Combobox::OnEnabledChanged() { | 540 void Combobox::OnEnabledChanged() { |
| 539 View::OnEnabledChanged(); | 541 View::OnEnabledChanged(); |
| 540 arrow_image_ = PlatformStyle::CreateComboboxArrow(enabled(), style_); | 542 if (!UseMd()) |
| 543 arrow_image_ = PlatformStyle::CreateComboboxArrow(enabled(), style_); |
| 544 } |
| 545 |
| 546 void Combobox::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
| 547 if (!UseMd()) |
| 548 return; |
| 549 |
| 550 set_background(Background::CreateBackgroundPainter( |
| 551 true, Painter::CreateSolidRoundRectPainter( |
| 552 theme->GetSystemColor( |
| 553 ui::NativeTheme::kColorId_TextfieldDefaultBackground), |
| 554 FocusableBorder::kCornerRadiusDp))); |
| 541 } | 555 } |
| 542 | 556 |
| 543 int Combobox::GetRowCount() { | 557 int Combobox::GetRowCount() { |
| 544 return model()->GetItemCount(); | 558 return model()->GetItemCount(); |
| 545 } | 559 } |
| 546 | 560 |
| 547 int Combobox::GetSelectedRow() { | 561 int Combobox::GetSelectedRow() { |
| 548 return selected_index_; | 562 return selected_index_; |
| 549 } | 563 } |
| 550 | 564 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 gfx::Insets insets = GetInsets(); | 777 gfx::Insets insets = GetInsets(); |
| 764 insets += gfx::Insets(0, Textfield::kTextPadding, 0, Textfield::kTextPadding); | 778 insets += gfx::Insets(0, Textfield::kTextPadding, 0, Textfield::kTextPadding); |
| 765 | 779 |
| 766 gfx::ScopedCanvas scoped_canvas(canvas); | 780 gfx::ScopedCanvas scoped_canvas(canvas); |
| 767 canvas->ClipRect(GetContentsBounds()); | 781 canvas->ClipRect(GetContentsBounds()); |
| 768 | 782 |
| 769 int x = insets.left(); | 783 int x = insets.left(); |
| 770 int y = insets.top(); | 784 int y = insets.top(); |
| 771 int text_height = height() - insets.height(); | 785 int text_height = height() - insets.height(); |
| 772 SkColor text_color = GetNativeTheme()->GetSystemColor( | 786 SkColor text_color = GetNativeTheme()->GetSystemColor( |
| 773 enabled() ? ui::NativeTheme::kColorId_LabelEnabledColor : | 787 UseMd() ? (enabled() ? ui::NativeTheme::kColorId_TextfieldDefaultColor |
| 774 ui::NativeTheme::kColorId_LabelDisabledColor); | 788 : ui::NativeTheme::kColorId_TextfieldReadOnlyColor) |
| 789 : (enabled() ? ui::NativeTheme::kColorId_LabelEnabledColor |
| 790 : ui::NativeTheme::kColorId_LabelDisabledColor)); |
| 775 | 791 |
| 776 DCHECK_GE(selected_index_, 0); | 792 DCHECK_GE(selected_index_, 0); |
| 777 DCHECK_LT(selected_index_, model()->GetItemCount()); | 793 DCHECK_LT(selected_index_, model()->GetItemCount()); |
| 778 if (selected_index_ < 0 || selected_index_ > model()->GetItemCount()) | 794 if (selected_index_ < 0 || selected_index_ > model()->GetItemCount()) |
| 779 selected_index_ = 0; | 795 selected_index_ = 0; |
| 780 base::string16 text = model()->GetItemAt(selected_index_); | 796 base::string16 text = model()->GetItemAt(selected_index_); |
| 781 | 797 |
| 782 int disclosure_arrow_offset = width() - GetArrowContainerWidth(); | 798 int disclosure_arrow_offset = width() - GetArrowContainerWidth(); |
| 783 | 799 |
| 784 const gfx::FontList& font_list = Combobox::GetFontList(); | 800 const gfx::FontList& font_list = Combobox::GetFontList(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 808 // This epsilon makes sure that all the aliasing pixels are slightly more | 824 // This epsilon makes sure that all the aliasing pixels are slightly more |
| 809 // than half full. Otherwise, rounding issues cause some to be considered | 825 // than half full. Otherwise, rounding issues cause some to be considered |
| 810 // slightly less than half full and come out a little lighter. | 826 // slightly less than half full and come out a little lighter. |
| 811 const SkScalar kEpsilon = 0.0001f; | 827 const SkScalar kEpsilon = 0.0001f; |
| 812 path.moveTo(x - kEpsilon, y); | 828 path.moveTo(x - kEpsilon, y); |
| 813 path.rLineTo(height, height); | 829 path.rLineTo(height, height); |
| 814 path.rLineTo(2 * kEpsilon, 0); | 830 path.rLineTo(2 * kEpsilon, 0); |
| 815 path.rLineTo(height, -height); | 831 path.rLineTo(height, -height); |
| 816 path.close(); | 832 path.close(); |
| 817 SkPaint paint; | 833 SkPaint paint; |
| 818 paint.setColor(GetNativeTheme()->GetSystemColor( | 834 SkColor arrow_color = GetNativeTheme()->GetSystemColor( |
| 819 ui::NativeTheme::kColorId_ButtonEnabledColor)); | 835 ui::NativeTheme::kColorId_ButtonEnabledColor); |
| 836 // TODO(estade): share this disabled alpha value with other places that use |
| 837 // it. |
| 838 if (!enabled()) |
| 839 arrow_color = SkColorSetA(arrow_color, 0x61); |
| 840 paint.setColor(arrow_color); |
| 820 paint.setAntiAlias(true); | 841 paint.setAntiAlias(true); |
| 821 canvas->DrawPath(path, paint); | 842 canvas->DrawPath(path, paint); |
| 822 } else { | 843 } else { |
| 823 canvas->DrawImageInt(arrow_image_, arrow_bounds.x(), arrow_bounds.y()); | 844 canvas->DrawImageInt(arrow_image_, arrow_bounds.x(), arrow_bounds.y()); |
| 824 } | 845 } |
| 825 } | 846 } |
| 826 | 847 |
| 827 void Combobox::PaintButtons(gfx::Canvas* canvas) { | 848 void Combobox::PaintButtons(gfx::Canvas* canvas) { |
| 828 DCHECK(style_ == STYLE_ACTION); | 849 DCHECK(style_ == STYLE_ACTION); |
| 829 | 850 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 968 } | 989 } |
| 969 | 990 |
| 970 int Combobox::GetArrowContainerWidth() const { | 991 int Combobox::GetArrowContainerWidth() const { |
| 971 int padding = style_ == STYLE_NORMAL | 992 int padding = style_ == STYLE_NORMAL |
| 972 ? PlatformStyle::kComboboxNormalArrowPadding * 2 | 993 ? PlatformStyle::kComboboxNormalArrowPadding * 2 |
| 973 : kActionLeftPadding + kActionRightPadding; | 994 : kActionLeftPadding + kActionRightPadding; |
| 974 return ArrowSize().width() + padding; | 995 return ArrowSize().width() + padding; |
| 975 } | 996 } |
| 976 | 997 |
| 977 } // namespace views | 998 } // namespace views |
| OLD | NEW |