Chromium Code Reviews| Index: chrome/browser/ui/views/desktop_capture/desktop_media_source_view.cc |
| diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_source_view.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_source_view.cc |
| index 02c9e68858b2b2eb353ba261867873b97aa7684c..76c5fa7e8e4ed56d2c9de40bc3f54056d72c4e24 100644 |
| --- a/chrome/browser/ui/views/desktop_capture/desktop_media_source_view.cc |
| +++ b/chrome/browser/ui/views/desktop_capture/desktop_media_source_view.cc |
| @@ -10,20 +10,45 @@ |
| #include "ui/gfx/canvas.h" |
| #include "ui/native_theme/native_theme.h" |
| #include "ui/views/background.h" |
| +#include "ui/views/border.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/label.h" |
| using content::DesktopMediaID; |
| -DesktopMediaSourceView::DesktopMediaSourceView(DesktopMediaListView* parent, |
| - DesktopMediaID source_id) |
| +DesktopMediaSourceViewStyle::DesktopMediaSourceViewStyle( |
| + const DesktopMediaSourceViewStyle& style) = default; |
| + |
| +DesktopMediaSourceViewStyle::DesktopMediaSourceViewStyle( |
| + int columns, |
| + const gfx::Size& item_size, |
| + const gfx::Rect& label_rect, |
| + gfx::HorizontalAlignment text_alignment, |
| + const gfx::Rect& image_rect, |
| + int selection_border_thickness, |
| + int focus_rectangle_inset) |
| + : columns(columns), |
| + item_size(item_size), |
| + label_rect(label_rect), |
| + text_alignment(text_alignment), |
| + image_rect(image_rect), |
| + selection_border_thickness(selection_border_thickness), |
| + focus_rectangle_inset(focus_rectangle_inset) {} |
| + |
| +DesktopMediaSourceView::DesktopMediaSourceView( |
| + DesktopMediaListView* parent, |
| + DesktopMediaID source_id, |
| + DesktopMediaSourceViewStyle style) |
| : parent_(parent), |
| source_id_(source_id), |
| + style_(style), |
| image_view_(new views::ImageView()), |
| label_(new views::Label()), |
| selected_(false) { |
| AddChildView(image_view_); |
| AddChildView(label_); |
| + image_view_->set_interactive(false); |
| + |
| SetFocusBehavior(FocusBehavior::ALWAYS); |
| } |
| @@ -59,12 +84,27 @@ void DesktopMediaSourceView::SetSelected(bool selected) { |
| } |
| } |
| - const SkColor bg_color = GetNativeTheme()->GetSystemColor( |
| + const SkColor border_color = GetNativeTheme()->GetSystemColor( |
| ui::NativeTheme::kColorId_FocusedMenuItemBackgroundColor); |
| - set_background(views::Background::CreateSolidBackground(bg_color)); |
| - |
| + image_view_->SetBorder(views::Border::CreateSolidBorder( |
| + style_.selection_border_thickness, border_color)); |
| + label_->SetFontList(label_->font_list().Derive(0, gfx::Font::BOLD)); |
| parent_->OnSelectionChanged(); |
| } else { |
| + image_view_->SetBorder(views::Border::NullBorder()); |
| + label_->SetFontList(label_->font_list().Derive(0, gfx::Font::NORMAL)); |
| + } |
| + |
| + SchedulePaint(); |
| +} |
| + |
| +void DesktopMediaSourceView::SetHovered(bool hovered) { |
| + if (hovered) { |
| + // Use background color to show mouse hover. |
| + const SkColor bg_color = GetNativeTheme()->GetSystemColor( |
| + ui::NativeTheme::kColorId_HoverMenuItemBackgroundColor); |
| + set_background(views::Background::CreateSolidBackground(bg_color)); |
| + } else { |
| set_background(NULL); |
| } |
| @@ -76,15 +116,15 @@ const char* DesktopMediaSourceView::GetClassName() const { |
| } |
| void DesktopMediaSourceView::Layout() { |
| - image_view_->SetBounds(DesktopMediaPickerDialogView::kThumbnailMargin, |
| - DesktopMediaPickerDialogView::kThumbnailMargin, |
| - DesktopMediaPickerDialogView::kThumbnailWidth, |
| - DesktopMediaPickerDialogView::kThumbnailHeight); |
| - label_->SetBounds(DesktopMediaPickerDialogView::kThumbnailMargin, |
| - DesktopMediaPickerDialogView::kThumbnailHeight + |
| - DesktopMediaPickerDialogView::kThumbnailMargin, |
| - DesktopMediaPickerDialogView::kThumbnailWidth, |
| - DesktopMediaPickerDialogView::kLabelHeight); |
| + image_view_->SetBoundsRect(style_.image_rect); |
| + if (selected_) { |
| + const SkColor border_color = GetNativeTheme()->GetSystemColor( |
| + ui::NativeTheme::kColorId_FocusedMenuItemBackgroundColor); |
| + image_view_->SetBorder(views::Border::CreateSolidBorder( |
| + style_.selection_border_thickness, border_color)); |
| + } |
| + label_->SetBoundsRect(style_.label_rect); |
| + label_->SetHorizontalAlignment(style_.text_alignment); |
| } |
| views::View* DesktopMediaSourceView::GetSelectedViewForGroup(int group) { |
| @@ -112,8 +152,7 @@ void DesktopMediaSourceView::OnPaint(gfx::Canvas* canvas) { |
| View::OnPaint(canvas); |
| if (HasFocus()) { |
|
msw
2016/05/26 20:50:33
I'd be nice to avoid overriding paint and change t
qiangchen
2016/05/26 21:38:38
Acknowledged.
|
| gfx::Rect bounds(GetLocalBounds()); |
| - bounds.Inset(DesktopMediaPickerDialogView::kThumbnailMargin / 2, |
| - DesktopMediaPickerDialogView::kThumbnailMargin / 2); |
| + bounds.Inset(style_.focus_rectangle_inset, style_.focus_rectangle_inset); |
| canvas->DrawFocusRect(bounds); |
| } |
| } |
| @@ -142,6 +181,14 @@ bool DesktopMediaSourceView::OnMousePressed(const ui::MouseEvent& event) { |
| return true; |
| } |
| +void DesktopMediaSourceView::OnMouseEntered(const ui::MouseEvent& event) { |
| + SetHovered(true); |
| +} |
| + |
| +void DesktopMediaSourceView::OnMouseExited(const ui::MouseEvent& event) { |
| + SetHovered(false); |
| +} |
| + |
| void DesktopMediaSourceView::OnGestureEvent(ui::GestureEvent* event) { |
| if (event->type() == ui::ET_GESTURE_TAP && |
| event->details().tap_count() == 2) { |