// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_COLOR_COLOR_PROVIDER_H_
#define UI_COLOR_COLOR_PROVIDER_H_

#include <forward_list>
#include <map>

#include "ui/color/color_buildflags.h"

#if BUILDFLAG(USE_COLOR_PIPELINE)
#include "base/component_export.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/color/color_id.h"
#include "ui/color/color_mixer.h"
#else
#include "ui/base/theme_provider.h"  // nogncheck
#endif

namespace ui {

#if BUILDFLAG(USE_COLOR_PIPELINE)

// A ColorProvider holds the complete pipeline of ColorMixers that compute
// result colors for UI elements.  ColorProvider is meant to be a long-lived
// object whose internal list of mixers does not change after initial
// construction.  Separate ColorProviders should be instantiated for e.g.
// windows with different themes.
// TODO(pkasting): Figure out ownership model and lifetime.
class COMPONENT_EXPORT(COLOR) ColorProvider {
 public:
  ColorProvider();
  // There should be no reason to copy or move a ColorProvider.
  ColorProvider(const ColorProvider&) = delete;
  ColorProvider& operator=(const ColorProvider&) = delete;
  ~ColorProvider();

  // Adds a mixer to the end of the current color pipeline.  Returns a reference
  // to the added mixer so callers can subsequently add sets and/or recipes.
  ColorMixer& AddMixer();

  // Returns the result color for |id| by applying the effects of each mixer in
  // order.  Returns gfx::kPlaceholderColor if no mixer knows how to construct
  // |id|.
  SkColor GetColor(ColorId id) const;

 private:
  // The entire color pipeline, in reverse order (that is, the "last" mixer is
  // at the front).
  std::forward_list<ColorMixer> mixers_;

  // Caches the results of calls to GetColor().  This is invalidated by
  // AddMixer().  Uses a std::map rather than a base::flat_map since it has
  // frequent inserts and could grow very large.
  mutable std::map<ColorId, SkColor> cache_;
};

#else

using ColorProvider = ThemeProvider;

#endif  // !BUILDFLAG(USE_COLOR_PIPELINE)

}  // namespace ui

#endif  // UI_COLOR_COLOR_PROVIDER_H_
