// Copyright 2017 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 THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_MARKERS_STYLEABLE_MARKER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_MARKERS_STYLEABLE_MARKER_H_

#include "third_party/blink/renderer/core/editing/markers/document_marker.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
#include "ui/base/ime/mojom/ime_types.mojom-blink.h"

namespace blink {

// An abstract subclass of DocumentMarker to be subclassed by DocumentMarkers
// that should be renderable with customizable formatting.
class CORE_EXPORT StyleableMarker : public DocumentMarker {
 public:
  StyleableMarker(unsigned start_offset,
                  unsigned end_offset,
                  Color underline_color,
                  ui::mojom::ImeTextSpanThickness,
                  ui::mojom::ImeTextSpanUnderlineStyle,
                  Color text_color,
                  Color background_color);

  // StyleableMarker-specific
  Color UnderlineColor() const;
  bool HasThicknessNone() const;
  bool HasThicknessThin() const;
  bool HasThicknessThick() const;
  ui::mojom::ImeTextSpanUnderlineStyle UnderlineStyle() const;
  bool UseTextColor() const;
  Color BackgroundColor() const;
  Color TextColor() const;

 private:
  const Color underline_color_;
  const Color background_color_;
  const ui::mojom::ImeTextSpanThickness thickness_;
  const ui::mojom::ImeTextSpanUnderlineStyle underline_style_;
  const Color text_color_;

  DISALLOW_COPY_AND_ASSIGN(StyleableMarker);
};

bool CORE_EXPORT IsStyleableMarker(const DocumentMarker&);

template <>
struct DowncastTraits<StyleableMarker> {
  static bool AllowFrom(const DocumentMarker& marker) {
    return IsStyleableMarker(marker);
  }
};

}  // namespace blink

#endif
