// 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_SKIA_SKIA_TEXT_METRICS_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_SKIA_SKIA_TEXT_METRICS_H_

#include "third_party/blink/renderer/platform/fonts/glyph.h"

#include <hb.h>
#include "third_party/blink/renderer/platform/wtf/vector.h"
#include "third_party/skia/include/core/SkRect.h"

class SkFont;

namespace blink {

void SkFontGetGlyphWidthForHarfBuzz(const SkFont&,
                                    hb_codepoint_t,
                                    hb_position_t* width);
void SkFontGetGlyphWidthForHarfBuzz(const SkFont&,
                                    unsigned count,
                                    const hb_codepoint_t* first_glyph,
                                    unsigned glyph_stride,
                                    hb_position_t* first_advance,
                                    unsigned advance_stride);
void SkFontGetGlyphExtentsForHarfBuzz(const SkFont&,
                                      hb_codepoint_t,
                                      hb_glyph_extents_t*);

void SkFontGetBoundsForGlyph(const SkFont&, Glyph, SkRect* bounds);
void SkFontGetBoundsForGlyphs(const SkFont&,
                              const Vector<Glyph, 256>&,
                              SkRect*);
float SkFontGetWidthForGlyph(const SkFont&, Glyph);

hb_position_t SkiaScalarToHarfBuzzPosition(SkScalar value);

}  // namespace blink

#endif
