| Index: ui/app_list/folder_image_source.cc
|
| diff --git a/ui/app_list/folder_image_source.cc b/ui/app_list/folder_image_source.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ac3f1089277cadf3ae48990a3f53ba8b2b76f135
|
| --- /dev/null
|
| +++ b/ui/app_list/folder_image_source.cc
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2014 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/folder_image_source.h"
|
| +
|
| +#include "ui/app_list/app_list_constants.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/image_skia.h"
|
| +#include "ui/gfx/image/image_skia_operations.h"
|
| +
|
| +namespace {
|
| +
|
| +const int kItemIconDimension = 16;
|
| +
|
| +} // namespace
|
| +
|
| +namespace app_list {
|
| +
|
| +FolderImageSource::FolderImageSource(const Icons& icons, const gfx::Size& size)
|
| + : gfx::CanvasImageSource(size, false), icons_(icons), size_(size) {
|
| + DCHECK(icons.size() <= kNumFolderTopItems);
|
| +}
|
| +
|
| +FolderImageSource::~FolderImageSource() {
|
| +}
|
| +
|
| +// static
|
| +gfx::Size FolderImageSource::ItemIconSize() {
|
| + return gfx::Size(kItemIconDimension, kItemIconDimension);
|
| +}
|
| +
|
| +// static
|
| +std::vector<gfx::Rect> FolderImageSource::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;
|
| +}
|
| +
|
| +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 folder circle.
|
| + gfx::Point center = gfx::Point(size().width() / 2, size().height() / 2);
|
| + SkPaint paint;
|
| + paint.setStyle(SkPaint::kFill_Style);
|
| + paint.setAntiAlias(true);
|
| + paint.setColor(kFolderBubbleColor);
|
| + canvas->DrawCircle(center, size().width() / 2, paint);
|
| +
|
| + if (icons_.size() == 0)
|
| + return;
|
| +
|
| + // Draw top items' icons.
|
| + const gfx::Size item_icon_size(ItemIconSize());
|
| + std::vector<gfx::Rect> top_icon_bounds = 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 app_list
|
|
|