// Copyright 2016 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_GFX_DECORATED_TEXT_H_
#define UI_GFX_DECORATED_TEXT_H_

#include <vector>

#include "base/strings/string16.h"
#include "ui/gfx/font.h"
#include "ui/gfx/gfx_export.h"
#include "ui/gfx/range/range.h"

namespace gfx {

// Encapsulates styling information for some given text.
struct GFX_EXPORT DecoratedText {
  // Describes the various text decoration attributes applicable to a given
  // range of text.
  struct GFX_EXPORT RangedAttribute {
    // Disallow default construction of Font, since that's slow.
    RangedAttribute() = delete;
    RangedAttribute(const Range& range, const Font& font);

    // The range in |text|, this RangedAttribute corresponds to. Should not be
    // reversed and should lie within the bounds of |text|.
    Range range;
    Font font;
    bool strike;
  };

  DecoratedText();
  ~DecoratedText();

  base::string16 text;

  // Vector of RangedAttribute describing styling of non-overlapping ranges
  // in |text|.
  std::vector<RangedAttribute> attributes;
};

};  // namespace gfx

#endif  // UI_GFX_DECORATED_TEXT_H_
