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

Unified Diff: ui/app_list/app_list_item_view.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/app_list_item_view.h ('k') | ui/app_list/app_list_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/app_list_item_view.cc
diff --git a/ui/app_list/app_list_item_view.cc b/ui/app_list/app_list_item_view.cc
deleted file mode 100644
index 1a9fb78ee3d017df62094a4423160768a97f5595..0000000000000000000000000000000000000000
--- a/ui/app_list/app_list_item_view.cc
+++ /dev/null
@@ -1,344 +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/app_list_item_view.h"
-
-#include <algorithm>
-
-#include "base/utf_string_conversions.h"
-#include "ui/app_list/app_list_item_model.h"
-#include "ui/app_list/apps_grid_view.h"
-#include "ui/base/accessibility/accessible_view_state.h"
-#include "ui/base/animation/throb_animation.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/compositor/layer.h"
-#include "ui/compositor/scoped_layer_animation_settings.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/font.h"
-#include "ui/gfx/image/image_skia_operations.h"
-#include "ui/gfx/transform_util.h"
-#include "ui/views/controls/image_view.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/controls/menu/menu_item_view.h"
-#include "ui/views/controls/menu/menu_model_adapter.h"
-#include "ui/views/controls/menu/menu_runner.h"
-
-namespace app_list {
-
-namespace {
-
-const int kTopBottomPadding = 10;
-const int kTopPadding = 20;
-const int kIconTitleSpacing = 7;
-
-const SkColor kTitleColor = SkColorSetRGB(0x5A, 0x5A, 0x5A);
-const SkColor kTitleHoverColor = SkColorSetRGB(0x3C, 0x3C, 0x3C);
-
-const SkColor kHoverAndPushedColor = SkColorSetARGB(0x19, 0, 0, 0);
-const SkColor kSelectedColor = SkColorSetARGB(0x0D, 0, 0, 0);
-const SkColor kHighlightedColor = kHoverAndPushedColor;
-
-const int kLeftRightPaddingChars = 1;
-
-// Scale to transform the icon when a drag starts.
-const float kDraggingIconScale = 1.5f;
-
-// Delay in milliseconds of when the dragging UI should be shown for mouse drag.
-const int kMouseDragUIDelayInMs = 100;
-
-} // namespace
-
-// static
-const char AppListItemView::kViewClassName[] = "ui/app_list/AppListItemView";
-
-AppListItemView::AppListItemView(AppsGridView* apps_grid_view,
- AppListItemModel* model)
- : CustomButton(apps_grid_view),
- model_(model),
- apps_grid_view_(apps_grid_view),
- icon_(new views::ImageView),
- title_(new views::Label),
- ui_state_(UI_STATE_NORMAL),
- touch_dragging_(false) {
- icon_->set_interactive(false);
-
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- title_->SetBackgroundColor(0);
- title_->SetAutoColorReadabilityEnabled(false);
- title_->SetEnabledColor(kTitleColor);
- title_->SetFont(rb.GetFont(ui::ResourceBundle::SmallBoldFont));
- title_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-
- const gfx::ShadowValue kIconShadows[] = {
- gfx::ShadowValue(gfx::Point(0, 2), 2, SkColorSetARGB(0x24, 0, 0, 0)),
- };
- icon_shadows_.assign(kIconShadows, kIconShadows + arraysize(kIconShadows));
-
- AddChildView(icon_);
- AddChildView(title_);
-
- ItemIconChanged();
- ItemTitleChanged();
- model_->AddObserver(this);
-
- set_context_menu_controller(this);
- set_request_focus_on_press(false);
-}
-
-AppListItemView::~AppListItemView() {
- model_->RemoveObserver(this);
-}
-
-void AppListItemView::SetIconSize(const gfx::Size& size) {
- if (icon_size_ == size)
- return;
-
- icon_size_ = size;
- UpdateIcon();
-}
-
-void AppListItemView::UpdateIcon() {
- // Skip if |icon_size_| has not been determined.
- if (icon_size_.IsEmpty())
- return;
-
- gfx::ImageSkia icon = model_->icon();
- // Clear icon and bail out if model icon is empty.
- if (icon.isNull()) {
- icon_->SetImage(NULL);
- return;
- }
-
- gfx::ImageSkia resized(gfx::ImageSkiaOperations::CreateResizedImage(icon,
- skia::ImageOperations::RESIZE_BEST, icon_size_));
- gfx::ImageSkia shadow(
- gfx::ImageSkiaOperations::CreateImageWithDropShadow(resized,
- icon_shadows_));
- icon_->SetImage(shadow);
-}
-
-void AppListItemView::SetUIState(UIState state) {
- if (ui_state_ == state)
- return;
-
- ui_state_ = state;
-
-#if defined(USE_AURA)
- ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
- switch (ui_state_) {
- case UI_STATE_NORMAL:
- title_->SetVisible(true);
- layer()->SetTransform(gfx::Transform());
- break;
- case UI_STATE_DRAGGING:
- title_->SetVisible(false);
- const gfx::Rect bounds(layer()->bounds().size());
- layer()->SetTransform(gfx::GetScaleTransform(
- bounds.CenterPoint(),
- kDraggingIconScale));
- break;
- }
-#endif
-}
-
-void AppListItemView::SetTouchDragging(bool touch_dragging) {
- if (touch_dragging_ == touch_dragging)
- return;
-
- touch_dragging_ = touch_dragging;
- SetUIState(touch_dragging_ ? UI_STATE_DRAGGING : UI_STATE_NORMAL);
-}
-
-void AppListItemView::OnMouseDragTimer() {
- DCHECK(apps_grid_view_->IsDraggedView(this));
- SetUIState(UI_STATE_DRAGGING);
-}
-
-void AppListItemView::ItemIconChanged() {
- UpdateIcon();
-}
-
-void AppListItemView::ItemTitleChanged() {
- title_->SetText(UTF8ToUTF16(model_->title()));
-}
-
-void AppListItemView::ItemHighlightedChanged() {
- apps_grid_view_->EnsureViewVisible(this);
- SchedulePaint();
-}
-
-std::string AppListItemView::GetClassName() const {
- return kViewClassName;
-}
-
-void AppListItemView::Layout() {
- gfx::Rect rect(GetContentsBounds());
-
- const int left_right_padding = kLeftRightPaddingChars *
- title_->font().GetAverageCharacterWidth();
- rect.Inset(left_right_padding, kTopPadding, left_right_padding, 0);
- const int y = rect.y();
-
- gfx::Rect icon_bounds(rect.x(), y, rect.width(), icon_size_.height());
- icon_bounds.Inset(gfx::ShadowValue::GetMargin(icon_shadows_));
- icon_->SetBoundsRect(icon_bounds);
-
- const gfx::Size title_size = title_->GetPreferredSize();
- gfx::Rect title_bounds(rect.x() + (rect.width() - title_size.width()) / 2,
- y + icon_size_.height() + kIconTitleSpacing,
- title_size.width(),
- title_size.height());
- title_bounds.Intersect(rect);
- title_->SetBoundsRect(title_bounds);
-}
-
-void AppListItemView::OnPaint(gfx::Canvas* canvas) {
- if (apps_grid_view_->IsDraggedView(this))
- return;
-
- gfx::Rect rect(GetContentsBounds());
-
- if (model_->highlighted()) {
- canvas->FillRect(rect, kHighlightedColor);
- } else if (hover_animation_->is_animating()) {
- int alpha = SkColorGetA(kHoverAndPushedColor) *
- hover_animation_->GetCurrentValue();
- canvas->FillRect(rect, SkColorSetA(kHoverAndPushedColor, alpha));
- } else if (state() == STATE_HOVERED || state() == STATE_PRESSED) {
- canvas->FillRect(rect, kHoverAndPushedColor);
- } else if (apps_grid_view_->IsSelectedView(this)) {
- canvas->FillRect(rect, kSelectedColor);
- }
-}
-
-void AppListItemView::GetAccessibleState(ui::AccessibleViewState* state) {
- state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
- state->name = UTF8ToUTF16(model_->title());
-}
-
-void AppListItemView::ShowContextMenuForView(views::View* source,
- const gfx::Point& point) {
- ui::MenuModel* menu_model = model_->GetContextMenuModel();
- if (!menu_model)
- return;
-
- views::MenuModelAdapter menu_adapter(menu_model);
- context_menu_runner_.reset(
- new views::MenuRunner(new views::MenuItemView(&menu_adapter)));
- menu_adapter.BuildMenu(context_menu_runner_->GetMenu());
- if (context_menu_runner_->RunMenuAt(
- GetWidget(), NULL, gfx::Rect(point, gfx::Size()),
- views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) ==
- views::MenuRunner::MENU_DELETED)
- return;
-}
-
-void AppListItemView::StateChanged() {
- if (state() == STATE_HOVERED || state() == STATE_PRESSED) {
- apps_grid_view_->SetSelectedView(this);
- title_->SetEnabledColor(kTitleHoverColor);
- } else {
- apps_grid_view_->ClearSelectedView(this);
- model_->SetHighlighted(false);
- title_->SetEnabledColor(kTitleColor);
- }
-}
-
-bool AppListItemView::ShouldEnterPushedState(const ui::Event& event) {
- // Don't enter pushed state for ET_GESTURE_TAP_DOWN so that hover gray
- // background does not show up during scroll.
- if (event.type() == ui::ET_GESTURE_TAP_DOWN)
- return false;
-
- return views::CustomButton::ShouldEnterPushedState(event);
-}
-
-bool AppListItemView::OnMousePressed(const ui::MouseEvent& event) {
- CustomButton::OnMousePressed(event);
-
- if (!ShouldEnterPushedState(event))
- return true;
-
- apps_grid_view_->InitiateDrag(this, AppsGridView::MOUSE, event);
-
- if (apps_grid_view_->IsDraggedView(this)) {
- mouse_drag_timer_.Start(FROM_HERE,
- base::TimeDelta::FromMilliseconds(kMouseDragUIDelayInMs),
- this, &AppListItemView::OnMouseDragTimer);
- }
- return true;
-}
-
-void AppListItemView::OnMouseReleased(const ui::MouseEvent& event) {
- CustomButton::OnMouseReleased(event);
- apps_grid_view_->EndDrag(false);
- mouse_drag_timer_.Stop();
- SetUIState(UI_STATE_NORMAL);
-}
-
-void AppListItemView::OnMouseCaptureLost() {
- CustomButton::OnMouseCaptureLost();
- apps_grid_view_->EndDrag(true);
- mouse_drag_timer_.Stop();
- SetUIState(UI_STATE_NORMAL);
-}
-
-bool AppListItemView::OnMouseDragged(const ui::MouseEvent& event) {
- CustomButton::OnMouseDragged(event);
- apps_grid_view_->UpdateDrag(this, AppsGridView::MOUSE, event);
-
- // Shows dragging UI when it's confirmed without waiting for the timer.
- if (ui_state_ != UI_STATE_DRAGGING &&
- apps_grid_view_->dragging() &&
- apps_grid_view_->IsDraggedView(this)) {
- mouse_drag_timer_.Stop();
- SetUIState(UI_STATE_DRAGGING);
- }
- return true;
-}
-
-void AppListItemView::OnGestureEvent(ui::GestureEvent* event) {
- switch (event->type()) {
- case ui::ET_GESTURE_SCROLL_BEGIN:
- if (touch_dragging_) {
- apps_grid_view_->InitiateDrag(this, AppsGridView::TOUCH, *event);
- event->SetHandled();
- }
- break;
- case ui::ET_GESTURE_SCROLL_UPDATE:
- if (touch_dragging_) {
- apps_grid_view_->UpdateDrag(this, AppsGridView::TOUCH, *event);
- event->SetHandled();
- }
- break;
- case ui::ET_GESTURE_SCROLL_END:
- case ui::ET_SCROLL_FLING_START:
- if (touch_dragging_) {
- SetTouchDragging(false);
- apps_grid_view_->EndDrag(false);
- event->SetHandled();
- }
- break;
- case ui::ET_GESTURE_LONG_PRESS:
- if (!apps_grid_view_->has_dragged_view())
- SetTouchDragging(true);
- event->SetHandled();
- break;
- case ui::ET_GESTURE_END:
- if (touch_dragging_) {
- SetTouchDragging(false);
-
- gfx::Point location(event->location());
- ConvertPointToScreen(this, &location);
- ShowContextMenu(location, true);
- }
- break;
- default:
- break;
- }
- if (!event->handled())
- CustomButton::OnGestureEvent(event);
-}
-
-} // namespace app_list
« no previous file with comments | « ui/app_list/app_list_item_view.h ('k') | ui/app_list/app_list_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698