1 // Copyright (c) 2013 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 CHROME_BROWSER_UI_LIBGTK2UI_NATIVE_THEME_GTK2_H_ 6 #define CHROME_BROWSER_UI_LIBGTK2UI_NATIVE_THEME_GTK2_H_ 7 8 #include <gtk/gtk.h> 9 10 #include "chrome/browser/ui/libgtk2ui/owned_widget_gtk2.h" 11 #include "ui/native_theme/native_theme_base.h" 12 13 typedef struct _GdkColor GdkColor; 14 15 namespace libgtk2ui { 16 17 // A version of NativeTheme that uses GTK2 supplied colours instead of the 18 // default aura colours. Analogue to NativeThemeWin, except that can't be 19 // compiled into the main chrome binary like the Windows code can. 20 class NativeThemeGtk2 : public ui::NativeThemeBase { 21 public: 22 static NativeThemeGtk2* instance(); 23 24 // Overridden from ui::NativeThemeBase: 25 virtual gfx::Size GetPartSize(Part part, 26 State state, 27 const ExtraParams& extra) const OVERRIDE; 28 virtual void Paint(SkCanvas* canvas, 29 Part part, 30 State state, 31 const gfx::Rect& rect, 32 const ExtraParams& extra) const OVERRIDE; 33 virtual SkColor GetSystemColor(ColorId color_id) const OVERRIDE; 34 virtual void PaintMenuPopupBackground( 35 SkCanvas* canvas, 36 const gfx::Size& size, 37 const MenuBackgroundExtraParams& menu_background) const OVERRIDE; 38 virtual void PaintMenuItemBackground( 39 SkCanvas* canvas, 40 State state, 41 const gfx::Rect& rect, 42 const MenuListExtraParams& menu_list) const OVERRIDE; 43 44 private: 45 NativeThemeGtk2(); 46 virtual ~NativeThemeGtk2(); 47 48 // Implementation of GetSystemColor. 49 GdkColor GetSystemGdkColor(ColorId color_id) const; 50 51 // Returns styles associated with various widget types. 52 GtkWidget* GetRealizedWindow() const; 53 GtkStyle* GetWindowStyle() const; 54 GtkStyle* GetEntryStyle() const; 55 GtkStyle* GetLabelStyle() const; 56 GtkStyle* GetButtonStyle() const; 57 GtkStyle* GetTreeStyle() const; 58 GtkStyle* GetTooltipStyle() const; 59 GtkStyle* GetMenuStyle() const; 60 GtkStyle* GetMenuItemStyle() const; 61 62 void PaintComboboxArrow(SkCanvas* canvas, 63 GtkStateType state, 64 const gfx::Rect& rect) const; 65 66 mutable GtkWidget* fake_window_; 67 mutable GtkWidget* fake_tooltip_; 68 mutable OwnedWidgetGtk fake_entry_; 69 mutable OwnedWidgetGtk fake_label_; 70 mutable OwnedWidgetGtk fake_button_; 71 mutable OwnedWidgetGtk fake_tree_; 72 73 mutable OwnedWidgetGtk fake_menu_; 74 mutable GtkWidget* fake_menu_item_; 75 76 DISALLOW_COPY_AND_ASSIGN(NativeThemeGtk2); 77 }; 78 79 } // namespace libgtk2ui 80 81 #endif // CHROME_BROWSER_UI_LIBGTK2UI_NATIVE_THEME_GTK2_H_ 82