#include "render_br.h"
#include "dom_position.h"
#include "render_block.h"
#include "render_line.h"
using namespace khtml;
using DOM::Position;
RenderBR::RenderBR(DOM::NodeImpl* node)
: RenderText(node, new DOM::DOMStringImpl(QChar('\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->fontMetrics().lineSpacing();
}
if (lh.isPercent())
return lh.minWidth(s->font().pixelSize());
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;
}
long RenderBR::caretMinOffset() const
{
return 0;
}
long RenderBR::caretMaxOffset() const
{
return 1;
}
unsigned long RenderBR::caretMaxRenderedOffset() const
{
return 1;
}
VisiblePosition RenderBR::positionForCoordinates(int _x, int _y)
{
return VisiblePosition(element(), 0, DOWNSTREAM);
}
QRect RenderBR::caretRect(int offset, EAffinity affinity, int *extraWidthToEndOfLine)
{
int absx, absy;
absolutePosition(absx,absy);
if (extraWidthToEndOfLine)
*extraWidthToEndOfLine = containingBlockWidth() - xPos();
return QRect(xPos() + absx, yPos() + absy, 1, lineHeight(false));
}
InlineBox *RenderBR::inlineBox(long offset, EAffinity affinity)
{
return firstTextBox();
}