#include "config.h"
#include "RenderBR.h"
#include "Document.h"
#include "InlineTextBox.h"
#include "VisiblePosition.h"
namespace WebCore {
RenderBR::RenderBR(Node* node)
: RenderText(node, StringImpl::create("\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.isNegative()) {
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* newStyle)
{
RenderText::setStyle(newStyle);
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 , int )
{
return VisiblePosition(element(), 0, DOWNSTREAM);
}
InlineBox* RenderBR::inlineBox(int , EAffinity )
{
return firstTextBox();
}
}