diff options
author | Ken Moore <ken@ixsystems.com> | 2017-09-26 23:18:34 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-09-26 23:18:34 -0400 |
commit | 04069af07a667fb6b677f1655978853c42410b2f (patch) | |
tree | 3d587999b4206aa80fa7b96e96224685935864a4 /src-qt5 | |
parent | Merge branch 'master' of github.com:trueos/lumina (diff) | |
download | lumina-04069af07a667fb6b677f1655978853c42410b2f.tar.gz lumina-04069af07a667fb6b677f1655978853c42410b2f.tar.bz2 lumina-04069af07a667fb6b677f1655978853c42410b2f.zip |
Update some more of the GL widget set and the test
Get the generic widget draggable (optional).
Verify that QPropertyAnimations work property on widgets in the test.
Diffstat (limited to 'src-qt5')
-rw-r--r-- | src-qt5/src-glwidgets/gltest/main.cpp | 25 | ||||
-rwxr-xr-x | src-qt5/src-glwidgets/gltest/test | bin | 50927 -> 56367 bytes | |||
-rw-r--r-- | src-qt5/src-glwidgets/glw-base.cpp | 7 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-widget.cpp | 36 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-widget.h | 21 |
5 files changed, 78 insertions, 11 deletions
diff --git a/src-qt5/src-glwidgets/gltest/main.cpp b/src-qt5/src-glwidgets/gltest/main.cpp index 041ee5ff..c3edd088 100644 --- a/src-qt5/src-glwidgets/gltest/main.cpp +++ b/src-qt5/src-glwidgets/gltest/main.cpp @@ -2,7 +2,8 @@ #include <QApplication> #include <QTimer> #include <QColor> - +#include <QPushButton> +#include <QPropertyAnimation> #include "../glw-base.h" #include "../glw-widget.h" @@ -14,10 +15,28 @@ int main(int argc, char** argv){ GLW_Base base; qDebug() << "Resize base widget"; base.resize(200,200); - qDebug() << "Create colorchange"; + qDebug() << "Create Other widgets"; + GLW_Widget wgt1(&base); + wgt1.setGLBase(&base); + wgt1.setGeometry(50,50,50,50); + wgt1.setDraggable(true); GLW_Widget wgt(&base); wgt.setGLBase(&base); - wgt.setGeometry(50,50,50,50); + wgt.setGeometry(75,50,50,50); + QPropertyAnimation anim(&wgt); + anim.setTargetObject(&wgt); + anim.setPropertyName("geometry"); + //anim.setStartValue(QRect(-50,-50,50,50)); + //anim.setEndValue(QRect(200,200,50,50)); + anim.setStartValue(QRect(100,100,0,0)); + anim.setEndValue(QRect(0,0,200,200)); + anim.setDuration(1500); + anim.setLoopCount(-1); + anim.start(); + /*QPushButton but(&base); + but.setText("button"); + but.setGeometry(100,100,50,50); + but.setStyleSheet("background: rgba(0,150,0,125)");*/ colorchange CC(&base); qDebug() << "Start Event loop"; base.show(); diff --git a/src-qt5/src-glwidgets/gltest/test b/src-qt5/src-glwidgets/gltest/test Binary files differindex 5a69b0c3..cb8fe872 100755 --- a/src-qt5/src-glwidgets/gltest/test +++ b/src-qt5/src-glwidgets/gltest/test diff --git a/src-qt5/src-glwidgets/glw-base.cpp b/src-qt5/src-glwidgets/glw-base.cpp index e828df7f..8841743d 100644 --- a/src-qt5/src-glwidgets/glw-base.cpp +++ b/src-qt5/src-glwidgets/glw-base.cpp @@ -54,10 +54,13 @@ void GLW_Base::paintEvent(QPaintEvent *ev){ if( !child[i]->isWidgetType() ){ continue; } //not a widget GLW_Widget *glww = qobject_cast<GLW_Widget*>(child[i]); if(glww!=0){ - if(ev->rect().contains(glww->widgetRect())){ + if(!ev->rect().intersected(glww->widgetRect()).isNull()){ glww->paintYourself(&painter, ev); glww->paintChildren(&painter,ev); } - } + }/*else{ + QWidget *widg = qobject_cast<QWidget*>(child[i]); + widg->render(&painter, widg->geometry().topLeft()); + }*/ } } diff --git a/src-qt5/src-glwidgets/glw-widget.cpp b/src-qt5/src-glwidgets/glw-widget.cpp index e24d8166..d07c0431 100644 --- a/src-qt5/src-glwidgets/glw-widget.cpp +++ b/src-qt5/src-glwidgets/glw-widget.cpp @@ -11,6 +11,8 @@ GLW_Widget::GLW_Widget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){ glw_base = 0; this->setMouseTracking(true); + draggable = false; + drag_offset = QPoint(); } GLW_Widget::~GLW_Widget(){ @@ -25,7 +27,7 @@ QRect GLW_Widget::widgetRect(){ bool GLW_Widget::mouseOverWidget(){ QPoint pos = this->mapFromGlobal(QCursor::pos()); QRect geom(QPoint(0,0), this->size()); - return geom.contains(pos); + return geom.contains(pos) || (draggable && !drag_offset.isNull()); } @@ -39,7 +41,9 @@ void GLW_Widget::paintYourself(QStylePainter *painter, QPaintEvent *ev){ QRect rect = widgetRect(); rect = rect.intersected(ev->rect()); QColor color( mouseOverWidget() ? Qt::gray : Qt::yellow); - color.setAlpha(125); + //if(this->windowOpacity()!=1.0){ qDebug() << "Opacity:" << this->windowOpacity(); } + //color.setAlpha( qRound(this->windowOpacity()*255) ); + color.setAlpha( 125); painter->fillRect(rect, color); } @@ -59,6 +63,34 @@ void GLW_Widget::paintChildren(QStylePainter *painter, QPaintEvent *ev){ // --- PROTECTED --- +void GLW_Widget::mousePressEvent(QMouseEvent *ev){ + if(!draggable){ QWidget::mousePressEvent(ev); return; } + if(ev->button()==Qt::LeftButton){ + drag_offset = ev->pos(); + } +} + +void GLW_Widget::mouseReleaseEvent(QMouseEvent *ev){ + if(!draggable){ QWidget::mouseReleaseEvent(ev); return; } + if(ev->button()==Qt::LeftButton){ + if(drag_offset!=ev->pos()){ emit doneDragging(); } + drag_offset = QPoint(); } //reset offset +} + +void GLW_Widget::mouseMoveEvent(QMouseEvent *ev){ + if(!draggable){ QWidget::mouseMoveEvent(ev); return; } + if(!drag_offset.isNull()){ + this->move( this->mapTo(glw_base, ev->pos()-drag_offset) ); + } +} + + +void GLW_Widget::moveEvent(QMoveEvent *ev){ + QRect oldgeom = QRect(ev->oldPos(), this->size()); + QRect newgeom = QRect(ev->pos(), this->size()); + emit repaintArea( oldgeom.united(newgeom) ); +} + void GLW_Widget::resizeEvent(QResizeEvent *ev){ if(glw_base==0){ return; } QPoint pos = this->mapTo(glw_base, QPoint(0,0)); diff --git a/src-qt5/src-glwidgets/glw-widget.h b/src-qt5/src-glwidgets/glw-widget.h index 1d6caa77..91a1ae69 100644 --- a/src-qt5/src-glwidgets/glw-widget.h +++ b/src-qt5/src-glwidgets/glw-widget.h @@ -19,6 +19,8 @@ class GLW_Widget : public QWidget{ Q_OBJECT private: GLW_Base *glw_base; + QPoint drag_offset; + bool draggable; public: GLW_Widget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); @@ -32,18 +34,29 @@ public: virtual void paintYourself(QStylePainter *painter, QPaintEvent *ev); void paintChildren(QStylePainter *painter, QPaintEvent *ev); + //Properties + bool isDraggable(){ return draggable; } + private slots: public slots: + void setDraggable(bool drag){ draggable = drag; } + protected: - void enterEvent(QEvent*){ this->update(); } - void leaveEvent(QEvent*){ this->update(); } - void resizeEvent(QResizeEvent *ev); - void paintEvent(QPaintEvent *ev); + virtual void enterEvent(QEvent*){ this->update(); } + virtual void leaveEvent(QEvent*){ this->update(); } + + virtual void mousePressEvent(QMouseEvent *ev); + virtual void mouseReleaseEvent(QMouseEvent *ev); + virtual void mouseMoveEvent(QMouseEvent *ev); + virtual void moveEvent(QMoveEvent *ev); + virtual void resizeEvent(QResizeEvent *ev); + virtual void paintEvent(QPaintEvent *ev); signals: void repaintArea(QRect); + void doneDragging(); }; Q_DECLARE_INTERFACE(GLW_Widget, "GLW_Widget"); |