blob: 39cc16e8e17a066c07babb3bfc7482ce1e783ef3 [file] [log] [blame]
/**
* This file is part of the html renderer for KDE.
*
* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* $Id$
*/
#include "render_html.h"
#include "render_root.h"
#include <qpainter.h>
#include <qscrollview.h>
#include "khtmlview.h"
#include <kdebug.h>
using namespace khtml;
RenderHtml::RenderHtml()
: RenderFlow()
{
}
RenderHtml::~RenderHtml()
{
}
void RenderHtml::setStyle(RenderStyle *style)
{
RenderFlow::setStyle(style);
setSpecialObjects(true);
}
void RenderHtml::print(QPainter *p, int _x, int _y, int _w, int _h, int _tx, int _ty)
{
_tx += m_x;
_ty += m_y;
//kdDebug(0) << "html:print " << _tx << "/" << _ty << endl;
printObject(p, _x, _y, _w, _h, _tx, _ty);
}
void RenderHtml::printBoxDecorations(QPainter *p,int, int _y,
int, int _h, int _tx, int _ty)
{
//kdDebug( 6040 ) << renderName() << "::printDecorations()" << _tx << "/" << _ty << endl;
QColor c = style()->backgroundColor();
CachedImage *bg = style()->backgroundImage();
if( firstChild() ) {
if( !c.isValid() )
c = firstChild()->style()->backgroundColor();
if( !bg )
bg = firstChild()->style()->backgroundImage();
if( !c.isValid() && root()->view())
c = root()->view()->palette().normal().color(QColorGroup::Base);
}
int w = width();
int h = height();
// kdDebug(0) << "width = " << w <<endl;
int rw;
if (root()->view())
rw=root()->view()->contentsWidth();
else
rw=root()->width();
// kdDebug(0) << "rw = " << rw <<endl;
int bx = _tx - marginLeft();
int by = _ty - marginTop();
int bw = QMAX(w + marginLeft() + marginRight() + borderLeft() + borderRight(), rw);
int bh = QMAX(h + marginTop() + marginBottom() + borderTop() + borderBottom(), parent()->height());
// CSS2 14.2:
// " The background of the box generated by the root element covers the entire canvas."
// hence, print the background even in the margin areas (unlike for every other element!)
// I just love these little inconsistencies .. :-( (Dirk)
int my = QMAX(by,_y);
printBackground(p, c, bg, my, _h, bx, by, bw, bh);
if(style()->hasBorder())
printBorder( p, _tx, _ty, w, h, style() );
}
void RenderHtml::repaint()
{
RenderObject *cb = containingBlock();
if(cb != this)
cb->repaint();
}
void RenderHtml::layout()
{
RenderFlow::layout();
//kdDebug(0) << renderName() << " height = " << m_height << endl;
int lp = lowestPosition();
// margins of Html element can only be fixed, right?
int margins = style()->marginTop().isFixed() ? style()->marginTop().value : 0;
margins += style()->marginBottom().isFixed() ? style()->marginBottom().value : 0;
if( m_height + margins < lp )
m_height = lp - margins;
//kdDebug(0) << "docHeight = " << m_height << endl;
}
short RenderHtml::containingBlockWidth() const
{
if (root()->view())
return root()->view()->visibleWidth();
else
return RenderFlow::containingBlockWidth();
}