Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: ui/gfx/image/image_skia.h

Issue 854713003: More old files deletion. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fix tryjobs? Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/gfx/image/image_png_rep.cc ('k') | ui/gfx/image/image_skia.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_H_
6 #define UI_GFX_IMAGE_IMAGE_SKIA_H_
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/gtest_prod_util.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "ui/gfx/gfx_export.h"
15 #include "ui/gfx/image/image_skia_rep.h"
16
17 namespace gfx {
18 class ImageSkiaSource;
19 class Size;
20
21 namespace internal {
22 class ImageSkiaStorage;
23 } // namespace internal
24
25 namespace test {
26 class TestOnThread;
27 }
28
29 // Container for the same image at different densities, similar to NSImage.
30 // Image height and width are in DIP (Density Indepent Pixel) coordinates.
31 //
32 // ImageSkia should be used whenever possible instead of SkBitmap.
33 // Functions that mutate the image should operate on the gfx::ImageSkiaRep
34 // returned from ImageSkia::GetRepresentation, not on ImageSkia.
35 //
36 // ImageSkia is cheap to copy and intentionally supports copy semantics.
37 class GFX_EXPORT ImageSkia {
38 public:
39 typedef std::vector<ImageSkiaRep> ImageSkiaReps;
40
41 // Creates an instance with no bitmaps.
42 ImageSkia();
43
44 // Creates an instance that will use the |source| to get the image
45 // for scale factors. |size| specifes the size of the image in DIP.
46 // ImageSkia owns |source|.
47 ImageSkia(ImageSkiaSource* source, const gfx::Size& size);
48
49 // Creates an instance that uses the |source|. The constructor loads the image
50 // at |scale| and uses its dimensions to calculate the size in DIP. ImageSkia
51 // owns |source|.
52 ImageSkia(ImageSkiaSource* source, float scale);
53
54 explicit ImageSkia(const gfx::ImageSkiaRep& image_rep);
55
56 // Copies a reference to |other|'s storage.
57 ImageSkia(const ImageSkia& other);
58
59 // Copies a reference to |other|'s storage.
60 ImageSkia& operator=(const ImageSkia& other);
61
62 ~ImageSkia();
63
64 // Changes the value of GetSupportedScales() to |scales|.
65 static void SetSupportedScales(const std::vector<float>& scales);
66
67 // Returns a vector with the scale factors which are supported by this
68 // platform, in ascending order.
69 static const std::vector<float>& GetSupportedScales();
70
71 // Returns the maximum scale supported by this platform.
72 static float GetMaxSupportedScale();
73
74 // Creates an image from the passed in bitmap.
75 // DIP width and height are based on scale factor of 1x.
76 // Adds ref to passed in bitmap.
77 // WARNING: The resulting image will be pixelated when painted on a high
78 // density display.
79 static ImageSkia CreateFrom1xBitmap(const SkBitmap& bitmap);
80
81 // Returns a deep copy of this ImageSkia which has its own storage with
82 // the ImageSkiaRep instances that this ImageSkia currently has.
83 // This can be safely passed to and manipulated by another thread.
84 // Note that this does NOT generate ImageSkiaReps from its source.
85 // If you want to create a deep copy with ImageSkiaReps for supported
86 // scale factors, you need to explicitly call
87 // |EnsureRepsForSupportedScales()| first.
88 scoped_ptr<ImageSkia> DeepCopy() const;
89
90 // Returns true if this object is backed by the same ImageSkiaStorage as
91 // |other|. Will also return true if both images are isNull().
92 bool BackedBySameObjectAs(const gfx::ImageSkia& other) const;
93
94 // Adds |image_rep| to the image reps contained by this object.
95 void AddRepresentation(const gfx::ImageSkiaRep& image_rep);
96
97 // Removes the image rep of |scale| if present.
98 void RemoveRepresentation(float scale);
99
100 // Returns true if the object owns an image rep whose density matches
101 // |scale| exactly.
102 bool HasRepresentation(float scale) const;
103
104 // Returns the image rep whose density best matches |scale|.
105 // Returns a null image rep if the object contains no image reps.
106 const gfx::ImageSkiaRep& GetRepresentation(float scale) const;
107
108 // Make the ImageSkia instance read-only. Note that this only prevent
109 // modification from client code, and the storage may still be
110 // modified by the source if any (thus, it's not thread safe). This
111 // detaches the storage from currently accessing thread, so its safe
112 // to pass it to other thread as long as it is accessed only by that
113 // thread. If this ImageSkia's storage will be accessed by multiple
114 // threads, use |MakeThreadSafe()| method.
115 void SetReadOnly();
116
117 // Make the image thread safe by making the storage read only and remove
118 // its source if any. All ImageSkia that shares the same storage will also
119 // become thread safe. Note that in order to make it 100% thread safe,
120 // this must be called before it's been passed to anther thread.
121 void MakeThreadSafe();
122 bool IsThreadSafe() const;
123
124 // Returns true if this is a null object.
125 bool isNull() const { return storage_.get() == NULL; }
126
127 // Width and height of image in DIP coordinate system.
128 int width() const;
129 int height() const;
130 gfx::Size size() const;
131
132 // Returns pointer to 1x bitmap contained by this object. If there is no 1x
133 // bitmap, the bitmap whose scale factor is closest to 1x is returned.
134 // This function should only be used in unittests and on platforms which do
135 // not support scale factors other than 1x.
136 // TODO(pkotwicz): Return null SkBitmap when the object has no 1x bitmap.
137 const SkBitmap* bitmap() const { return &GetBitmap(); }
138
139 // Returns a vector with the image reps contained in this object.
140 // There is no guarantee that this will return all images rep for
141 // supported scale factors.
142 std::vector<gfx::ImageSkiaRep> image_reps() const;
143
144 // When the source is available, generates all ImageReps for
145 // supported scale factors. This method is defined as const as
146 // the state change in the storage is agnostic to the caller.
147 void EnsureRepsForSupportedScales() const;
148
149 private:
150 friend class test::TestOnThread;
151 FRIEND_TEST_ALL_PREFIXES(ImageSkiaTest, EmptyOnThreadTest);
152 FRIEND_TEST_ALL_PREFIXES(ImageSkiaTest, StaticOnThreadTest);
153 FRIEND_TEST_ALL_PREFIXES(ImageSkiaTest, SourceOnThreadTest);
154
155 // Initialize ImageSkiaStorage with passed in parameters.
156 // If the image rep's bitmap is empty, ImageStorage is set to NULL.
157 void Init(const gfx::ImageSkiaRep& image_rep);
158
159 SkBitmap& GetBitmap() const;
160
161 // Checks if the current thread can read/modify the ImageSkia.
162 bool CanRead() const;
163 bool CanModify() const;
164
165 // Detach the storage from the currently assinged thread
166 // so that other thread can access the storage.
167 void DetachStorageFromThread();
168
169 // A refptr so that ImageRepSkia can be copied cheaply.
170 scoped_refptr<internal::ImageSkiaStorage> storage_;
171 };
172
173 } // namespace gfx
174
175 #endif // UI_GFX_IMAGE_IMAGE_SKIA_H_
OLDNEW
« no previous file with comments | « ui/gfx/image/image_png_rep.cc ('k') | ui/gfx/image/image_skia.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698