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

Unified Diff: chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc

Issue 1978633002: Desktop Capture Picker New UI: Split File (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unittest Created 4 years, 7 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: chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc
index d3ad62b2aee5eb4885ccb288a78c326a6cfb3d4f..fbc8f56a2f4be05b77fa0aa65cc4bb578a370e33 100644
--- a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc
+++ b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc
@@ -4,17 +4,12 @@
#include "chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.h"
-#include <stddef.h>
-#include <utility>
-
#include "base/callback.h"
#include "base/command_line.h"
-#include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
-#include "chrome/browser/media/combined_desktop_media_list.h"
#include "chrome/browser/media/desktop_media_list.h"
+#include "chrome/browser/ui/views/desktop_capture/desktop_media_list_view.h"
+#include "chrome/browser/ui/views/desktop_capture/desktop_media_source_view.h"
#include "chrome/browser/ui/views/desktop_media_picker_views_deprecated.h"
-#include "chrome/common/chrome_switches.h"
#include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/grit/google_chrome_strings.h"
@@ -27,15 +22,9 @@
#include "grit/components_strings.h"
#include "ui/aura/window_tree_host.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/canvas.h"
-#include "ui/native_theme/native_theme.h"
-#include "ui/views/background.h"
-#include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/controls/button/checkbox.h"
-#include "ui/views/controls/image_view.h"
-#include "ui/views/controls/label.h"
#include "ui/views/controls/scroll_view.h"
#include "ui/views/controls/tabbed_pane/tabbed_pane.h"
#include "ui/views/layout/box_layout.h"
@@ -48,21 +37,6 @@ using content::DesktopMediaID;
namespace {
-const int kThumbnailWidth = 160;
-const int kThumbnailHeight = 100;
-const int kThumbnailMargin = 10;
-const int kLabelHeight = 40;
-const int kListItemWidth = kThumbnailMargin * 2 + kThumbnailWidth;
-const int kListItemHeight =
- kThumbnailMargin * 2 + kThumbnailHeight + kLabelHeight;
-const int kListColumns = 3;
-const int kTotalListWidth = kListColumns * kListItemWidth;
-
-const int kDesktopMediaSourceViewGroupId = 1;
-
-const char kDesktopMediaSourceViewClassName[] =
- "DesktopMediaPicker_DesktopMediaSourceView";
-
#if !defined(USE_ASH)
DesktopMediaID::Id AcceleratedWidgetToDesktopMediaId(
gfx::AcceleratedWidget accelerated_widget) {
@@ -74,331 +48,8 @@ DesktopMediaID::Id AcceleratedWidgetToDesktopMediaId(
}
#endif
-int GetMediaListViewHeightForRows(size_t rows) {
- return kListItemHeight * rows;
-}
-
} // namespace
-DesktopMediaSourceView::DesktopMediaSourceView(DesktopMediaListView* parent,
- DesktopMediaID source_id)
- : parent_(parent),
- source_id_(source_id),
- image_view_(new views::ImageView()),
- label_(new views::Label()),
- selected_(false) {
- AddChildView(image_view_);
- AddChildView(label_);
- SetFocusBehavior(FocusBehavior::ALWAYS);
-}
-
-DesktopMediaSourceView::~DesktopMediaSourceView() {}
-
-void DesktopMediaSourceView::SetName(const base::string16& name) {
- label_->SetText(name);
-}
-
-void DesktopMediaSourceView::SetThumbnail(const gfx::ImageSkia& thumbnail) {
- image_view_->SetImage(thumbnail);
-}
-
-void DesktopMediaSourceView::SetSelected(bool selected) {
- if (selected == selected_)
- return;
- selected_ = selected;
-
- if (selected) {
- // Unselect all other sources.
- Views neighbours;
- parent()->GetViewsInGroup(GetGroup(), &neighbours);
- for (Views::iterator i(neighbours.begin()); i != neighbours.end(); ++i) {
- if (*i != this) {
- DCHECK_EQ((*i)->GetClassName(), kDesktopMediaSourceViewClassName);
- DesktopMediaSourceView* source_view =
- static_cast<DesktopMediaSourceView*>(*i);
- source_view->SetSelected(false);
- }
- }
-
- const SkColor bg_color = GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_FocusedMenuItemBackgroundColor);
- set_background(views::Background::CreateSolidBackground(bg_color));
-
- parent_->OnSelectionChanged();
- } else {
- set_background(NULL);
- }
-
- SchedulePaint();
-}
-
-const char* DesktopMediaSourceView::GetClassName() const {
- return kDesktopMediaSourceViewClassName;
-}
-
-void DesktopMediaSourceView::Layout() {
- image_view_->SetBounds(kThumbnailMargin, kThumbnailMargin, kThumbnailWidth,
- kThumbnailHeight);
- label_->SetBounds(kThumbnailMargin, kThumbnailHeight + kThumbnailMargin,
- kThumbnailWidth, kLabelHeight);
-}
-
-views::View* DesktopMediaSourceView::GetSelectedViewForGroup(int group) {
- Views neighbours;
- parent()->GetViewsInGroup(group, &neighbours);
- if (neighbours.empty())
- return NULL;
-
- for (Views::iterator i(neighbours.begin()); i != neighbours.end(); ++i) {
- DCHECK_EQ((*i)->GetClassName(), kDesktopMediaSourceViewClassName);
- DesktopMediaSourceView* source_view =
- static_cast<DesktopMediaSourceView*>(*i);
- if (source_view->selected_)
- return source_view;
- }
- return NULL;
-}
-
-bool DesktopMediaSourceView::IsGroupFocusTraversable() const {
- return false;
-}
-
-void DesktopMediaSourceView::OnPaint(gfx::Canvas* canvas) {
- View::OnPaint(canvas);
- if (HasFocus()) {
- gfx::Rect bounds(GetLocalBounds());
- bounds.Inset(kThumbnailMargin / 2, kThumbnailMargin / 2);
- canvas->DrawFocusRect(bounds);
- }
-}
-
-void DesktopMediaSourceView::OnFocus() {
- View::OnFocus();
- SetSelected(true);
- ScrollRectToVisible(gfx::Rect(size()));
- // We paint differently when focused.
- SchedulePaint();
-}
-
-void DesktopMediaSourceView::OnBlur() {
- View::OnBlur();
- // We paint differently when focused.
- SchedulePaint();
-}
-
-bool DesktopMediaSourceView::OnMousePressed(const ui::MouseEvent& event) {
- if (event.GetClickCount() == 1) {
- RequestFocus();
- } else if (event.GetClickCount() == 2) {
- RequestFocus();
- parent_->OnDoubleClick();
- }
- return true;
-}
-
-void DesktopMediaSourceView::OnGestureEvent(ui::GestureEvent* event) {
- if (event->type() == ui::ET_GESTURE_TAP &&
- event->details().tap_count() == 2) {
- RequestFocus();
- parent_->OnDoubleClick();
- event->SetHandled();
- return;
- }
-
- // Detect tap gesture using ET_GESTURE_TAP_DOWN so the view also gets focused
- // on the long tap (when the tap gesture starts).
- if (event->type() == ui::ET_GESTURE_TAP_DOWN) {
- RequestFocus();
- event->SetHandled();
- }
-}
-
-DesktopMediaListView::DesktopMediaListView(
- DesktopMediaPickerDialogView* parent,
- std::unique_ptr<DesktopMediaList> media_list)
- : parent_(parent), media_list_(std::move(media_list)), weak_factory_(this) {
- media_list_->SetThumbnailSize(gfx::Size(kThumbnailWidth, kThumbnailHeight));
- SetFocusBehavior(FocusBehavior::ALWAYS);
-}
-
-DesktopMediaListView::~DesktopMediaListView() {}
-
-void DesktopMediaListView::StartUpdating(DesktopMediaID dialog_window_id) {
- media_list_->SetViewDialogWindowId(dialog_window_id);
- media_list_->StartUpdating(this);
-}
-
-void DesktopMediaListView::OnSelectionChanged() {
- parent_->OnSelectionChanged();
-}
-
-void DesktopMediaListView::OnDoubleClick() {
- parent_->OnDoubleClick();
-}
-
-DesktopMediaSourceView* DesktopMediaListView::GetSelection() {
- for (int i = 0; i < child_count(); ++i) {
- DesktopMediaSourceView* source_view =
- static_cast<DesktopMediaSourceView*>(child_at(i));
- DCHECK_EQ(source_view->GetClassName(), kDesktopMediaSourceViewClassName);
- if (source_view->is_selected())
- return source_view;
- }
- return NULL;
-}
-
-gfx::Size DesktopMediaListView::GetPreferredSize() const {
- int total_rows = (child_count() + kListColumns - 1) / kListColumns;
- return gfx::Size(kTotalListWidth,
- GetMediaListViewHeightForRows(total_rows));
-}
-
-void DesktopMediaListView::Layout() {
- int x = 0;
- int y = 0;
-
- for (int i = 0; i < child_count(); ++i) {
- if (x + kListItemWidth > kTotalListWidth) {
- x = 0;
- y += kListItemHeight;
- }
-
- View* source_view = child_at(i);
- source_view->SetBounds(x, y, kListItemWidth, kListItemHeight);
-
- x += kListItemWidth;
- }
-
- y += kListItemHeight;
-}
-
-bool DesktopMediaListView::OnKeyPressed(const ui::KeyEvent& event) {
- int position_increment = 0;
- switch (event.key_code()) {
- case ui::VKEY_UP:
- position_increment = -kListColumns;
- break;
- case ui::VKEY_DOWN:
- position_increment = kListColumns;
- break;
- case ui::VKEY_LEFT:
- position_increment = -1;
- break;
- case ui::VKEY_RIGHT:
- position_increment = 1;
- break;
- default:
- return false;
- }
-
- if (position_increment != 0) {
- DesktopMediaSourceView* selected = GetSelection();
- DesktopMediaSourceView* new_selected = NULL;
-
- if (selected) {
- int index = GetIndexOf(selected);
- int new_index = index + position_increment;
- if (new_index >= child_count())
- new_index = child_count() - 1;
- else if (new_index < 0)
- new_index = 0;
- if (index != new_index) {
- new_selected =
- static_cast<DesktopMediaSourceView*>(child_at(new_index));
- }
- } else if (has_children()) {
- new_selected = static_cast<DesktopMediaSourceView*>(child_at(0));
- }
-
- if (new_selected) {
- GetFocusManager()->SetFocusedView(new_selected);
- }
-
- return true;
- }
-
- return false;
-}
-
-void DesktopMediaListView::OnSourceAdded(DesktopMediaList* list, int index) {
- const DesktopMediaList::Source& source = media_list_->GetSource(index);
- DesktopMediaSourceView* source_view =
- new DesktopMediaSourceView(this, source.id);
- source_view->SetName(source.name);
- source_view->SetGroup(kDesktopMediaSourceViewGroupId);
- AddChildViewAt(source_view, index);
-
- PreferredSizeChanged();
-
- if (child_count() % kListColumns == 1)
- parent_->OnMediaListRowsChanged();
-
- // Auto select the first screen.
- if (index == 0 && source.id.type == DesktopMediaID::TYPE_SCREEN)
- source_view->RequestFocus();
-
- std::string autoselect_source =
- base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kAutoSelectDesktopCaptureSource);
- if (!autoselect_source.empty() &&
- base::ASCIIToUTF16(autoselect_source) == source.name) {
- // Select, then accept and close the dialog when we're done adding sources.
- source_view->OnFocus();
- content::BrowserThread::PostTask(
- content::BrowserThread::UI, FROM_HERE,
- base::Bind(&DesktopMediaListView::AcceptSelection,
- weak_factory_.GetWeakPtr()));
- }
-}
-
-void DesktopMediaListView::OnSourceRemoved(DesktopMediaList* list, int index) {
- DesktopMediaSourceView* view =
- static_cast<DesktopMediaSourceView*>(child_at(index));
- DCHECK(view);
- DCHECK_EQ(view->GetClassName(), kDesktopMediaSourceViewClassName);
- bool was_selected = view->is_selected();
- RemoveChildView(view);
- delete view;
-
- if (was_selected)
- OnSelectionChanged();
-
- PreferredSizeChanged();
-
- if (child_count() % kListColumns == 0)
- parent_->OnMediaListRowsChanged();
-}
-
-void DesktopMediaListView::OnSourceMoved(DesktopMediaList* list,
- int old_index,
- int new_index) {
- DesktopMediaSourceView* view =
- static_cast<DesktopMediaSourceView*>(child_at(old_index));
- ReorderChildView(view, new_index);
- PreferredSizeChanged();
-}
-
-void DesktopMediaListView::OnSourceNameChanged(DesktopMediaList* list,
- int index) {
- const DesktopMediaList::Source& source = media_list_->GetSource(index);
- DesktopMediaSourceView* source_view =
- static_cast<DesktopMediaSourceView*>(child_at(index));
- source_view->SetName(source.name);
-}
-
-void DesktopMediaListView::OnSourceThumbnailChanged(DesktopMediaList* list,
- int index) {
- const DesktopMediaList::Source& source = media_list_->GetSource(index);
- DesktopMediaSourceView* source_view =
- static_cast<DesktopMediaSourceView*>(child_at(index));
- source_view->SetThumbnail(source.thumbnail);
-}
-
-void DesktopMediaListView::AcceptSelection() {
- OnSelectionChanged();
- OnDoubleClick();
-}
-
DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
content::WebContents* parent_web_contents,
gfx::NativeWindow context,
@@ -430,8 +81,7 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
new DesktopMediaListView(this, std::move(screen_list)));
screen_scroll_view->SetContents(list_views_.back());
- screen_scroll_view->ClipHeightTo(GetMediaListViewHeightForRows(1),
- GetMediaListViewHeightForRows(2));
+ screen_scroll_view->ClipHeightTo(kListItemHeight, kListItemHeight * 2);
pane_->AddTab(
l10n_util::GetStringUTF16(IDS_DESKTOP_MEDIA_PICKER_SOURCE_TYPE_SCREEN),
screen_scroll_view);
@@ -446,8 +96,7 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
new DesktopMediaListView(this, std::move(window_list)));
window_scroll_view->SetContents(list_views_.back());
- window_scroll_view->ClipHeightTo(GetMediaListViewHeightForRows(1),
- GetMediaListViewHeightForRows(2));
+ window_scroll_view->ClipHeightTo(kListItemHeight, kListItemHeight * 2);
pane_->AddTab(
l10n_util::GetStringUTF16(IDS_DESKTOP_MEDIA_PICKER_SOURCE_TYPE_WINDOW),
@@ -462,8 +111,7 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
list_views_.push_back(new DesktopMediaListView(this, std::move(tab_list)));
tab_scroll_view->SetContents(list_views_.back());
- tab_scroll_view->ClipHeightTo(GetMediaListViewHeightForRows(1),
- GetMediaListViewHeightForRows(2));
+ tab_scroll_view->ClipHeightTo(kListItemHeight, kListItemHeight * 2);
pane_->AddTab(
l10n_util::GetStringUTF16(IDS_DESKTOP_MEDIA_PICKER_SOURCE_TYPE_TAB),

Powered by Google App Engine
This is Rietveld 408576698