summaryrefslogtreecommitdiffstats
path: root/doc/src/examples/2dpainting.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/examples/2dpainting.qdoc')
-rw-r--r--doc/src/examples/2dpainting.qdoc210
1 files changed, 0 insertions, 210 deletions
diff --git a/doc/src/examples/2dpainting.qdoc b/doc/src/examples/2dpainting.qdoc
deleted file mode 100644
index d2d19b6e3b..0000000000
--- a/doc/src/examples/2dpainting.qdoc
+++ /dev/null
@@ -1,210 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** GNU Free Documentation License
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms
-** and conditions contained in a signed written agreement between you
-** and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example opengl/2dpainting
- \title 2D Painting Example
-
- The 2D Painting example shows how QPainter and QGLWidget can be used
- together to display accelerated 2D graphics on supported hardware.
-
- \image 2dpainting-example.png
-
- The QPainter class is used to draw 2D graphics primitives onto
- paint devices provided by QPaintDevice subclasses, such as QWidget
- and QImage.
-
- Since QGLWidget is a subclass of QWidget, it is possible
- to reimplement its \l{QWidget::paintEvent()}{paintEvent()} and use
- QPainter to draw on the device, just as you would with a QWidget.
- The only difference is that the painting operations will be accelerated
- in hardware if it is supported by your system's OpenGL drivers.
-
- In this example, we perform the same painting operations on a
- QWidget and a QGLWidget. The QWidget is shown with anti-aliasing
- enabled, and the QGLWidget will also use anti-aliasing if the
- required extensions are supported by your system's OpenGL driver.
-
- \section1 Overview
-
- To be able to compare the results of painting onto a QGLWidget subclass
- with native drawing in a QWidget subclass, we want to show both kinds
- of widget side by side. To do this, we derive subclasses of QWidget and
- QGLWidget, using a separate \c Helper class to perform the same painting
- operations for each, and lay them out in a top-level widget, itself
- provided a the \c Window class.
-
- \section1 Helper Class Definition
-
- In this example, the painting operations are performed by a helper class.
- We do this because we want the same painting operations to be performed
- for both our QWidget subclass and the QGLWidget subclass.
-
- The \c Helper class is minimal:
-
- \snippet examples/opengl/2dpainting/helper.h 0
-
- Apart from the constructor, it only provides a \c paint() function to paint
- using a painter supplied by one of our widget subclasses.
-
- \section1 Helper Class Implementation
-
- The constructor of the class sets up the resources it needs to paint
- content onto a widget:
-
- \snippet examples/opengl/2dpainting/helper.cpp 0
-
- The actual painting is performed in the \c paint() function. This takes
- a QPainter that has already been set up to paint onto a paint device
- (either a QWidget or a QGLWidget), a QPaintEvent that provides information
- about the region to be painted, and a measure of the elapsed time (in
- milliseconds) since the paint device was last updated.
-
- \snippet examples/opengl/2dpainting/helper.cpp 1
-
- We begin painting by filling in the region contained in the paint event
- before translating the origin of the coordinate system so that the rest
- of the painting operations will be displaced towards the center of the
- paint device.
-
- We draw a spiral pattern of circles, using the elapsed time specified to
- animate them so that they appear to move outward and around the coordinate
- system's origin:
-
- \snippet examples/opengl/2dpainting/helper.cpp 2
-
- Since the coordinate system is rotated many times during
- this process, we \l{QPainter::save()}{save()} the QPainter's state
- beforehand and \l{QPainter::restore()}{restore()} it afterwards.
-
- \snippet examples/opengl/2dpainting/helper.cpp 3
-
- We draw some text at the origin to complete the effect.
-
- \section1 Widget Class Definition
-
- The \c Widget class provides a basic custom widget that we use to
- display the simple animation painted by the \c Helper class.
-
- \snippet examples/opengl/2dpainting/widget.h 0
-
- Apart from the constructor, it only contains a
- \l{QWidget::paintEvent()}{paintEvent()} function, that lets us draw
- customized content, and a slot that is used to animate its contents.
- One member variable keeps track of the \c Helper that the widget uses
- to paint its contents, and the other records the elapsed time since
- it was last updated.
-
- \section1 Widget Class Implementation
-
- The constructor only initializes the member variables, storing the
- \c Helper object supplied and calling the base class's constructor,
- and enforces a fixed size for the widget:
-
- \snippet examples/opengl/2dpainting/widget.cpp 0
-
- The \c animate() slot is called whenever a timer, which we define later, times
- out:
-
- \snippet examples/opengl/2dpainting/widget.cpp 1
-
- Here, we determine the interval that has elapsed since the timer last
- timed out, and we add it to any existing value before repainting the
- widget. Since the animation used in the \c Helper class loops every second,
- we can use the modulo operator to ensure that the \c elapsed variable is
- always less than 1000.
-
- Since the \c Helper class does all of the actual painting, we only have
- to implement a paint event that sets up a QPainter for the widget and calls
- the helper's \c paint() function:
-
- \snippet examples/opengl/2dpainting/widget.cpp 2
-
- \section1 GLWidget Class Definition
-
- The \c GLWidget class definition is basically the same as the \c Widget
- class except that it is derived from QGLWidget.
-
- \snippet examples/opengl/2dpainting/glwidget.h 0
-
- Again, the member variables record the \c Helper used to paint the
- widget and the elapsed time since the previous update.
-
- \section1 GLWidget Class Implementation
-
- The constructor differs a little from the \c Widget class's constructor:
-
- \snippet examples/opengl/2dpainting/glwidget.cpp 0
-
- As well as initializing the \c elapsed member variable and storing the
- \c Helper object used to paint the widget, the base class's constructor
- is called with the format that specifies the \l QGL::SampleBuffers flag.
- This enables anti-aliasing if it is supported by your system's OpenGL
- driver.
-
- The \c animate() slot is exactly the same as that provided by the \c Widget
- class:
-
- \snippet examples/opengl/2dpainting/glwidget.cpp 1
-
- The \c paintEvent() is almost the same as that found in the \c Widget class:
-
- \snippet examples/opengl/2dpainting/glwidget.cpp 2
-
- Since anti-aliasing will be enabled if available, we only need to set up
- a QPainter on the widget and call the helper's \c paint() function to display
- the widget's contents.
-
- \section1 Window Class Definition
-
- The \c Window class has a basic, minimal definition:
-
- \snippet examples/opengl/2dpainting/window.h 0
-
- It contains a single \c Helper object that will be shared between all
- widgets.
-
- \section1 Window Class Implementation
-
- The constructor does all the work, creating a widget of each type and
- inserting them with labels into a layout:
-
- \snippet examples/opengl/2dpainting/window.cpp 0
-
- A timer with a 50 millisecond time out is constructed for animation purposes,
- and connected to the \c animate() slots of the \c Widget and \c GLWidget objects.
- Once started, the widgets should be updated at around 20 frames per second.
-
- \section1 Running the Example
-
- The example shows the same painting operations performed at the same time
- in a \c Widget and a \c GLWidget. The quality and speed of rendering in the
- \c GLWidget depends on the level of support for multisampling and hardware
- acceleration that your system's OpenGL driver provides. If support for either
- of these is lacking, the driver may fall back on a software renderer that
- may trade quality for speed.
-*/