Index: ui/gfx/image/image_skia_operations.cc |
diff --git a/ui/gfx/image/image_skia_operations.cc b/ui/gfx/image/image_skia_operations.cc |
deleted file mode 100644 |
index a1fefce9ca6294a91555f08483ce371455dec0ff..0000000000000000000000000000000000000000 |
--- a/ui/gfx/image/image_skia_operations.cc |
+++ /dev/null |
@@ -1,548 +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/gfx/image/image_skia_operations.h" |
- |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "skia/ext/image_operations.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/image/canvas_image_source.h" |
-#include "ui/gfx/image/image_skia.h" |
-#include "ui/gfx/image/image_skia_rep.h" |
-#include "ui/gfx/image/image_skia_source.h" |
-#include "ui/gfx/insets.h" |
-#include "ui/gfx/point.h" |
-#include "ui/gfx/point_conversions.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/rect_conversions.h" |
-#include "ui/gfx/size.h" |
-#include "ui/gfx/size_conversions.h" |
-#include "ui/gfx/skbitmap_operations.h" |
-#include "ui/gfx/skia_util.h" |
- |
-namespace gfx { |
-namespace { |
- |
-gfx::Size DIPToPixelSize(gfx::Size dip_size, float scale) { |
- return ToCeiledSize(ScaleSize(dip_size, scale)); |
-} |
- |
-gfx::Rect DIPToPixelBounds(gfx::Rect dip_bounds, float scale) { |
- return gfx::Rect(ToFlooredPoint(ScalePoint(dip_bounds.origin(), scale)), |
- DIPToPixelSize(dip_bounds.size(), scale)); |
-} |
- |
-// Returns an image rep for the ImageSkiaSource to return to visually indicate |
-// an error. |
-ImageSkiaRep GetErrorImageRep(float scale, const gfx::Size& pixel_size) { |
- SkBitmap bitmap; |
- bitmap.allocN32Pixels(pixel_size.width(), pixel_size.height()); |
- bitmap.eraseColor(SK_ColorRED); |
- return gfx::ImageSkiaRep(bitmap, scale); |
-} |
- |
-// A base image source class that creates an image from two source images. |
-// This class guarantees that two ImageSkiaReps have have the same pixel size. |
-class BinaryImageSource : public gfx::ImageSkiaSource { |
- protected: |
- BinaryImageSource(const ImageSkia& first, |
- const ImageSkia& second, |
- const char* source_name) |
- : first_(first), |
- second_(second), |
- source_name_(source_name) { |
- } |
- ~BinaryImageSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep first_rep = first_.GetRepresentation(scale); |
- ImageSkiaRep second_rep = second_.GetRepresentation(scale); |
- if (first_rep.pixel_size() != second_rep.pixel_size()) { |
- DCHECK_NE(first_rep.scale(), second_rep.scale()); |
- if (first_rep.scale() == second_rep.scale()) { |
- LOG(ERROR) << "ImageSkiaRep size mismatch in " << source_name_; |
- return GetErrorImageRep(first_rep.scale(),first_rep.pixel_size()); |
- } |
- first_rep = first_.GetRepresentation(1.0f); |
- second_rep = second_.GetRepresentation(1.0f); |
- DCHECK_EQ(first_rep.pixel_width(), second_rep.pixel_width()); |
- DCHECK_EQ(first_rep.pixel_height(), second_rep.pixel_height()); |
- if (first_rep.pixel_size() != second_rep.pixel_size()) { |
- LOG(ERROR) << "ImageSkiaRep size mismatch in " << source_name_; |
- return GetErrorImageRep(first_rep.scale(), first_rep.pixel_size()); |
- } |
- } else { |
- DCHECK_EQ(first_rep.scale(), second_rep.scale()); |
- } |
- return CreateImageSkiaRep(first_rep, second_rep); |
- } |
- |
- // Creates a final image from two ImageSkiaReps. The pixel size of |
- // the two images are guaranteed to be the same. |
- virtual ImageSkiaRep CreateImageSkiaRep( |
- const ImageSkiaRep& first_rep, |
- const ImageSkiaRep& second_rep) const = 0; |
- |
- private: |
- const ImageSkia first_; |
- const ImageSkia second_; |
- // The name of a class that implements the BinaryImageSource. |
- // The subclass is responsible for managing the memory. |
- const char* source_name_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BinaryImageSource); |
-}; |
- |
-class BlendingImageSource : public BinaryImageSource { |
- public: |
- BlendingImageSource(const ImageSkia& first, |
- const ImageSkia& second, |
- double alpha) |
- : BinaryImageSource(first, second, "BlendingImageSource"), |
- alpha_(alpha) { |
- } |
- |
- ~BlendingImageSource() override {} |
- |
- // BinaryImageSource overrides: |
- ImageSkiaRep CreateImageSkiaRep( |
- const ImageSkiaRep& first_rep, |
- const ImageSkiaRep& second_rep) const override { |
- SkBitmap blended = SkBitmapOperations::CreateBlendedBitmap( |
- first_rep.sk_bitmap(), second_rep.sk_bitmap(), alpha_); |
- return ImageSkiaRep(blended, first_rep.scale()); |
- } |
- |
- private: |
- double alpha_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BlendingImageSource); |
-}; |
- |
-class SuperimposedImageSource : public gfx::CanvasImageSource { |
- public: |
- SuperimposedImageSource(const ImageSkia& first, |
- const ImageSkia& second) |
- : gfx::CanvasImageSource(first.size(), false /* is opaque */), |
- first_(first), |
- second_(second) { |
- } |
- |
- ~SuperimposedImageSource() override {} |
- |
- // gfx::CanvasImageSource override. |
- void Draw(Canvas* canvas) override { |
- canvas->DrawImageInt(first_, 0, 0); |
- canvas->DrawImageInt(second_, |
- (first_.width() - second_.width()) / 2, |
- (first_.height() - second_.height()) / 2); |
- } |
- |
- private: |
- const ImageSkia first_; |
- const ImageSkia second_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SuperimposedImageSource); |
-}; |
- |
-class TransparentImageSource : public gfx::ImageSkiaSource { |
- public: |
- TransparentImageSource(const ImageSkia& image, double alpha) |
- : image_(image), |
- alpha_(alpha) { |
- } |
- |
- ~TransparentImageSource() override {} |
- |
- private: |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep image_rep = image_.GetRepresentation(scale); |
- SkBitmap alpha; |
- alpha.allocN32Pixels(image_rep.pixel_width(), |
- image_rep.pixel_height()); |
- alpha.eraseColor(SkColorSetARGB(alpha_ * 255, 0, 0, 0)); |
- return ImageSkiaRep( |
- SkBitmapOperations::CreateMaskedBitmap(image_rep.sk_bitmap(), alpha), |
- image_rep.scale()); |
- } |
- |
- ImageSkia image_; |
- double alpha_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TransparentImageSource); |
-}; |
- |
-class MaskedImageSource : public BinaryImageSource { |
- public: |
- MaskedImageSource(const ImageSkia& rgb, const ImageSkia& alpha) |
- : BinaryImageSource(rgb, alpha, "MaskedImageSource") { |
- } |
- |
- ~MaskedImageSource() override {} |
- |
- // BinaryImageSource overrides: |
- ImageSkiaRep CreateImageSkiaRep( |
- const ImageSkiaRep& first_rep, |
- const ImageSkiaRep& second_rep) const override { |
- return ImageSkiaRep(SkBitmapOperations::CreateMaskedBitmap( |
- first_rep.sk_bitmap(), second_rep.sk_bitmap()), |
- first_rep.scale()); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MaskedImageSource); |
-}; |
- |
-class TiledImageSource : public gfx::ImageSkiaSource { |
- public: |
- TiledImageSource(const ImageSkia& source, |
- int src_x, int src_y, |
- int dst_w, int dst_h) |
- : source_(source), |
- src_x_(src_x), |
- src_y_(src_y), |
- dst_w_(dst_w), |
- dst_h_(dst_h) { |
- } |
- |
- ~TiledImageSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep source_rep = source_.GetRepresentation(scale); |
- gfx::Rect bounds = DIPToPixelBounds(gfx::Rect(src_x_, src_y_, dst_w_, |
- dst_h_), source_rep.scale()); |
- return ImageSkiaRep( |
- SkBitmapOperations::CreateTiledBitmap( |
- source_rep.sk_bitmap(), |
- bounds.x(), bounds.y(), bounds.width(), bounds.height()), |
- source_rep.scale()); |
- } |
- |
- private: |
- const ImageSkia source_; |
- const int src_x_; |
- const int src_y_; |
- const int dst_w_; |
- const int dst_h_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TiledImageSource); |
-}; |
- |
-class HSLImageSource : public gfx::ImageSkiaSource { |
- public: |
- HSLImageSource(const ImageSkia& image, |
- const color_utils::HSL& hsl_shift) |
- : image_(image), |
- hsl_shift_(hsl_shift) { |
- } |
- |
- ~HSLImageSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep image_rep = image_.GetRepresentation(scale); |
- return gfx::ImageSkiaRep( |
- SkBitmapOperations::CreateHSLShiftedBitmap(image_rep.sk_bitmap(), |
- hsl_shift_), image_rep.scale()); |
- } |
- |
- private: |
- const gfx::ImageSkia image_; |
- const color_utils::HSL hsl_shift_; |
- DISALLOW_COPY_AND_ASSIGN(HSLImageSource); |
-}; |
- |
-// ImageSkiaSource which uses SkBitmapOperations::CreateButtonBackground |
-// to generate image reps for the target image. The image and mask can be |
-// diferent sizes (crbug.com/171725). |
-class ButtonImageSource: public gfx::ImageSkiaSource { |
- public: |
- ButtonImageSource(SkColor color, |
- const ImageSkia& image, |
- const ImageSkia& mask) |
- : color_(color), |
- image_(image), |
- mask_(mask) { |
- } |
- |
- ~ButtonImageSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep image_rep = image_.GetRepresentation(scale); |
- ImageSkiaRep mask_rep = mask_.GetRepresentation(scale); |
- if (image_rep.scale() != mask_rep.scale()) { |
- image_rep = image_.GetRepresentation(1.0f); |
- mask_rep = mask_.GetRepresentation(1.0f); |
- } |
- return gfx::ImageSkiaRep( |
- SkBitmapOperations::CreateButtonBackground(color_, |
- image_rep.sk_bitmap(), mask_rep.sk_bitmap()), |
- image_rep.scale()); |
- } |
- |
- private: |
- const SkColor color_; |
- const ImageSkia image_; |
- const ImageSkia mask_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ButtonImageSource); |
-}; |
- |
-// ImageSkiaSource which uses SkBitmap::extractSubset to generate image reps |
-// for the target image. |
-class ExtractSubsetImageSource: public gfx::ImageSkiaSource { |
- public: |
- ExtractSubsetImageSource(const gfx::ImageSkia& image, |
- const gfx::Rect& subset_bounds) |
- : image_(image), |
- subset_bounds_(subset_bounds) { |
- } |
- |
- ~ExtractSubsetImageSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- ImageSkiaRep image_rep = image_.GetRepresentation(scale); |
- SkIRect subset_bounds_in_pixel = RectToSkIRect( |
- DIPToPixelBounds(subset_bounds_, image_rep.scale())); |
- SkBitmap dst; |
- bool success = image_rep.sk_bitmap().extractSubset(&dst, |
- subset_bounds_in_pixel); |
- DCHECK(success); |
- return gfx::ImageSkiaRep(dst, image_rep.scale()); |
- } |
- |
- private: |
- const gfx::ImageSkia image_; |
- const gfx::Rect subset_bounds_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ExtractSubsetImageSource); |
-}; |
- |
-// ResizeSource resizes relevant image reps in |source| to |target_dip_size| |
-// for requested scale factors. |
-class ResizeSource : public ImageSkiaSource { |
- public: |
- ResizeSource(const ImageSkia& source, |
- skia::ImageOperations::ResizeMethod method, |
- const Size& target_dip_size) |
- : source_(source), |
- resize_method_(method), |
- target_dip_size_(target_dip_size) { |
- } |
- ~ResizeSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- const ImageSkiaRep& image_rep = source_.GetRepresentation(scale); |
- if (image_rep.GetWidth() == target_dip_size_.width() && |
- image_rep.GetHeight() == target_dip_size_.height()) |
- return image_rep; |
- |
- const Size target_pixel_size = DIPToPixelSize(target_dip_size_, scale); |
- const SkBitmap resized = skia::ImageOperations::Resize( |
- image_rep.sk_bitmap(), |
- resize_method_, |
- target_pixel_size.width(), |
- target_pixel_size.height()); |
- return ImageSkiaRep(resized, scale); |
- } |
- |
- private: |
- const ImageSkia source_; |
- skia::ImageOperations::ResizeMethod resize_method_; |
- const Size target_dip_size_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ResizeSource); |
-}; |
- |
-// DropShadowSource generates image reps with drop shadow for image reps in |
-// |source| that represent requested scale factors. |
-class DropShadowSource : public ImageSkiaSource { |
- public: |
- DropShadowSource(const ImageSkia& source, |
- const ShadowValues& shadows_in_dip) |
- : source_(source), |
- shaodws_in_dip_(shadows_in_dip) { |
- } |
- ~DropShadowSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- const ImageSkiaRep& image_rep = source_.GetRepresentation(scale); |
- |
- ShadowValues shadows_in_pixel; |
- for (size_t i = 0; i < shaodws_in_dip_.size(); ++i) |
- shadows_in_pixel.push_back(shaodws_in_dip_[i].Scale(scale)); |
- |
- const SkBitmap shadow_bitmap = SkBitmapOperations::CreateDropShadow( |
- image_rep.sk_bitmap(), |
- shadows_in_pixel); |
- return ImageSkiaRep(shadow_bitmap, image_rep.scale()); |
- } |
- |
- private: |
- const ImageSkia source_; |
- const ShadowValues shaodws_in_dip_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DropShadowSource); |
-}; |
- |
-// RotatedSource generates image reps that are rotations of those in |
-// |source| that represent requested scale factors. |
-class RotatedSource : public ImageSkiaSource { |
- public: |
- RotatedSource(const ImageSkia& source, |
- SkBitmapOperations::RotationAmount rotation) |
- : source_(source), |
- rotation_(rotation) { |
- } |
- ~RotatedSource() override {} |
- |
- // gfx::ImageSkiaSource overrides: |
- ImageSkiaRep GetImageForScale(float scale) override { |
- const ImageSkiaRep& image_rep = source_.GetRepresentation(scale); |
- const SkBitmap rotated_bitmap = |
- SkBitmapOperations::Rotate(image_rep.sk_bitmap(), rotation_); |
- return ImageSkiaRep(rotated_bitmap, image_rep.scale()); |
- } |
- |
- private: |
- const ImageSkia source_; |
- const SkBitmapOperations::RotationAmount rotation_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RotatedSource); |
-}; |
- |
- |
-} // namespace |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateBlendedImage(const ImageSkia& first, |
- const ImageSkia& second, |
- double alpha) { |
- if (first.isNull() || second.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new BlendingImageSource(first, second, alpha), first.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateSuperimposedImage( |
- const ImageSkia& first, |
- const ImageSkia& second) { |
- if (first.isNull() || second.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new SuperimposedImageSource(first, second), first.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateTransparentImage(const ImageSkia& image, |
- double alpha) { |
- if (image.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new TransparentImageSource(image, alpha), image.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateMaskedImage(const ImageSkia& rgb, |
- const ImageSkia& alpha) { |
- if (rgb.isNull() || alpha.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new MaskedImageSource(rgb, alpha), rgb.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateTiledImage(const ImageSkia& source, |
- int src_x, int src_y, |
- int dst_w, int dst_h) { |
- if (source.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new TiledImageSource(source, src_x, src_y, dst_w, dst_h), |
- gfx::Size(dst_w, dst_h)); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateHSLShiftedImage( |
- const ImageSkia& image, |
- const color_utils::HSL& hsl_shift) { |
- if (image.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new HSLImageSource(image, hsl_shift), image.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateButtonBackground(SkColor color, |
- const ImageSkia& image, |
- const ImageSkia& mask) { |
- if (image.isNull() || mask.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new ButtonImageSource(color, image, mask), mask.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::ExtractSubset(const ImageSkia& image, |
- const Rect& subset_bounds) { |
- gfx::Rect clipped_bounds = |
- gfx::IntersectRects(subset_bounds, gfx::Rect(image.size())); |
- if (image.isNull() || clipped_bounds.IsEmpty()) { |
- return ImageSkia(); |
- } |
- |
- return ImageSkia(new ExtractSubsetImageSource(image, clipped_bounds), |
- clipped_bounds.size()); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateResizedImage( |
- const ImageSkia& source, |
- skia::ImageOperations::ResizeMethod method, |
- const Size& target_dip_size) { |
- if (source.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new ResizeSource(source, method, target_dip_size), |
- target_dip_size); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateImageWithDropShadow( |
- const ImageSkia& source, |
- const ShadowValues& shadows) { |
- if (source.isNull()) |
- return ImageSkia(); |
- |
- const gfx::Insets shadow_padding = -gfx::ShadowValue::GetMargin(shadows); |
- gfx::Size shadow_image_size = source.size(); |
- shadow_image_size.Enlarge(shadow_padding.width(), |
- shadow_padding.height()); |
- return ImageSkia(new DropShadowSource(source, shadows), shadow_image_size); |
-} |
- |
-// static |
-ImageSkia ImageSkiaOperations::CreateRotatedImage( |
- const ImageSkia& source, |
- SkBitmapOperations::RotationAmount rotation) { |
- if (source.isNull()) |
- return ImageSkia(); |
- |
- return ImageSkia(new RotatedSource(source, rotation), |
- SkBitmapOperations::ROTATION_180_CW == rotation ? |
- source.size() : |
- gfx::Size(source.height(), source.width())); |
- |
-} |
- |
-} // namespace gfx |