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_BASE_THEME_PROVIDER_H_ 6 #define UI_BASE_THEME_PROVIDER_H_ 7 8 #include "base/basictypes.h" 9 #include "third_party/skia/include/core/SkColor.h" 10 #include "ui/base/layout.h" 11 #include "ui/base/ui_export.h" 12 13 #if defined(OS_MACOSX) 14 #ifdef __OBJC__ 15 @class NSColor; 16 @class NSGradient; 17 @class NSImage; 18 #else 19 class NSColor; 20 class NSGradient; 21 class NSImage; 22 #endif // __OBJC__ 23 #elif !defined(OS_WIN) 24 typedef struct _GdkColor GdkColor; 25 typedef struct _GdkPixbuf GdkPixbuf; 26 #endif // OS_* 27 28 class SkBitmap; 29 30 namespace base { 31 class RefCountedMemory; 32 } 33 34 namespace gfx { 35 class ImageSkia; 36 } 37 38 namespace ui { 39 40 //////////////////////////////////////////////////////////////////////////////// 41 // 42 // ThemeProvider 43 // 44 // ThemeProvider is an abstract class that defines the API that should be 45 // implemented to provide bitmaps and color information for a given theme. 46 // 47 //////////////////////////////////////////////////////////////////////////////// 48 49 class UI_EXPORT ThemeProvider { 50 public: 51 virtual ~ThemeProvider(); 52 53 // Get the image specified by |id|. An implementation of ThemeProvider should 54 // have its own source of ids (e.g. an enum, or external resource bundle). 55 virtual gfx::ImageSkia* GetImageSkiaNamed(int id) const = 0; 56 57 // Get the color specified by |id|. 58 virtual SkColor GetColor(int id) const = 0; 59 60 // Get the property (e.g. an alignment expressed in an enum, or a width or 61 // height) specified by |id|. 62 virtual int GetDisplayProperty(int id) const = 0; 63 64 // Whether we should use the native system frame (typically Aero glass) or 65 // a custom frame. 66 virtual bool ShouldUseNativeFrame() const = 0; 67 68 // Whether or not we have a certain image. Used for when the default theme 69 // doesn't provide a certain image, but custom themes might (badges, etc). 70 virtual bool HasCustomImage(int id) const = 0; 71 72 // Reads the image data from the theme file into the specified vector. Only 73 // valid for un-themed resources and the themed IDR_THEME_NTP_* in most 74 // implementations of ThemeProvider. Returns NULL on error. 75 virtual base::RefCountedMemory* GetRawData( 76 int id, 77 ui::ScaleFactor scale_factor) const = 0; 78 79 #if defined(OS_MACOSX) && !defined(TOOLKIT_VIEWS) 80 // Gets the NSImage with the specified |id|. 81 virtual NSImage* GetNSImageNamed(int id) const = 0; 82 83 // Gets the NSImage that GetNSImageNamed (above) would return, but returns it 84 // as a pattern color. 85 virtual NSColor* GetNSImageColorNamed(int id) const = 0; 86 87 // Gets the NSColor with the specified |id|. 88 virtual NSColor* GetNSColor(int id) const = 0; 89 90 // Gets the NSColor for tinting with the specified |id|. 91 virtual NSColor* GetNSColorTint(int id) const = 0; 92 93 // Gets the NSGradient with the specified |id|. 94 virtual NSGradient* GetNSGradient(int id) const = 0; 95 #elif defined(OS_POSIX) && !defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID) 96 // Gets the GdkPixbuf with the specified |id|. Returns a pointer to a shared 97 // instance of the GdkPixbuf. This shared GdkPixbuf is owned by the theme 98 // provider and should not be freed. 99 // 100 // The bitmap is assumed to exist. This function will log in release, and 101 // assert in debug mode if it does not. On failure, this will return a 102 // pointer to a shared empty placeholder bitmap so it will be visible what 103 // is missing. 104 105 // As above, but flips it in RTL locales. 106 virtual GdkPixbuf* GetRTLEnabledPixbufNamed(int id) const = 0; 107 #endif 108 }; 109 110 } // namespace ui 111 112 #endif // UI_BASE_THEME_PROVIDER_H_ 113