15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_IMAGE_IMAGE_SKIA_REP_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_IMAGE_IMAGE_SKIA_REP_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An ImageSkiaRep represents a bitmap and the scale factor it is intended for.
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// 0.0f scale is used to indicate that this ImageSkiaRep is used for unscaled
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// image (the image that only returns 1.0f scale image).
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GFX_EXPORT ImageSkiaRep {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create null bitmap.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ImageSkiaRep();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ImageSkiaRep();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Note: This is for testing purpose only.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a bitmap with kARGB_8888_Config config with given |size| in DIP.
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // This allocates pixels in the bitmap. It is guaranteed that the data in the
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // bitmap are initialized but the actual values are undefined.
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Specifying 0 scale means the image is for unscaled image. (unscaled()
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // returns truen, and scale() returns 1.0f;)
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ImageSkiaRep(const gfx::Size& size, float scale);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Creates a bitmap with given scale.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds ref to |src|.
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ImageSkiaRep(const SkBitmap& src, float scale);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the backing bitmap is null.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_null() const { return bitmap_.isNull(); }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get width and height of bitmap in DIP.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetWidth() const;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetHeight() const;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get width and height of bitmap in pixels.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int pixel_width() const { return bitmap_.width(); }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int pixel_height() const { return bitmap_.height(); }
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Size pixel_size() const {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return Size(pixel_width(), pixel_height());
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves the scale that the bitmap will be painted at.
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  float scale() const { return unscaled() ? 1.0f : scale_; }
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool unscaled() const { return scale_ == 0.0f; }
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Mark the image to be used as scaled image.
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetScaled();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns backing bitmap.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const SkBitmap& sk_bitmap() const { return bitmap_; }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class ImageSkia;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkBitmap& mutable_sk_bitmap() { return bitmap_; }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkBitmap bitmap_;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  float scale_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_IMAGE_IMAGE_SKIA_REP_H_
72