native_theme_gtk.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2016 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. #ifndef UI_GTK_NATIVE_THEME_GTK_H_
  5. #define UI_GTK_NATIVE_THEME_GTK_H_
  6. #include "base/callback_list.h"
  7. #include "base/no_destructor.h"
  8. #include "third_party/abseil-cpp/absl/types/optional.h"
  9. #include "ui/base/glib/glib_signal.h"
  10. #include "ui/base/glib/scoped_gobject.h"
  11. #include "ui/native_theme/native_theme_base.h"
  12. typedef struct _GtkCssProvider GtkCssProvider;
  13. typedef struct _GtkParamSpec GtkParamSpec;
  14. typedef struct _GtkSettings GtkSettings;
  15. namespace gtk {
  16. using ScopedCssProvider = ScopedGObject<GtkCssProvider>;
  17. // A version of NativeTheme that uses GTK-rendered widgets.
  18. class NativeThemeGtk : public ui::NativeThemeBase {
  19. public:
  20. static NativeThemeGtk* instance();
  21. NativeThemeGtk(const NativeThemeGtk&) = delete;
  22. NativeThemeGtk& operator=(const NativeThemeGtk&) = delete;
  23. // ui::NativeThemeBase:
  24. void PaintMenuPopupBackground(
  25. cc::PaintCanvas* canvas,
  26. const ui::ColorProvider* color_provider,
  27. const gfx::Size& size,
  28. const MenuBackgroundExtraParams& menu_background,
  29. ColorScheme color_scheme) const override;
  30. void PaintMenuSeparator(
  31. cc::PaintCanvas* canvas,
  32. const ui::ColorProvider* color_provider,
  33. State state,
  34. const gfx::Rect& rect,
  35. const MenuSeparatorExtraParams& menu_separator) const override;
  36. void PaintMenuItemBackground(cc::PaintCanvas* canvas,
  37. const ui::ColorProvider* color_provider,
  38. State state,
  39. const gfx::Rect& rect,
  40. const MenuItemExtraParams& menu_item,
  41. ColorScheme color_scheme) const override;
  42. void PaintFrameTopArea(cc::PaintCanvas* canvas,
  43. State state,
  44. const gfx::Rect& rect,
  45. const FrameTopAreaExtraParams& frame_top_area,
  46. ColorScheme color_scheme) const override;
  47. void NotifyOnNativeThemeUpdated() override;
  48. void OnThemeChanged(GtkSettings* settings, GtkParamSpec* param);
  49. private:
  50. friend class base::NoDestructor<NativeThemeGtk>;
  51. NativeThemeGtk();
  52. ~NativeThemeGtk() override;
  53. void SetThemeCssOverride(ScopedCssProvider provider);
  54. ScopedCssProvider theme_css_override_;
  55. };
  56. } // namespace gtk
  57. #endif // UI_GTK_NATIVE_THEME_GTK_H_