Chromium Code Reviews| Index: chrome/browser/extensions/extension_icon_image.h |
| diff --git a/chrome/browser/extensions/extension_icon_image.h b/chrome/browser/extensions/extension_icon_image.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cbaec3c82289e4fd6a73960d2d801919a1517068 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/extension_icon_image.h |
| @@ -0,0 +1,87 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_IMAGE_H_ |
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_IMAGE_H_ |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +#include "base/basictypes.h" |
| +#include "chrome/browser/extensions/image_loading_tracker.h" |
| +#include "chrome/common/extensions/extension_icon_set.h" |
| +#include "content/public/browser/notification_observer.h" |
| +#include "content/public/browser/notification_registrar.h" |
| +#include "ui/gfx/image/image_skia.h" |
| + |
| +namespace extensions { |
| +class Extension; |
| +} |
| + |
| +namespace gfx { |
| +class Size; |
| +} |
| + |
| +class ExtensionIconImageDelegate; |
| + |
| +// A class that provides an ImageSkia for UI code to use. It handles extension |
| +// icon resource loading, screen scale factor change etc. UI code that uses |
| +// extension icon should host this class and be its delegate. In painting code, |
| +// UI code paints with the ImageSkia provided by this class. If required |
| +// extension icon resource is not present, this class uses ImageLoadingTracker |
| +// to load it and call on its delegate interface when the resource is loaded. |
| +class ExtensionIconImage : public ImageLoadingTracker::Observer, |
| + public content::NotificationObserver { |
| + public: |
| + ExtensionIconImage(const extensions::Extension* extension, |
|
Aaron Boodman
2012/07/20 22:12:39
It would be useful to make this slightly more abst
xiyuan
2012/07/20 22:43:16
Done.
|
| + int resource_size_in_dip, |
| + ExtensionIconSet::MatchType resource_match_type, |
| + const gfx::Size& desired_size_in_dip, |
| + ImageLoadingTracker::CacheParam cache_param, |
| + ExtensionIconImageDelegate* delegate); |
| + virtual ~ExtensionIconImage(); |
| + |
| + bool IsEmpty() const { return image_skia_.empty(); } |
| + |
| + const gfx::ImageSkia& image_skia() const { return image_skia_; } |
|
Aaron Boodman
2012/07/20 22:12:39
Can ExtensionIconImage inherit ImageSkia rather th
xiyuan
2012/07/20 22:43:16
ImageSkia is copyable and deriving from it seems n
|
| + |
| + private: |
| + class Source; |
| + typedef std::map<int, ui::ScaleFactor> LoadMap; |
| + |
| + void Init(); |
| + |
| + // Loads bitmap for additional scale factor. |
| + void LoadImageForScaleFactor(ui::ScaleFactor scale_factor); |
| + |
| + // ImageLoadingTracker::Observer overrides: |
| + virtual void OnImageLoaded(const gfx::Image& image, |
| + const std::string& extension_id, |
| + int index) OVERRIDE; |
| + |
| + // content::NotificationObserver overrides: |
| + virtual void Observe(int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) OVERRIDE; |
| + |
| + const extensions::Extension* extension_; |
| + const int resource_size_in_dip_; |
| + const ExtensionIconSet::MatchType resource_match_type_; |
| + const gfx::Size desired_size_in_dip_; |
| + const ImageLoadingTracker::CacheParam cache_param_; |
| + |
| + ExtensionIconImageDelegate* delegate_; |
| + |
| + Source* source_; // Owned by ImageSkia storage. |
| + gfx::ImageSkia image_skia_; |
| + |
| + ImageLoadingTracker tracker_; |
| + content::NotificationRegistrar registrar_; |
| + |
| + LoadMap load_map_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionIconImage); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_IMAGE_H_ |