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

Side by Side Diff: gfx/scoped_image.h

Issue 6246027: Move src/gfx/ to src/ui/gfx... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « gfx/scoped_cg_context_state_mac.h ('k') | gfx/scoped_image_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GFX_SCOPED_IMAGE_H_ 5 #ifndef GFX_SCOPED_IMAGE_H_
6 #define GFX_SCOPED_IMAGE_H_ 6 #define GFX_SCOPED_IMAGE_H_
7 #pragma once 7 #pragma once
8 8
9 #include "base/basictypes.h" 9 #include "ui/gfx/scoped_image.h"
10 #include "build/build_config.h" 10 // TODO(sail): remove this file once all includes have been updated.
11 #include "gfx/native_widget_types.h"
12 #include "third_party/skia/include/core/SkBitmap.h"
13
14 #if defined(OS_LINUX)
15 #include <glib-object.h>
16 #elif defined(OS_MACOSX)
17 #include "base/mac/mac_util.h"
18 #endif
19
20 namespace gfx {
21
22 namespace internal {
23
24 // ScopedImage is class that encapsulates one of the three platform-specific
25 // images used: SkBitmap, NSImage, and GdkPixbuf. This is the abstract interface
26 // that all ScopedImages respond to. This wrapper expects to own the image it
27 // holds, unless it is Release()ed or Free()ed.
28 //
29 // This class is abstract and callers should use the specialized versions below,
30 // which are not in the internal namespace.
31 template <class ImageType>
32 class ScopedImage {
33 public:
34 virtual ~ScopedImage() {}
35
36 // Frees the actual image that this boxes.
37 virtual void Free() = 0;
38
39 // Returns the image that this boxes.
40 ImageType* Get() {
41 return image_;
42 }
43
44 // Frees the current image and sets a new one.
45 void Set(ImageType* new_image) {
46 Free();
47 image_ = new_image;
48 }
49
50 // Returns the image this boxes and relinquishes ownership.
51 ImageType* Release() {
52 ImageType* tmp = image_;
53 image_ = NULL;
54 return tmp;
55 }
56
57 protected:
58 explicit ScopedImage(ImageType* image) : image_(image) {}
59 ImageType* image_;
60
61 private:
62 DISALLOW_COPY_AND_ASSIGN(ScopedImage);
63 };
64
65 } // namespace internal
66
67 // Generic template.
68 template <class ImageType = gfx::NativeImageType>
69 class ScopedImage : public gfx::internal::ScopedImage<ImageType> {
70 public:
71 explicit ScopedImage(gfx::NativeImage image)
72 : gfx::internal::ScopedImage<ImageType>(image) {}
73
74 private:
75 DISALLOW_COPY_AND_ASSIGN(ScopedImage<ImageType>);
76 };
77
78 // Specialization for SkBitmap on all platforms.
79 template <>
80 class ScopedImage<SkBitmap> : public gfx::internal::ScopedImage<SkBitmap> {
81 public:
82 explicit ScopedImage(SkBitmap* image)
83 : gfx::internal::ScopedImage<SkBitmap>(image) {}
84 virtual ~ScopedImage() {
85 Free();
86 }
87
88 virtual void Free() {
89 delete image_;
90 image_ = NULL;
91 }
92
93 private:
94 DISALLOW_COPY_AND_ASSIGN(ScopedImage);
95 };
96
97 // Specialization for the NSImage type on Mac OS X.
98 #if defined(OS_MACOSX)
99 template <>
100 class ScopedImage<NSImage> : public gfx::internal::ScopedImage<NSImage> {
101 public:
102 explicit ScopedImage(NSImage* image)
103 : gfx::internal::ScopedImage<NSImage>(image) {}
104 virtual ~ScopedImage() {
105 Free();
106 }
107
108 virtual void Free() {
109 base::mac::NSObjectRelease(image_);
110 image_ = NULL;
111 }
112
113 private:
114 DISALLOW_COPY_AND_ASSIGN(ScopedImage);
115 };
116 #endif // defined(OS_MACOSX)
117
118 // Specialization for the GdkPixbuf type on Linux.
119 #if defined(OS_LINUX)
120 template <>
121 class ScopedImage<GdkPixbuf> : public gfx::internal::ScopedImage<GdkPixbuf> {
122 public:
123 explicit ScopedImage(GdkPixbuf* image)
124 : gfx::internal::ScopedImage<GdkPixbuf>(image) {}
125 virtual ~ScopedImage() {
126 Free();
127 }
128
129 virtual void Free() {
130 if (image_) {
131 g_object_unref(image_);
132 image_ = NULL;
133 }
134 }
135
136 private:
137 DISALLOW_COPY_AND_ASSIGN(ScopedImage);
138 };
139 #endif // defined(OS_LINUX)
140
141 // Typedef ScopedNativeImage to the default template argument. This allows for
142 // easy exchange between gfx::NativeImage and a gfx::ScopedNativeImage.
143 typedef ScopedImage<> ScopedNativeImage;
144
145 } // namespace gfx
146 11
147 #endif // GFX_SCOPED_IMAGE_H_ 12 #endif // GFX_SCOPED_IMAGE_H_
OLDNEW
« no previous file with comments | « gfx/scoped_cg_context_state_mac.h ('k') | gfx/scoped_image_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698