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 3// found in the LICENSE file. 4 5#ifndef UI_GFX_SKIA_UTIL_H_ 6#define UI_GFX_SKIA_UTIL_H_ 7 8#include <string> 9#include <vector> 10 11#include "skia/ext/refptr.h" 12#include "third_party/skia/include/core/SkColor.h" 13#include "third_party/skia/include/core/SkRect.h" 14#include "third_party/skia/include/core/SkShader.h" 15#include "ui/gfx/gfx_export.h" 16 17class SkBitmap; 18class SkDrawLooper; 19 20namespace gfx { 21 22class ImageSkiaRep; 23class Rect; 24class RectF; 25class ShadowValue; 26class Transform; 27 28// Convert between Skia and gfx rect types. 29GFX_EXPORT SkRect RectToSkRect(const Rect& rect); 30GFX_EXPORT SkIRect RectToSkIRect(const Rect& rect); 31GFX_EXPORT Rect SkIRectToRect(const SkIRect& rect); 32GFX_EXPORT SkRect RectFToSkRect(const RectF& rect); 33GFX_EXPORT RectF SkRectToRectF(const SkRect& rect); 34 35GFX_EXPORT void TransformToFlattenedSkMatrix(const gfx::Transform& transform, 36 SkMatrix* flattened); 37 38// Creates a bitmap shader for the image rep with the image rep's scale factor. 39// Sets the created shader's local matrix such that it displays the image rep at 40// the correct scale factor. 41// The shader's local matrix should not be changed after the shader is created. 42// TODO(pkotwicz): Allow shader's local matrix to be changed after the shader 43// is created. 44// 45GFX_EXPORT skia::RefPtr<SkShader> CreateImageRepShader( 46 const gfx::ImageSkiaRep& image_rep, 47 SkShader::TileMode tile_mode, 48 const SkMatrix& local_matrix); 49 50// Creates a vertical gradient shader. The caller owns the shader. 51// Example usage to avoid leaks: 52GFX_EXPORT skia::RefPtr<SkShader> CreateGradientShader(int start_point, 53 int end_point, 54 SkColor start_color, 55 SkColor end_color); 56 57// Creates a draw looper to generate |shadows|. The caller owns the draw looper. 58// NULL is returned if |shadows| is empty since no draw looper is needed in 59// this case. 60GFX_EXPORT skia::RefPtr<SkDrawLooper> CreateShadowDrawLooper( 61 const std::vector<ShadowValue>& shadows); 62 63// Returns true if the two bitmaps contain the same pixels. 64GFX_EXPORT bool BitmapsAreEqual(const SkBitmap& bitmap1, 65 const SkBitmap& bitmap2); 66 67// Converts Skia ARGB format pixels in |skia| to RGBA. 68GFX_EXPORT void ConvertSkiaToRGBA(const unsigned char* skia, 69 int pixel_width, 70 unsigned char* rgba); 71 72} // namespace gfx 73 74#endif // UI_GFX_SKIA_UTIL_H_ 75