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

Unified Diff: ui/app_list/page_switcher.cc

Issue 11784034: Skeleton for app_list on OSX, and refactoring for enable_app_list=1 on OS=="mac". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase for 175876 and 175961 Created 7 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/page_switcher.h ('k') | ui/app_list/pulsing_block_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ui/app_list/page_switcher.h ('k') | ui/app_list/pulsing_block_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698