[go: nahoru, domu]

blob: 095e3d1c69a43fb20926022ec0b116dbe3e4f2ad [file] [log] [blame]
// 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_