ginebra2/ScrollableViewBase.cpp
changeset 16 3c88a81ff781
parent 3 0954f5dd2cd0
equal deleted inserted replaced
14:6aeb7a756187 16:3c88a81ff781
    25 #include "Kinetics/KineticScroller.h"
    25 #include "Kinetics/KineticScroller.h"
    26 
    26 
    27 #include <QGraphicsScene>
    27 #include <QGraphicsScene>
    28 #include <QGraphicsSceneMouseEvent>
    28 #include <QGraphicsSceneMouseEvent>
    29 #include <QPointF>
    29 #include <QPointF>
    30 
    30 #include <QApplication>
    31 namespace GVA {
    31 namespace GVA {
    32 
    32 
    33 ScrollableViewBase::ScrollableViewBase(QGraphicsItem* parent, Qt::WindowFlags wFlags)
    33 ScrollableViewBase::ScrollableViewBase(QGraphicsItem* parent, Qt::WindowFlags wFlags)
    34     : QGraphicsWidget(parent, wFlags)
    34     : QGraphicsWidget(parent, wFlags)
    35     , m_scrollWidget(0)
    35     , m_scrollWidget(0)
    39 
    39 
    40     //To disable childrens painting outside the ViewportItem's rect.
    40     //To disable childrens painting outside the ViewportItem's rect.
    41     setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
    41     setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
    42 
    42 
    43     //To speed up painting.
    43     //To speed up painting.
    44     setFlag(QGraphicsItem::ItemHasNoContents, true);
    44     //setFlag(QGraphicsItem::ItemHasNoContents, true);
    45     setAttribute(Qt::WA_OpaquePaintEvent, true);
    45     setAttribute(Qt::WA_OpaquePaintEvent, true);
    46 
    46 
    47     m_kineticScroller = new KineticScroller(this);
    47     m_kineticScroller = new KineticScroller(this);
    48 
    48 
    49     //Event filter on all children of the viewport, so that all mouse
    49     //Event filter on all children of the viewport, so that all mouse
    74     return size().toSize();
    74     return size().toSize();
    75 }
    75 }
    76 
    76 
    77 QPoint ScrollableViewBase::maximumScrollPosition() const
    77 QPoint ScrollableViewBase::maximumScrollPosition() const
    78 {
    78 {
    79     QSizeF contentsSize = m_scrollWidget->size();
    79     QSizeF contentsSize = m_scrollWidget->size() * m_scrollWidget->scale();;
    80     QSizeF viewportSize = size();
    80     QSizeF viewportSize = size();
    81     QSize maxScrollSize = (contentsSize - viewportSize).toSize();
    81     QSize maxScrollSize = (contentsSize - viewportSize).toSize();
    82 
    82 
    83     return QPoint(qMax(0, maxScrollSize.width()), qMax(0, maxScrollSize.height()));
    83     return QPoint(qMax(0, maxScrollSize.width()), qMax(0, maxScrollSize.height()));
    84 }
    84 }
    88     return (-scrollWidgetPos()).toPoint();
    88     return (-scrollWidgetPos()).toPoint();
    89 }
    89 }
    90 
    90 
    91 void ScrollableViewBase::setScrollPosition(const QPoint& pos, const QPoint& overShoot)
    91 void ScrollableViewBase::setScrollPosition(const QPoint& pos, const QPoint& overShoot)
    92 {
    92 {
       
    93     QPoint p = scrollPosition();
       
    94     QPoint d = pos - p;
       
    95 
    93     m_overShoot = overShoot;
    96     m_overShoot = overShoot;
    94     setScrollWidgetPos(-pos);
    97     setScrollWidgetPos(-pos + m_overShoot);
       
    98     //QApplication::sendPostedEvents();
       
    99     
       
   100     emit viewScrolled(p, d);
    95 }
   101 }
    96 
   102 
    97 void ScrollableViewBase::stateChanged(KineticScrollable::State oldState
   103 void ScrollableViewBase::stateChanged(KineticScrollable::State oldState
    98                                       , KineticScrollable::State newState)
   104                                       , KineticScrollable::State newState)
    99 {
   105 {
   100     Q_UNUSED(oldState);
   106     Q_UNUSED(oldState);
   101     Q_UNUSED(newState);
   107     Q_UNUSED(newState);
   102 }
   108 }
   103 
   109 /*
   104 void ScrollableViewBase::setScrollWidgetGeometry(const QRectF& geom)
   110 void ScrollableViewBase::setScrollWidgetGeometry(const QRectF& geom)
   105 {
   111 {
   106     scrollWidget()->setGeometry(adjustScrollWidgetRect(geom));
   112     scrollWidget()->setGeometry(adjustScrollWidgetRect(geom));
   107 }
   113 }
   108 
   114 
   142     }
   148     }
   143     //newRect.translate(m_extraPos);
   149     //newRect.translate(m_extraPos);
   144     newRect.translate(m_overShoot);
   150     newRect.translate(m_overShoot);
   145     return newRect;
   151     return newRect;
   146 }
   152 }
   147 
   153 */
   148 void ScrollableViewBase::setScrollWidgetPos(const QPointF& pos)
   154 void ScrollableViewBase::setScrollWidgetPos(const QPointF& pos)
   149 {
   155 {
   150     setScrollWidgetGeometry(QRectF(pos, scrollWidget()->size()));
   156     scrollWidget()->setPos(pos);
   151 }
   157 }
   152 
   158 
   153 QPointF ScrollableViewBase::scrollWidgetPos() const
   159 QPointF ScrollableViewBase::scrollWidgetPos() const
   154 {
   160 {
   155     return scrollWidget()->pos()  /*- m_extraPos*/ - m_overShoot;
   161     return scrollWidget()->pos()  /*- m_extraPos*/ - m_overShoot;