1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_THEMES_THEME_HELPER_H_
#define CHROME_BROWSER_THEMES_THEME_HELPER_H_
#include <optional>
#include "base/sequence_checker.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/resource/resource_scale_factor.h"
#include "ui/base/theme_provider.h"
class CustomThemeSupplier;
namespace theme_service_internal {
class ThemeServiceTest;
}
namespace gfx {
class ImageSkia;
class Image;
} // namespace gfx
namespace color_utils {
struct HSL;
}
// Helper functions for ThemeService as part of implementing the
// ui::ThemeProvider interface with respect to a given CustomThemeSupplier and
// incognito state.
class ThemeHelper {
public:
// The default theme if we haven't installed a theme yet or if we've clicked
// the "Use Classic" button.
static const char kDefaultThemeID[];
// Whether |theme_supplier| is installed through extensions.
// |UsingExtensionTheme| and |UsingDefaultTheme| are not mutually exclusive as
// default theme can be installed through extensions.
static bool IsExtensionTheme(const CustomThemeSupplier* theme_supplier);
// Whether we are using an autogenerated theme.
static bool IsAutogeneratedTheme(const CustomThemeSupplier* theme_supplier);
// Whether |theme_supplier| is a default theme.
static bool IsDefaultTheme(const CustomThemeSupplier* theme_supplier);
// Whether |theme_supplier| is what users would think of as a "custom theme"
// (that is, an extension or autogenerated theme).
static bool IsCustomTheme(const CustomThemeSupplier* theme_supplier);
static bool HasCustomImage(int id, const CustomThemeSupplier* theme_supplier);
ThemeHelper();
virtual ~ThemeHelper();
ThemeHelper(const ThemeHelper&) = delete;
ThemeHelper& operator=(const ThemeHelper&) = delete;
// Gets the effective value of a themeable display property, either from the
// `theme_supplier` if available or the default.
int GetDisplayProperty(int id,
const CustomThemeSupplier* theme_supplier) const;
base::RefCountedMemory* GetRawData(
int id,
const CustomThemeSupplier* theme_supplier,
ui::ResourceScaleFactor scale_factor) const;
// Get the specified tint - |id| is one of the TINT_* enum values.
color_utils::HSL GetTint(int id,
bool incognito,
const CustomThemeSupplier* theme_supplier) const;
// These methods provide the implementation for ui::ThemeProvider (exposed
// via BrowserThemeProvider).
gfx::ImageSkia* GetImageSkiaNamed(
int id,
bool incognito,
const CustomThemeSupplier* theme_supplier) const;
// Implementation for ui::ThemeProvider.
virtual bool ShouldUseNativeFrame(
const CustomThemeSupplier* theme_supplier) const;
void DCheckCalledOnValidSequence() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
// Gets the default value of a themeable display property.
virtual int GetDefaultDisplayProperty(int id) const;
private:
friend class theme_service_internal::ThemeServiceTest;
// Whether dark default colors/tints should be used, if available.
static bool UseDarkModeColors(const CustomThemeSupplier* theme_supplier);
// Returns a cross platform image for an id.
gfx::Image GetImageNamed(int id,
bool incognito,
const CustomThemeSupplier* theme_supplier) const;
SEQUENCE_CHECKER(sequence_checker_);
};
#endif // CHROME_BROWSER_THEMES_THEME_HELPER_H_
|