// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This holds internal declarations for the machinery of gfx::Image. These are // only for the internal use of gfx::Image; do not use them elsewhere. #ifndef UI_GFX_IMAGE_IMAGE_INTERNAL_H_ #define UI_GFX_IMAGE_IMAGE_INTERNAL_H_ #include <map> #include <memory> #include "base/memory/ref_counted.h" #include "build/build_config.h" #include "ui/gfx/image/image.h" #if BUILDFLAG(IS_MAC) #include <CoreGraphics/CoreGraphics.h> #endif namespace gfx::internal { class ImageRepPNG; class ImageRepSkia; class ImageRepCocoa; class ImageRepCocoaTouch; // An ImageRep is the object that holds the backing memory for an Image. Each // RepresentationType has an ImageRep subclass that is responsible for freeing // the memory that the ImageRep holds. When an ImageRep is created, it expects // to take ownership of the image, without having to retain it or increase its // reference count. class ImageRep { … }; // The Storage class acts similarly to the pixels in a SkBitmap: the Image // class holds a refptr instance of Storage, which in turn holds all the // ImageReps. This way, the Image can be cheaply copied. // // This class is deliberately not RefCountedThreadSafe. Making it so does not // solve threading issues, as gfx::Image and its internal classes are // themselves not threadsafe. class ImageStorage : public base::RefCounted<ImageStorage> { … }; } // namespace gfx::internal #endif // UI_GFX_IMAGE_IMAGE_INTERNAL_H_