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

Side by Side Diff: ui/app_list/views/app_list_view.cc

Issue 770813004: Make app list search box into a Widget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@matt_remove_dummy_search_box
Patch Set: addTODO Created 6 years 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 unified diff | Download patch
« no previous file with comments | « ui/app_list/views/app_list_view.h ('k') | ui/app_list/views/app_list_view_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/app_list/views/app_list_view.h" 5 #include "ui/app_list/views/app_list_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 views::View* target_; 149 views::View* target_;
150 150
151 DISALLOW_COPY_AND_ASSIGN(HideViewAnimationObserver); 151 DISALLOW_COPY_AND_ASSIGN(HideViewAnimationObserver);
152 }; 152 };
153 153
154 //////////////////////////////////////////////////////////////////////////////// 154 ////////////////////////////////////////////////////////////////////////////////
155 // AppListView: 155 // AppListView:
156 156
157 AppListView::AppListView(AppListViewDelegate* delegate) 157 AppListView::AppListView(AppListViewDelegate* delegate)
158 : delegate_(delegate), 158 : delegate_(delegate),
159 app_list_main_view_(NULL), 159 app_list_main_view_(nullptr),
160 search_box_view_(NULL), 160 speech_view_(nullptr),
161 speech_view_(NULL), 161 search_box_widget_(nullptr),
162 overlay_view_(NULL), 162 search_box_view_(nullptr),
163 overlay_view_(nullptr),
163 animation_observer_(new HideViewAnimationObserver()) { 164 animation_observer_(new HideViewAnimationObserver()) {
164 CHECK(delegate); 165 CHECK(delegate);
165 166
166 delegate_->AddObserver(this); 167 delegate_->AddObserver(this);
167 delegate_->GetSpeechUI()->AddObserver(this); 168 delegate_->GetSpeechUI()->AddObserver(this);
168 } 169 }
169 170
170 AppListView::~AppListView() { 171 AppListView::~AppListView() {
171 delegate_->GetSpeechUI()->RemoveObserver(this); 172 delegate_->GetSpeechUI()->RemoveObserver(this);
172 delegate_->RemoveObserver(this); 173 delegate_->RemoveObserver(this);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); 212 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
212 params.parent = parent; 213 params.parent = parent;
213 params.delegate = this; 214 params.delegate = this;
214 widget->Init(params); 215 widget->Init(params);
215 widget->SetBounds(bounds); 216 widget->SetBounds(bounds);
216 // This needs to be set *after* Widget::Init() because BubbleDelegateView sets 217 // This needs to be set *after* Widget::Init() because BubbleDelegateView sets
217 // its own background at OnNativeThemeChanged(), which is called in 218 // its own background at OnNativeThemeChanged(), which is called in
218 // View::AddChildView() which is called at Widget::SetContentsView() to build 219 // View::AddChildView() which is called at Widget::SetContentsView() to build
219 // the views hierarchy in the widget. 220 // the views hierarchy in the widget.
220 set_background(new AppListBackground(0, app_list_main_view_)); 221 set_background(new AppListBackground(0, app_list_main_view_));
222
223 InitChildWidgets();
221 } 224 }
222 225
223 void AppListView::SetBubbleArrow(views::BubbleBorder::Arrow arrow) { 226 void AppListView::SetBubbleArrow(views::BubbleBorder::Arrow arrow) {
224 GetBubbleFrameView()->bubble_border()->set_arrow(arrow); 227 GetBubbleFrameView()->bubble_border()->set_arrow(arrow);
225 SizeToContents(); // Recalcuates with new border. 228 SizeToContents(); // Recalcuates with new border.
226 GetBubbleFrameView()->SchedulePaint(); 229 GetBubbleFrameView()->SchedulePaint();
227 } 230 }
228 231
229 void AppListView::SetAnchorPoint(const gfx::Point& anchor_point) { 232 void AppListView::SetAnchorPoint(const gfx::Point& anchor_point) {
230 SetAnchorRect(gfx::Rect(anchor_point, gfx::Size())); 233 SetAnchorRect(gfx::Rect(anchor_point, gfx::Size()));
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 ->pagination_model(); 350 ->pagination_model();
348 } 351 }
349 352
350 void AppListView::InitContents(gfx::NativeView parent, int initial_apps_page) { 353 void AppListView::InitContents(gfx::NativeView parent, int initial_apps_page) {
351 app_list_main_view_ = new AppListMainView(delegate_); 354 app_list_main_view_ = new AppListMainView(delegate_);
352 AddChildView(app_list_main_view_); 355 AddChildView(app_list_main_view_);
353 app_list_main_view_->SetPaintToLayer(true); 356 app_list_main_view_->SetPaintToLayer(true);
354 app_list_main_view_->SetFillsBoundsOpaquely(false); 357 app_list_main_view_->SetFillsBoundsOpaquely(false);
355 app_list_main_view_->layer()->SetMasksToBounds(true); 358 app_list_main_view_->layer()->SetMasksToBounds(true);
356 359
360 // This will be added to the |search_box_widget_| after the app list widget is
361 // initialized.
357 search_box_view_ = new SearchBoxView(app_list_main_view_, delegate_); 362 search_box_view_ = new SearchBoxView(app_list_main_view_, delegate_);
358 search_box_view_->SetPaintToLayer(true); 363 search_box_view_->SetPaintToLayer(true);
359 search_box_view_->SetFillsBoundsOpaquely(false); 364 search_box_view_->SetFillsBoundsOpaquely(false);
360 search_box_view_->layer()->SetMasksToBounds(true); 365 search_box_view_->layer()->SetMasksToBounds(true);
361 AddChildView(search_box_view_);
362 366
363 app_list_main_view_->Init(parent, initial_apps_page, search_box_view_); 367 app_list_main_view_->Init(parent, initial_apps_page, search_box_view_);
364 368
365 // Speech recognition is available only when the start page exists. 369 // Speech recognition is available only when the start page exists.
366 if (delegate_ && delegate_->IsSpeechRecognitionEnabled()) { 370 if (delegate_ && delegate_->IsSpeechRecognitionEnabled()) {
367 speech_view_ = new SpeechView(delegate_); 371 speech_view_ = new SpeechView(delegate_);
368 speech_view_->SetVisible(false); 372 speech_view_->SetVisible(false);
369 speech_view_->SetPaintToLayer(true); 373 speech_view_->SetPaintToLayer(true);
370 speech_view_->SetFillsBoundsOpaquely(false); 374 speech_view_->SetFillsBoundsOpaquely(false);
371 speech_view_->layer()->SetOpacity(0.0f); 375 speech_view_->layer()->SetOpacity(0.0f);
372 AddChildView(speech_view_); 376 AddChildView(speech_view_);
373 } 377 }
374 378
375 OnProfilesChanged(); 379 OnProfilesChanged();
376 } 380 }
377 381
382 void AppListView::InitChildWidgets() {
383 DCHECK(search_box_view_);
384
385 app_list_main_view_->InitWidgets();
386
387 // Create the search box widget.
388 views::Widget::InitParams search_box_widget_params(
389 views::Widget::InitParams::TYPE_CONTROL);
390 search_box_widget_params.parent = GetWidget()->GetNativeView();
391 search_box_widget_params.opacity =
392 views::Widget::InitParams::TRANSLUCENT_WINDOW;
393
394 // Create a widget for the SearchBoxView to live in. This allows the
395 // SearchBoxView to be on top of the custom launcher page's WebContents
396 // (otherwise the search box events will be captured by the WebContents).
397 search_box_widget_ = new views::Widget;
398 search_box_widget_->Init(search_box_widget_params);
399 search_box_widget_->SetContentsView(search_box_view_);
400
401 Layout();
402 }
403
378 void AppListView::InitAsBubbleInternal(gfx::NativeView parent, 404 void AppListView::InitAsBubbleInternal(gfx::NativeView parent,
379 int initial_apps_page, 405 int initial_apps_page,
380 views::BubbleBorder::Arrow arrow, 406 views::BubbleBorder::Arrow arrow,
381 bool border_accepts_events, 407 bool border_accepts_events,
382 const gfx::Vector2d& anchor_offset) { 408 const gfx::Vector2d& anchor_offset) {
383 // TODO(vadimt): Remove ScopedTracker below once crbug.com/431326 is fixed. 409 // TODO(vadimt): Remove ScopedTracker below once crbug.com/431326 is fixed.
384 tracked_objects::ScopedTracker tracking_profile1( 410 tracked_objects::ScopedTracker tracking_profile1(
385 FROM_HERE_WITH_EXPLICIT_FUNCTION( 411 FROM_HERE_WITH_EXPLICIT_FUNCTION(
386 "431326 AppListView::InitAsBubbleInternal1")); 412 "431326 AppListView::InitAsBubbleInternal1"));
387 413
(...skipping 17 matching lines...) Expand all
405 kArrowOffset - anchor_offset.x())); 431 kArrowOffset - anchor_offset.x()));
406 set_border_accepts_events(border_accepts_events); 432 set_border_accepts_events(border_accepts_events);
407 set_shadow(SupportsShadow() ? views::BubbleBorder::BIG_SHADOW 433 set_shadow(SupportsShadow() ? views::BubbleBorder::BIG_SHADOW
408 : views::BubbleBorder::NO_SHADOW_OPAQUE_BORDER); 434 : views::BubbleBorder::NO_SHADOW_OPAQUE_BORDER);
409 // This creates the app list widget. (Before this, child widgets cannot be 435 // This creates the app list widget. (Before this, child widgets cannot be
410 // created.) 436 // created.)
411 views::BubbleDelegateView::CreateBubble(this); 437 views::BubbleDelegateView::CreateBubble(this);
412 SetBubbleArrow(arrow); 438 SetBubbleArrow(arrow);
413 439
414 // We can now create the internal widgets. 440 // We can now create the internal widgets.
415 app_list_main_view_->InitWidgets(); 441 InitChildWidgets();
416 442
417 #if defined(USE_AURA) 443 #if defined(USE_AURA)
418 // TODO(vadimt): Remove ScopedTracker below once crbug.com/431326 is fixed. 444 // TODO(vadimt): Remove ScopedTracker below once crbug.com/431326 is fixed.
419 tracked_objects::ScopedTracker tracking_profile3( 445 tracked_objects::ScopedTracker tracking_profile3(
420 FROM_HERE_WITH_EXPLICIT_FUNCTION( 446 FROM_HERE_WITH_EXPLICIT_FUNCTION(
421 "431326 AppListView::InitAsBubbleInternal3")); 447 "431326 AppListView::InitAsBubbleInternal3"));
422 448
423 aura::Window* window = GetWidget()->GetNativeWindow(); 449 aura::Window* window = GetWidget()->GetNativeWindow();
424 window->layer()->SetMasksToBounds(true); 450 window->layer()->SetMasksToBounds(true);
425 GetBubbleFrameView()->set_background(new AppListBackground( 451 GetBubbleFrameView()->set_background(new AppListBackground(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 582
557 app_list_main_view_->SetBoundsRect(centered_bounds); 583 app_list_main_view_->SetBoundsRect(centered_bounds);
558 584
559 // GetDefaultSearchBoxBounds() returns the bounds in |contents_view|'s 585 // GetDefaultSearchBoxBounds() returns the bounds in |contents_view|'s
560 // coordinate, therefore convert it to this coordinate. 586 // coordinate, therefore convert it to this coordinate.
561 ContentsView* contents_view = app_list_main_view_->contents_view(); 587 ContentsView* contents_view = app_list_main_view_->contents_view();
562 // TODO(mgiuca): Position the search box in the center of the page, when 588 // TODO(mgiuca): Position the search box in the center of the page, when
563 // in STATE_START. 589 // in STATE_START.
564 gfx::RectF search_box_bounds = contents_view->GetDefaultSearchBoxBounds(); 590 gfx::RectF search_box_bounds = contents_view->GetDefaultSearchBoxBounds();
565 ConvertRectToTarget(contents_view, this, &search_box_bounds); 591 ConvertRectToTarget(contents_view, this, &search_box_bounds);
566 search_box_view_->SetBoundsRect(gfx::ToNearestRect(search_box_bounds)); 592 if (search_box_widget_) {
593 search_box_widget_->SetBounds(
594 ConvertRectToWidget(gfx::ToNearestRect(search_box_bounds)));
595 }
567 596
568 if (speech_view_) { 597 if (speech_view_) {
569 gfx::Rect speech_bounds = centered_bounds; 598 gfx::Rect speech_bounds = centered_bounds;
570 int preferred_height = speech_view_->GetPreferredSize().height(); 599 int preferred_height = speech_view_->GetPreferredSize().height();
571 speech_bounds.Inset(kSpeechUIMargin, kSpeechUIMargin); 600 speech_bounds.Inset(kSpeechUIMargin, kSpeechUIMargin);
572 speech_bounds.set_height(std::min(speech_bounds.height(), 601 speech_bounds.set_height(std::min(speech_bounds.height(),
573 preferred_height)); 602 preferred_height));
574 speech_bounds.Inset(-speech_view_->GetInsets()); 603 speech_bounds.Inset(-speech_view_->GetInsets());
575 speech_view_->SetBoundsRect(speech_bounds); 604 speech_view_->SetBoundsRect(speech_bounds);
576 } 605 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 speech_view_->layer()->SetTransform(speech_transform); 684 speech_view_->layer()->SetTransform(speech_transform);
656 } 685 }
657 686
658 if (will_appear) 687 if (will_appear)
659 speech_view_->SetVisible(true); 688 speech_view_->SetVisible(true);
660 else 689 else
661 app_list_main_view_->SetVisible(true); 690 app_list_main_view_->SetVisible(true);
662 } 691 }
663 692
664 } // namespace app_list 693 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/views/app_list_view.h ('k') | ui/app_list/views/app_list_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698