15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) Research In Motion Limited 2010-2012. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGTextMetrics_h
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGTextMetrics_h
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch#include "wtf/text/WTFString.h"
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderSVGInlineText;
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGTextLayoutAttributes;
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TextRun;
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGTextMetrics {
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum MetricsType {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SkippedSpaceMetrics
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SVGTextMetrics();
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SVGTextMetrics(MetricsType);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SVGTextMetrics(RenderSVGInlineText*, unsigned position, unsigned length, float width, const String& glyphName);
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static SVGTextMetrics measureCharacterRange(RenderSVGInlineText*, unsigned position, unsigned length);
42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    static TextRun constructTextRun(RenderSVGInlineText*, unsigned position, unsigned length);
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isEmpty() const { return !m_width && !m_height && !m_glyph.isValid && m_length == 1; }
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float width() const { return m_width; }
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setWidth(float width) { m_width = width; }
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float height() const { return m_height; }
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned length() const { return m_length; }
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    struct Glyph {
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Glyph()
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            : isValid(false)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool isValid;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String name;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String unicodeString;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Only useful when measuring individual characters, to lookup ligatures.
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Glyph& glyph() const { return m_glyph; }
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SVGTextMetrics(RenderSVGInlineText*, const TextRun&);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float m_width;
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float m_height;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_length;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Glyph m_glyph;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
78