15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/app_list/views/app_list_background.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkPaint.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkPath.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/app_list/app_list_constants.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/app_list/app_list_switches.h"
12b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "ui/app_list/views/app_list_main_view.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/app_list/views/contents_view.h"
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "ui/app_list/views/search_box_view.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/canvas.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/skia_util.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Size of top separator between searchbox and grid view.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTopSeparatorSize = 1;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Size of bottom separator between contents view and contents switcher.
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kBottomSeparatorSize = 1;
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppListBackground::AppListBackground(int corner_radius,
33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                     AppListMainView* main_view)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : corner_radius_(corner_radius),
35b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      main_view_(main_view) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppListBackground::~AppListBackground() {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppListBackground::Paint(gfx::Canvas* canvas,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              views::View* view) const {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = view->GetContentsBounds();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  canvas->Save();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkPath path;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Contents corner radius is 1px smaller than border corner radius.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkScalar radius = SkIntToScalar(corner_radius_ - 1);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  path.addRoundRect(gfx::RectToSkRect(bounds), radius, radius);
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  canvas->ClipPath(path, false);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkPaint paint;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  paint.setStyle(SkPaint::kFill_Style);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int contents_top = bounds.y();
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* search_box_view = main_view_->search_box_view();
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (main_view_->visible() && search_box_view->visible() &&
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      !app_list::switches::IsExperimentalAppListEnabled()) {
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    const gfx::Rect search_box_view_bounds =
60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        search_box_view->ConvertRectToWidget(search_box_view->GetLocalBounds());
61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    gfx::Rect search_box_rect(bounds.x(),
62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                              bounds.y(),
63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                              bounds.width(),
64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                              search_box_view_bounds.bottom() - bounds.y());
65b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    paint.setColor(kSearchBoxBackground);
67b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    canvas->DrawRect(search_box_rect, paint);
68b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    gfx::Rect separator_rect(search_box_rect);
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    separator_rect.set_y(separator_rect.bottom());
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    separator_rect.set_height(kTopSeparatorSize);
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    canvas->FillRect(separator_rect, kTopSeparatorColor);
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    contents_top = separator_rect.bottom();
74b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect contents_rect(bounds.x(),
77b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                          contents_top,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bounds.width(),
79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                          bounds.bottom() - contents_top);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  paint.setColor(kContentsBackgroundColor);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  canvas->DrawRect(contents_rect, paint);
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (app_list::switches::IsExperimentalAppListEnabled()) {
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (main_view_->visible()) {
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::View* contents_view = main_view_->contents_view();
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const gfx::Rect contents_view_view_bounds =
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          contents_view->ConvertRectToWidget(contents_view->GetLocalBounds());
89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      gfx::Rect separator_rect(contents_rect);
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      separator_rect.Inset(
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          kExperimentalWindowPadding + main_view_->GetInsets().left(), 0);
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      separator_rect.set_y(contents_view_view_bounds.bottom() - 1);
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      separator_rect.set_height(kBottomSeparatorSize);
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      canvas->FillRect(separator_rect, kBottomSeparatorColor);
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  canvas->Restore();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace app_list
102