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..ac74903d74a1daa6be35afdcde0c501e1d344b99 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/extension_icon_image.h |
| @@ -0,0 +1,90 @@ |
| +// 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; |
|
Aaron Boodman
2012/08/02 17:50:56
Can the delegate be defined as a nested class inst
tbarzic
2012/08/02 20:12:52
Done.
|
| + |
| +// 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. ExtensionIconImage |
| +// should be outlived by the 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, |
|
Aaron Boodman
2012/08/02 17:50:56
Please put this in the extensions namespace and re
tbarzic
2012/08/02 20:12:52
Done.
|
| + public content::NotificationObserver { |
| + public: |
| + ExtensionIconImage(const extensions::Extension* extension, |
| + const ExtensionIconSet& icon_set, |
| + 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(); |
| + |
| + // True if no images can be loaded. This does not imply any images have |
|
Aaron Boodman
2012/08/02 17:50:56
The second sentence of this comment makes no sense
tbarzic
2012/08/02 20:12:52
Yeah, it made (slightly) more sense when the metho
|
| + // actually been loaded. |
| + bool IsNull() const { return image_skia_.isNull(); } |
| + |
| + const gfx::ImageSkia& image_skia() const { return image_skia_; } |
| + |
| + private: |
| + class Source; |
| + typedef std::map<int, ui::ScaleFactor> LoadMap; |
| + |
| + // 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 ExtensionIconSet& icon_set_; |
| + 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_ |