16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "athena/home/athena_start_page_view.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/home/home_card_constants.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/system/public/system_ui.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/bind.h" 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/strings/string_util.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/skia/include/core/SkPaint.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/skia/include/core/SkPath.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_item.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_item_list.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_model.h" 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_view_delegate.h" 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/app_list/search_box_model.h" 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/views/search_box_view.h" 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/app_list/views/search_result_list_view.h" 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/compositor/closure_animation_observer.h" 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/compositor/scoped_layer_animation_settings.h" 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/gfx/canvas.h" 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/background.h" 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/border.h" 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h" 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/layout/fill_layout.h" 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/round_rect_painter.h" 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace { 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const size_t kMaxIconNum = 3; 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kIconSize = 50; 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kIconMargin = 25; 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kTopMargin = 100; 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copied from ui/app_list/views/start_page_view.cc 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kInstantContainerSpacing = 20; 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kWebViewWidth = 500; 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kWebViewHeight = 105; 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxBorderWidth = 1; 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxCornerRadius = 2; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Taken from the mock. The width is not specified by pixel but the search box 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// covers 6 icons with margin. 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kSearchBoxWidth = kIconSize * 6 + kIconMargin * 7; 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxHeight = 40; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Size GetIconContainerSize() { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return gfx::Size(kIconSize * kMaxIconNum + kIconMargin * (kMaxIconNum - 1), 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kIconSize); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class PlaceHolderButton : public views::ImageButton, 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public views::ButtonListener { 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PlaceHolderButton() 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : ImageButton(this) { 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(kIconSize, kIconSize), 1.0f, true); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SkPaint paint; 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) paint.setStyle(SkPaint::kFill_Style); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) paint.setColor(SkColorSetRGB(86, 119, 252)); 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) paint.setFlags(SkPaint::kAntiAlias_Flag); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) canvas.DrawCircle( 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Point(kIconSize / 2, kIconSize / 2), kIconSize / 2, paint); 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<gfx::ImageSkia> image( 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new gfx::ImageSkia(canvas.ExtractImageRep())); 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SetImage(STATE_NORMAL, image.get()); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // views::ButtonListener: 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ui::Event& event) OVERRIDE { 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Do nothing: remove these place holders. 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PlaceHolderButton); 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class AppIconButton : public views::ImageButton, 846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public views::ButtonListener { 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) explicit AppIconButton(app_list::AppListItem* item) 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : ImageButton(this), 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) item_(item) { 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TODO(mukai): icon should be resized. 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SetImage(STATE_NORMAL, &item->icon()); 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // views::ButtonListener: 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ui::Event& event) OVERRIDE { 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_EQ(sender, this); 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) item_->Activate(event.flags()); 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_list::AppListItem* item_; 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppIconButton); 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// The background to paint the round rectangle of the view area. 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class RoundRectBackground : public views::Background { 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RoundRectBackground(SkColor color, int corner_radius) 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : color_(color), 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) corner_radius_(corner_radius) {} 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~RoundRectBackground() {} 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // views::Background: 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE { 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SkPaint paint; 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) paint.setStyle(SkPaint::kFill_Style); 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) paint.setColor(color_); 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) canvas->DrawRoundRect(view->GetContentsBounds(), corner_radius_, paint); 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SkColor color_; 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int corner_radius_; 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RoundRectBackground); 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SearchBoxContainer : public views::View { 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) explicit SearchBoxContainer(app_list::SearchBoxView* search_box) 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : search_box_(search_box) { 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) search_box->set_background( 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new RoundRectBackground(SK_ColorWHITE, kSearchBoxCornerRadius)); 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) search_box->SetBorder(views::Border::CreateBorderPainter( 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new views::RoundRectPainter(SK_ColorGRAY, kSearchBoxCornerRadius), 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Insets(kSearchBoxBorderWidth, kSearchBoxBorderWidth, 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kSearchBoxBorderWidth, kSearchBoxBorderWidth))); 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetLayoutManager(new views::FillLayout()); 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AddChildView(search_box_); 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~SearchBoxContainer() {} 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // views::View: 1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return gfx::Size(kSearchBoxWidth, kSearchBoxHeight); 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Owned by the views hierarchy. 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_list::SearchBoxView* search_box_; 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchBoxContainer); 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace 1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace athena { 1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char AthenaStartPageView::kViewClassName[] = "AthenaStartPageView"; 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData::LayoutData() 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : system_info_opacity(1.0f), 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_opacity(1.0f), 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_opacity(1.0f) { 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)AthenaStartPageView::AthenaStartPageView( 17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_list::AppListViewDelegate* view_delegate) 17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : delegate_(view_delegate), 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_(0.0f), 17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) weak_factory_(this) { 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_ = new views::View(); 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_->set_background( 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::Background::CreateSolidBackground(SK_ColorWHITE)); 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_->SetPaintToLayer(true); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_->SetFillsBoundsOpaquely(false); 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddChildView(background_); 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_ = 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SystemUI::Get()->CreateSystemInfoView(SystemUI::COLOR_SCHEME_DARK); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->SetPaintToLayer(true); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->SetFillsBoundsOpaquely(false); 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddChildView(system_info_view_); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_ = view_delegate->CreateStartPageWebView( 18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Size(kWebViewWidth, kWebViewHeight)); 18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->SetPaintToLayer(true); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_->SetFillsBoundsOpaquely(false); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_->SetSize(gfx::Size(kWebViewWidth, kWebViewHeight)); 19203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddChildView(logo_); 19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_ = new app_list::SearchResultListView( 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) NULL, view_delegate); 19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // search_results_view_'s size will shrink after settings results. 19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_height_ = static_cast<views::View*>( 19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_)->GetHeightForWidth(kSearchBoxWidth); 19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetResults(view_delegate->GetModel()->results()); 20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetVisible(false); 20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetPaintToLayer(true); 20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetFillsBoundsOpaquely(false); 20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddChildView(search_results_view_); 20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_icon_container_ = new views::View(); 20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddChildView(app_icon_container_); 20803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_icon_container_->SetPaintToLayer(true); 20903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_icon_container_->layer()->SetFillsBoundsOpaquely(false); 21003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_icon_container_->SetLayoutManager(new views::BoxLayout( 21103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::BoxLayout::kHorizontal, 0, 0, kIconMargin)); 2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_list::AppListItemList* top_level = 2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) view_delegate->GetModel()->top_level_item_list(); 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < std::min(top_level->item_count(), kMaxIconNum); ++i) 21503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_icon_container_->AddChildView(new AppIconButton(top_level->item_at(i))); 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci app_icon_container_->SetSize(GetIconContainerSize()); 21703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 21803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) control_icon_container_ = new views::View(); 21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) control_icon_container_->SetPaintToLayer(true); 22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) control_icon_container_->SetFillsBoundsOpaquely(false); 22103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddChildView(control_icon_container_); 22203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) control_icon_container_->SetLayoutManager(new views::BoxLayout( 22303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::BoxLayout::kHorizontal, 0, 0, kIconMargin)); 22403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < kMaxIconNum; ++i) 22503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) control_icon_container_->AddChildView(new PlaceHolderButton()); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci control_icon_container_->SetSize(GetIconContainerSize()); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_view_ = new app_list::SearchBoxView(this, view_delegate); 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_view_->set_contents_view(this); 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_view_->search_box()->set_id(kHomeCardSearchBoxId); 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_ = new SearchBoxContainer(search_box_view_); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_->SetPaintToLayer(true); 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_->SetFillsBoundsOpaquely(false); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_->SetSize(search_box_container_->GetPreferredSize()); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddChildView(search_box_container_); 23603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 2376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 23803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)AthenaStartPageView::~AthenaStartPageView() {} 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 24003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::RequestFocusOnSearchBox() { 24103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_view_->search_box()->RequestFocus(); 24203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 24303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AthenaStartPageView::SetLayoutState(float layout_state) { 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_ = layout_state; 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Layout(); 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AthenaStartPageView::SetLayoutStateWithAnimation( 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float layout_state, 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Tween::Type tween_type) { 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedLayerAnimationSettings system_info( 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->layer()->GetAnimator()); 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedLayerAnimationSettings logo(logo_->layer()->GetAnimator()); 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedLayerAnimationSettings search_box( 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_->layer()->GetAnimator()); 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedLayerAnimationSettings icons( 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci app_icon_container_->layer()->GetAnimator()); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedLayerAnimationSettings controls( 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci control_icon_container_->layer()->GetAnimator()); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info.SetTweenType(tween_type); 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo.SetTweenType(tween_type); 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box.SetTweenType(tween_type); 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci icons.SetTweenType(tween_type); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci controls.SetTweenType(tween_type); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetLayoutState(layout_state); 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData AthenaStartPageView::CreateBottomBounds( 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width) { 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData state; 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_size(app_icon_container_->size()); 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_x(kIconMargin); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_y(kIconMargin); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_size(control_icon_container_->size()); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_x(width - kIconMargin - state.controls.width()); 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_y(kIconMargin); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int search_box_max_width = 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.x() - state.icons.right() - kIconMargin * 2; 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_width(std::min(search_box_max_width, kSearchBoxWidth)); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_height(search_box_container_->height()); 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_x((width - state.search_box.width()) / 2); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_y((kHomeCardHeight - state.search_box.height()) / 2); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.system_info_opacity = 0.0f; 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.logo_opacity = 0.0f; 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.background_opacity = 0.9f; 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return state; 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData AthenaStartPageView::CreateCenteredBounds( 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width) { 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData state; 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_size(search_box_container_->GetPreferredSize()); 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_x((width - state.search_box.width()) / 2); 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.search_box.set_y(logo_->bounds().bottom() + kInstantContainerSpacing); 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_size(app_icon_container_->size()); 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_x(width / 2 - state.icons.width() - kIconMargin / 2); 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.icons.set_y(state.search_box.bottom() + kInstantContainerSpacing); 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_size(control_icon_container_->size()); 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_x(width / 2 + kIconMargin / 2 + kIconMargin % 2); 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.controls.set_y(state.icons.y()); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.system_info_opacity = 1.0f; 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.logo_opacity = 1.0f; 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state.background_opacity = 1.0f; 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return state; 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 31703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::LayoutSearchResults(bool should_show_search_results) { 31803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (should_show_search_results == 31903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->layer()->GetTargetVisibility()) { 32003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 32103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (GetContentsBounds().height() <= kHomeCardHeight) { 32303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetVisible(false); 32403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Layout(); 32503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 32603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 32803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Rect search_box_bounds = search_box_container_->bounds(); 32903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!search_results_view_->visible()) { 33003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetVisible(true); 33103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetBounds( 33203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.x(), search_box_bounds.bottom(), 33303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.width(), 0); 33403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 33503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->SetVisible(true); 33603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 33703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { 33803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::ScopedLayerAnimationSettings logo_settings( 33903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->layer()->GetAnimator()); 34003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_settings.SetTweenType(gfx::Tween::EASE_IN_OUT); 34103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_settings.AddObserver(new ui::ClosureAnimationObserver( 34203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Bind(&AthenaStartPageView::OnSearchResultLayoutAnimationCompleted, 34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) weak_factory_.GetWeakPtr(), 34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) should_show_search_results))); 34503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 34603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::ScopedLayerAnimationSettings search_box_settings( 34703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_container_->layer()->GetAnimator()); 34803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_settings.SetTweenType(gfx::Tween::EASE_IN_OUT); 34903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::ScopedLayerAnimationSettings search_results_settings( 35103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->layer()->GetAnimator()); 35203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_settings.SetTweenType(gfx::Tween::EASE_IN_OUT); 35303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (should_show_search_results) { 35503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->layer()->SetOpacity(0.0f); 35603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.set_y( 35703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.y() - search_results_height_ - 35803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kInstantContainerSpacing); 35903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_container_->SetBoundsRect(search_box_bounds); 36003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetBounds( 36103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.x(), 36203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.bottom() + kInstantContainerSpacing, 36303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.width(), 36403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_height_); 36503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } else { 36603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->layer()->SetOpacity(1.0f); 36703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_bounds.set_y( 36803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->bounds().bottom() + kInstantContainerSpacing); 36903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_box_container_->SetBoundsRect(search_box_bounds); 37003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 37103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Rect search_results_bounds = search_results_view_->bounds(); 37203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_bounds.set_y(search_results_bounds.bottom()); 37303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_bounds.set_height(0); 37403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetBoundsRect(search_results_bounds); 37503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 37603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 37903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::OnSearchResultLayoutAnimationCompleted( 38003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool should_show_search_results) { 38103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logo_->SetVisible(!should_show_search_results); 38203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetVisible(should_show_search_results); 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AthenaStartPageView::Layout() { 38603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetVisible(false); 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->SetBounds( 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 0, width(), system_info_view_->GetPreferredSize().height()); 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect logo_bounds(x() + width() / 2 - kWebViewWidth / 2, y() + kTopMargin, 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kWebViewWidth, kWebViewHeight); 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_->SetBoundsRect(logo_bounds); 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData bottom_bounds = CreateBottomBounds(width()); 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData centered_bounds = CreateCenteredBounds(width()); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->layer()->SetOpacity(gfx::Tween::FloatValueBetween( 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Tween::CalculateValue(gfx::Tween::EASE_IN_2, layout_state_), 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bottom_bounds.system_info_opacity, centered_bounds.system_info_opacity)); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->SetVisible( 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_info_view_->layer()->GetTargetOpacity() != 0.0f); 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_->layer()->SetOpacity(gfx::Tween::FloatValueBetween( 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Tween::CalculateValue(gfx::Tween::EASE_IN_2, layout_state_), 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bottom_bounds.logo_opacity, centered_bounds.logo_opacity)); 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci logo_->SetVisible(logo_->layer()->GetTargetOpacity() != 0.0f); 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci app_icon_container_->SetBoundsRect(gfx::Tween::RectValueBetween( 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_, bottom_bounds.icons, centered_bounds.icons)); 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci control_icon_container_->SetBoundsRect(gfx::Tween::RectValueBetween( 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_, bottom_bounds.controls, centered_bounds.controls)); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_box_container_->SetBoundsRect(gfx::Tween::RectValueBetween( 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_, bottom_bounds.search_box, centered_bounds.search_box)); 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_->SetBoundsRect(bounds()); 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci background_->layer()->SetOpacity(gfx::Tween::FloatValueBetween( 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layout_state_, 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bottom_bounds.background_opacity, 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci centered_bounds.background_opacity)); 42103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 42203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 42303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool AthenaStartPageView::OnKeyPressed(const ui::KeyEvent& key_event) { 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return search_results_view_->visible() && 42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->OnKeyPressed(key_event); 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AthenaStartPageView::QueryChanged(app_list::SearchBoxView* sender) { 42903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) delegate_->StartSearch(); 43003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 43103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::string16 query; 43203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::TrimWhitespace( 43303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) delegate_->GetModel()->search_box()->text(), base::TRIM_ALL, &query); 43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 43503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!query.empty()) 43603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) search_results_view_->SetSelectedIndex(0); 43703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 43803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) LayoutSearchResults(!query.empty()); 4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace athena 442