This source file includes following definitions.
- m_desiredTextLength
- calculateLength
- calculateTextAnchorShift
#include "config.h"
#include "core/rendering/svg/SVGTextChunk.h"
#include "core/rendering/svg/SVGInlineTextBox.h"
#include "core/rendering/svg/SVGTextFragment.h"
namespace WebCore {
SVGTextChunk::SVGTextChunk(unsigned chunkStyle, float desiredTextLength)
: m_chunkStyle(chunkStyle)
, m_desiredTextLength(desiredTextLength)
{
}
void SVGTextChunk::calculateLength(float& length, unsigned& characters) const
{
SVGTextFragment* lastFragment = 0;
unsigned boxCount = m_boxes.size();
for (unsigned boxPosition = 0; boxPosition < boxCount; ++boxPosition) {
SVGInlineTextBox* textBox = m_boxes.at(boxPosition);
Vector<SVGTextFragment>& fragments = textBox->textFragments();
unsigned size = fragments.size();
if (!size)
continue;
for (unsigned i = 0; i < size; ++i) {
SVGTextFragment& fragment = fragments.at(i);
characters += fragment.length;
if (m_chunkStyle & VerticalText)
length += fragment.height;
else
length += fragment.width;
if (!lastFragment) {
lastFragment = &fragment;
continue;
}
if (m_chunkStyle & VerticalText)
length += fragment.y - (lastFragment->y + lastFragment->height);
else
length += fragment.x - (lastFragment->x + lastFragment->width);
lastFragment = &fragment;
}
}
}
float SVGTextChunk::calculateTextAnchorShift(float length) const
{
if (m_chunkStyle & MiddleAnchor)
return -length / 2;
if (m_chunkStyle & EndAnchor)
return m_chunkStyle & RightToLeftText ? 0 : -length;
return m_chunkStyle & RightToLeftText ? -length : 0;
}
}