// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SKIA_EXT_SKIA_UTILS_IOS_H_
#define SKIA_EXT_SKIA_UTILS_IOS_H_

#include <CoreGraphics/CoreGraphics.h>
#include <vector>

#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"

#ifdef __OBJC__
@class UIColor;
@class UIImage;
@class NSData;
#else
// TODO(https://crbug.com/1433041): Remove this.
class UIImage;
#endif

namespace skia {

// Draws a CGImage into an SkBitmap of the given size.
SK_API SkBitmap CGImageToSkBitmap(CGImageRef image,
                                  CGSize size,
                                  bool is_opaque);

// Given an SkBitmap and a color space, return an autoreleased UIImage.
// TODO(https://crbug.com/1433041): Restrict this to Objective-C callers.
SK_API UIImage* SkBitmapToUIImageWithColorSpace(const SkBitmap& skia_bitmap,
                                                CGFloat scale,
                                                CGColorSpaceRef color_space);

#ifdef __OBJC__

// Decodes all image representations inside the data into a vector of SkBitmaps.
// Returns a vector of all the successfully decoded representations or an empty
// vector if none can be decoded.
SK_API std::vector<SkBitmap> ImageDataToSkBitmaps(NSData* image_data);

// Decodes all image representations inside the data into a vector of SkBitmaps.
// If a representation is bigger than max_size (either width or height), it is
// ignored.
// Returns a vector of all the successfully decoded representations or an empty
// vector if none can be decoded.
SK_API std::vector<SkBitmap> ImageDataToSkBitmapsWithMaxSize(NSData* image_data,
                                                             CGFloat max_size);

// Returns a UIColor for an SKColor.
SK_API UIColor* UIColorFromSkColor(SkColor color);

#endif  // __OBJC__

}  // namespace skia

#endif  // SKIA_EXT_SKIA_UTILS_IOS_H_
