diff options
Diffstat (limited to 'examples/opengl/legacy/grabber')
-rw-r--r-- | examples/opengl/legacy/grabber/glwidget.cpp | 286 | ||||
-rw-r--r-- | examples/opengl/legacy/grabber/glwidget.h | 107 | ||||
-rw-r--r-- | examples/opengl/legacy/grabber/grabber.pro | 12 | ||||
-rw-r--r-- | examples/opengl/legacy/grabber/main.cpp | 61 | ||||
-rw-r--r-- | examples/opengl/legacy/grabber/mainwindow.cpp | 216 | ||||
-rw-r--r-- | examples/opengl/legacy/grabber/mainwindow.h | 104 |
6 files changed, 0 insertions, 786 deletions
diff --git a/examples/opengl/legacy/grabber/glwidget.cpp b/examples/opengl/legacy/grabber/glwidget.cpp deleted file mode 100644 index 6be4d30597..0000000000 --- a/examples/opengl/legacy/grabber/glwidget.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "glwidget.h" - -#include <QMouseEvent> -#include <QTimer> -#include <qmath.h> - -GLWidget::GLWidget(QWidget *parent) - : QGLWidget(parent) -{ - gear1 = 0; - gear2 = 0; - gear3 = 0; - xRot = 0; - yRot = 0; - zRot = 0; - gear1Rot = 0; - - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(advanceGears())); - timer->start(20); -} - -GLWidget::~GLWidget() -{ - makeCurrent(); - glDeleteLists(gear1, 1); - glDeleteLists(gear2, 1); - glDeleteLists(gear3, 1); -} - -void GLWidget::setXRotation(int angle) -{ - normalizeAngle(&angle); - if (angle != xRot) { - xRot = angle; - emit xRotationChanged(angle); - updateGL(); - } -} - -void GLWidget::setYRotation(int angle) -{ - normalizeAngle(&angle); - if (angle != yRot) { - yRot = angle; - emit yRotationChanged(angle); - updateGL(); - } -} - -void GLWidget::setZRotation(int angle) -{ - normalizeAngle(&angle); - if (angle != zRot) { - zRot = angle; - emit zRotationChanged(angle); - updateGL(); - } -} - -void GLWidget::initializeGL() -{ - static const GLfloat lightPos[4] = { 5.0f, 5.0f, 10.0f, 1.0f }; - static const GLfloat reflectance1[4] = { 0.8f, 0.1f, 0.0f, 1.0f }; - static const GLfloat reflectance2[4] = { 0.0f, 0.8f, 0.2f, 1.0f }; - static const GLfloat reflectance3[4] = { 0.2f, 0.2f, 1.0f, 1.0f }; - - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - gear1 = makeGear(reflectance1, 1.0, 4.0, 1.0, 0.7, 20); - gear2 = makeGear(reflectance2, 0.5, 2.0, 2.0, 0.7, 10); - gear3 = makeGear(reflectance3, 1.3, 2.0, 0.5, 0.7, 10); - - glEnable(GL_NORMALIZE); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); -} - -void GLWidget::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotated(xRot / 16.0, 1.0, 0.0, 0.0); - glRotated(yRot / 16.0, 0.0, 1.0, 0.0); - glRotated(zRot / 16.0, 0.0, 0.0, 1.0); - - drawGear(gear1, -3.0, -2.0, 0.0, gear1Rot / 16.0); - drawGear(gear2, +3.1, -2.0, 0.0, -2.0 * (gear1Rot / 16.0) - 9.0); - - glRotated(+90.0, 1.0, 0.0, 0.0); - drawGear(gear3, -3.1, -1.8, -2.2, +2.0 * (gear1Rot / 16.0) - 2.0); - - glPopMatrix(); -} - -void GLWidget::resizeGL(int width, int height) -{ - int side = qMin(width, height); - glViewport((width - side) / 2, (height - side) / 2, side, side); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, +1.0, -1.0, 1.0, 5.0, 60.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslated(0.0, 0.0, -40.0); -} - -void GLWidget::mousePressEvent(QMouseEvent *event) -{ - lastPos = event->pos(); -} - -void GLWidget::mouseMoveEvent(QMouseEvent *event) -{ - int dx = event->x() - lastPos.x(); - int dy = event->y() - lastPos.y(); - - if (event->buttons() & Qt::LeftButton) { - setXRotation(xRot + 8 * dy); - setYRotation(yRot + 8 * dx); - } else if (event->buttons() & Qt::RightButton) { - setXRotation(xRot + 8 * dy); - setZRotation(zRot + 8 * dx); - } - lastPos = event->pos(); -} - -void GLWidget::advanceGears() -{ - gear1Rot += 2 * 16; - updateGL(); -} - -GLuint GLWidget::makeGear(const GLfloat *reflectance, GLdouble innerRadius, - GLdouble outerRadius, GLdouble thickness, - GLdouble toothSize, GLint toothCount) -{ - GLuint list = glGenLists(1); - glNewList(list, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, reflectance); - - GLdouble r0 = innerRadius; - GLdouble r1 = outerRadius - toothSize / 2.0; - GLdouble r2 = outerRadius + toothSize / 2.0; - GLdouble toothAngle = 2 * M_PI / toothCount; - GLdouble delta = toothAngle / 4.0; - GLdouble z = thickness / 2.0; - - glShadeModel(GL_FLAT); - - for (int i = 0; i < 2; ++i) { - GLdouble sign = (i == 0) ? +1.0 : -1.0; - - glNormal3d(0.0, 0.0, sign); - - glBegin(GL_QUAD_STRIP); - for (int j = 0; j <= toothCount; ++j) { - GLdouble angle = j * toothAngle; - glVertex3d(r0 * cos(angle), r0 * sin(angle), sign * z); - glVertex3d(r1 * cos(angle), r1 * sin(angle), sign * z); - glVertex3d(r0 * cos(angle), r0 * sin(angle), sign * z); - glVertex3d(r1 * cos(angle + 3 * delta), r1 * sin(angle + 3 * delta), sign * z); - } - glEnd(); - - glBegin(GL_QUADS); - for (int j = 0; j < toothCount; ++j) { - GLdouble angle = j * toothAngle; - glVertex3d(r1 * cos(angle), r1 * sin(angle), sign * z); - glVertex3d(r2 * cos(angle + delta), r2 * sin(angle + delta), sign * z); - glVertex3d(r2 * cos(angle + 2 * delta), r2 * sin(angle + 2 * delta), sign * z); - glVertex3d(r1 * cos(angle + 3 * delta), r1 * sin(angle + 3 * delta), sign * z); - } - glEnd(); - } - - glBegin(GL_QUAD_STRIP); - for (int i = 0; i < toothCount; ++i) { - for (int j = 0; j < 2; ++j) { - GLdouble angle = (i + j / 2.0) * toothAngle; - GLdouble s1 = r1; - GLdouble s2 = r2; - if (j == 1) - qSwap(s1, s2); - - glNormal3d(cos(angle), sin(angle), 0.0); - glVertex3d(s1 * cos(angle), s1 * sin(angle), +z); - glVertex3d(s1 * cos(angle), s1 * sin(angle), -z); - - glNormal3d(s2 * sin(angle + delta) - s1 * sin(angle), - s1 * cos(angle) - s2 * cos(angle + delta), 0.0); - glVertex3d(s2 * cos(angle + delta), s2 * sin(angle + delta), +z); - glVertex3d(s2 * cos(angle + delta), s2 * sin(angle + delta), -z); - } - } - glVertex3d(r1, 0.0, +z); - glVertex3d(r1, 0.0, -z); - glEnd(); - - glShadeModel(GL_SMOOTH); - - glBegin(GL_QUAD_STRIP); - for (int i = 0; i <= toothCount; ++i) { - GLdouble angle = i * toothAngle; - glNormal3d(-cos(angle), -sin(angle), 0.0); - glVertex3d(r0 * cos(angle), r0 * sin(angle), +z); - glVertex3d(r0 * cos(angle), r0 * sin(angle), -z); - } - glEnd(); - - glEndList(); - - return list; -} - -void GLWidget::drawGear(GLuint gear, GLdouble dx, GLdouble dy, GLdouble dz, - GLdouble angle) -{ - glPushMatrix(); - glTranslated(dx, dy, dz); - glRotated(angle, 0.0, 0.0, 1.0); - glCallList(gear); - glPopMatrix(); -} - -void GLWidget::normalizeAngle(int *angle) -{ - while (*angle < 0) - *angle += 360 * 16; - while (*angle > 360 * 16) - *angle -= 360 * 16; -} diff --git a/examples/opengl/legacy/grabber/glwidget.h b/examples/opengl/legacy/grabber/glwidget.h deleted file mode 100644 index 67020b0ada..0000000000 --- a/examples/opengl/legacy/grabber/glwidget.h +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> - -class GLWidget : public QGLWidget -{ - Q_OBJECT - -public: - GLWidget(QWidget *parent = 0); - ~GLWidget(); - - int xRotation() const { return xRot; } - int yRotation() const { return yRot; } - int zRotation() const { return zRot; } - -public slots: - void setXRotation(int angle); - void setYRotation(int angle); - void setZRotation(int angle); - -signals: - void xRotationChanged(int angle); - void yRotationChanged(int angle); - void zRotationChanged(int angle); - -protected: - void initializeGL() override; - void paintGL() override; - void resizeGL(int width, int height) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - -private slots: - void advanceGears(); - -private: - GLuint makeGear(const GLfloat *reflectance, GLdouble innerRadius, - GLdouble outerRadius, GLdouble thickness, - GLdouble toothSize, GLint toothCount); - void drawGear(GLuint gear, GLdouble dx, GLdouble dy, GLdouble dz, - GLdouble angle); - void normalizeAngle(int *angle); - - GLuint gear1; - GLuint gear2; - GLuint gear3; - int xRot; - int yRot; - int zRot; - int gear1Rot; - - QPoint lastPos; -}; - -#endif // GLWIDGET_H diff --git a/examples/opengl/legacy/grabber/grabber.pro b/examples/opengl/legacy/grabber/grabber.pro deleted file mode 100644 index 88c03f1c5e..0000000000 --- a/examples/opengl/legacy/grabber/grabber.pro +++ /dev/null @@ -1,12 +0,0 @@ -HEADERS = glwidget.h \ - mainwindow.h -SOURCES = glwidget.cpp \ - main.cpp \ - mainwindow.cpp -QT += opengl widgets - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/grabber -INSTALLS += target - -qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop") diff --git a/examples/opengl/legacy/grabber/main.cpp b/examples/opengl/legacy/grabber/main.cpp deleted file mode 100644 index e02118b078..0000000000 --- a/examples/opengl/legacy/grabber/main.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "mainwindow.h" - -#include <QApplication> - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - MainWindow window; - window.show(); - return app.exec(); -} diff --git a/examples/opengl/legacy/grabber/mainwindow.cpp b/examples/opengl/legacy/grabber/mainwindow.cpp deleted file mode 100644 index 6ea6a28051..0000000000 --- a/examples/opengl/legacy/grabber/mainwindow.cpp +++ /dev/null @@ -1,216 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "glwidget.h" -#include "mainwindow.h" - -#include <QtWidgets> - -MainWindow::MainWindow() -{ - centralWidget = new QWidget; - setCentralWidget(centralWidget); - - glWidget = new GLWidget; - pixmapLabel = new QLabel; - - glWidgetArea = new QScrollArea; - glWidgetArea->setWidget(glWidget); - glWidgetArea->setWidgetResizable(true); - glWidgetArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - glWidgetArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - glWidgetArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - glWidgetArea->setMinimumSize(50, 50); - - pixmapLabelArea = new QScrollArea; - pixmapLabelArea->setWidget(pixmapLabel); - pixmapLabelArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - pixmapLabelArea->setMinimumSize(50, 50); - - xSlider = createSlider(SIGNAL(xRotationChanged(int)), - SLOT(setXRotation(int))); - ySlider = createSlider(SIGNAL(yRotationChanged(int)), - SLOT(setYRotation(int))); - zSlider = createSlider(SIGNAL(zRotationChanged(int)), - SLOT(setZRotation(int))); - - createActions(); - createMenus(); - - QGridLayout *centralLayout = new QGridLayout; - centralLayout->addWidget(glWidgetArea, 0, 0); - centralLayout->addWidget(pixmapLabelArea, 0, 1); - centralLayout->addWidget(xSlider, 1, 0, 1, 2); - centralLayout->addWidget(ySlider, 2, 0, 1, 2); - centralLayout->addWidget(zSlider, 3, 0, 1, 2); - centralWidget->setLayout(centralLayout); - - xSlider->setValue(15 * 16); - ySlider->setValue(345 * 16); - zSlider->setValue(0 * 16); - - setWindowTitle(tr("Grabber")); - resize(400, 300); -} - -void MainWindow::renderIntoPixmap() -{ - QSize size = getSize(); - if (size.isValid()) { - QPixmap pixmap = glWidget->renderPixmap(size.width(), size.height()); - setPixmap(pixmap); - } -} - -void MainWindow::grabFrameBuffer() -{ - QImage image = glWidget->grabFrameBuffer(); - setPixmap(QPixmap::fromImage(image)); -} - -void MainWindow::clearPixmap() -{ - setPixmap(QPixmap()); -} - -void MainWindow::about() -{ - QMessageBox::about(this, tr("About Grabber"), - tr("The <b>Grabber</b> example demonstrates two approaches for " - "rendering OpenGL into a Qt pixmap.")); -} - -void MainWindow::createActions() -{ - renderIntoPixmapAct = new QAction(tr("&Render into Pixmap..."), this); - renderIntoPixmapAct->setShortcut(tr("Ctrl+R")); - connect(renderIntoPixmapAct, SIGNAL(triggered()), - this, SLOT(renderIntoPixmap())); - - grabFrameBufferAct = new QAction(tr("&Grab Frame Buffer"), this); - grabFrameBufferAct->setShortcut(tr("Ctrl+G")); - connect(grabFrameBufferAct, SIGNAL(triggered()), - this, SLOT(grabFrameBuffer())); - - clearPixmapAct = new QAction(tr("&Clear Pixmap"), this); - clearPixmapAct->setShortcut(tr("Ctrl+L")); - connect(clearPixmapAct, SIGNAL(triggered()), this, SLOT(clearPixmap())); - - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcuts(QKeySequence::Quit); - connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - - aboutAct = new QAction(tr("&About"), this); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); - - aboutQtAct = new QAction(tr("About &Qt"), this); - connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); -} - -void MainWindow::createMenus() -{ - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(renderIntoPixmapAct); - fileMenu->addAction(grabFrameBufferAct); - fileMenu->addAction(clearPixmapAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); - - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); -} - -QSlider *MainWindow::createSlider(const char *changedSignal, - const char *setterSlot) -{ - QSlider *slider = new QSlider(Qt::Horizontal); - slider->setRange(0, 360 * 16); - slider->setSingleStep(16); - slider->setPageStep(15 * 16); - slider->setTickInterval(15 * 16); - slider->setTickPosition(QSlider::TicksRight); - connect(slider, SIGNAL(valueChanged(int)), glWidget, setterSlot); - connect(glWidget, changedSignal, slider, SLOT(setValue(int))); - return slider; -} - -void MainWindow::setPixmap(const QPixmap &pixmap) -{ - pixmapLabel->setPixmap(pixmap); - QSize size = pixmap.size() / pixmap.devicePixelRatio(); - if (size - QSize(1, 0) == pixmapLabelArea->maximumViewportSize()) - size -= QSize(1, 0); - pixmapLabel->resize(size); -} - -QSize MainWindow::getSize() -{ - bool ok; - QString text = QInputDialog::getText(this, tr("Grabber"), - tr("Enter pixmap size:"), - QLineEdit::Normal, - tr("%1 x %2").arg(glWidget->width()) - .arg(glWidget->height()), - &ok); - if (!ok) - return QSize(); - - QRegularExpression regExp(tr("^([0-9]+) *x *([0-9]+)$")); - QRegularExpressionMatch match = regExp.match(text); - if (match.hasMatch()) { - int width = match.captured(1).toInt(); - int height = match.captured(2).toInt(); - if (width > 0 && width < 2048 && height > 0 && height < 2048) - return QSize(width, height); - } - - return glWidget->size(); -} diff --git a/examples/opengl/legacy/grabber/mainwindow.h b/examples/opengl/legacy/grabber/mainwindow.h deleted file mode 100644 index 2d699784dd..0000000000 --- a/examples/opengl/legacy/grabber/mainwindow.h +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include <QMainWindow> - -QT_BEGIN_NAMESPACE -class QLabel; -class QMenu; -class QScrollArea; -class QSlider; -QT_END_NAMESPACE - -class GLWidget; - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - MainWindow(); - -private slots: - void renderIntoPixmap(); - void grabFrameBuffer(); - void clearPixmap(); - void about(); - -private: - void createActions(); - void createMenus(); - QSlider *createSlider(const char *changedSignal, const char *setterSlot); - void setPixmap(const QPixmap &pixmap); - QSize getSize(); - - QWidget *centralWidget; - QScrollArea *glWidgetArea; - QScrollArea *pixmapLabelArea; - GLWidget *glWidget; - QLabel *pixmapLabel; - QSlider *xSlider; - QSlider *ySlider; - QSlider *zSlider; - - QMenu *fileMenu; - QMenu *helpMenu; - QAction *grabFrameBufferAct; - QAction *renderIntoPixmapAct; - QAction *clearPixmapAct; - QAction *exitAct; - QAction *aboutAct; - QAction *aboutQtAct; -}; - -#endif // MAINWINDOW_H |