don't use 32bit color depth on N900 (16bit display); on other platforms, use 32bit...
[presencevnc] / src / scrollarea.h
index 19a18a1..7faf680 100644 (file)
 #ifndef SCROLLAREA_H
 #define SCROLLAREA_H
 
-#include <QScrollArea>
-#include <QLabel>
-#include <QTimer>
+#include "fullscreenexitbutton.h"
+
+#include <QtGui>
 
 //fixes tearing during scrolling and can display messages
-class ScrollArea : public QScrollArea {
+class ScrollArea : public QScrollArea
+{
+    Q_OBJECT
 public:
-       ScrollArea(QWidget *parent):
-               QScrollArea(parent)
-       {
-               message.setParent(this);
-               message.setVisible(false);
-               message.setAlignment(Qt::AlignCenter);
-               message.setWordWrap(true);
+    explicit ScrollArea(QWidget *parent):
+        QScrollArea(parent),
+        message(this),
+        fullscreen_exit_button(parent) //owned by parent!
+    {
+        message.setVisible(false);
+        message.setAlignment(Qt::AlignCenter);
+        message.setWordWrap(true);
+
+        QPalette pal = message.palette();
+        QColor backgroundColor = pal.color(backgroundRole());
+        backgroundColor.setAlpha(128);
+        pal.setColor(backgroundRole(), backgroundColor);
+        message.setPalette(pal);
+        message.setAutoFillBackground(true);
+
+        message_timer.setSingleShot(true);
+        message_timer.setInterval(4000);
+        connect(&message_timer, SIGNAL(timeout()),
+                &message, SLOT(hide()));
+
+        connect(&fullscreen_exit_button, SIGNAL(clicked()),
+            this, SIGNAL(fullscreenButtonClicked()));
+
+        button_reenable_timer.setSingleShot(true);
+        button_reenable_timer.setInterval(500);
+        connect(&button_reenable_timer, SIGNAL(timeout()),
+                &fullscreen_exit_button, SLOT(reenable()));
+
+#ifdef Q_WS_MAEMO_5
+        // disable overshooting because it somehow causes repaint events for the whole widget (slow)
+        QAbstractKineticScroller *scroller = property("kineticScroller").value<QAbstractKineticScroller *>();
+        if (scroller)
+            scroller->setOvershootPolicy(QAbstractKineticScroller::OvershootAlwaysOff);
+#endif
+    }
 
-               QPalette pal = message.palette();
-               QColor backgroundColor = pal.color(backgroundRole());
-               backgroundColor.setAlpha(128);
-               pal.setColor(backgroundRole(), backgroundColor);
-               message.setPalette(pal);
-               message.setAutoFillBackground(true);
+public slots:
+    void showMessage(const QString &s) {
+        message.setText(s);
+        message.show();
+        message_timer.start();
+    }
 
-               timer.setSingleShot(true);
-               timer.setInterval(2500);
-               connect(&timer, SIGNAL(timeout()),
-                       &message, SLOT(hide()));
-       }
+    //provided for convenience
+    void showMessage(QString /*title*/, QString msg) { showMessage(msg); }
 
-       void showMessage(const QString &s)
-       {
-               message.setText(s);
-               message.show();
-               timer.start();
-       }
+signals:
+    void fullscreenButtonClicked();
 protected:
-       virtual void resizeEvent(QResizeEvent* ev)
-       {
-               QScrollArea::resizeEvent(ev);
-               message.setFixedWidth(width());
-       }
-       virtual void scrollContentsBy(int dx, int dy)
-       {
-               QScrollArea::scrollContentsBy(dx, dy);
-               if(widget())
-                       widget()->update(); //update whole widget
-       }
+    virtual void resizeEvent(QResizeEvent* ev) {
+        QScrollArea::resizeEvent(ev);
+        message.setFixedWidth(width());
+    }
+    virtual void scrollContentsBy(int dx, int dy) {
+        QScrollArea::scrollContentsBy(dx, dy);
+        if(widget()) {
+            //overlay-widgets slow down scrolling
+            message.hide();
+            fullscreen_exit_button.hide();
+            fullscreen_exit_button.setEnabled(false);
+            button_reenable_timer.start();
+        }
+    }
 private:
-       QLabel message;
-       QTimer timer;
+    QLabel message;
+    QTimer message_timer;
+    FullScreenExitButton fullscreen_exit_button;
+    QTimer button_reenable_timer;
 };
 #endif