[Webkit-unassigned] [Bug 34267] [Qt] Support kinetic scrolling on Maemo 5
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Thu Jan 28 08:22:39 PST 2010
https://bugs.webkit.org/show_bug.cgi?id=34267
Kenneth Rohde Christiansen <kenneth at webkit.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #47620|review?, commit-queue? |review-, commit-queue-
Flag| |
--- Comment #2 from Kenneth Rohde Christiansen <kenneth at webkit.org> 2010-01-28 08:22:39 PST ---
(From update of attachment 47620)
> diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp
> index 9ef2e55..4eeb8ad 100644
> --- a/WebKit/qt/Api/qwebview.cpp
> +++ b/WebKit/qt/Api/qwebview.cpp
> @@ -58,6 +58,107 @@ void QWebViewPrivate::_q_pageDestroyed()
> view->setPage(0);
> }
>
> +#ifdef Q_WS_MAEMO_5
> +#include "qabstractkineticscroller.h"
> +
> +class QWebViewKineticScroller : public QAbstractKineticScroller {
> +public:
> + QWebViewKineticScroller()
> + : QAbstractKineticScroller()
> + {}
I would put the above on one line, since we have no implementation anyway
> +
> + // remember the frame where the button was pressed
> + bool eventFilter(QObject *o, QEvent *e)
Almost all of qwebview.cpp uses ev and not e, please change
> + {
> + switch (e->type()) {
> + case QEvent::MouseButtonPress: {
> + QWebFrame *hitFrame = scrollingFrameAt(static_cast<QMouseEvent *>(e)->pos());
coding style, * should be aligned to the left
> + if (hitFrame)
> + _frame = hitFrame;
please use m_frame, which is webkit style.
> + break;
> + }
> + default:
> + break;
> + }
> + return QAbstractKineticScroller::eventFilter(o, e);
> + }
> +
> +protected:
> + QWebFrame *currentFrame() const
here as well
> + {
> + if (!_frame.isNull())
> + return _frame.data();
> +
> + QWebView *web = static_cast<QWebView *>(widget());
web is a bad variable name, maybe use view instead
> + QWebFrame *frame = web->page()->mainFrame();
* again, please also run check-webkit-style on it
> + return frame;
> + }
> +
> + /*! Returns the innermost frame at the given position that can scroll. */
use // commenting
> + QWebFrame *scrollingFrameAt(const QPoint &pos) const
coding style, * and &
> + {
> + QWebView *web = static_cast<QWebView *>(widget());
view
> + QWebFrame *mainFrame = web->page()->mainFrame();
> + QWebFrame *hitFrame = mainFrame->hitTestContent(pos).frame();
coding style
> + QSize range = hitFrame->contentsSize() - hitFrame->geometry().size();
> +
> + while (hitFrame && range.width() <= 1 && range.height() <= 1)
> + hitFrame = hitFrame->parentFrame();
Are you sure infinite loops can never occour here?
> +
> + return hitFrame;
> + }
> +
> + void attachToWidget()
> + {
> + QWebView *web = static_cast<QWebView *>(widget());
> + QWebFrame *mainFrame = web->page()->mainFrame();
> + mainFrame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
> + mainFrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
> + web->installEventFilter(this);
> + }
> +
> + void removeFromWidget()
> + {
> + QWebView *web = static_cast<QWebView *>(widget());
> + web->removeEventFilter(this);
> + QWebFrame *mainFrame = web->page()->mainFrame();
> + mainFrame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
> + mainFrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded);
Shouldn't you save the old scrollbar policyt instead and reapply it?
> + }
> +
> + QRect positionRange() const
> + {
> + QRect r;
> + QWebFrame *frame = currentFrame();
style
> + r.setSize(frame->contentsSize() - frame->geometry().size());
> + return r;
> + }
> +
> + QPoint position() const
> + {
> + QWebFrame *frame = currentFrame();
style
> + return frame->scrollPosition();
> + }
> +
> + QSize viewportSize() const
> + {
> + return static_cast<QWebView *>(widget())->page()->viewportSize();
style.
> + }
> +
> + void setPosition(const QPoint &p, const QPoint &overShootDelta)
> + {
> + Q_UNUSED(overShootDelta);
not webkit style, just leave out the second param. (please use point as well,
not p)
or do
void setPosition(const QPoint& point, const QPoint& /* overShootDelta */)
> +
> + QWebFrame *frame = currentFrame();
> + frame->setScrollPosition(p);
> + }
> +
> + QPointer<QWebFrame> _frame;
> +};
> +
> +#endif // Q_WS_MAEMO_5
> +
> +
> /*!
> \class QWebView
> \since 4.4
> @@ -157,7 +258,11 @@ QWebView::QWebView(QWidget *parent)
> #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
> setAttribute(Qt::WA_AcceptTouchEvents);
> #endif
> -
> +#if defined(Q_WS_MAEMO_5)
> + QAbstractKineticScroller *ks = new QWebViewKineticScroller();
use scroller instead of ks, *
> + ks->setWidget(this);
> + setProperty("kineticScroller", QVariant::fromValue(ks));
> +#endif
> setAcceptDrops(true);
>
> setMouseTracking(true);
> diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
> index f9aa123..f295572 100644
> --- a/WebKit/qt/ChangeLog
> +++ b/WebKit/qt/ChangeLog
> @@ -1,3 +1,27 @@
> +2010-01-28 Andreas Kling <andreas.kling at nokia.com>
> +
> + Reviewed by NOBODY (OOPS!).
> +
> + [Qt] Support kinetic scrolling on Maemo 5
> +
> + https://bugs.webkit.org/show_bug.cgi?id=34267
> +
> + Patch by Ralf Engels <ralf.engels at nokia.com> and
> + Robert Griebl <rgriebl at trolltech.com>
> +
> + * Api/qwebview.cpp:
> + (QWebViewKineticScroller::QWebViewKineticScroller):
> + (QWebViewKineticScroller::eventFilter):
> + (QWebViewKineticScroller::currentFrame):
> + (QWebViewKineticScroller::scrollingFrameAt):
> + (QWebViewKineticScroller::attachToWidget):
> + (QWebViewKineticScroller::removeFromWidget):
> + (QWebViewKineticScroller::positionRange):
> + (QWebViewKineticScroller::position):
> + (QWebViewKineticScroller::viewportSize):
> + (QWebViewKineticScroller::setPosition):
> + (QWebView::QWebView):
> +
> 2010-01-28 Kenneth Rohde Christiansen <kenneth at webkit.org>
>
> Reviewed by Simon Hausmann.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list