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

Unified Diff: ui/app_list/folder_image.cc

Issue 687913003: app_list: Moved FolderImageSource into folder_image.cc. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ares-allapps-icon
Patch Set: Formatting (the ClangFormat rules have changed). Created 6 years, 1 month 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/folder_image.h ('k') | ui/app_list/folder_image_source.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/folder_image.cc
diff --git a/ui/app_list/folder_image.cc b/ui/app_list/folder_image.cc
index 515db07d46cd8601ba0b0115f34154f259aac8c3..c6ea1fe1b877559284d254e45c78c18a5aa42174 100644
--- a/ui/app_list/folder_image.cc
+++ b/ui/app_list/folder_image.cc
@@ -4,17 +4,111 @@
#include "ui/app_list/folder_image.h"
+#include <vector>
+
#include "ui/app_list/app_list_constants.h"
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_item_list.h"
-#include "ui/app_list/folder_image_source.h"
#include "ui/app_list/views/contents_view.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/image/canvas_image_source.h"
+#include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/image/image_skia_operations.h"
#include "ui/strings/grit/ui_strings.h"
namespace app_list {
+namespace {
+
+const int kItemIconDimension = 16;
+
+// Gets the size of a small app icon inside the folder icon.
+gfx::Size ItemIconSize() {
+ return gfx::Size(kItemIconDimension, kItemIconDimension);
+}
+
+// Generates the folder icon with the top 4 child item icons laid in 2x2 tile.
+class FolderImageSource : public gfx::CanvasImageSource {
+ public:
+ typedef std::vector<gfx::ImageSkia> Icons;
+
+ FolderImageSource(const Icons& icons, const gfx::Size& size);
+ ~FolderImageSource() override;
+
+ private:
+ void DrawIcon(gfx::Canvas* canvas,
+ const gfx::ImageSkia& icon,
+ const gfx::Size icon_size,
+ int x,
+ int y);
+
+ // gfx::CanvasImageSource overrides:
+ void Draw(gfx::Canvas* canvas) override;
+
+ Icons icons_;
+ gfx::Size size_;
+
+ DISALLOW_COPY_AND_ASSIGN(FolderImageSource);
+};
+
+FolderImageSource::FolderImageSource(const Icons& icons, const gfx::Size& size)
+ : gfx::CanvasImageSource(size, false), icons_(icons), size_(size) {
+ DCHECK(icons.size() <= kNumFolderTopItems);
+}
+
+FolderImageSource::~FolderImageSource() {
+}
+
+void FolderImageSource::DrawIcon(gfx::Canvas* canvas,
+ const gfx::ImageSkia& icon,
+ const gfx::Size icon_size,
+ int x,
+ int y) {
+ if (icon.isNull())
+ return;
+
+ gfx::ImageSkia resized(gfx::ImageSkiaOperations::CreateResizedImage(
+ icon, skia::ImageOperations::RESIZE_BEST, icon_size));
+ canvas->DrawImageInt(resized, 0, 0, resized.width(), resized.height(), x, y,
+ resized.width(), resized.height(), true);
+}
+
+void FolderImageSource::Draw(gfx::Canvas* canvas) {
+ // Draw circle for folder shadow.
+ gfx::PointF shadow_center(size().width() / 2, size().height() / 2);
+ SkPaint paint;
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setAntiAlias(true);
+ paint.setColor(kFolderShadowColor);
+ canvas->sk_canvas()->drawCircle(shadow_center.x(), shadow_center.y(),
+ kFolderShadowRadius, paint);
+ // Draw circle for folder bubble.
+ gfx::PointF bubble_center(shadow_center);
+ bubble_center.Offset(0, -kFolderShadowOffsetY);
+ paint.setColor(kFolderBubbleColor);
+ canvas->sk_canvas()->drawCircle(bubble_center.x(), bubble_center.y(),
+ kFolderBubbleRadius, paint);
+
+ if (icons_.size() == 0)
+ return;
+
+ // Draw top items' icons.
+ const gfx::Size item_icon_size(ItemIconSize());
+ std::vector<gfx::Rect> top_icon_bounds =
+ FolderImage::GetTopIconsBounds(gfx::Rect(size()));
+
+ for (size_t i = 0; i < kNumFolderTopItems && i < icons_.size(); ++i) {
+ DrawIcon(canvas, icons_[i], item_icon_size, top_icon_bounds[i].x(),
+ top_icon_bounds[i].y());
+ }
+}
+
+} // namespace
+
FolderImage::FolderImage(AppListItemList* item_list) : item_list_(item_list) {
item_list_->AddObserver(this);
}
@@ -44,19 +138,50 @@ const gfx::ImageSkia& FolderImage::GetTopIcon(size_t item_index) {
return top_items_[item_index]->icon();
}
+// static
+std::vector<gfx::Rect> FolderImage::GetTopIconsBounds(
+ const gfx::Rect& folder_icon_bounds) {
+ const int delta_to_center = 1;
+ gfx::Point icon_center = folder_icon_bounds.CenterPoint();
+ std::vector<gfx::Rect> top_icon_bounds;
+
+ // Get the top left icon bounds.
+ int left_x = icon_center.x() - kItemIconDimension - delta_to_center;
+ int top_y = icon_center.y() - kItemIconDimension - delta_to_center;
+ gfx::Rect top_left(left_x, top_y, kItemIconDimension, kItemIconDimension);
+ top_icon_bounds.push_back(top_left);
+
+ // Get the top right icon bounds.
+ int right_x = icon_center.x() + delta_to_center;
+ gfx::Rect top_right(right_x, top_y, kItemIconDimension, kItemIconDimension);
+ top_icon_bounds.push_back(top_right);
+
+ // Get the bottom left icon bounds.
+ int bottom_y = icon_center.y() + delta_to_center;
+ gfx::Rect bottom_left(left_x, bottom_y, kItemIconDimension,
+ kItemIconDimension);
+ top_icon_bounds.push_back(bottom_left);
+
+ // Get the bottom right icon bounds.
+ gfx::Rect bottom_right(right_x, bottom_y, kItemIconDimension,
+ kItemIconDimension);
+ top_icon_bounds.push_back(bottom_right);
+
+ return top_icon_bounds;
+}
+
gfx::Rect FolderImage::GetTargetIconRectInFolderForItem(
AppListItem* item,
const gfx::Rect& folder_icon_bounds) {
for (size_t i = 0; i < top_items_.size(); ++i) {
if (item->id() == top_items_[i]->id()) {
- std::vector<gfx::Rect> rects =
- FolderImageSource::GetTopIconsBounds(folder_icon_bounds);
+ std::vector<gfx::Rect> rects = GetTopIconsBounds(folder_icon_bounds);
return rects[i];
}
}
gfx::Rect target_rect(folder_icon_bounds);
- target_rect.ClampToCenteredSize(FolderImageSource::ItemIconSize());
+ target_rect.ClampToCenteredSize(ItemIconSize());
return target_rect;
}
« no previous file with comments | « ui/app_list/folder_image.h ('k') | ui/app_list/folder_image_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698