summaryrefslogtreecommitdiffstats
path: root/examples/widgets/widgets/tablet
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dietrich-de@nokia.com>2012-08-17 13:23:19 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-20 12:20:55 +0200
commit806dda08d685bc5f9ed71dfe8b61f21848d48066 (patch)
treea63533a1c4a335ae17adc105abb0ae4e62e2f26e /examples/widgets/widgets/tablet
parent9f942014e31842b512c3198de035d041c59f54a9 (diff)
Moving .qdoc files under examples/widgets/doc
Updated those .qdoc files to refer to the new relative examples emplacement. Images and snippets to be moved later. Also grouped all widgets related examples under widgets. Change-Id: Ib29696e2d8948524537f53e8dda88f9ee26a597f Reviewed-by: J-P Nurmi <j-p.nurmi@nokia.com>
Diffstat (limited to 'examples/widgets/widgets/tablet')
-rw-r--r--examples/widgets/widgets/tablet/main.cpp59
-rw-r--r--examples/widgets/widgets/tablet/mainwindow.cpp274
-rw-r--r--examples/widgets/widgets/tablet/mainwindow.h113
-rw-r--r--examples/widgets/widgets/tablet/tablet.desktop11
-rw-r--r--examples/widgets/widgets/tablet/tablet.pro17
-rw-r--r--examples/widgets/widgets/tablet/tabletapplication.cpp56
-rw-r--r--examples/widgets/widgets/tablet/tabletapplication.h66
-rw-r--r--examples/widgets/widgets/tablet/tabletcanvas.cpp275
-rw-r--r--examples/widgets/widgets/tablet/tabletcanvas.h114
9 files changed, 985 insertions, 0 deletions
diff --git a/examples/widgets/widgets/tablet/main.cpp b/examples/widgets/widgets/tablet/main.cpp
new file mode 100644
index 0000000000..bca3076cfc
--- /dev/null
+++ b/examples/widgets/widgets/tablet/main.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 <QtWidgets>
+
+#include "mainwindow.h"
+#include "tabletapplication.h"
+#include "tabletcanvas.h"
+
+//! [0]
+int main(int argv, char *args[])
+{
+ TabletApplication app(argv, args);
+ TabletCanvas *canvas = new TabletCanvas;
+ app.setCanvas(canvas);
+
+ MainWindow mainWindow(canvas);
+ mainWindow.resize(500, 500);
+ mainWindow.show();
+ return app.exec();
+}
+//! [0]
diff --git a/examples/widgets/widgets/tablet/mainwindow.cpp b/examples/widgets/widgets/tablet/mainwindow.cpp
new file mode 100644
index 0000000000..3b87346583
--- /dev/null
+++ b/examples/widgets/widgets/tablet/mainwindow.cpp
@@ -0,0 +1,274 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 <QtWidgets>
+
+#include "mainwindow.h"
+#include "tabletcanvas.h"
+
+//! [0]
+MainWindow::MainWindow(TabletCanvas *canvas)
+{
+ myCanvas = canvas;
+ createActions();
+ createMenus();
+
+ myCanvas->setColor(Qt::red);
+ myCanvas->setLineWidthType(TabletCanvas::LineWidthPressure);
+ myCanvas->setAlphaChannelType(TabletCanvas::NoAlpha);
+ myCanvas->setColorSaturationType(TabletCanvas::NoSaturation);
+
+ setWindowTitle(tr("Tablet Example"));
+ setCentralWidget(myCanvas);
+}
+//! [0]
+
+//! [1]
+void MainWindow::brushColorAct()
+{
+ QColor color = QColorDialog::getColor(myCanvas->color());
+
+ if (color.isValid())
+ myCanvas->setColor(color);
+}
+//! [1]
+
+//! [2]
+void MainWindow::alphaActionTriggered(QAction *action)
+{
+ if (action == alphaChannelPressureAction) {
+ myCanvas->setAlphaChannelType(TabletCanvas::AlphaPressure);
+ } else if (action == alphaChannelTiltAction) {
+ myCanvas->setAlphaChannelType(TabletCanvas::AlphaTilt);
+ } else {
+ myCanvas->setAlphaChannelType(TabletCanvas::NoAlpha);
+ }
+}
+//! [2]
+
+//! [3]
+void MainWindow::lineWidthActionTriggered(QAction *action)
+{
+ if (action == lineWidthPressureAction) {
+ myCanvas->setLineWidthType(TabletCanvas::LineWidthPressure);
+ } else if (action == lineWidthTiltAction) {
+ myCanvas->setLineWidthType(TabletCanvas::LineWidthTilt);
+ } else {
+ myCanvas->setLineWidthType(TabletCanvas::NoLineWidth);
+ }
+}
+//! [3]
+
+//! [4]
+void MainWindow::saturationActionTriggered(QAction *action)
+{
+ if (action == colorSaturationVTiltAction) {
+ myCanvas->setColorSaturationType(TabletCanvas::SaturationVTilt);
+ } else if (action == colorSaturationHTiltAction) {
+ myCanvas->setColorSaturationType(TabletCanvas::SaturationHTilt);
+ } else if (action == colorSaturationPressureAction) {
+ myCanvas->setColorSaturationType(TabletCanvas::SaturationPressure);
+ } else {
+ myCanvas->setColorSaturationType(TabletCanvas::NoSaturation);
+ }
+}
+//! [4]
+
+//! [5]
+void MainWindow::saveAct()
+{
+ QString path = QDir::currentPath() + "/untitled.png";
+ QString fileName = QFileDialog::getSaveFileName(this, tr("Save Picture"),
+ path);
+
+ if (!myCanvas->saveImage(fileName))
+ QMessageBox::information(this, "Error Saving Picture",
+ "Could not save the image");
+}
+//! [5]
+
+//! [6]
+void MainWindow::loadAct()
+{
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open Picture"),
+ QDir::currentPath());
+
+ if (!myCanvas->loadImage(fileName))
+ QMessageBox::information(this, "Error Opening Picture",
+ "Could not open picture");
+}
+//! [6]
+
+//! [7]
+void MainWindow::aboutAct()
+{
+ QMessageBox::about(this, tr("About Tablet Example"),
+ tr("This example shows use of a Wacom tablet in Qt"));
+}
+//! [7]
+
+//! [8]
+void MainWindow::createActions()
+{
+//! [8]
+ brushColorAction = new QAction(tr("&Brush Color..."), this);
+ brushColorAction->setShortcut(tr("Ctrl+C"));
+ connect(brushColorAction, SIGNAL(triggered()),
+ this, SLOT(brushColorAct()));
+
+//! [9]
+ alphaChannelPressureAction = new QAction(tr("&Pressure"), this);
+ alphaChannelPressureAction->setCheckable(true);
+
+ alphaChannelTiltAction = new QAction(tr("&Tilt"), this);
+ alphaChannelTiltAction->setCheckable(true);
+
+ noAlphaChannelAction = new QAction(tr("No Alpha Channel"), this);
+ noAlphaChannelAction->setCheckable(true);
+ noAlphaChannelAction->setChecked(true);
+
+ alphaChannelGroup = new QActionGroup(this);
+ alphaChannelGroup->addAction(alphaChannelPressureAction);
+ alphaChannelGroup->addAction(alphaChannelTiltAction);
+ alphaChannelGroup->addAction(noAlphaChannelAction);
+ connect(alphaChannelGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(alphaActionTriggered(QAction*)));
+
+//! [9]
+ colorSaturationVTiltAction = new QAction(tr("&Vertical Tilt"), this);
+ colorSaturationVTiltAction->setCheckable(true);
+
+ colorSaturationHTiltAction = new QAction(tr("&Horizontal Tilt"), this);
+ colorSaturationHTiltAction->setCheckable(true);
+
+ colorSaturationPressureAction = new QAction(tr("&Pressure"), this);
+ colorSaturationPressureAction->setCheckable(true);
+
+ noColorSaturationAction = new QAction(tr("&No Color Saturation"), this);
+ noColorSaturationAction->setCheckable(true);
+ noColorSaturationAction->setChecked(true);
+
+ colorSaturationGroup = new QActionGroup(this);
+ colorSaturationGroup->addAction(colorSaturationVTiltAction);
+ colorSaturationGroup->addAction(colorSaturationHTiltAction);
+ colorSaturationGroup->addAction(colorSaturationPressureAction);
+ colorSaturationGroup->addAction(noColorSaturationAction);
+ connect(colorSaturationGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(saturationActionTriggered(QAction*)));
+
+ lineWidthPressureAction = new QAction(tr("&Pressure"), this);
+ lineWidthPressureAction->setCheckable(true);
+ lineWidthPressureAction->setChecked(true);
+
+ lineWidthTiltAction = new QAction(tr("&Tilt"), this);
+ lineWidthTiltAction->setCheckable(true);
+
+ lineWidthFixedAction = new QAction(tr("&Fixed"), this);
+ lineWidthFixedAction->setCheckable(true);
+
+ lineWidthGroup = new QActionGroup(this);
+ lineWidthGroup->addAction(lineWidthPressureAction);
+ lineWidthGroup->addAction(lineWidthTiltAction);
+ lineWidthGroup->addAction(lineWidthFixedAction);
+ connect(lineWidthGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(lineWidthActionTriggered(QAction*)));
+
+ exitAction = new QAction(tr("E&xit"), this);
+ exitAction->setShortcuts(QKeySequence::Quit);
+ connect(exitAction, SIGNAL(triggered()),
+ this, SLOT(close()));
+
+ loadAction = new QAction(tr("&Open..."), this);
+ loadAction->setShortcuts(QKeySequence::Open);
+ connect(loadAction, SIGNAL(triggered()),
+ this, SLOT(loadAct()));
+
+ saveAction = new QAction(tr("&Save As..."), this);
+ saveAction->setShortcuts(QKeySequence::SaveAs);
+ connect(saveAction, SIGNAL(triggered()),
+ this, SLOT(saveAct()));
+
+ aboutAction = new QAction(tr("A&bout"), this);
+ aboutAction->setShortcut(tr("Ctrl+B"));
+ connect(aboutAction, SIGNAL(triggered()),
+ this, SLOT(aboutAct()));
+
+ aboutQtAction = new QAction(tr("About &Qt"), this);
+ aboutQtAction->setShortcut(tr("Ctrl+Q"));
+ connect(aboutQtAction, SIGNAL(triggered()),
+ qApp, SLOT(aboutQt()));
+//! [10]
+}
+//! [10]
+
+//! [11]
+void MainWindow::createMenus()
+{
+ fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->addAction(loadAction);
+ fileMenu->addAction(saveAction);
+ fileMenu->addSeparator();
+ fileMenu->addAction(exitAction);
+
+ brushMenu = menuBar()->addMenu(tr("&Brush"));
+ brushMenu->addAction(brushColorAction);
+
+ tabletMenu = menuBar()->addMenu(tr("&Tablet"));
+
+ lineWidthMenu = tabletMenu->addMenu(tr("&Line Width"));
+ lineWidthMenu->addAction(lineWidthPressureAction);
+ lineWidthMenu->addAction(lineWidthTiltAction);
+ lineWidthMenu->addAction(lineWidthFixedAction);
+
+ alphaChannelMenu = tabletMenu->addMenu(tr("&Alpha Channel"));
+ alphaChannelMenu->addAction(alphaChannelPressureAction);
+ alphaChannelMenu->addAction(alphaChannelTiltAction);
+ alphaChannelMenu->addAction(noAlphaChannelAction);
+
+ colorSaturationMenu = tabletMenu->addMenu(tr("&Color Saturation"));
+ colorSaturationMenu->addAction(colorSaturationVTiltAction);
+ colorSaturationMenu->addAction(colorSaturationHTiltAction);
+ colorSaturationMenu->addAction(noColorSaturationAction);
+
+ helpMenu = menuBar()->addMenu("&Help");
+ helpMenu->addAction(aboutAction);
+ helpMenu->addAction(aboutQtAction);
+}
+//! [11]
diff --git a/examples/widgets/widgets/tablet/mainwindow.h b/examples/widgets/widgets/tablet/mainwindow.h
new file mode 100644
index 0000000000..dcab683b4e
--- /dev/null
+++ b/examples/widgets/widgets/tablet/mainwindow.h
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 QAction;
+class QActionGroup;
+class QMenu;
+class QStatusBar;
+QT_END_NAMESPACE
+class TabletCanvas;
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(TabletCanvas *canvas);
+
+private slots:
+ void brushColorAct();
+ void alphaActionTriggered(QAction *action);
+ void lineWidthActionTriggered(QAction *action);
+ void saturationActionTriggered(QAction *action);
+ void saveAct();
+ void loadAct();
+ void aboutAct();
+
+private:
+ void createActions();
+ void createMenus();
+
+ TabletCanvas *myCanvas;
+
+ QAction *brushColorAction;
+ QActionGroup *brushActionGroup;
+
+ QActionGroup *alphaChannelGroup;
+ QAction *alphaChannelPressureAction;
+ QAction *alphaChannelTiltAction;
+ QAction *noAlphaChannelAction;
+
+ QActionGroup *colorSaturationGroup;
+ QAction *colorSaturationVTiltAction;
+ QAction *colorSaturationHTiltAction;
+ QAction *colorSaturationPressureAction;
+ QAction *noColorSaturationAction;
+
+ QActionGroup *lineWidthGroup;
+ QAction *lineWidthPressureAction;
+ QAction *lineWidthTiltAction;
+ QAction *lineWidthFixedAction;
+
+ QAction *exitAction;
+ QAction *saveAction;
+ QAction *loadAction;
+
+ QAction *aboutAction;
+ QAction *aboutQtAction;
+
+ QMenu *fileMenu;
+ QMenu *brushMenu;
+ QMenu *tabletMenu;
+ QMenu *helpMenu;
+ QMenu *colorSaturationMenu;
+ QMenu *lineWidthMenu;
+ QMenu *alphaChannelMenu;
+};
+//! [0]
+
+#endif
diff --git a/examples/widgets/widgets/tablet/tablet.desktop b/examples/widgets/widgets/tablet/tablet.desktop
new file mode 100644
index 0000000000..9b40dc25d4
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tablet.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Name=Tablet
+Exec=/opt/usr/bin/tablet
+Icon=tablet
+X-Window-Icon=
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
diff --git a/examples/widgets/widgets/tablet/tablet.pro b/examples/widgets/widgets/tablet/tablet.pro
new file mode 100644
index 0000000000..9ad533fc64
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tablet.pro
@@ -0,0 +1,17 @@
+HEADERS = mainwindow.h \
+ tabletcanvas.h \
+ tabletapplication.h
+SOURCES = mainwindow.cpp \
+ main.cpp \
+ tabletcanvas.cpp \
+ tabletapplication.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/widgets/tablet
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS tablet.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/widgets/tablet
+INSTALLS += target sources
+
+QT += widgets
+
+simulator: warning(This example might not fully work on Simulator platform)
diff --git a/examples/widgets/widgets/tablet/tabletapplication.cpp b/examples/widgets/widgets/tablet/tabletapplication.cpp
new file mode 100644
index 0000000000..68038d2f84
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tabletapplication.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 <QtWidgets>
+
+#include "tabletapplication.h"
+
+//! [0]
+bool TabletApplication::event(QEvent *event)
+{
+ if (event->type() == QEvent::TabletEnterProximity ||
+ event->type() == QEvent::TabletLeaveProximity) {
+ myCanvas->setTabletDevice(
+ static_cast<QTabletEvent *>(event)->device());
+ return true;
+ }
+ return QApplication::event(event);
+}
+//! [0]
diff --git a/examples/widgets/widgets/tablet/tabletapplication.h b/examples/widgets/widgets/tablet/tabletapplication.h
new file mode 100644
index 0000000000..4f981b9074
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tabletapplication.h
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 TABLETAPPLICATION_H
+#define TABLETAPPLICATION_H
+
+#include <QApplication>
+
+#include "tabletcanvas.h"
+
+//! [0]
+class TabletApplication : public QApplication
+{
+ Q_OBJECT
+
+public:
+ TabletApplication(int &argv, char **args)
+ : QApplication(argv, args) {}
+
+ bool event(QEvent *event);
+ void setCanvas(TabletCanvas *canvas)
+ { myCanvas = canvas; }
+
+private:
+ TabletCanvas *myCanvas;
+};
+//! [0]
+
+#endif
diff --git a/examples/widgets/widgets/tablet/tabletcanvas.cpp b/examples/widgets/widgets/tablet/tabletcanvas.cpp
new file mode 100644
index 0000000000..184de57c64
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tabletcanvas.cpp
@@ -0,0 +1,275 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 <QtWidgets>
+#include <math.h>
+
+#include "tabletcanvas.h"
+
+//! [0]
+TabletCanvas::TabletCanvas()
+{
+ resize(500, 500);
+ myBrush = QBrush();
+ myPen = QPen();
+ initPixmap();
+ setAutoFillBackground(true);
+ deviceDown = false;
+ myColor = Qt::red;
+ myTabletDevice = QTabletEvent::Stylus;
+ alphaChannelType = NoAlpha;
+ colorSaturationType = NoSaturation;
+ lineWidthType = LineWidthPressure;
+}
+
+void TabletCanvas::initPixmap()
+{
+ QPixmap newPixmap = QPixmap(width(), height());
+ newPixmap.fill(Qt::white);
+ QPainter painter(&newPixmap);
+ if (!pixmap.isNull())
+ painter.drawPixmap(0, 0, pixmap);
+ painter.end();
+ pixmap = newPixmap;
+}
+//! [0]
+
+//! [1]
+bool TabletCanvas::saveImage(const QString &file)
+{
+ return pixmap.save(file);
+}
+//! [1]
+
+//! [2]
+bool TabletCanvas::loadImage(const QString &file)
+{
+ bool success = pixmap.load(file);
+
+ if (success) {
+ update();
+ return true;
+ }
+ return false;
+}
+//! [2]
+
+//! [3]
+void TabletCanvas::tabletEvent(QTabletEvent *event)
+{
+
+ switch (event->type()) {
+ case QEvent::TabletPress:
+ if (!deviceDown) {
+ deviceDown = true;
+ polyLine[0] = polyLine[1] = polyLine[2] = event->pos();
+ }
+ break;
+ case QEvent::TabletRelease:
+ if (deviceDown)
+ deviceDown = false;
+ break;
+ case QEvent::TabletMove:
+ polyLine[2] = polyLine[1];
+ polyLine[1] = polyLine[0];
+ polyLine[0] = event->pos();
+
+ if (deviceDown) {
+ updateBrush(event);
+ QPainter painter(&pixmap);
+ paintPixmap(painter, event);
+ }
+ break;
+ default:
+ break;
+ }
+ update();
+}
+//! [3]
+
+//! [4]
+void TabletCanvas::paintEvent(QPaintEvent *)
+{
+ QPainter painter(this);
+ painter.drawPixmap(0, 0, pixmap);
+}
+//! [4]
+
+//! [5]
+void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
+{
+ QPoint brushAdjust(10, 10);
+
+ switch (myTabletDevice) {
+ case QTabletEvent::Airbrush:
+ myBrush.setColor(myColor);
+ myBrush.setStyle(brushPattern(event->pressure()));
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(myBrush);
+
+ for (int i = 0; i < 3; ++i) {
+ painter.drawEllipse(QRect(polyLine[i] - brushAdjust,
+ polyLine[i] + brushAdjust));
+ }
+ break;
+ case QTabletEvent::Puck:
+ case QTabletEvent::FourDMouse:
+ case QTabletEvent::RotationStylus:
+ {
+ const QString error(tr("This input device is not supported by the example."));
+#ifndef QT_NO_STATUSTIP
+ QStatusTipEvent status(error);
+ QApplication::sendEvent(this, &status);
+#else
+ qWarning() << error;
+#endif
+ }
+ break;
+ default:
+ {
+ const QString error(tr("Unknown tablet device - treating as stylus"));
+#ifndef QT_NO_STATUSTIP
+ QStatusTipEvent status(error);
+ QApplication::sendEvent(this, &status);
+#else
+ qWarning() << error;
+#endif
+ }
+ // FALL-THROUGH
+ case QTabletEvent::Stylus:
+ painter.setBrush(myBrush);
+ painter.setPen(myPen);
+ painter.drawLine(polyLine[1], event->pos());
+ break;
+ }
+}
+//! [5]
+
+//! [6]
+Qt::BrushStyle TabletCanvas::brushPattern(qreal value)
+{
+ int pattern = int((value) * 100.0) % 7;
+
+ switch (pattern) {
+ case 0:
+ return Qt::SolidPattern;
+ case 1:
+ return Qt::Dense1Pattern;
+ case 2:
+ return Qt::Dense2Pattern;
+ case 3:
+ return Qt::Dense3Pattern;
+ case 4:
+ return Qt::Dense4Pattern;
+ case 5:
+ return Qt::Dense5Pattern;
+ case 6:
+ return Qt::Dense6Pattern;
+ default:
+ return Qt::Dense7Pattern;
+ }
+}
+//! [6]
+
+//! [7]
+void TabletCanvas::updateBrush(QTabletEvent *event)
+{
+ int hue, saturation, value, alpha;
+ myColor.getHsv(&hue, &saturation, &value, &alpha);
+
+ int vValue = int(((event->yTilt() + 60.0) / 120.0) * 255);
+ int hValue = int(((event->xTilt() + 60.0) / 120.0) * 255);
+//! [7] //! [8]
+
+ switch (alphaChannelType) {
+ case AlphaPressure:
+ myColor.setAlpha(int(event->pressure() * 255.0));
+ break;
+ case AlphaTilt:
+ myColor.setAlpha(maximum(abs(vValue - 127), abs(hValue - 127)));
+ break;
+ default:
+ myColor.setAlpha(255);
+ }
+
+//! [8] //! [9]
+ switch (colorSaturationType) {
+ case SaturationVTilt:
+ myColor.setHsv(hue, vValue, value, alpha);
+ break;
+ case SaturationHTilt:
+ myColor.setHsv(hue, hValue, value, alpha);
+ break;
+ case SaturationPressure:
+ myColor.setHsv(hue, int(event->pressure() * 255.0), value, alpha);
+ break;
+ default:
+ ;
+ }
+
+//! [9] //! [10]
+ switch (lineWidthType) {
+ case LineWidthPressure:
+ myPen.setWidthF(event->pressure() * 10 + 1);
+ break;
+ case LineWidthTilt:
+ myPen.setWidthF(maximum(abs(vValue - 127), abs(hValue - 127)) / 12);
+ break;
+ default:
+ myPen.setWidthF(1);
+ }
+
+//! [10] //! [11]
+ if (event->pointerType() == QTabletEvent::Eraser) {
+ myBrush.setColor(Qt::white);
+ myPen.setColor(Qt::white);
+ myPen.setWidthF(event->pressure() * 10 + 1);
+ } else {
+ myBrush.setColor(myColor);
+ myPen.setColor(myColor);
+ }
+}
+//! [11]
+
+void TabletCanvas::resizeEvent(QResizeEvent *)
+{
+ initPixmap();
+ polyLine[0] = polyLine[1] = polyLine[2] = QPoint();
+}
diff --git a/examples/widgets/widgets/tablet/tabletcanvas.h b/examples/widgets/widgets/tablet/tabletcanvas.h
new file mode 100644
index 0000000000..c778578928
--- /dev/null
+++ b/examples/widgets/widgets/tablet/tabletcanvas.h
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Nokia Corporation and its Subsidiary(-ies) 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 TABLETCANVAS_H
+#define TABLETCANVAS_H
+
+#include <QWidget>
+#include <QPixmap>
+#include <QPoint>
+#include <QTabletEvent>
+#include <QColor>
+#include <QBrush>
+#include <QPen>
+#include <QPoint>
+
+QT_BEGIN_NAMESPACE
+class QPaintEvent;
+class QString;
+QT_END_NAMESPACE
+
+//! [0]
+class TabletCanvas : public QWidget
+{
+ Q_OBJECT
+
+public:
+ enum AlphaChannelType { AlphaPressure, AlphaTilt, NoAlpha };
+ enum ColorSaturationType { SaturationVTilt, SaturationHTilt,
+ SaturationPressure, NoSaturation };
+ enum LineWidthType { LineWidthPressure, LineWidthTilt, NoLineWidth };
+
+ TabletCanvas();
+
+ bool saveImage(const QString &file);
+ bool loadImage(const QString &file);
+ void setAlphaChannelType(AlphaChannelType type)
+ { alphaChannelType = type; }
+ void setColorSaturationType(ColorSaturationType type)
+ { colorSaturationType = type; }
+ void setLineWidthType(LineWidthType type)
+ { lineWidthType = type; }
+ void setColor(const QColor &color)
+ { myColor = color; }
+ QColor color() const
+ { return myColor; }
+ void setTabletDevice(QTabletEvent::TabletDevice device)
+ { myTabletDevice = device; }
+ int maximum(int a, int b)
+ { return a > b ? a : b; }
+
+protected:
+ void tabletEvent(QTabletEvent *event);
+ void paintEvent(QPaintEvent *event);
+ void resizeEvent(QResizeEvent *event);
+
+private:
+ void initPixmap();
+ void paintPixmap(QPainter &painter, QTabletEvent *event);
+ Qt::BrushStyle brushPattern(qreal value);
+ void updateBrush(QTabletEvent *event);
+
+ AlphaChannelType alphaChannelType;
+ ColorSaturationType colorSaturationType;
+ LineWidthType lineWidthType;
+ QTabletEvent::PointerType pointerType;
+ QTabletEvent::TabletDevice myTabletDevice;
+ QColor myColor;
+
+ QPixmap pixmap;
+ QBrush myBrush;
+ QPen myPen;
+ bool deviceDown;
+ QPoint polyLine[3];
+};
+//! [0]
+
+#endif