diff options
-rw-r--r-- | src-qt5/src-glwidgets/gltest/colorchange.h | 30 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/gltest/main.cpp | 52 | ||||
-rwxr-xr-x | src-qt5/src-glwidgets/gltest/test | bin | 58272 -> 0 bytes | |||
-rw-r--r-- | src-qt5/src-glwidgets/gltest/test.pro | 9 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-base.cpp | 120 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-base.h | 49 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-widget.cpp | 115 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glw-widget.h | 63 | ||||
-rw-r--r-- | src-qt5/src-glwidgets/glwidgets.pri | 7 |
9 files changed, 0 insertions, 445 deletions
diff --git a/src-qt5/src-glwidgets/gltest/colorchange.h b/src-qt5/src-glwidgets/gltest/colorchange.h deleted file mode 100644 index aad01f05..00000000 --- a/src-qt5/src-glwidgets/gltest/colorchange.h +++ /dev/null @@ -1,30 +0,0 @@ -#include <QDebug> -#include <QApplication> -#include <QTimer> -#include <QColor> - -#include "../glw-base.h" - -class colorchange : public QObject{ - Q_OBJECT -private: - GLW_Base *base; - QTimer *timer; - -public slots: - void toggle(){ - static bool current = false; - base->setBackgroundColor( current ? QColor(Qt::blue) : QColor(Qt::red)); - current = !current; - } - -public: - colorchange(GLW_Base *parent) : QObject(){ - base = parent; - timer = new QTimer(this); - timer->setInterval(5000); - connect(timer, SIGNAL(timeout()), this, SLOT(toggle()) ); - timer->start(); - } - -}; diff --git a/src-qt5/src-glwidgets/gltest/main.cpp b/src-qt5/src-glwidgets/gltest/main.cpp deleted file mode 100644 index efcebea1..00000000 --- a/src-qt5/src-glwidgets/gltest/main.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include <QDebug> -#include <QApplication> -#include <QTimer> -#include <QColor> -#include <QPropertyAnimation> -#include "../glw-base.h" -#include "../glw-widget.h" - -#include "colorchange.h" - -int main(int argc, char** argv){ - - QSurfaceFormat fmt; - fmt.setRenderableType(QSurfaceFormat::OpenGL); //OpenGL, OpenGLES, OpenVG - fmt.setSwapBehavior(QSurfaceFormat::DoubleBuffer); - QSurfaceFormat::setDefaultFormat(fmt); - - QApplication A(argc,argv); - - qDebug() << "Creating base widget"; - GLW_Base base; - qDebug() << "Resize base widget"; - base.resize(1024,768); - 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(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(base.width()/2,base.height()/2,0,0)); - anim.setEndValue(QRect(0,0,base.width(),base.height())); - 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(); - int ret = A.exec(); - qDebug() << " - Finished"; - return ret; -} diff --git a/src-qt5/src-glwidgets/gltest/test b/src-qt5/src-glwidgets/gltest/test Binary files differdeleted file mode 100755 index 3ba6f8db..00000000 --- a/src-qt5/src-glwidgets/gltest/test +++ /dev/null diff --git a/src-qt5/src-glwidgets/gltest/test.pro b/src-qt5/src-glwidgets/gltest/test.pro deleted file mode 100644 index cba315c3..00000000 --- a/src-qt5/src-glwidgets/gltest/test.pro +++ /dev/null @@ -1,9 +0,0 @@ -QT = core gui widgets - -TARGET = test - -SOURCES += main.cpp - -HEADERS += colorchange.h - -include(../glwidgets.pri); diff --git a/src-qt5/src-glwidgets/glw-base.cpp b/src-qt5/src-glwidgets/glw-base.cpp deleted file mode 100644 index 4065f70f..00000000 --- a/src-qt5/src-glwidgets/glw-base.cpp +++ /dev/null @@ -1,120 +0,0 @@ -//=========================================== -// Lumina-desktop source code -// Copyright (c) 2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "glw-base.h" -#include "glw-widget.h" -#include <QPaintEngine> -#include <QDebug> -#include <QOpenGLContext> -#include <QOpenGLFunctions> -#include <QOpenGLPaintDevice> - -GLW_Base::GLW_Base(QWidget *parent, Qt::WindowFlags f) : QOpenGLWidget(parent,f){ - bg_color = QColor(Qt::black); - mouse_over_child = 0; - qDebug() << "Canvas supports threaded OpenGL:" << this->context()->supportsThreadedOpenGL(); - qDebug() << " - globally:" << QOpenGLContext::globalShareContext()->supportsThreadedOpenGL(); -} - -GLW_Base::~GLW_Base(){ - -} - -QWidget * GLW_Base::mouseOverWidget(){ - return mouse_over_child; -} - -// --- PUBLIC SLOTS --- -void GLW_Base::setBackgroundColor(QColor color){ - bg_color = color; - this->update(); //repaint the entire widget (just in case you can see through the image) - -} - -void GLW_Base::setBackground(QRect geom, QImage img){ - QPainter P(&bg_img); - P.drawImage(geom, img); - this->update(geom); -} - -void GLW_Base::repaintArea(QRect rect){ - this->update(rect); -} - -void GLW_Base::setMouseOverWidget(QWidget *child){ - mouse_over_child = child; -} - -// --- PROTECTED --- -void GLW_Base::mouseMoveEvent(QMouseEvent *ev){ - mouse_over_child = 0; //reset this flag - mouse is over the base right now - QWidget::mouseMoveEvent(ev); -} - -void GLW_Base::resizeEvent(QResizeEvent *ev){ - QOpenGLWidget::resizeEvent(ev); - if(!bg_img.isNull()){ - bg_img = bg_img.scaled(ev->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - } - emit BaseResized(); -} - -/*void GLW_Base::paintEvent(QPaintEvent *ev){ - QOpenGLWidget::paintEvent(ev); -}*/ - -void GLW_Base::paintGL(){ - - //Setup the OpenGL stuff - QOpenGLFunctions *f = this->context()->functions(); - f->glViewport(0, 0, width(), height()); - f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - GLfloat vertices[] = { - 0.0f, 0.707f, - -0.5f, -0.5f, - 0.5f, -0.5f - }; - - f->glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices); - f->glEnableVertexAttribArray(0); - f->glDrawArrays(GL_TRIANGLES, 0, 3); - f->glDisableVertexAttribArray(0); - glDrawPixels(bg_img.width(), bg_img.height(), GL_RGBA, GL_UNSIGNED_BYTE, bg_img.bits()); - - QRect rect = QRect(QPoint(0,0), this->size()); - //Prepare the image to be painted - QImage img(this->size(), QImage::Format_RGBA8888); - QPainter painter; - painter.begin(&img); - painter.fillRect(rect, bg_color); - painter.end(); - - //Now do any QPainter drawing - /*QOpenGLPaintDevice device(rect.size()); - QStylePainter painter; - painter.begin(&device, this); - //qDebug() << "Paint Engine type:" << painter.paintEngine()->type(); - painter.setClipRegion(rect); - //Fill in the background color first - painter.fillRect(rect, bg_color); - //Now paint any background image over that - painter.drawImage(rect, bg_img, rect, Qt::AutoColor | Qt::PreferDither | Qt::NoOpaqueDetection); - //Now find any children widgets and paint them if they are in that area - QObjectList child = this->children(); //Note: This is returned in stacking order (lowest -> highest) - for(int i=0; i<child.length(); i++){ - if( !child[i]->isWidgetType() ){ continue; } //not a widget - GLW_Widget *glww = qobject_cast<GLW_Widget*>(child[i]); - if(glww!=0){ - if(!rect.intersected(glww->widgetRect()).isNull()){ - glww->paintYourself(&painter, &rect); - glww->paintChildren(&painter,&rect); - } - } - } - painter.end(); - update();*/ -} diff --git a/src-qt5/src-glwidgets/glw-base.h b/src-qt5/src-glwidgets/glw-base.h deleted file mode 100644 index ecc5bc3a..00000000 --- a/src-qt5/src-glwidgets/glw-base.h +++ /dev/null @@ -1,49 +0,0 @@ -//=========================================== -// Lumina-desktop source code -// Copyright (c) 2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_OPENGL_WIDGETS_BASE_H -#define _LUMINA_OPENGL_WIDGETS_BASE_H - -#include <QOpenGLWidget> -#include <QImage> -#include <QPaintEvent> -#include <QPainter> -#include <QResizeEvent> -#include <QStylePainter> - -class GLW_Base : public QOpenGLWidget{ - Q_OBJECT -private: - QColor bg_color; - QImage bg_img; - QWidget *mouse_over_child; - -public: - GLW_Base(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); - ~GLW_Base(); - - QWidget * mouseOverWidget(); - -private slots: - -public slots: - void setBackgroundColor(QColor color); - void setBackground(QRect geom, QImage img); - void repaintArea(QRect); - void setMouseOverWidget(QWidget*); - -signals: - void BaseResized(); - -protected: - void mouseMoveEvent(QMouseEvent *ev); - void resizeEvent(QResizeEvent *ev); - //void paintEvent(QPaintEvent *ev); - //void initializeGL(); - void paintGL(); -}; - -#endif diff --git a/src-qt5/src-glwidgets/glw-widget.cpp b/src-qt5/src-glwidgets/glw-widget.cpp deleted file mode 100644 index e8d255b9..00000000 --- a/src-qt5/src-glwidgets/glw-widget.cpp +++ /dev/null @@ -1,115 +0,0 @@ -//=========================================== -// Lumina-desktop source code -// Copyright (c) 2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "glw-widget.h" -#include <QDebug> - -// --- PUBLIC --- -GLW_Widget::GLW_Widget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){ - glw_base = 0; - draggable = false; - drag_offset = QPoint(); -} - -GLW_Widget::~GLW_Widget(){ - -} - -QRect GLW_Widget::widgetRect(){ - QPoint pos = this->mapTo(glw_base, QPoint(0,0)); - return QRect(pos, this->size()); -} - -bool GLW_Widget::mouseOverWidget(){ - return (glw_base->mouseOverWidget()==this); -} - -void GLW_Widget::setGLBase(GLW_Base *base){ - if(glw_base!=0){ this->disconnect(glw_base, SLOT(repaintArea(QRect))); } - glw_base=base; - connect(this, SIGNAL(repaintArea(QRect)), glw_base, SLOT(repaintArea(QRect)) ); -} - -void GLW_Widget::paintYourself(QStylePainter *painter, const QRect *prect){ - QRect rect = widgetRect(); - rect = prect->intersected(rect); - QColor color( mouseOverWidget() ? Qt::gray : Qt::yellow); - //if(this->windowOpacity()!=1.0){ qDebug() << "Opacity:" << this->windowOpacity(); } - //color.setAlpha( qRound(this->windowOpacity()*255) ); - color.setAlpha( 125); - painter->fillRect(rect, color); -} - -void GLW_Widget::paintChildren(QStylePainter *painter, const QRect *prect){ - QObjectList child = this->children(); //Note: This is returned in stacking order (lowest -> highest) - for(int i=0; i<child.length(); i++){ - if( !child[i]->isWidgetType() ){ continue; } //not a widget - GLW_Widget *glww = qobject_cast<GLW_Widget*>(child[i]); - if(glww!=0){ - if( !prect->intersected(glww->widgetRect()).isNull() ){ - glww->paintYourself(painter, prect); - glww->paintChildren(painter,prect); - } - } - } -} - - -// --- PROTECTED --- -void GLW_Widget::enterEvent(QEvent*){ - if(!mouseOverWidget()){ glw_base->setMouseOverWidget(this); } - this->update(); -} - -void GLW_Widget::leaveEvent(QEvent*){ - if(mouseOverWidget()){ glw_base->setMouseOverWidget(0); } - this->update(); -} - -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(!mouseOverWidget()){ glw_base->setMouseOverWidget(this); } - 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)); - QSize sz = ev->oldSize(); - if(ev->size().width() > sz.width()){ sz.setWidth(ev->size().width()); } - if(ev->size().height() > sz.height()){ sz.setHeight(ev->size().height()); } - emit repaintArea(QRect(pos, sz)); -} - -void GLW_Widget::paintEvent(QPaintEvent *ev){ - //qDebug() << "Got paint event:" << ev->rect(); - QPoint pos = this->mapTo(glw_base, ev->rect().topLeft()); - emit repaintArea(QRect(pos, ev->rect().size()) ); - return; -} diff --git a/src-qt5/src-glwidgets/glw-widget.h b/src-qt5/src-glwidgets/glw-widget.h deleted file mode 100644 index 69d3515d..00000000 --- a/src-qt5/src-glwidgets/glw-widget.h +++ /dev/null @@ -1,63 +0,0 @@ -//=========================================== -// Lumina-desktop source code -// Copyright (c) 2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_OPENGL_WIDGETS_WIDGET_H -#define _LUMINA_OPENGL_WIDGETS_WIDGET_H - -#include <QWidget> -#include <QPaintEvent> -#include <QStylePainter> -#include <QResizeEvent> -#include <QStylePainter> - -#include "glw-base.h" - -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()); - ~GLW_Widget(); - - QRect widgetRect(); //converts to the coordinate scheme of the base widget - bool mouseOverWidget(); - - void setGLBase(GLW_Base *base); - - virtual void paintYourself(QStylePainter *painter, const QRect *prect); - void paintChildren(QStylePainter *painter, const QRect *prect); - - //Properties - bool isDraggable(){ return draggable; } - -private slots: - -public slots: - void setDraggable(bool drag){ draggable = drag; } - - -protected: - virtual void enterEvent(QEvent*); - virtual void leaveEvent(QEvent*); - - 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"); -#endif diff --git a/src-qt5/src-glwidgets/glwidgets.pri b/src-qt5/src-glwidgets/glwidgets.pri deleted file mode 100644 index e391aef0..00000000 --- a/src-qt5/src-glwidgets/glwidgets.pri +++ /dev/null @@ -1,7 +0,0 @@ -QT *= widgets - -SOURCES *= $${PWD}/glw-base.cpp \ - $${PWD}/glw-widget.cpp - -HEADERS *= $${PWD}/glw-base.h \ - $${PWD}/glw-widget.h |