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

Side by Side Diff: ash/shelf/shelf_view.cc

Issue 614653002: ash::ShelfView: CHECK against potentially bad static_casts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « ash/shelf/shelf_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/shelf/shelf_view.h" 5 #include "ash/shelf/shelf_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/ash_constants.h" 9 #include "ash/ash_constants.h"
10 #include "ash/ash_switches.h" 10 #include "ash/ash_switches.h"
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 // Map all items from overflow area to the overflow button. Note that the 455 // Map all items from overflow area to the overflow button. Note that the
456 // section between last_index_hidden_ and model_->FirstPanelIndex() is the 456 // section between last_index_hidden_ and model_->FirstPanelIndex() is the
457 // list of invisible panel items. However, these items are currently nowhere 457 // list of invisible panel items. However, these items are currently nowhere
458 // represented and get dropped instead - see (crbug.com/378907). As such there 458 // represented and get dropped instead - see (crbug.com/378907). As such there
459 // is no way to address them or place them. We therefore move them over the 459 // is no way to address them or place them. We therefore move them over the
460 // overflow button. 460 // overflow button.
461 if (index > last_visible_index_ && index < model_->FirstPanelIndex()) 461 if (index > last_visible_index_ && index < model_->FirstPanelIndex())
462 index = last_visible_index_ + 1; 462 index = last_visible_index_ + 1;
463 const gfx::Rect& ideal_bounds(view_model_->ideal_bounds(index)); 463 const gfx::Rect& ideal_bounds(view_model_->ideal_bounds(index));
464 DCHECK_NE(TYPE_APP_LIST, model_->items()[index].type); 464 DCHECK_NE(TYPE_APP_LIST, model_->items()[index].type);
465 ShelfButton* button = static_cast<ShelfButton*>(view_model_->view_at(index)); 465 views::View* view = view_model_->view_at(index);
466 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName());
467 ShelfButton* button = static_cast<ShelfButton*>(view);
466 gfx::Rect icon_bounds = button->GetIconBounds(); 468 gfx::Rect icon_bounds = button->GetIconBounds();
467 return gfx::Rect(GetMirroredXWithWidthInView( 469 return gfx::Rect(GetMirroredXWithWidthInView(
468 ideal_bounds.x() + icon_bounds.x(), icon_bounds.width()), 470 ideal_bounds.x() + icon_bounds.x(), icon_bounds.width()),
469 ideal_bounds.y() + icon_bounds.y(), 471 ideal_bounds.y() + icon_bounds.y(),
470 icon_bounds.width(), 472 icon_bounds.width(),
471 icon_bounds.height()); 473 icon_bounds.height());
472 } 474 }
473 475
474 void ShelfView::UpdatePanelIconPosition(ShelfID id, 476 void ShelfView::UpdatePanelIconPosition(ShelfID id,
475 const gfx::Point& midpoint) { 477 const gfx::Point& midpoint) {
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 } 1063 }
1062 // Move our proxy view item. 1064 // Move our proxy view item.
1063 UpdateDragIconProxy(screen_location); 1065 UpdateDragIconProxy(screen_location);
1064 return true; 1066 return true;
1065 } 1067 }
1066 // Check if we are too far away from the shelf to enter the ripped off state. 1068 // Check if we are too far away from the shelf to enter the ripped off state.
1067 // Determine the distance to the shelf. 1069 // Determine the distance to the shelf.
1068 int delta = CalculateShelfDistance(screen_location); 1070 int delta = CalculateShelfDistance(screen_location);
1069 if (delta > kRipOffDistance) { 1071 if (delta > kRipOffDistance) {
1070 // Create a proxy view item which can be moved anywhere. 1072 // Create a proxy view item which can be moved anywhere.
1071 ShelfButton* button = static_cast<ShelfButton*>(drag_view_);
1072 CreateDragIconProxy(event.root_location(), 1073 CreateDragIconProxy(event.root_location(),
1073 button->GetImage(), 1074 drag_view_->GetImage(),
1074 drag_view_, 1075 drag_view_,
1075 gfx::Vector2d(0, 0), 1076 gfx::Vector2d(0, 0),
1076 kDragAndDropProxyScale); 1077 kDragAndDropProxyScale);
1077 drag_view_->layer()->SetOpacity(0.0f); 1078 drag_view_->layer()->SetOpacity(0.0f);
1078 dragged_off_shelf_ = true; 1079 dragged_off_shelf_ = true;
1079 if (RemovableByRipOff(current_index) == REMOVABLE) { 1080 if (RemovableByRipOff(current_index) == REMOVABLE) {
1080 // Move the item to the front of the first panel item and hide it. 1081 // Move the item to the front of the first panel item and hide it.
1081 // ShelfItemMoved() callback will handle the |view_model_| update and 1082 // ShelfItemMoved() callback will handle the |view_model_| update and
1082 // call AnimateToIdealBounds(). 1083 // call AnimateToIdealBounds().
1083 if (current_index != model_->FirstPanelIndex() - 1) { 1084 if (current_index != model_->FirstPanelIndex() - 1) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 gfx::Rect drag_bounds = drag_image_->GetBoundsInScreen(); 1146 gfx::Rect drag_bounds = drag_image_->GetBoundsInScreen();
1146 gfx::Point relative_to = GetBoundsInScreen().origin(); 1147 gfx::Point relative_to = GetBoundsInScreen().origin();
1147 gfx::Rect target( 1148 gfx::Rect target(
1148 gfx::PointAtOffsetFromOrigin(drag_bounds.origin()- relative_to), 1149 gfx::PointAtOffsetFromOrigin(drag_bounds.origin()- relative_to),
1149 drag_bounds.size()); 1150 drag_bounds.size());
1150 drag_view_->SetBoundsRect(target); 1151 drag_view_->SetBoundsRect(target);
1151 // Hide the status from the active item since we snap it back now. Upon 1152 // Hide the status from the active item since we snap it back now. Upon
1152 // animation end the flag gets cleared if |snap_back_from_rip_off_view_| 1153 // animation end the flag gets cleared if |snap_back_from_rip_off_view_|
1153 // is set. 1154 // is set.
1154 snap_back_from_rip_off_view_ = drag_view_; 1155 snap_back_from_rip_off_view_ = drag_view_;
1155 ShelfButton* button = static_cast<ShelfButton*>(drag_view_); 1156 drag_view_->AddState(ShelfButton::STATE_HIDDEN);
1156 button->AddState(ShelfButton::STATE_HIDDEN);
1157 // When a canceling drag model is happening, the view model is diverged 1157 // When a canceling drag model is happening, the view model is diverged
1158 // from the menu model and movements / animations should not be done. 1158 // from the menu model and movements / animations should not be done.
1159 model_->Move(current_index, start_drag_index_); 1159 model_->Move(current_index, start_drag_index_);
1160 AnimateToIdealBounds(); 1160 AnimateToIdealBounds();
1161 } 1161 }
1162 drag_view_->layer()->SetOpacity(1.0f); 1162 drag_view_->layer()->SetOpacity(1.0f);
1163 } 1163 }
1164 DestroyDragIconProxy(); 1164 DestroyDragIconProxy();
1165 } 1165 }
1166 1166
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 views::View* view = view_model_->view_at(model_index); 1521 views::View* view = view_model_->view_at(model_index);
1522 switch (item.type) { 1522 switch (item.type) {
1523 case TYPE_BROWSER_SHORTCUT: 1523 case TYPE_BROWSER_SHORTCUT:
1524 // Fallthrough for the new Shelf since it needs to show the activation 1524 // Fallthrough for the new Shelf since it needs to show the activation
1525 // change as well. 1525 // change as well.
1526 case TYPE_APP_SHORTCUT: 1526 case TYPE_APP_SHORTCUT:
1527 case TYPE_WINDOWED_APP: 1527 case TYPE_WINDOWED_APP:
1528 case TYPE_PLATFORM_APP: 1528 case TYPE_PLATFORM_APP:
1529 case TYPE_DIALOG: 1529 case TYPE_DIALOG:
1530 case TYPE_APP_PANEL: { 1530 case TYPE_APP_PANEL: {
1531 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName());
1531 ShelfButton* button = static_cast<ShelfButton*>(view); 1532 ShelfButton* button = static_cast<ShelfButton*>(view);
1532 ReflectItemStatus(item, button); 1533 ReflectItemStatus(item, button);
1533 // The browser shortcut is currently not a "real" item and as such the 1534 // The browser shortcut is currently not a "real" item and as such the
1534 // the image is bogous as well. We therefore keep the image as is for it. 1535 // the image is bogous as well. We therefore keep the image as is for it.
1535 if (item.type != TYPE_BROWSER_SHORTCUT) 1536 if (item.type != TYPE_BROWSER_SHORTCUT)
1536 button->SetImage(item.image); 1537 button->SetImage(item.image);
1537 button->SchedulePaint(); 1538 button->SchedulePaint();
1538 break; 1539 break;
1539 } 1540 }
1540 1541
(...skipping 24 matching lines...) Expand all
1565 1566
1566 int index = view_model_->GetIndexOfView(view); 1567 int index = view_model_->GetIndexOfView(view);
1567 if (index == -1) 1568 if (index == -1)
1568 return; 1569 return;
1569 1570
1570 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( 1571 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate(
1571 model_->items()[index].id); 1572 model_->items()[index].id);
1572 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable()) 1573 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable())
1573 return; // View is being deleted or not draggable, ignore request. 1574 return; // View is being deleted or not draggable, ignore request.
1574 1575
1575 drag_view_ = view; 1576 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName());
1577 drag_view_ = static_cast<ShelfButton*>(view);
1576 drag_origin_ = gfx::Point(event.x(), event.y()); 1578 drag_origin_ = gfx::Point(event.x(), event.y());
1577 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage", 1579 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage",
1578 layout_manager_->SelectValueForShelfAlignment( 1580 layout_manager_->SelectValueForShelfAlignment(
1579 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM, 1581 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
1580 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT, 1582 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
1581 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT, 1583 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT,
1582 -1), 1584 -1),
1583 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT); 1585 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
1584 } 1586 }
1585 1587
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1859 void ShelfView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) { 1861 void ShelfView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) {
1860 if (snap_back_from_rip_off_view_ && animator == bounds_animator_) { 1862 if (snap_back_from_rip_off_view_ && animator == bounds_animator_) {
1861 if (!animator->IsAnimating(snap_back_from_rip_off_view_)) { 1863 if (!animator->IsAnimating(snap_back_from_rip_off_view_)) {
1862 // Coming here the animation of the ShelfButton is finished and the 1864 // Coming here the animation of the ShelfButton is finished and the
1863 // previously hidden status can be shown again. Since the button itself 1865 // previously hidden status can be shown again. Since the button itself
1864 // might have gone away or changed locations we check that the button 1866 // might have gone away or changed locations we check that the button
1865 // is still in the shelf and show its status again. 1867 // is still in the shelf and show its status again.
1866 for (int index = 0; index < view_model_->view_size(); index++) { 1868 for (int index = 0; index < view_model_->view_size(); index++) {
1867 views::View* view = view_model_->view_at(index); 1869 views::View* view = view_model_->view_at(index);
1868 if (view == snap_back_from_rip_off_view_) { 1870 if (view == snap_back_from_rip_off_view_) {
1871 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName());
1869 ShelfButton* button = static_cast<ShelfButton*>(view); 1872 ShelfButton* button = static_cast<ShelfButton*>(view);
1870 button->ClearState(ShelfButton::STATE_HIDDEN); 1873 button->ClearState(ShelfButton::STATE_HIDDEN);
1871 break; 1874 break;
1872 } 1875 }
1873 } 1876 }
1874 snap_back_from_rip_off_view_ = NULL; 1877 snap_back_from_rip_off_view_ = NULL;
1875 } 1878 }
1876 } 1879 }
1877 } 1880 }
1878 1881
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1924 distance = bounds.x() - coordinate.x(); 1927 distance = bounds.x() - coordinate.x();
1925 break; 1928 break;
1926 case SHELF_ALIGNMENT_TOP: 1929 case SHELF_ALIGNMENT_TOP:
1927 distance = coordinate.y() - bounds.bottom(); 1930 distance = coordinate.y() - bounds.bottom();
1928 break; 1931 break;
1929 } 1932 }
1930 return distance > 0 ? distance : 0; 1933 return distance > 0 ? distance : 0;
1931 } 1934 }
1932 1935
1933 } // namespace ash 1936 } // namespace ash
OLDNEW
« no previous file with comments | « ash/shelf/shelf_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698