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_IMAGE_IMAGE_SKIA_REP_H_
6#define UI_GFX_IMAGE_IMAGE_SKIA_REP_H_
7
8#include "third_party/skia/include/core/SkBitmap.h"
9#include "ui/base/layout.h"
10#include "ui/base/ui_export.h"
11#include "ui/gfx/size.h"
12
13namespace gfx {
14
15// An ImageSkiaRep represents a bitmap and the scale factor it is intended for.
16class UI_EXPORT ImageSkiaRep {
17 public:
18  // Create null bitmap.
19  ImageSkiaRep();
20  ~ImageSkiaRep();
21
22  // Creates a bitmap with kARGB_8888_Config config with given |size| in DIP.
23  // This allocates pixels in the bitmap.
24  ImageSkiaRep(const gfx::Size& size, ui::ScaleFactor scale_factor);
25
26  // Creates a bitmap with given scale factor.
27  // Adds ref to |src|.
28  ImageSkiaRep(const SkBitmap& src, ui::ScaleFactor scale_factor);
29
30  // Returns true if the backing bitmap is null.
31  bool is_null() const { return bitmap_.isNull(); }
32
33  // Get width and height of bitmap in DIP.
34  int GetWidth() const;
35  int GetHeight() const;
36
37  // Get width and height of bitmap in pixels.
38  int pixel_width() const { return bitmap_.width(); }
39  int pixel_height() const { return bitmap_.height(); }
40  Size pixel_size() const {
41    return Size(pixel_width(), pixel_height());
42  }
43
44  // Retrieves the scale that the bitmap will be painted at.
45  float GetScale() const;
46  ui::ScaleFactor scale_factor() const { return scale_factor_; }
47
48  // Returns backing bitmap.
49  const SkBitmap& sk_bitmap() const { return bitmap_; }
50
51 private:
52  friend class ImageSkia;
53  SkBitmap& mutable_sk_bitmap() { return bitmap_; }
54
55  SkBitmap bitmap_;
56  ui::ScaleFactor scale_factor_;
57};
58
59}  // namespace gfx
60
61#endif  // UI_GFX_IMAGE_IMAGE_SKIA_REP_H_
62