Index: ui/app_list/page_switcher.cc |
diff --git a/ui/app_list/page_switcher.cc b/ui/app_list/page_switcher.cc |
deleted file mode 100644 |
index d5e1f647637527346bb4164bd6938fe1991e8949..0000000000000000000000000000000000000000 |
--- a/ui/app_list/page_switcher.cc |
+++ /dev/null |
@@ -1,270 +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 "ui/app_list/page_switcher.h" |
- |
-#include <algorithm> |
- |
-#include "third_party/skia/include/core/SkPath.h" |
-#include "ui/app_list/pagination_model.h" |
-#include "ui/base/animation/throb_animation.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/skia_util.h" |
-#include "ui/views/controls/button/custom_button.h" |
-#include "ui/views/layout/box_layout.h" |
- |
-namespace { |
- |
-const int kPreferredHeight = 57; |
- |
-const int kMaxButtonSpacing = 18; |
-const int kMinButtonSpacing = 4; |
-const int kMaxButtonWidth = 68; |
-const int kMinButtonWidth = 28; |
-const int kButtonHeight = 6; |
-const int kButtonCornerRadius = 2; |
-const int kButtonStripPadding = 20; |
- |
-const SkColor kHoverColor = SkColorSetRGB(0xB4, 0xB4, 0xB4); |
- |
-const SkColor kNormalColor = SkColorSetRGB(0xE2, 0xE2, 0xE2); |
- |
-const SkColor kSelectedColor = SkColorSetRGB(0x46, 0x8F, 0xFC); |
- |
-class PageSwitcherButton : public views::CustomButton { |
- public: |
- explicit PageSwitcherButton(views::ButtonListener* listener) |
- : views::CustomButton(listener), |
- button_width_(kMaxButtonWidth), |
- selected_range_(0) { |
- } |
- virtual ~PageSwitcherButton() {} |
- |
- void SetSelectedRange(double selected_range) { |
- if (selected_range_ == selected_range) |
- return; |
- |
- selected_range_ = selected_range; |
- SchedulePaint(); |
- } |
- |
- void set_button_width(int button_width) { button_width_ = button_width; } |
- |
- // Overridden from views::View: |
- virtual gfx::Size GetPreferredSize() OVERRIDE { |
- return gfx::Size(button_width_, kButtonHeight); |
- } |
- |
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
- if (state() == STATE_HOVERED) { |
- PaintButton(canvas, kHoverColor); |
- } else { |
- PaintButton(canvas, kNormalColor); |
- } |
- } |
- |
- private: |
- // Paints a button that has two rounded corner at bottom. |
- void PaintButton(gfx::Canvas* canvas, SkColor base_color) { |
- gfx::Rect rect(GetContentsBounds()); |
- rect.ClampToCenteredSize(gfx::Size(button_width_, kButtonHeight)); |
- |
- SkPath path; |
- path.addRoundRect(gfx::RectToSkRect(rect), |
- SkIntToScalar(kButtonCornerRadius), |
- SkIntToScalar(kButtonCornerRadius)); |
- |
- SkPaint paint; |
- paint.setAntiAlias(true); |
- paint.setStyle(SkPaint::kFill_Style); |
- paint.setColor(base_color); |
- canvas->DrawPath(path, paint); |
- |
- int selected_start_x = 0; |
- int selected_width = 0; |
- if (selected_range_ > 0) { |
- selected_width = selected_range_ * rect.width(); |
- } else if (selected_range_ < 0) { |
- selected_width = -selected_range_ * rect.width(); |
- selected_start_x = rect.right() - selected_width; |
- } |
- |
- if (selected_width) { |
- gfx::Rect selected_rect(rect); |
- selected_rect.set_x(selected_start_x); |
- selected_rect.set_width(selected_width); |
- |
- SkPath selected_path; |
- selected_path.addRoundRect(gfx::RectToSkRect(selected_rect), |
- SkIntToScalar(kButtonCornerRadius), |
- SkIntToScalar(kButtonCornerRadius)); |
- paint.setColor(kSelectedColor); |
- canvas->DrawPath(selected_path, paint); |
- } |
- } |
- |
- int button_width_; |
- |
- // [-1, 1] range that represents the portion of the button that should be |
- // painted with kSelectedColor. Positive range starts from left side and |
- // negative range starts from the right side. |
- double selected_range_; |
- |
- 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 app_list { |
- |
-PageSwitcher::PageSwitcher(PaginationModel* model) |
- : model_(model), |
- buttons_(new views::View) { |
- AddChildView(buttons_); |
- |
- TotalPagesChanged(); |
- SelectedPageChanged(-1, model->selected_page()); |
- model_->AddObserver(this); |
-} |
- |
-PageSwitcher::~PageSwitcher() { |
- model_->RemoveObserver(this); |
-} |
- |
-int PageSwitcher::GetPageForPoint(const gfx::Point& point) const { |
- if (!buttons_->bounds().Contains(point)) |
- return -1; |
- |
- gfx::Point buttons_point(point); |
- views::View::ConvertPointToTarget(this, buttons_, &buttons_point); |
- |
- for (int i = 0; i < buttons_->child_count(); ++i) { |
- const views::View* button = buttons_->child_at(i); |
- if (button->bounds().Contains(buttons_point)) |
- return i; |
- } |
- |
- return -1; |
-} |
- |
-void PageSwitcher::UpdateUIForDragPoint(const gfx::Point& point) { |
- int page = GetPageForPoint(point); |
- |
- const int button_count = buttons_->child_count(); |
- if (page >= 0 && page < button_count) { |
- PageSwitcherButton* button = |
- static_cast<PageSwitcherButton*>(buttons_->child_at(page)); |
- button->SetState(views::CustomButton::STATE_HOVERED); |
- return; |
- } |
- |
- for (int i = 0; i < button_count; ++i) { |
- PageSwitcherButton* button = |
- static_cast<PageSwitcherButton*>(buttons_->child_at(i)); |
- button->SetState(views::CustomButton::STATE_NORMAL); |
- } |
-} |
- |
-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(buttons_->GetPreferredSize().width(), |
- kPreferredHeight); |
-} |
- |
-void PageSwitcher::Layout() { |
- gfx::Rect rect(GetContentsBounds()); |
- |
- CalculateButtonWidthAndSpacing(rect.width()); |
- |
- // Makes |buttons_| horizontally center and vertically fill. |
- gfx::Size buttons_size(buttons_->GetPreferredSize()); |
- gfx::Rect buttons_bounds(rect.CenterPoint().x() - buttons_size.width() / 2, |
- rect.y(), |
- buttons_size.width(), |
- rect.height()); |
- buttons_->SetBoundsRect(gfx::IntersectRects(rect, buttons_bounds)); |
-} |
- |
-void PageSwitcher::CalculateButtonWidthAndSpacing(int contents_width) { |
- const int button_count = buttons_->child_count(); |
- if (!button_count) |
- return; |
- |
- contents_width -= 2 * kButtonStripPadding; |
- |
- int button_width = kMinButtonWidth; |
- int button_spacing = kMinButtonSpacing; |
- if (button_count > 1) { |
- button_spacing = (contents_width - button_width * button_count) / |
- (button_count - 1); |
- button_spacing = std::min(kMaxButtonSpacing, |
- std::max(kMinButtonSpacing, button_spacing)); |
- } |
- |
- button_width = (contents_width - (button_count - 1) * button_spacing) / |
- button_count; |
- button_width = std::min(kMaxButtonWidth, |
- std::max(kMinButtonWidth, button_width)); |
- |
- buttons_->SetLayoutManager(new views::BoxLayout( |
- views::BoxLayout::kHorizontal, kButtonStripPadding, 0, button_spacing)); |
- for (int i = 0; i < button_count; ++i) { |
- PageSwitcherButton* button = |
- static_cast<PageSwitcherButton*>(buttons_->child_at(i)); |
- button->set_button_width(button_width); |
- } |
-} |
- |
-void PageSwitcher::ButtonPressed(views::Button* sender, |
- const ui::Event& event) { |
- for (int i = 0; i < buttons_->child_count(); ++i) { |
- if (sender == static_cast<views::Button*>(buttons_->child_at(i))) { |
- model_->SelectPage(i, true /* animate */); |
- break; |
- } |
- } |
-} |
- |
-void PageSwitcher::TotalPagesChanged() { |
- buttons_->RemoveAllChildViews(true); |
- for (int i = 0; i < model_->total_pages(); ++i) { |
- PageSwitcherButton* button = new PageSwitcherButton(this); |
- button->SetSelectedRange(i == model_->selected_page() ? 1 : 0); |
- 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)->SetSelectedRange(0); |
- if (new_selected >= 0 && new_selected < buttons_->child_count()) |
- GetButtonByIndex(buttons_, new_selected)->SetSelectedRange(1); |
-} |
- |
-void PageSwitcher::TransitionChanged() { |
- const int current_page = model_->selected_page(); |
- const int target_page = model_->transition().target_page; |
- |
- double progress = model_->transition().progress; |
- double remaining = progress - 1; |
- |
- if (current_page > target_page) { |
- remaining = -remaining; |
- progress = -progress; |
- } |
- |
- GetButtonByIndex(buttons_, current_page)->SetSelectedRange(remaining); |
- if (model_->is_valid_page(target_page)) |
- GetButtonByIndex(buttons_, target_page)->SetSelectedRange(progress); |
-} |
- |
-} // namespace app_list |