| Index: ash/app_list/page_switcher.cc
|
| ===================================================================
|
| --- ash/app_list/page_switcher.cc (revision 135932)
|
| +++ ash/app_list/page_switcher.cc (working copy)
|
| @@ -1,158 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ash/app_list/page_switcher.h"
|
| -
|
| -#include "ash/app_list/pagination_model.h"
|
| -#include "third_party/skia/include/core/SkPath.h"
|
| -#include "ui/base/animation/throb_animation.h"
|
| -#include "ui/gfx/canvas.h"
|
| -#include "ui/views/controls/button/custom_button.h"
|
| -#include "ui/views/layout/box_layout.h"
|
| -
|
| -namespace {
|
| -
|
| -const int kButtonSpacing = 10;
|
| -const int kButtonWidth = 60;
|
| -const int kButtonHeight = 6;
|
| -const int kButtonHeightPadding = 10;
|
| -const int kButtonCornerRadius = 2;
|
| -
|
| -// 0.16 black
|
| -const SkColor kHoverColor = SkColorSetARGB(0x2A, 0x00, 0x00, 0x00);
|
| -
|
| -// 0.2 black
|
| -const SkColor kNormalColor = SkColorSetARGB(0x33, 0x00, 0x00, 0x00);
|
| -
|
| -// 0.33 black
|
| -const SkColor kSelectedColor = SkColorSetARGB(0x55, 0x00, 0x00, 0x00);
|
| -
|
| -class PageSwitcherButton : public views::CustomButton {
|
| - public:
|
| - PageSwitcherButton(views::ButtonListener* listener)
|
| - : views::CustomButton(listener),
|
| - selected_(false) {
|
| - }
|
| - virtual ~PageSwitcherButton() {}
|
| -
|
| - void SetSelected(bool selected) {
|
| - if (selected == selected_)
|
| - return;
|
| -
|
| - selected_ = selected;
|
| - SchedulePaint();
|
| - }
|
| -
|
| - // Overridden from views::View:
|
| - virtual gfx::Size GetPreferredSize() OVERRIDE {
|
| - return gfx::Size(kButtonWidth, kButtonHeight + kButtonHeightPadding);
|
| - }
|
| -
|
| - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
|
| - if (selected_ || state() == BS_PUSHED) {
|
| - PaintButton(canvas, kSelectedColor);
|
| - } else if (state() == BS_HOT) {
|
| - PaintButton(canvas, kHoverColor);
|
| - } else {
|
| - PaintButton(canvas, kNormalColor);
|
| - }
|
| - }
|
| -
|
| - private:
|
| - // Paints a button that has two rounded corner at bottom.
|
| - void PaintButton(gfx::Canvas* canvas, SkColor color) {
|
| - gfx::Rect rect(GetContentsBounds());
|
| - rect.set_height(kButtonHeight);
|
| -
|
| - gfx::Point center = rect.CenterPoint();
|
| -
|
| - SkPath path;
|
| - path.incReserve(12);
|
| - path.moveTo(SkIntToScalar(rect.x()), SkIntToScalar(rect.y()));
|
| - path.arcTo(SkIntToScalar(rect.x()), SkIntToScalar(rect.bottom()),
|
| - SkIntToScalar(center.x()), SkIntToScalar(rect.bottom()),
|
| - SkIntToScalar(kButtonCornerRadius));
|
| - path.arcTo(SkIntToScalar(rect.right()), SkIntToScalar(rect.bottom()),
|
| - SkIntToScalar(rect.right()), SkIntToScalar(rect.y()),
|
| - SkIntToScalar(kButtonCornerRadius));
|
| - path.lineTo(SkIntToScalar(rect.right()), SkIntToScalar(rect.y()));
|
| - path.close();
|
| -
|
| - SkPaint paint;
|
| - paint.setStyle(SkPaint::kFill_Style);
|
| - paint.setColor(color);
|
| - canvas->DrawPath(path, paint);
|
| - }
|
| -
|
| - bool selected_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PageSwitcherButton);
|
| -};
|
| -
|
| -// Gets PageSwitcherButton at |index| in |buttons|.
|
| -PageSwitcherButton* GetButtonByIndex(views::View* buttons, int index) {
|
| - return static_cast<PageSwitcherButton*>(buttons->child_at(index));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace ash {
|
| -
|
| -PageSwitcher::PageSwitcher(PaginationModel* model)
|
| - : model_(model),
|
| - buttons_(NULL) {
|
| - buttons_ = new views::View;
|
| - buttons_->SetLayoutManager(new views::BoxLayout(
|
| - views::BoxLayout::kHorizontal, 0, 0, kButtonSpacing));
|
| - AddChildView(buttons_);
|
| -
|
| - TotalPagesChanged();
|
| - SelectedPageChanged(-1, model->selected_page());
|
| - model_->AddObserver(this);
|
| -}
|
| -
|
| -PageSwitcher::~PageSwitcher() {
|
| - model_->RemoveObserver(this);
|
| -}
|
| -
|
| -gfx::Size PageSwitcher::GetPreferredSize() {
|
| - // Always return a size with correct height so that container resize is not
|
| - // needed when more pages are added.
|
| - return gfx::Size(kButtonWidth, kButtonHeight + kButtonHeightPadding);
|
| -}
|
| -
|
| -void PageSwitcher::Layout() {
|
| - gfx::Rect rect(GetContentsBounds());
|
| - buttons_->SetBoundsRect(rect.Center(buttons_->GetPreferredSize()));
|
| -}
|
| -
|
| -void PageSwitcher::ButtonPressed(views::Button* sender,
|
| - const views::Event& event) {
|
| - for (int i = 0; i < buttons_->child_count(); ++i) {
|
| - if (sender == static_cast<views::Button*>(buttons_->child_at(i))) {
|
| - model_->SelectPage(i);
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void PageSwitcher::TotalPagesChanged() {
|
| - buttons_->RemoveAllChildViews(true);
|
| - for (int i = 0; i < model_->total_pages(); ++i) {
|
| - PageSwitcherButton* button = new PageSwitcherButton(this);
|
| - button->SetSelected(i == model_->selected_page());
|
| - buttons_->AddChildView(button);
|
| - }
|
| - buttons_->SetVisible(model_->total_pages() > 1);
|
| - Layout();
|
| -}
|
| -
|
| -void PageSwitcher::SelectedPageChanged(int old_selected, int new_selected) {
|
| - if (old_selected >= 0 && old_selected < buttons_->child_count())
|
| - GetButtonByIndex(buttons_, old_selected)->SetSelected(false);
|
| - if (new_selected >= 0 && new_selected < buttons_->child_count())
|
| - GetButtonByIndex(buttons_, new_selected)->SetSelected(true);
|
| -}
|
| -
|
| -} // namespace ash
|
|
|