#include "config.h"
#include "RenderBR.h"
#include "Document.h"
#include "InlineTextBox.h"
#include "VisiblePosition.h"
namespace WebCore {
RenderBR::RenderBR(Node* node)
: RenderText(node, new StringImpl("\n")), m_lineHeight(-1)
{
}
RenderBR::~RenderBR()
{
}
InlineBox* RenderBR::createInlineBox(bool makePlaceholder, bool isRootLineBox, bool isOnlyRun)
{
InlineTextBox* box = static_cast<InlineTextBox*>(RenderText::createInlineBox(makePlaceholder, isRootLineBox, isOnlyRun));
box->setIsText(isOnlyRun || document()->inStrictMode());
return box;
}
short RenderBR::baselinePosition( bool firstLine, bool isRootLineBox) const
{
if (firstTextBox() && !firstTextBox()->isText())
return 0;
return RenderText::baselinePosition(firstLine, isRootLineBox);
}
short RenderBR::lineHeight(bool firstLine, bool isRootLineBox) const
{
if (firstTextBox() && !firstTextBox()->isText())
return 0;
if (firstLine) {
RenderStyle* s = style(firstLine);
Length lh = s->lineHeight();
if (lh.value() < 0) {
if (s == style()) {
if (m_lineHeight == -1)
m_lineHeight = RenderObject::lineHeight(false);
return m_lineHeight;
}
return s->font().lineSpacing();
}
if (lh.isPercent())
return lh.calcMinValue(s->fontSize());
return lh.value();
}
if (m_lineHeight == -1)
m_lineHeight = RenderObject::lineHeight(false);
return m_lineHeight;
}
void RenderBR::setStyle(RenderStyle* _style)
{
RenderText::setStyle(_style);
m_lineHeight = -1;
}
int RenderBR::caretMinOffset() const
{
return 0;
}
int RenderBR::caretMaxOffset() const
{
return 1;
}
unsigned RenderBR::caretMaxRenderedOffset() const
{
return 1;
}
VisiblePosition RenderBR::positionForCoordinates(int _x, int _y)
{
return VisiblePosition(element(), 0, DOWNSTREAM);
}
InlineBox *RenderBR::inlineBox(int offset, EAffinity affinity)
{
return firstTextBox();
}
}