blob: 166173f48b51cc38a608e4250f7d314167e6a62e [file] [log] [blame]
/*
* Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
* Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
* Copyright (C) 2006 Zack Rusin <zack@kde.org>
* Copyright (C) 2006 George Staikos <staikos@kde.org>
* Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "ScrollView.h"
#include "FloatRect.h"
#include "IntPoint.h"
#include "FrameQt.h"
#include "ScrollViewCanvasQt.h"
#include <QScrollBar>
#include <QScrollArea>
#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d\n", __FILE__, __LINE__); } while(0)
namespace WebCore {
ScrollView::ScrollView()
: m_area(new QScrollArea(0))
{
qDebug("ScrollView::ScrollView()");
}
ScrollView::~ScrollView()
{
qDebug("ScrollView::~ScrollView()");
}
void ScrollView::setParentWidget(QWidget* parent)
{
qDebug("ScrollView::setParentWidget(), parent=%p", parent);
Widget::setParentWidget(parent);
// 'isFrameView()' can not be called yet in the constructor!
if (isFrameView()) {
ScrollViewCanvasQt* canvas = new ScrollViewCanvasQt(this, m_area);
setQWidget(m_area);
m_area->setWidget(canvas);
}
}
void ScrollView::updateContents(const IntRect& updateRect, bool now)
{
if (m_area->widget())
m_area->widget()->update(updateRect);
}
int ScrollView::visibleWidth() const
{
return m_area->maximumViewportSize().width();
}
int ScrollView::visibleHeight() const
{
return m_area->maximumViewportSize().height();
}
FloatRect ScrollView::visibleContentRect() const
{
const QSize s(m_area->maximumViewportSize());
return FloatRect(m_area->horizontalScrollBar()->value(),
m_area->verticalScrollBar()->value(),
s.width(), s.height());
}
void ScrollView::setContentsPos(int newX, int newY)
{
m_area->horizontalScrollBar()->setValue(newX);
m_area->verticalScrollBar()->setValue(newY);
}
void ScrollView::resizeContents(int w, int h)
{
if (m_area->widget())
m_area->widget()->resize(w, h);
}
int ScrollView::contentsX() const
{
return m_area->horizontalScrollBar()->value();
}
int ScrollView::contentsY() const
{
return m_area->verticalScrollBar()->value();
}
int ScrollView::contentsWidth() const
{
if (!m_area->widget())
return 0;
return m_area->widget()->width();
}
int ScrollView::contentsHeight() const
{
if (!m_area->widget())
return 0;
return m_area->widget()->height();
}
IntPoint ScrollView::viewportToContents(const IntPoint& viewportPoint)
{
// Qt already handles this in the coordinates we get from the mouse events...
return viewportPoint;
}
IntPoint ScrollView::contentsToViewport(const IntPoint& contentsPoint)
{
// Qt already handles this in the coordinates we get from the mouse events...
return contentsPoint;
}
IntSize ScrollView::scrollOffset() const
{
return IntSize(m_area->horizontalScrollBar()->value(), m_area->verticalScrollBar()->value());
}
void ScrollView::scrollBy(int dx, int dy)
{
m_area->horizontalScrollBar()->setValue(m_area->horizontalScrollBar()->value() + dx);
m_area->verticalScrollBar()->setValue(m_area->verticalScrollBar()->value() + dy);
}
ScrollBarMode ScrollView::hScrollBarMode() const
{
switch (m_area->horizontalScrollBarPolicy())
{
case Qt::ScrollBarAsNeeded:
return ScrollBarAuto;
case Qt::ScrollBarAlwaysOff:
return ScrollBarAlwaysOff;
case Qt::ScrollBarAlwaysOn:
return ScrollBarAlwaysOn;
}
return ScrollBarAuto;
}
ScrollBarMode ScrollView::vScrollBarMode() const
{
switch (m_area->verticalScrollBarPolicy())
{
case Qt::ScrollBarAsNeeded:
return ScrollBarAuto;
case Qt::ScrollBarAlwaysOff:
return ScrollBarAlwaysOff;
case Qt::ScrollBarAlwaysOn:
return ScrollBarAlwaysOn;
}
return ScrollBarAuto;
}
void ScrollView::suppressScrollBars(bool suppressed, bool repaintOnSuppress)
{
notImplemented();
}
void ScrollView::setHScrollBarMode(ScrollBarMode newMode)
{
switch (newMode)
{
case ScrollBarAuto:
m_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
case ScrollBarAlwaysOff:
m_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
case ScrollBarAlwaysOn:
m_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}
}
void ScrollView::setVScrollBarMode(ScrollBarMode newMode)
{
switch (newMode)
{
case ScrollBarAuto:
m_area->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
case ScrollBarAlwaysOff:
m_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
case ScrollBarAlwaysOn:
m_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}
}
void ScrollView::setScrollBarsMode(ScrollBarMode newMode)
{
setHScrollBarMode(newMode);
setVScrollBarMode(newMode);
}
void ScrollView::setStaticBackground(bool flag)
{
notImplemented();
}
void ScrollView::addChild(Widget* child, int x, int y)
{
qDebug("ScrollView::addChild(), child=%p, x=%i, y=%i", child, x, y);
Q_ASSERT(child != 0);
Q_ASSERT(m_area && m_area->widget());
child->setParentWidget(m_area->widget());
}
void ScrollView::removeChild(Widget*)
{
notImplemented();
}
void ScrollView::scrollPointRecursively(int x, int y)
{
notImplemented();
}
bool ScrollView::inWindow() const
{
return true;
}
}
// vim: ts=4 sw=4 et