Remove all QWS centric examples
Change-Id: I1bd9c40c7cc70e088a23283d1c3e89d12c1c5f7d Reviewed-by: Donald Carr <donald.carr@nokia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com> Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
This commit is contained in:
parent
8b5218a1e9
commit
81043dcb55
@ -31,7 +31,6 @@ SUBDIRS = \
|
|||||||
}
|
}
|
||||||
wince*|embedded|x11:!contains(QT_CONFIG, no-gui): SUBDIRS += embedded
|
wince*|embedded|x11:!contains(QT_CONFIG, no-gui): SUBDIRS += embedded
|
||||||
|
|
||||||
embedded:SUBDIRS += qws
|
|
||||||
contains(QT_BUILD_PARTS, tools):!contains(QT_CONFIG, no-gui):SUBDIRS += qtestlib
|
contains(QT_BUILD_PARTS, tools):!contains(QT_CONFIG, no-gui):SUBDIRS += qtestlib
|
||||||
contains(QT_CONFIG, opengl): SUBDIRS += opengl
|
contains(QT_CONFIG, opengl): SUBDIRS += opengl
|
||||||
contains(QT_CONFIG, dbus): SUBDIRS += dbus
|
contains(QT_CONFIG, dbus): SUBDIRS += dbus
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
These examples show how to take advantage of features specifically designed
|
|
||||||
for use on systems with limited resources, specialized hardware, and small
|
|
||||||
screens.
|
|
||||||
|
|
||||||
|
|
||||||
Documentation for these examples can be found via the Examples
|
|
||||||
link in the main Qt documentation.
|
|
@ -1,95 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "dbscreen.h"
|
|
||||||
#include <QApplication>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
bool DBScreen::initDevice()
|
|
||||||
{
|
|
||||||
if (!QLinuxFbScreen::initDevice())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
QScreenCursor::initSoftwareCursor();
|
|
||||||
image = new QImage(deviceWidth(), deviceHeight(), pixelFormat());
|
|
||||||
painter = new QPainter(image);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
void DBScreen::shutdownDevice()
|
|
||||||
{
|
|
||||||
QLinuxFbScreen::shutdownDevice();
|
|
||||||
delete painter;
|
|
||||||
delete image;
|
|
||||||
}
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
void DBScreen::solidFill(const QColor &color, const QRegion ®ion)
|
|
||||||
{
|
|
||||||
QVector<QRect> rects = region.rects();
|
|
||||||
for (int i = 0; i < rects.size(); i++)
|
|
||||||
painter->fillRect(rects.at(i), color);
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
void DBScreen::blit(const QImage &image, const QPoint &topLeft, const QRegion ®ion)
|
|
||||||
{
|
|
||||||
QVector<QRect> rects = region.rects();
|
|
||||||
for (int i = 0; i < rects.size(); i++) {
|
|
||||||
QRect destRect = rects.at(i);
|
|
||||||
QRect srcRect(destRect.x()-topLeft.x(), destRect.y()-topLeft.y(), destRect.width(), destRect.height());
|
|
||||||
painter->drawImage(destRect.topLeft(), image, srcRect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
void DBScreen::exposeRegion(QRegion region, int changing)
|
|
||||||
{
|
|
||||||
QLinuxFbScreen::exposeRegion(region, changing);
|
|
||||||
QLinuxFbScreen::blit(*image, QPoint(0, 0), region);
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Name=Double Buffered Graphics Driver
|
|
||||||
Exec=/opt/usr/bin/dbscreen
|
|
||||||
Icon=dbscreen
|
|
||||||
X-Window-Icon=
|
|
||||||
X-HildonDesk-ShowInToolbar=true
|
|
||||||
X-Osso-Type=application/x-executable
|
|
@ -1,66 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 DBSCREEN_H
|
|
||||||
#define DBSCREEN_H
|
|
||||||
|
|
||||||
#include <QLinuxFbScreen>
|
|
||||||
#include <QPainter>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class DBScreen : public QLinuxFbScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DBScreen(int displayId) : QLinuxFbScreen(displayId) {};
|
|
||||||
~DBScreen() {}
|
|
||||||
bool initDevice();
|
|
||||||
void shutdownDevice();
|
|
||||||
void blit(const QImage &image, const QPoint &topLeft, const QRegion ®ion);
|
|
||||||
void solidFill(const QColor &color, const QRegion ®ion);
|
|
||||||
void exposeRegion(QRegion region, int changing);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QPainter *painter;
|
|
||||||
QImage *image;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif // DBSCREEN_H
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
TEMPLATE = lib
|
|
||||||
CONFIG += plugin
|
|
||||||
|
|
||||||
TARGET = dbscreen
|
|
||||||
target.path += $$[QT_INSTALL_PLUGINS]/gfxdrivers
|
|
||||||
INSTALLS += target
|
|
||||||
|
|
||||||
HEADERS = dbscreen.h
|
|
||||||
SOURCES = dbscreendriverplugin.cpp \
|
|
||||||
dbscreen.cpp
|
|
||||||
|
|
||||||
QT += widgets
|
|
||||||
simulator: warning(This example does not work on Simulator platform)
|
|
@ -1,76 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 <QScreenDriverPlugin>
|
|
||||||
#include "dbscreen.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class DBScreenDriverPlugin : public QScreenDriverPlugin
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DBScreenDriverPlugin();
|
|
||||||
QScreen* create(const QString& key, int displayId);
|
|
||||||
QStringList keys () const;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
DBScreenDriverPlugin::DBScreenDriverPlugin() : QScreenDriverPlugin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
QScreen* DBScreenDriverPlugin::create(const QString& key, int displayId)
|
|
||||||
{
|
|
||||||
if (key.toLower() != "dbscreen")
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return new DBScreen(displayId);
|
|
||||||
}
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
QStringList DBScreenDriverPlugin::keys() const
|
|
||||||
{
|
|
||||||
return QStringList() << "dbscreen";
|
|
||||||
}
|
|
||||||
//! [2] //! [3]
|
|
||||||
|
|
||||||
Q_EXPORT_PLUGIN2(dbscreen, DBScreenDriverPlugin)
|
|
||||||
//! [3]
|
|
@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Name=Linux Framebuffer
|
|
||||||
Exec=/opt/usr/bin/framebuffer
|
|
||||||
Icon=framebuffer
|
|
||||||
X-Window-Icon=
|
|
||||||
X-HildonDesk-ShowInToolbar=true
|
|
||||||
X-Osso-Type=application/x-executable
|
|
@ -1,15 +0,0 @@
|
|||||||
TEMPLATE = app
|
|
||||||
TARGET = framebuffer
|
|
||||||
CONFIG -= qt
|
|
||||||
|
|
||||||
SOURCES += main.c
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/framebuffer
|
|
||||||
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS framebuffer.pro
|
|
||||||
sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/framebuffer
|
|
||||||
INSTALLS += target sources
|
|
||||||
QT += widgets
|
|
||||||
|
|
||||||
|
|
||||||
simulator: warning(This example does not work on Simulator platform)
|
|
@ -1,585 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
#include <linux/kd.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
struct fb_var_screeninfo vinfo;
|
|
||||||
struct fb_fix_screeninfo finfo;
|
|
||||||
char *frameBuffer = 0;
|
|
||||||
int fbFd = 0;
|
|
||||||
int ttyFd = 0;
|
|
||||||
|
|
||||||
void printFixedInfo()
|
|
||||||
{
|
|
||||||
printf("Fixed screen info:\n"
|
|
||||||
"\tid: %s\n"
|
|
||||||
"\tsmem_start: 0x%lx\n"
|
|
||||||
"\tsmem_len: %d\n"
|
|
||||||
"\ttype: %d\n"
|
|
||||||
"\ttype_aux: %d\n"
|
|
||||||
"\tvisual: %d\n"
|
|
||||||
"\txpanstep: %d\n"
|
|
||||||
"\typanstep: %d\n"
|
|
||||||
"\tywrapstep: %d\n"
|
|
||||||
"\tline_length: %d\n"
|
|
||||||
"\tmmio_start: 0x%lx\n"
|
|
||||||
"\tmmio_len: %d\n"
|
|
||||||
"\taccel: %d\n"
|
|
||||||
"\n",
|
|
||||||
finfo.id, finfo.smem_start, finfo.smem_len, finfo.type,
|
|
||||||
finfo.type_aux, finfo.visual, finfo.xpanstep, finfo.ypanstep,
|
|
||||||
finfo.ywrapstep, finfo.line_length, finfo.mmio_start,
|
|
||||||
finfo.mmio_len, finfo.accel);
|
|
||||||
}
|
|
||||||
|
|
||||||
void printVariableInfo()
|
|
||||||
{
|
|
||||||
printf("Variable screen info:\n"
|
|
||||||
"\txres: %d\n"
|
|
||||||
"\tyres: %d\n"
|
|
||||||
"\txres_virtual: %d\n"
|
|
||||||
"\tyres_virtual: %d\n"
|
|
||||||
"\tyoffset: %d\n"
|
|
||||||
"\txoffset: %d\n"
|
|
||||||
"\tbits_per_pixel: %d\n"
|
|
||||||
"\tgrayscale: %d\n"
|
|
||||||
"\tred: offset: %2d, length: %2d, msb_right: %2d\n"
|
|
||||||
"\tgreen: offset: %2d, length: %2d, msb_right: %2d\n"
|
|
||||||
"\tblue: offset: %2d, length: %2d, msb_right: %2d\n"
|
|
||||||
"\ttransp: offset: %2d, length: %2d, msb_right: %2d\n"
|
|
||||||
"\tnonstd: %d\n"
|
|
||||||
"\tactivate: %d\n"
|
|
||||||
"\theight: %d\n"
|
|
||||||
"\twidth: %d\n"
|
|
||||||
"\taccel_flags: 0x%x\n"
|
|
||||||
"\tpixclock: %d\n"
|
|
||||||
"\tleft_margin: %d\n"
|
|
||||||
"\tright_margin: %d\n"
|
|
||||||
"\tupper_margin: %d\n"
|
|
||||||
"\tlower_margin: %d\n"
|
|
||||||
"\thsync_len: %d\n"
|
|
||||||
"\tvsync_len: %d\n"
|
|
||||||
"\tsync: %d\n"
|
|
||||||
"\tvmode: %d\n"
|
|
||||||
"\n",
|
|
||||||
vinfo.xres, vinfo.yres, vinfo.xres_virtual, vinfo.yres_virtual,
|
|
||||||
vinfo.xoffset, vinfo.yoffset, vinfo.bits_per_pixel, vinfo.grayscale,
|
|
||||||
vinfo.red.offset, vinfo.red.length, vinfo.red.msb_right,
|
|
||||||
vinfo.green.offset, vinfo.green.length, vinfo.green.msb_right,
|
|
||||||
vinfo.blue.offset, vinfo.blue.length, vinfo.blue.msb_right,
|
|
||||||
vinfo.transp.offset, vinfo.transp.length, vinfo.transp.msb_right,
|
|
||||||
vinfo.nonstd, vinfo.activate, vinfo.height, vinfo.width,
|
|
||||||
vinfo.accel_flags, vinfo.pixclock, vinfo.left_margin,
|
|
||||||
vinfo.right_margin, vinfo.upper_margin, vinfo.lower_margin,
|
|
||||||
vinfo.hsync_len, vinfo.vsync_len, vinfo.sync, vinfo.vmode);
|
|
||||||
}
|
|
||||||
|
|
||||||
long switchToGraphicsMode()
|
|
||||||
{
|
|
||||||
const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0};
|
|
||||||
const char * const *dev;
|
|
||||||
long oldMode = KD_TEXT;
|
|
||||||
|
|
||||||
for (dev = devs; *dev; ++dev) {
|
|
||||||
ttyFd = open(*dev, O_RDWR);
|
|
||||||
if (ttyFd != -1)
|
|
||||||
break;
|
|
||||||
printf("Opening tty device %s failed: %s\n", *dev, strerror(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
ioctl(ttyFd, KDGETMODE, &oldMode);
|
|
||||||
if (oldMode == KD_GRAPHICS) {
|
|
||||||
printf("Was in graphics mode already. Skipping\n");
|
|
||||||
return oldMode;
|
|
||||||
}
|
|
||||||
int ret = ioctl(ttyFd, KDSETMODE, KD_GRAPHICS);
|
|
||||||
if (ret == -1) {
|
|
||||||
printf("Switch to graphics mode failed: %s\n", strerror(errno));
|
|
||||||
return oldMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Successfully switched to graphics mode.\n\n");
|
|
||||||
|
|
||||||
return oldMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void restoreTextMode(long oldMode)
|
|
||||||
{
|
|
||||||
if (ttyFd == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ioctl(ttyFd, KDSETMODE, oldMode);
|
|
||||||
close(ttyFd);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct fb_cmap oldPalette;
|
|
||||||
struct fb_cmap palette;
|
|
||||||
int paletteSize = 0;
|
|
||||||
|
|
||||||
void initPalette_16()
|
|
||||||
{
|
|
||||||
if (finfo.type == FB_TYPE_PACKED_PIXELS) {
|
|
||||||
// We'll setup a grayscale map for 4bpp linear
|
|
||||||
int val = 0;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 16; ++i) {
|
|
||||||
palette.red[i] = (val << 8) | val;
|
|
||||||
palette.green[i] = (val << 8) | val;
|
|
||||||
palette.blue[i] = (val << 8) | val;
|
|
||||||
val += 17;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default 16 colour palette
|
|
||||||
unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2,
|
|
||||||
0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F,
|
|
||||||
0x00, 0x00, 0x00, 0x82 };
|
|
||||||
unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5,
|
|
||||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00,
|
|
||||||
0x00, 0x7F, 0x7F, 0x7F };
|
|
||||||
unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11,
|
|
||||||
0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F,
|
|
||||||
0x7F, 0x7F, 0x00, 0x00 };
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 16; ++i) {
|
|
||||||
palette.red[i] = ((reds[i]) << 8) | reds[i];
|
|
||||||
palette.green[i] = ((greens[i]) << 8) | greens[i];
|
|
||||||
palette.blue[i] = ((blues[i]) << 8) | blues[i];
|
|
||||||
palette.transp[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void initPalette_256()
|
|
||||||
{
|
|
||||||
if (vinfo.grayscale) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 256; ++i) {
|
|
||||||
unsigned short c = (i << 8) | i;
|
|
||||||
palette.red[i] = c;
|
|
||||||
palette.green[i] = c;
|
|
||||||
palette.blue[i] = c;
|
|
||||||
palette.transp[i] = 0;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6x6x6 216 color cube
|
|
||||||
int i = 0;
|
|
||||||
int ir, ig, ib;
|
|
||||||
for (ir = 0x0; ir <= 0xff; ir += 0x33) {
|
|
||||||
for (ig = 0x0; ig <= 0xff; ig += 0x33) {
|
|
||||||
for (ib = 0x0; ib <= 0xff; ib += 0x33) {
|
|
||||||
palette.red[i] = (ir << 8)|ir;
|
|
||||||
palette.green[i] = (ig << 8)|ig;
|
|
||||||
palette.blue[i] = (ib << 8)|ib;
|
|
||||||
palette.transp[i] = 0;
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void initPalette()
|
|
||||||
{
|
|
||||||
switch (vinfo.bits_per_pixel) {
|
|
||||||
case 8: paletteSize = 256; break;
|
|
||||||
case 4: paletteSize = 16; break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!paletteSize)
|
|
||||||
return; /* not using a palette */
|
|
||||||
|
|
||||||
/* read old palette */
|
|
||||||
oldPalette.start = 0;
|
|
||||||
oldPalette.len = paletteSize;
|
|
||||||
oldPalette.red = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
oldPalette.green = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
oldPalette.blue=(unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
oldPalette.transp=(unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
if (ioctl(ttyFd, FBIOGETCMAP, &oldPalette) == -1)
|
|
||||||
perror("initPalette: error reading palette");
|
|
||||||
|
|
||||||
/* create new palette */
|
|
||||||
palette.start = 0;
|
|
||||||
palette.len = paletteSize;
|
|
||||||
palette.red = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
palette.green = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
palette.blue = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
palette.transp = (unsigned short*)malloc(sizeof(unsigned short)*paletteSize);
|
|
||||||
switch (paletteSize) {
|
|
||||||
case 16: initPalette_16(); break;
|
|
||||||
case 256: initPalette_256(); break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set new palette */
|
|
||||||
if (ioctl(ttyFd, FBIOPUTCMAP, &palette) == -1)
|
|
||||||
perror("initPalette: error setting palette");
|
|
||||||
}
|
|
||||||
|
|
||||||
void resetPalette()
|
|
||||||
{
|
|
||||||
if (paletteSize == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (ioctl(ttyFd, FBIOPUTCMAP, &oldPalette) == -1)
|
|
||||||
perror("resetPalette");
|
|
||||||
|
|
||||||
free(oldPalette.red);
|
|
||||||
free(oldPalette.green);
|
|
||||||
free(oldPalette.blue);
|
|
||||||
free(oldPalette.transp);
|
|
||||||
|
|
||||||
free(palette.red);
|
|
||||||
free(palette.green);
|
|
||||||
free(palette.blue);
|
|
||||||
free(palette.transp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect_rgb32(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
const int bytesPerPixel = 4;
|
|
||||||
const int stride = finfo.line_length / bytesPerPixel;
|
|
||||||
|
|
||||||
int *dest = (int*)(frameBuffer)
|
|
||||||
+ (y0 + vinfo.yoffset) * stride
|
|
||||||
+ (x0 + vinfo.xoffset);
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
for (y = 0; y < height; ++y) {
|
|
||||||
for (x = 0; x < width; ++x) {
|
|
||||||
dest[x] = color;
|
|
||||||
}
|
|
||||||
dest += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect_rgb18(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
const int bytesPerPixel = 3;
|
|
||||||
const int stride = finfo.line_length - width * bytesPerPixel;
|
|
||||||
const int red = (color & 0xff0000) >> 16;
|
|
||||||
const int green = (color & 0xff00) >> 8;
|
|
||||||
const int blue = (color & 0xff);
|
|
||||||
const unsigned int packed = (blue >> 2) |
|
|
||||||
((green >> 2) << 6) |
|
|
||||||
((red >> 2) << 12);
|
|
||||||
const char color18[3] = { packed & 0xff,
|
|
||||||
(packed & 0xff00) >> 8,
|
|
||||||
(packed & 0xff0000) >> 16 };
|
|
||||||
|
|
||||||
char *dest = (char*)(frameBuffer)
|
|
||||||
+ (y0 + vinfo.yoffset) * stride
|
|
||||||
+ (x0 + vinfo.xoffset);
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
for (y = 0; y < height; ++y) {
|
|
||||||
for (x = 0; x < width; ++x) {
|
|
||||||
*dest++ = color18[0];
|
|
||||||
*dest++ = color18[1];
|
|
||||||
*dest++ = color18[2];
|
|
||||||
}
|
|
||||||
dest += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect_rgb16(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
const int bytesPerPixel = 2;
|
|
||||||
const int stride = finfo.line_length / bytesPerPixel;
|
|
||||||
const int red = (color & 0xff0000) >> (16 + 3);
|
|
||||||
const int green = (color & 0xff00) >> (8 + 2);
|
|
||||||
const int blue = (color & 0xff) >> 3;
|
|
||||||
const short color16 = blue | (green << 5) | (red << (5 + 6));
|
|
||||||
|
|
||||||
short *dest = (short*)(frameBuffer)
|
|
||||||
+ (y0 + vinfo.yoffset) * stride
|
|
||||||
+ (x0 + vinfo.xoffset);
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
for (y = 0; y < height; ++y) {
|
|
||||||
for (x = 0; x < width; ++x) {
|
|
||||||
dest[x] = color16;
|
|
||||||
}
|
|
||||||
dest += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect_rgb15(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
const int bytesPerPixel = 2;
|
|
||||||
const int stride = finfo.line_length / bytesPerPixel;
|
|
||||||
const int red = (color & 0xff0000) >> (16 + 3);
|
|
||||||
const int green = (color & 0xff00) >> (8 + 3);
|
|
||||||
const int blue = (color & 0xff) >> 3;
|
|
||||||
const short color15 = blue | (green << 5) | (red << (5 + 5));
|
|
||||||
|
|
||||||
short *dest = (short*)(frameBuffer)
|
|
||||||
+ (y0 + vinfo.yoffset) * stride
|
|
||||||
+ (x0 + vinfo.xoffset);
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
for (y = 0; y < height; ++y) {
|
|
||||||
for (x = 0; x < width; ++x) {
|
|
||||||
dest[x] = color15;
|
|
||||||
}
|
|
||||||
dest += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect_palette(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
const int bytesPerPixel = 1;
|
|
||||||
const int stride = finfo.line_length / bytesPerPixel;
|
|
||||||
const unsigned char color8 = color;
|
|
||||||
|
|
||||||
unsigned char *dest = (unsigned char*)(frameBuffer)
|
|
||||||
+ (y0 + vinfo.yoffset) * stride
|
|
||||||
+ (x0 + vinfo.xoffset);
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
for (y = 0; y < height; ++y) {
|
|
||||||
for (x = 0; x < width; ++x) {
|
|
||||||
dest[x] = color8;
|
|
||||||
}
|
|
||||||
dest += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawRect(int x0, int y0, int width, int height, int color)
|
|
||||||
{
|
|
||||||
switch (vinfo.bits_per_pixel) {
|
|
||||||
case 32:
|
|
||||||
drawRect_rgb32(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
case 18:
|
|
||||||
drawRect_rgb18(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
drawRect_rgb16(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
drawRect_rgb15(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
drawRect_palette(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
drawRect_palette(x0, y0, width, height, color);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("Warning: drawRect() not implemented for color depth %i\n",
|
|
||||||
vinfo.bits_per_pixel);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define PERFORMANCE_RUN_COUNT 5
|
|
||||||
void performSpeedTest(void* fb, int fbSize)
|
|
||||||
{
|
|
||||||
int i, j, run;
|
|
||||||
|
|
||||||
struct timeval startTime, endTime;
|
|
||||||
unsigned long long results[PERFORMANCE_RUN_COUNT];
|
|
||||||
unsigned long long average;
|
|
||||||
|
|
||||||
unsigned int* testImage;
|
|
||||||
|
|
||||||
unsigned int randData[17] = {
|
|
||||||
0x3A428472, 0x724B84D3, 0x26B898AB, 0x7D980E3C, 0x5345A084,
|
|
||||||
0x6779B66B, 0x791EE4B4, 0x6E8EE3CC, 0x63AF504A, 0x18A21B33,
|
|
||||||
0x0E26EB73, 0x022F708E, 0x1740F3B0, 0x7E2C699D, 0x0E8A570B,
|
|
||||||
0x5F2C22FB, 0x6A742130
|
|
||||||
};
|
|
||||||
|
|
||||||
printf("Frame Buffer Performance test...\n");
|
|
||||||
|
|
||||||
for (run=0; run<PERFORMANCE_RUN_COUNT; ++run) {
|
|
||||||
|
|
||||||
/* Generate test image with random(ish) data: */
|
|
||||||
testImage = (unsigned int*) malloc(fbSize);
|
|
||||||
j = run;
|
|
||||||
for (i=0; i < (int)(fbSize / sizeof(int)); ++i) {
|
|
||||||
testImage[i] = randData[j];
|
|
||||||
j++;
|
|
||||||
if (j >= 17)
|
|
||||||
j = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
gettimeofday(&startTime, NULL);
|
|
||||||
memcpy(fb, testImage, fbSize);
|
|
||||||
gettimeofday(&endTime, NULL);
|
|
||||||
|
|
||||||
long secsDiff = endTime.tv_sec - startTime.tv_sec;
|
|
||||||
results[run] = secsDiff * 1000000 + (endTime.tv_usec - startTime.tv_usec);
|
|
||||||
|
|
||||||
free(testImage);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
average = 0;
|
|
||||||
for (i=0; i<PERFORMANCE_RUN_COUNT; ++i)
|
|
||||||
average += results[i];
|
|
||||||
average = average / PERFORMANCE_RUN_COUNT;
|
|
||||||
|
|
||||||
printf(" Average: %llu usecs\n", average);
|
|
||||||
printf(" Bandwidth: %.03f MByte/Sec\n", (fbSize / 1048576.0) / ((double)average / 1000000.0));
|
|
||||||
printf(" Max. FPS: %.03f fps\n\n", 1000000.0 / (double)average);
|
|
||||||
|
|
||||||
/* Clear the framebuffer back to black again: */
|
|
||||||
memset(fb, 0, fbSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
long int screensize = 0;
|
|
||||||
int doGraphicsMode = 1;
|
|
||||||
long oldKdMode = KD_TEXT;
|
|
||||||
const char *devfile = "/dev/fb0";
|
|
||||||
int nextArg = 1;
|
|
||||||
|
|
||||||
if (nextArg < argc) {
|
|
||||||
if (strncmp("nographicsmodeswitch", argv[nextArg],
|
|
||||||
strlen("nographicsmodeswitch")) == 0)
|
|
||||||
{
|
|
||||||
++nextArg;
|
|
||||||
doGraphicsMode = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (nextArg < argc)
|
|
||||||
devfile = argv[nextArg++];
|
|
||||||
|
|
||||||
/* Open the file for reading and writing */
|
|
||||||
fbFd = open(devfile, O_RDWR);
|
|
||||||
if (fbFd == -1) {
|
|
||||||
perror("Error: cannot open framebuffer device");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
printf("The framebuffer device was opened successfully.\n\n");
|
|
||||||
|
|
||||||
/* Get fixed screen information */
|
|
||||||
if (ioctl(fbFd, FBIOGET_FSCREENINFO, &finfo) == -1) {
|
|
||||||
perror("Error reading fixed information");
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
printFixedInfo();
|
|
||||||
|
|
||||||
/* Figure out the size of the screen in bytes */
|
|
||||||
screensize = finfo.smem_len;
|
|
||||||
|
|
||||||
/* Map the device to memory */
|
|
||||||
frameBuffer = (char *)mmap(0, screensize,
|
|
||||||
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
||||||
fbFd, 0);
|
|
||||||
if (frameBuffer == MAP_FAILED) {
|
|
||||||
perror("Error: Failed to map framebuffer device to memory");
|
|
||||||
exit(4);
|
|
||||||
}
|
|
||||||
printf("The framebuffer device was mapped to memory successfully.\n"
|
|
||||||
"\n");
|
|
||||||
|
|
||||||
if (doGraphicsMode)
|
|
||||||
oldKdMode = switchToGraphicsMode();
|
|
||||||
|
|
||||||
/* Get variable screen information */
|
|
||||||
if (ioctl(fbFd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
|
|
||||||
perror("Error reading variable information");
|
|
||||||
exit(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
printVariableInfo();
|
|
||||||
|
|
||||||
performSpeedTest(frameBuffer, screensize);
|
|
||||||
|
|
||||||
initPalette();
|
|
||||||
|
|
||||||
if (paletteSize == 0) {
|
|
||||||
printf("Will draw 3 rectangles on the screen,\n"
|
|
||||||
"they should be colored red, green and blue (in that order).\n");
|
|
||||||
drawRect(vinfo.xres / 8, vinfo.yres / 8,
|
|
||||||
vinfo.xres / 4, vinfo.yres / 4,
|
|
||||||
0xffff0000);
|
|
||||||
drawRect(vinfo.xres * 3 / 8, vinfo.yres * 3 / 8,
|
|
||||||
vinfo.xres / 4, vinfo.yres / 4,
|
|
||||||
0xff00ff00);
|
|
||||||
drawRect(vinfo.xres * 5 / 8, vinfo.yres * 5 / 8,
|
|
||||||
vinfo.xres / 4, vinfo.yres / 4,
|
|
||||||
0xff0000ff);
|
|
||||||
} else {
|
|
||||||
printf("Will rectangles from the 16 first entries in the color palette"
|
|
||||||
" on the screen\n");
|
|
||||||
int y;
|
|
||||||
int x;
|
|
||||||
for (y = 0; y < 4; ++y) {
|
|
||||||
for (x = 0; x < 4; ++x) {
|
|
||||||
drawRect(vinfo.xres / 4 * x, vinfo.yres / 4 * y,
|
|
||||||
vinfo.xres / 4, vinfo.yres / 4,
|
|
||||||
4 * y + x);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep(5);
|
|
||||||
|
|
||||||
resetPalette();
|
|
||||||
|
|
||||||
printf(" Done.\n");
|
|
||||||
|
|
||||||
if (doGraphicsMode)
|
|
||||||
restoreTextMode(oldKdMode);
|
|
||||||
|
|
||||||
munmap(frameBuffer, screensize);
|
|
||||||
close(fbFd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,144 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "calibration.h"
|
|
||||||
|
|
||||||
#include <QWSPointerCalibrationData>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QFile>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QDesktopWidget>
|
|
||||||
#include <QMouseEvent>
|
|
||||||
#include <QScreen>
|
|
||||||
#include <QWSServer>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
Calibration::Calibration()
|
|
||||||
{
|
|
||||||
QRect desktop = QApplication::desktop()->geometry();
|
|
||||||
desktop.moveTo(QPoint(0, 0));
|
|
||||||
setGeometry(desktop);
|
|
||||||
|
|
||||||
setFocusPolicy(Qt::StrongFocus);
|
|
||||||
setFocus();
|
|
||||||
setModal(true);
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
int width = qt_screen->deviceWidth();
|
|
||||||
int height = qt_screen->deviceHeight();
|
|
||||||
|
|
||||||
int dx = width / 10;
|
|
||||||
int dy = height / 10;
|
|
||||||
|
|
||||||
QPoint *points = data.screenPoints;
|
|
||||||
points[QWSPointerCalibrationData::TopLeft] = QPoint(dx, dy);
|
|
||||||
points[QWSPointerCalibrationData::BottomLeft] = QPoint(dx, height - dy);
|
|
||||||
points[QWSPointerCalibrationData::BottomRight] = QPoint(width - dx, height - dy);
|
|
||||||
points[QWSPointerCalibrationData::TopRight] = QPoint(width - dx, dy);
|
|
||||||
points[QWSPointerCalibrationData::Center] = QPoint(width / 2, height / 2);
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
pressCount = 0;
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
Calibration::~Calibration()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
int Calibration::exec()
|
|
||||||
{
|
|
||||||
QWSServer::mouseHandler()->clearCalibration();
|
|
||||||
grabMouse();
|
|
||||||
activateWindow();
|
|
||||||
int ret = QDialog::exec();
|
|
||||||
releaseMouse();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
void Calibration::paintEvent(QPaintEvent*)
|
|
||||||
{
|
|
||||||
QPainter p(this);
|
|
||||||
p.fillRect(rect(), Qt::white);
|
|
||||||
|
|
||||||
QPoint point = data.screenPoints[pressCount];
|
|
||||||
|
|
||||||
// Map to logical coordinates in case the screen is transformed
|
|
||||||
QSize screenSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
|
|
||||||
point = qt_screen->mapFromDevice(point, screenSize);
|
|
||||||
|
|
||||||
p.fillRect(point.x() - 6, point.y() - 1, 13, 3, Qt::black);
|
|
||||||
p.fillRect(point.x() - 1, point.y() - 6, 3, 13, Qt::black);
|
|
||||||
}
|
|
||||||
//! [5]
|
|
||||||
|
|
||||||
//! [6]
|
|
||||||
void Calibration::mouseReleaseEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
// Map from device coordinates in case the screen is transformed
|
|
||||||
QSize screenSize(qt_screen->width(), qt_screen->height());
|
|
||||||
QPoint p = qt_screen->mapToDevice(event->pos(), screenSize);
|
|
||||||
|
|
||||||
data.devPoints[pressCount] = p;
|
|
||||||
|
|
||||||
if (++pressCount < 5)
|
|
||||||
repaint();
|
|
||||||
else
|
|
||||||
accept();
|
|
||||||
}
|
|
||||||
//! [6]
|
|
||||||
|
|
||||||
//! [7]
|
|
||||||
void Calibration::accept()
|
|
||||||
{
|
|
||||||
Q_ASSERT(pressCount == 5);
|
|
||||||
QWSServer::mouseHandler()->calibrate(&data);
|
|
||||||
QDialog::accept();
|
|
||||||
}
|
|
||||||
//! [7]
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 CALIBRATION_H
|
|
||||||
#define CALIBRATION_H
|
|
||||||
|
|
||||||
#include <QDialog>
|
|
||||||
#include <QWSPointerCalibrationData>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class Calibration : public QDialog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Calibration();
|
|
||||||
~Calibration();
|
|
||||||
int exec();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void paintEvent(QPaintEvent*);
|
|
||||||
void mouseReleaseEvent(QMouseEvent*);
|
|
||||||
void accept();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QWSPointerCalibrationData data;
|
|
||||||
int pressCount;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,92 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 <QApplication>
|
|
||||||
#include <QMessageBox>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QWSServer>
|
|
||||||
|
|
||||||
#include "calibration.h"
|
|
||||||
#include "scribblewidget.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
QApplication app(argc, argv, QApplication::GuiServer);
|
|
||||||
|
|
||||||
if (!QWSServer::mouseHandler())
|
|
||||||
qFatal("No mouse handler installed");
|
|
||||||
|
|
||||||
{
|
|
||||||
QMessageBox message;
|
|
||||||
message.setText("<p>Please press once at each of the marks "
|
|
||||||
"shown in the next screen.</p>"
|
|
||||||
"<p>This messagebox will timout after 10 seconds "
|
|
||||||
"if you are unable to close it.</p>");
|
|
||||||
QTimer::singleShot(10 * 1000, &message, SLOT(accept()));
|
|
||||||
message.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [0] //! [1]
|
|
||||||
Calibration cal;
|
|
||||||
cal.exec();
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
{
|
|
||||||
QMessageBox message;
|
|
||||||
message.setText("<p>The next screen will let you test the calibration "
|
|
||||||
"by drawing into a widget.</p><p>This program will "
|
|
||||||
"automatically close after 20 seconds.<p>");
|
|
||||||
QTimer::singleShot(10 * 1000, &message, SLOT(accept()));
|
|
||||||
message.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
ScribbleWidget scribble;
|
|
||||||
scribble.showMaximized();
|
|
||||||
scribble.show();
|
|
||||||
|
|
||||||
app.setActiveWindow(&scribble);
|
|
||||||
QTimer::singleShot(20 * 1000, &app, SLOT(quit()));
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Name=Mouse Calibration
|
|
||||||
Exec=/opt/usr/bin/mousecalibration
|
|
||||||
Icon=mousecalibration
|
|
||||||
X-Window-Icon=
|
|
||||||
X-HildonDesk-ShowInToolbar=true
|
|
||||||
X-Osso-Type=application/x-executable
|
|
@ -1,15 +0,0 @@
|
|||||||
HEADERS += calibration.h \
|
|
||||||
scribblewidget.h
|
|
||||||
SOURCES += calibration.cpp \
|
|
||||||
scribblewidget.cpp \
|
|
||||||
main.cpp
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/mousecalibration
|
|
||||||
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
|
|
||||||
sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/mousecalibration
|
|
||||||
INSTALLS += target sources
|
|
||||||
QT += widgets
|
|
||||||
|
|
||||||
|
|
||||||
simulator: warning(This example does not work on Simulator platform)
|
|
@ -1,92 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "scribblewidget.h"
|
|
||||||
|
|
||||||
ScribbleWidget::ScribbleWidget(QWidget *parent)
|
|
||||||
: QWidget(parent)
|
|
||||||
{
|
|
||||||
scribbling = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::resizeEvent(QResizeEvent *e)
|
|
||||||
{
|
|
||||||
image = QImage(e->size(), QImage::Format_RGB32);
|
|
||||||
image.fill(QColor(Qt::white).rgb());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::mousePressEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if (event->button() != Qt::LeftButton)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lastPoint = event->pos();
|
|
||||||
scribbling = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::mouseMoveEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if ((event->buttons() & Qt::LeftButton) && scribbling)
|
|
||||||
drawLineTo(event->pos());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::mouseReleaseEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if (event->button() == Qt::LeftButton && scribbling) {
|
|
||||||
drawLineTo(event->pos());
|
|
||||||
scribbling = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::paintEvent(QPaintEvent *)
|
|
||||||
{
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.drawImage(QPoint(0, 0), image);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScribbleWidget::drawLineTo(const QPoint &endPoint)
|
|
||||||
{
|
|
||||||
QPainter painter(&image);
|
|
||||||
painter.setPen(QPen(Qt::blue, 1, Qt::SolidLine,
|
|
||||||
Qt::RoundCap, Qt::RoundJoin));
|
|
||||||
painter.drawLine(lastPoint, endPoint);
|
|
||||||
update();
|
|
||||||
lastPoint = endPoint;
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 SCRIBBLEWIDGET_H
|
|
||||||
#define SCRIBBLEWIDGET_H
|
|
||||||
|
|
||||||
#include <QLabel>
|
|
||||||
#include <QMouseEvent>
|
|
||||||
#include <QResizeEvent>
|
|
||||||
#include <QImage>
|
|
||||||
#include <QPainter>
|
|
||||||
|
|
||||||
class ScribbleWidget : public QWidget
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ScribbleWidget(QWidget *parent = 0);
|
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *e);
|
|
||||||
void mousePressEvent(QMouseEvent *event);
|
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
|
||||||
void mouseReleaseEvent(QMouseEvent *event);
|
|
||||||
void paintEvent(QPaintEvent *);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void drawLineTo(const QPoint &endPoint);
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool scribbling;
|
|
||||||
QPoint lastPoint;
|
|
||||||
QImage image;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SCRIBBLEWIDGET_H
|
|
@ -1,10 +0,0 @@
|
|||||||
TEMPLATE = subdirs
|
|
||||||
# no /dev/fbX
|
|
||||||
!qnx:!vxworks:SUBDIRS = framebuffer
|
|
||||||
SUBDIRS += mousecalibration simpledecoration
|
|
||||||
|
|
||||||
# install
|
|
||||||
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS README *.pro
|
|
||||||
sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws
|
|
||||||
INSTALLS += sources
|
|
||||||
QT += widgets
|
|
@ -1,110 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "analogclock.h"
|
|
||||||
|
|
||||||
AnalogClock::AnalogClock(QWidget *parent)
|
|
||||||
: QWidget(parent)
|
|
||||||
{
|
|
||||||
QTimer *timer = new QTimer(this);
|
|
||||||
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
|
|
||||||
timer->start(1000);
|
|
||||||
|
|
||||||
setWindowTitle(tr("Analog Clock"));
|
|
||||||
resize(200, 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AnalogClock::paintEvent(QPaintEvent *)
|
|
||||||
{
|
|
||||||
static const QPoint hourHand[3] = {
|
|
||||||
QPoint(7, 8),
|
|
||||||
QPoint(-7, 8),
|
|
||||||
QPoint(0, -40)
|
|
||||||
};
|
|
||||||
static const QPoint minuteHand[3] = {
|
|
||||||
QPoint(7, 8),
|
|
||||||
QPoint(-7, 8),
|
|
||||||
QPoint(0, -70)
|
|
||||||
};
|
|
||||||
|
|
||||||
QColor hourColor(127, 0, 127);
|
|
||||||
QColor minuteColor(0, 127, 127, 191);
|
|
||||||
|
|
||||||
int side = qMin(width(), height());
|
|
||||||
QTime time = QTime::currentTime();
|
|
||||||
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
|
||||||
painter.translate(width() / 2, height() / 2);
|
|
||||||
painter.scale(side / 200.0, side / 200.0);
|
|
||||||
|
|
||||||
painter.setPen(Qt::NoPen);
|
|
||||||
painter.setBrush(hourColor);
|
|
||||||
|
|
||||||
painter.save();
|
|
||||||
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
|
|
||||||
painter.drawConvexPolygon(hourHand, 3);
|
|
||||||
painter.restore();
|
|
||||||
|
|
||||||
painter.setPen(hourColor);
|
|
||||||
|
|
||||||
for (int i = 0; i < 12; ++i) {
|
|
||||||
painter.drawLine(88, 0, 96, 0);
|
|
||||||
painter.rotate(30.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
painter.setPen(Qt::NoPen);
|
|
||||||
painter.setBrush(minuteColor);
|
|
||||||
|
|
||||||
painter.save();
|
|
||||||
painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
|
|
||||||
painter.drawConvexPolygon(minuteHand, 3);
|
|
||||||
painter.restore();
|
|
||||||
|
|
||||||
painter.setPen(minuteColor);
|
|
||||||
|
|
||||||
for (int j = 0; j < 60; ++j) {
|
|
||||||
if ((j % 5) != 0)
|
|
||||||
painter.drawLine(92, 0, 96, 0);
|
|
||||||
painter.rotate(6.0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 ANALOGCLOCK_H
|
|
||||||
#define ANALOGCLOCK_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
class AnalogClock : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
AnalogClock(QWidget *parent = 0);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,59 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 <QApplication>
|
|
||||||
#include "analogclock.h"
|
|
||||||
#include "mydecoration.h"
|
|
||||||
|
|
||||||
//! [create application]
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication app(argc, argv);
|
|
||||||
MyDecoration *decoration = new MyDecoration();
|
|
||||||
app.qwsSetDecoration(decoration);
|
|
||||||
//! [create application]
|
|
||||||
|
|
||||||
//! [start application]
|
|
||||||
AnalogClock clock;
|
|
||||||
clock.show();
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
//! [start application]
|
|
@ -1,374 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "mydecoration.h"
|
|
||||||
|
|
||||||
/* XPM */
|
|
||||||
static const char * const _close_button[] = {
|
|
||||||
"16 16 3 1",
|
|
||||||
" c none",
|
|
||||||
". c #ffafaf",
|
|
||||||
"x c #000000",
|
|
||||||
" ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" x............x ",
|
|
||||||
" x.x........x.x ",
|
|
||||||
" x..x......x..x ",
|
|
||||||
" x...x....x...x ",
|
|
||||||
" x....x..x....x ",
|
|
||||||
" x.....xx.....x ",
|
|
||||||
" x.....xx.....x ",
|
|
||||||
" x....x..x....x ",
|
|
||||||
" x...x....x...x ",
|
|
||||||
" x..x......x..x ",
|
|
||||||
" x.x........x.x ",
|
|
||||||
" x............x ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
static const char * const _normalize_button[] = {
|
|
||||||
"16 16 4 1",
|
|
||||||
" c none",
|
|
||||||
". c #dfdfff",
|
|
||||||
"o c #7f7f7f",
|
|
||||||
"x c #000000",
|
|
||||||
" ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" xx...........x ",
|
|
||||||
" x.x..........x ",
|
|
||||||
" x..x..x......x ",
|
|
||||||
" x...xxx......x ",
|
|
||||||
" x...xxx......x ",
|
|
||||||
" x..xxxx......x ",
|
|
||||||
" x............x ",
|
|
||||||
" x.......xxxx.x ",
|
|
||||||
" x.......x..x.x ",
|
|
||||||
" x.......x..x.x ",
|
|
||||||
" x.......xxxx.x ",
|
|
||||||
" x............x ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
static const char * const _maximize_button[] = {
|
|
||||||
"16 16 4 1",
|
|
||||||
" c none",
|
|
||||||
". c #dfdfff",
|
|
||||||
"o c #7f7f7f",
|
|
||||||
"x c #000000",
|
|
||||||
" ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" x............x ",
|
|
||||||
" x.......xxxx.x ",
|
|
||||||
" x........xxx.x ",
|
|
||||||
" x........xxx.x ",
|
|
||||||
" x.......x..x.x ",
|
|
||||||
" x......x.....x ",
|
|
||||||
" x.....x......x ",
|
|
||||||
" x.oooo.......x ",
|
|
||||||
" x.o..o.......x ",
|
|
||||||
" x.o..o.......x ",
|
|
||||||
" x.oooo.......x ",
|
|
||||||
" x............x ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
static const char * const _help_button[] = {
|
|
||||||
"16 16 3 1",
|
|
||||||
" c none",
|
|
||||||
". c #afffdf",
|
|
||||||
"x c #000000",
|
|
||||||
" ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" x............x ",
|
|
||||||
" x....xxxx....x ",
|
|
||||||
" x..xx....xx..x ",
|
|
||||||
" x.xx......xx.x ",
|
|
||||||
" x.xx......xx.x ",
|
|
||||||
" x........xx..x ",
|
|
||||||
" x......xx....x ",
|
|
||||||
" x.....xx.....x ",
|
|
||||||
" x.....xx.....x ",
|
|
||||||
" x............x ",
|
|
||||||
" x.....xx.....x ",
|
|
||||||
" x............x ",
|
|
||||||
" xxxxxxxxxxxxxx ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
//! [constructor start]
|
|
||||||
MyDecoration::MyDecoration()
|
|
||||||
: QDecorationDefault()
|
|
||||||
{
|
|
||||||
border = 4;
|
|
||||||
titleHeight = 24;
|
|
||||||
buttonWidth = 20;
|
|
||||||
buttonHeight = 20;
|
|
||||||
buttonMargin = 2;
|
|
||||||
buttonHints << Qt::Window
|
|
||||||
<< Qt::WindowMaximizeButtonHint
|
|
||||||
<< Qt::WindowContextHelpButtonHint;
|
|
||||||
//! [constructor start]
|
|
||||||
|
|
||||||
//! [map window flags to decoration regions]
|
|
||||||
buttonHintMap[Qt::Window] = Close;
|
|
||||||
buttonHintMap[Qt::WindowMaximizeButtonHint] = Maximize;
|
|
||||||
buttonHintMap[Qt::WindowContextHelpButtonHint] = Help;
|
|
||||||
//! [map window flags to decoration regions]
|
|
||||||
|
|
||||||
//! [map decoration regions to pixmaps]
|
|
||||||
normalButtonPixmaps[Close] = QPixmap(_close_button);
|
|
||||||
normalButtonPixmaps[Maximize] = QPixmap(_maximize_button);
|
|
||||||
normalButtonPixmaps[Normalize] = QPixmap(_normalize_button);
|
|
||||||
normalButtonPixmaps[Help] = QPixmap(_help_button);
|
|
||||||
|
|
||||||
maximizedButtonPixmaps[Close] = QPixmap(_close_button);
|
|
||||||
maximizedButtonPixmaps[Maximize] = QPixmap(_normalize_button);
|
|
||||||
maximizedButtonPixmaps[Normalize] = QPixmap(_normalize_button);
|
|
||||||
maximizedButtonPixmaps[Help] = QPixmap(_help_button);
|
|
||||||
//! [map decoration regions to pixmaps]
|
|
||||||
|
|
||||||
//! [constructor end]
|
|
||||||
stateRegions << Close << Maximize << Help;
|
|
||||||
}
|
|
||||||
//! [constructor end]
|
|
||||||
|
|
||||||
//! [region start]
|
|
||||||
QRegion MyDecoration::region(const QWidget *widget, const QRect &insideRect,
|
|
||||||
int decorationRegion)
|
|
||||||
{
|
|
||||||
//! [region start]
|
|
||||||
//! [calculate the positions of buttons based on the window flags used]
|
|
||||||
QHash<DecorationRegion, int> buttons;
|
|
||||||
Qt::WindowFlags flags = widget->windowFlags();
|
|
||||||
int dx = -buttonMargin - buttonWidth;
|
|
||||||
|
|
||||||
foreach (Qt::WindowType button, buttonHints) {
|
|
||||||
if (flags & button) {
|
|
||||||
int x = (buttons.size() + 1) * dx;
|
|
||||||
buttons[buttonHintMap[button]] = x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [calculate the positions of buttons based on the window flags used]
|
|
||||||
|
|
||||||
//! [calculate the extent of the title]
|
|
||||||
int titleRightMargin = buttons.size() * dx;
|
|
||||||
|
|
||||||
QRect outsideRect(insideRect.left() - border,
|
|
||||||
insideRect.top() - titleHeight - border,
|
|
||||||
insideRect.width() + 2 * border,
|
|
||||||
insideRect.height() + titleHeight + 2 * border);
|
|
||||||
//! [calculate the extent of the title]
|
|
||||||
|
|
||||||
//! [check for all regions]
|
|
||||||
QRegion region;
|
|
||||||
|
|
||||||
if (decorationRegion == All) {
|
|
||||||
region += QRegion(outsideRect) - QRegion(insideRect);
|
|
||||||
return region;
|
|
||||||
}
|
|
||||||
//! [check for all regions]
|
|
||||||
|
|
||||||
//! [compose a region based on the decorations specified]
|
|
||||||
if (decorationRegion & Title) {
|
|
||||||
QRect rect = outsideRect.adjusted(border, border, -border, 0);
|
|
||||||
rect.setHeight(titleHeight);
|
|
||||||
|
|
||||||
// Adjust the width to accommodate buttons.
|
|
||||||
rect.setWidth(qMax(0, rect.width() + titleRightMargin));
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Top) {
|
|
||||||
QRect rect = outsideRect.adjusted(border, 0, -border, 0);
|
|
||||||
rect.setHeight(border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Left) {
|
|
||||||
QRect rect = outsideRect.adjusted(0, border, 0, -border);
|
|
||||||
rect.setWidth(border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Right) {
|
|
||||||
QRect rect = outsideRect.adjusted(0, border, 0, -border);
|
|
||||||
rect.setLeft(rect.right() + 1 - border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Bottom) {
|
|
||||||
QRect rect = outsideRect.adjusted(border, 0, -border, 0);
|
|
||||||
rect.setTop(rect.bottom() + 1 - border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & TopLeft) {
|
|
||||||
QRect rect = outsideRect;
|
|
||||||
rect.setWidth(border);
|
|
||||||
rect.setHeight(border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & TopRight) {
|
|
||||||
QRect rect = outsideRect;
|
|
||||||
rect.setLeft(rect.right() + 1 - border);
|
|
||||||
rect.setHeight(border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & BottomLeft) {
|
|
||||||
QRect rect = outsideRect;
|
|
||||||
rect.setWidth(border);
|
|
||||||
rect.setTop(rect.bottom() + 1 - border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
if (decorationRegion & BottomRight) {
|
|
||||||
QRect rect = outsideRect;
|
|
||||||
rect.setLeft(rect.right() + 1 - border);
|
|
||||||
rect.setTop(rect.bottom() + 1 - border);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
//! [compose a region based on the decorations specified]
|
|
||||||
|
|
||||||
//! [add a region for each button only if it is present]
|
|
||||||
foreach (QDecoration::DecorationRegion testRegion, stateRegions) {
|
|
||||||
if (decorationRegion & testRegion and buttons.contains(testRegion)) {
|
|
||||||
// Inside the title rectangle
|
|
||||||
QRect rect = outsideRect.adjusted(border, border, -border, 0);
|
|
||||||
rect.setHeight(titleHeight);
|
|
||||||
|
|
||||||
dx = buttons[testRegion];
|
|
||||||
rect.setLeft(rect.right() + 1 + dx);
|
|
||||||
rect.setWidth(buttonWidth + buttonMargin);
|
|
||||||
region += rect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [add a region for each button only if it is present]
|
|
||||||
|
|
||||||
//! [region end]
|
|
||||||
return region;
|
|
||||||
}
|
|
||||||
//! [region end]
|
|
||||||
|
|
||||||
//! [paint start]
|
|
||||||
bool MyDecoration::paint(QPainter *painter, const QWidget *widget,
|
|
||||||
int decorationRegion, DecorationState state)
|
|
||||||
{
|
|
||||||
if (decorationRegion == None)
|
|
||||||
return false;
|
|
||||||
//! [paint start]
|
|
||||||
|
|
||||||
//! [paint different regions]
|
|
||||||
bool handled = false;
|
|
||||||
|
|
||||||
QPalette palette = QApplication::palette();
|
|
||||||
QHash<DecorationRegion, QPixmap> buttonPixmaps;
|
|
||||||
|
|
||||||
if (widget->windowState() == Qt::WindowMaximized)
|
|
||||||
buttonPixmaps = maximizedButtonPixmaps;
|
|
||||||
else
|
|
||||||
buttonPixmaps = normalButtonPixmaps;
|
|
||||||
|
|
||||||
if (decorationRegion & Title) {
|
|
||||||
QRect rect = QDecoration::region(widget, Title).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Base));
|
|
||||||
painter->save();
|
|
||||||
painter->setPen(QPen(palette.color(QPalette::Text)));
|
|
||||||
painter->drawText(rect, Qt::AlignCenter, widget->windowTitle());
|
|
||||||
painter->restore();
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Top) {
|
|
||||||
QRect rect = QDecoration::region(widget, Top).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Left) {
|
|
||||||
QRect rect = QDecoration::region(widget, Left).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Right) {
|
|
||||||
QRect rect = QDecoration::region(widget, Right).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & Bottom) {
|
|
||||||
QRect rect = QDecoration::region(widget, Bottom).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & TopLeft) {
|
|
||||||
QRect rect = QDecoration::region(widget, TopLeft).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & TopRight) {
|
|
||||||
QRect rect = QDecoration::region(widget, TopRight).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & BottomLeft) {
|
|
||||||
QRect rect = QDecoration::region(widget, BottomLeft).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
if (decorationRegion & BottomRight) {
|
|
||||||
QRect rect = QDecoration::region(widget, BottomRight).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Dark));
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
//! [paint different regions]
|
|
||||||
|
|
||||||
//! [paint buttons]
|
|
||||||
int margin = (titleHeight - 16) / 2;
|
|
||||||
Qt::WindowFlags flags = widget->windowFlags();
|
|
||||||
|
|
||||||
foreach (DecorationRegion testRegion, stateRegions) {
|
|
||||||
if (decorationRegion & testRegion && flags & buttonHintMap.key(testRegion)) {
|
|
||||||
QRect rect = QDecoration::region(
|
|
||||||
widget, testRegion).boundingRect();
|
|
||||||
painter->fillRect(rect, palette.brush(QPalette::Base));
|
|
||||||
|
|
||||||
QRect buttonRect = rect.adjusted(0, margin, -buttonMargin - margin,
|
|
||||||
-buttonMargin);
|
|
||||||
painter->drawPixmap(buttonRect.topLeft(), buttonPixmaps[testRegion]);
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [paint buttons]
|
|
||||||
|
|
||||||
//! [paint end]
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
//! [paint end]
|
|
@ -1,72 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 MYDECORATION_H
|
|
||||||
#define MYDECORATION_H
|
|
||||||
|
|
||||||
#include <QDecorationDefault>
|
|
||||||
#include <QHash>
|
|
||||||
#include <QPixmap>
|
|
||||||
#include <QRegion>
|
|
||||||
#include <Qt>
|
|
||||||
|
|
||||||
//! [decoration class definition]
|
|
||||||
class MyDecoration : public QDecorationDefault
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MyDecoration();
|
|
||||||
QRegion region(const QWidget *widget, const QRect &insideRect, int decorationRegion);
|
|
||||||
bool paint(QPainter *painter, const QWidget *widget, int decorationRegion, DecorationState state);
|
|
||||||
|
|
||||||
private:
|
|
||||||
int border;
|
|
||||||
int buttonHeight;
|
|
||||||
int buttonMargin;
|
|
||||||
int buttonWidth;
|
|
||||||
int titleHeight;
|
|
||||||
QHash<Qt::WindowType, DecorationRegion> buttonHintMap;
|
|
||||||
QHash<DecorationRegion, QPixmap> normalButtonPixmaps;
|
|
||||||
QHash<DecorationRegion, QPixmap> maximizedButtonPixmaps;
|
|
||||||
QVector<Qt::WindowType> buttonHints;
|
|
||||||
QVector<DecorationRegion> stateRegions;
|
|
||||||
};
|
|
||||||
//! [decoration class definition]
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Name=Simple Decoration
|
|
||||||
Exec=/opt/usr/bin/simpledecoration
|
|
||||||
Icon=simpledecoration
|
|
||||||
X-Window-Icon=
|
|
||||||
X-HildonDesk-ShowInToolbar=true
|
|
||||||
X-Osso-Type=application/x-executable
|
|
@ -1,16 +0,0 @@
|
|||||||
TEMPLATE = app
|
|
||||||
HEADERS = analogclock.h \
|
|
||||||
mydecoration.h
|
|
||||||
SOURCES = analogclock.cpp \
|
|
||||||
main.cpp \
|
|
||||||
mydecoration.cpp
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/simpledecoration
|
|
||||||
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
|
|
||||||
sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qws/simpledecoration
|
|
||||||
INSTALLS += target sources
|
|
||||||
QT += widgets
|
|
||||||
|
|
||||||
|
|
||||||
simulator: warning(This example does not work on Simulator platform)
|
|
@ -1,9 +0,0 @@
|
|||||||
This is the SVGA screen driver plugin example for QWS.
|
|
||||||
|
|
||||||
You may need to set the SVGALIB_DEFAULT_MODE environment
|
|
||||||
variable. These values have been confirmed to work on one specific
|
|
||||||
machine using svgalib 1.4.3: 18, 24, 34, 35, 36
|
|
||||||
|
|
||||||
There is a bug in the example causing missing updates in 8-bit mode
|
|
||||||
(e.g. modes 10 and 12). Fixing this bug is left as an exercise for the
|
|
||||||
reader.
|
|
@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Name=Accelerated Graphics Driver
|
|
||||||
Exec=/opt/usr/bin/svgalib
|
|
||||||
Icon=svgalib
|
|
||||||
X-Window-Icon=
|
|
||||||
X-HildonDesk-ShowInToolbar=true
|
|
||||||
X-Osso-Type=application/x-executable
|
|
@ -1,22 +0,0 @@
|
|||||||
TEMPLATE = lib
|
|
||||||
CONFIG += plugin
|
|
||||||
|
|
||||||
LIBS += -lvgagl -lvga
|
|
||||||
|
|
||||||
TARGET = svgalibscreen
|
|
||||||
target.path = $$[QT_INSTALL_PLUGINS]/gfxdrivers
|
|
||||||
INSTALLS += target
|
|
||||||
|
|
||||||
HEADERS = svgalibscreen.h \
|
|
||||||
svgalibpaintengine.h \
|
|
||||||
svgalibsurface.h \
|
|
||||||
svgalibpaintdevice.h
|
|
||||||
SOURCES = svgalibscreen.cpp \
|
|
||||||
svgalibpaintengine.cpp \
|
|
||||||
svgalibsurface.cpp \
|
|
||||||
svgalibpaintdevice.cpp \
|
|
||||||
svgalibplugin.cpp
|
|
||||||
|
|
||||||
QT += widgets
|
|
||||||
|
|
||||||
simulator: warning(This example does not work on Simulator platform)
|
|
@ -1,66 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "svgalibpaintdevice.h"
|
|
||||||
#include "svgalibpaintengine.h"
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QDesktopWidget>
|
|
||||||
|
|
||||||
SvgalibPaintDevice::SvgalibPaintDevice(QWidget *w)
|
|
||||||
: QCustomRasterPaintDevice(w)
|
|
||||||
{
|
|
||||||
pengine = new SvgalibPaintEngine(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
SvgalibPaintDevice::~SvgalibPaintDevice()
|
|
||||||
{
|
|
||||||
delete pengine;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SvgalibPaintDevice::metric(PaintDeviceMetric m) const
|
|
||||||
{
|
|
||||||
if (m == PdmWidth)
|
|
||||||
return QApplication::desktop()->screenGeometry().width();
|
|
||||||
else if (m == PdmHeight)
|
|
||||||
return QApplication::desktop()->screenGeometry().height();
|
|
||||||
return QCustomRasterPaintDevice::metric(m);
|
|
||||||
}
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 SVGALIBPAINTDEVICE_H
|
|
||||||
#define SVGALIBPAINTDEVICE_H
|
|
||||||
|
|
||||||
#include "svgalibpaintengine.h"
|
|
||||||
#include <private/qpaintengine_raster_p.h>
|
|
||||||
#include <qscreen_qws.h>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class SvgalibPaintDevice : public QCustomRasterPaintDevice
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SvgalibPaintDevice(QWidget *w);
|
|
||||||
~SvgalibPaintDevice();
|
|
||||||
|
|
||||||
void* memory() const { return QScreen::instance()->base(); }
|
|
||||||
|
|
||||||
QPaintEngine *paintEngine() const { return pengine; }
|
|
||||||
int metric(PaintDeviceMetric m) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
SvgalibPaintEngine *pengine;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif // SVGALIBPAINTDEVICE_H
|
|
@ -1,190 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "svgalibpaintengine.h"
|
|
||||||
|
|
||||||
#include <QColor>
|
|
||||||
#include <vga.h>
|
|
||||||
#include <vgagl.h>
|
|
||||||
|
|
||||||
SvgalibPaintEngine::SvgalibPaintEngine(QPaintDevice *device)
|
|
||||||
: QRasterPaintEngine(device)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SvgalibPaintEngine::~SvgalibPaintEngine()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
bool SvgalibPaintEngine::begin(QPaintDevice *dev)
|
|
||||||
{
|
|
||||||
device = dev;
|
|
||||||
pen = Qt::NoPen;
|
|
||||||
simplePen = true;
|
|
||||||
brush = Qt::NoBrush;
|
|
||||||
simpleBrush = true;
|
|
||||||
matrix = QTransform();
|
|
||||||
simpleMatrix = true;
|
|
||||||
setClip(QRect(0, 0, device->width(), device->height()));
|
|
||||||
opaque = true;
|
|
||||||
aliased = true;
|
|
||||||
sourceOver = true;
|
|
||||||
|
|
||||||
return QRasterPaintEngine::begin(dev);
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
bool SvgalibPaintEngine::end()
|
|
||||||
{
|
|
||||||
gl_setclippingwindow(0, 0, device->width() - 1, device->height() - 1);
|
|
||||||
return QRasterPaintEngine::end();
|
|
||||||
}
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
void SvgalibPaintEngine::updateState()
|
|
||||||
{
|
|
||||||
QRasterPaintEngineState *s = state();
|
|
||||||
|
|
||||||
if (s->dirty & DirtyTransform) {
|
|
||||||
matrix = s->matrix;
|
|
||||||
simpleMatrix = (matrix.m12() == 0 && matrix.m21() == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyPen) {
|
|
||||||
pen = s->pen;
|
|
||||||
simplePen = (pen.width() == 0 || pen.widthF() <= 1)
|
|
||||||
&& (pen.style() == Qt::NoPen || pen.style() == Qt::SolidLine)
|
|
||||||
&& (pen.color().alpha() == 255);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyBrush) {
|
|
||||||
brush = s->brush;
|
|
||||||
simpleBrush = (brush.style() == Qt::SolidPattern
|
|
||||||
|| brush.style() == Qt::NoBrush)
|
|
||||||
&& (brush.color().alpha() == 255);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyClipRegion)
|
|
||||||
setClip(s->clipRegion);
|
|
||||||
|
|
||||||
if (s->dirty & DirtyClipEnabled) {
|
|
||||||
clipEnabled = s->isClipEnabled();
|
|
||||||
updateClip();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyClipPath) {
|
|
||||||
setClip(QRegion());
|
|
||||||
simpleClip = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyCompositionMode) {
|
|
||||||
const QPainter::CompositionMode m = s->composition_mode;
|
|
||||||
sourceOver = (m == QPainter::CompositionMode_SourceOver);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->dirty & DirtyOpacity)
|
|
||||||
opaque = (s->opacity == 256);
|
|
||||||
|
|
||||||
if (s->dirty & DirtyHints)
|
|
||||||
aliased = !(s->flags.antialiased);
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
void SvgalibPaintEngine::setClip(const QRegion ®ion)
|
|
||||||
{
|
|
||||||
if (region.isEmpty())
|
|
||||||
clip = QRect(0, 0, device->width(), device->height());
|
|
||||||
else
|
|
||||||
clip = matrix.map(region) & QRect(0, 0, device->width(), device->height());
|
|
||||||
clipEnabled = true;
|
|
||||||
updateClip();
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
void SvgalibPaintEngine::updateClip()
|
|
||||||
{
|
|
||||||
QRegion clipRegion = QRect(0, 0, device->width(), device->height());
|
|
||||||
|
|
||||||
if (!systemClip().isEmpty())
|
|
||||||
clipRegion &= systemClip();
|
|
||||||
if (clipEnabled)
|
|
||||||
clipRegion &= clip;
|
|
||||||
|
|
||||||
simpleClip = (clipRegion.rects().size() <= 1);
|
|
||||||
|
|
||||||
const QRect r = clipRegion.boundingRect();
|
|
||||||
gl_setclippingwindow(r.left(), r.top(),
|
|
||||||
r.x() + r.width(),
|
|
||||||
r.y() + r.height());
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
void SvgalibPaintEngine::drawRects(const QRect *rects, int rectCount)
|
|
||||||
{
|
|
||||||
const bool canAccelerate = simplePen && simpleBrush && simpleMatrix
|
|
||||||
&& simpleClip && opaque && aliased
|
|
||||||
&& sourceOver;
|
|
||||||
if (!canAccelerate) {
|
|
||||||
QRasterPaintEngine::drawRects(rects, rectCount);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < rectCount; ++i) {
|
|
||||||
const QRect r = matrix.mapRect(rects[i]);
|
|
||||||
if (brush != Qt::NoBrush) {
|
|
||||||
gl_fillbox(r.left(), r.top(), r.width(), r.height(),
|
|
||||||
brush.color().rgba());
|
|
||||||
}
|
|
||||||
if (pen != Qt::NoPen) {
|
|
||||||
const int c = pen.color().rgba();
|
|
||||||
gl_hline(r.left(), r.top(), r.right(), c);
|
|
||||||
gl_hline(r.left(), r.bottom(), r.right(), c);
|
|
||||||
gl_line(r.left(), r.top(), r.left(), r.bottom(), c);
|
|
||||||
gl_line(r.right(), r.top(), r.right(), r.bottom(), c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [5]
|
|
@ -1,78 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 SVGALIBPAINTENGINE_H
|
|
||||||
#define SVGALIBPAINTENGINE_H
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
#include <private/qpaintengine_raster_p.h>
|
|
||||||
|
|
||||||
class SvgalibPaintEngine : public QRasterPaintEngine
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SvgalibPaintEngine(QPaintDevice *device);
|
|
||||||
~SvgalibPaintEngine();
|
|
||||||
|
|
||||||
bool begin(QPaintDevice *device);
|
|
||||||
bool end();
|
|
||||||
void updateState();
|
|
||||||
void drawRects(const QRect *rects, int rectCount);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void setClip(const QRegion ®ion);
|
|
||||||
void updateClip();
|
|
||||||
|
|
||||||
QPen pen;
|
|
||||||
bool simplePen;
|
|
||||||
QBrush brush;
|
|
||||||
bool simpleBrush;
|
|
||||||
QTransform matrix;
|
|
||||||
bool simpleMatrix;
|
|
||||||
QRegion clip;
|
|
||||||
bool clipEnabled;
|
|
||||||
bool simpleClip;
|
|
||||||
bool opaque;
|
|
||||||
bool aliased;
|
|
||||||
bool sourceOver;
|
|
||||||
QPaintDevice *device;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif // SVGALIBPAINTENGINE_H
|
|
@ -1,74 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "svgalibscreen.h"
|
|
||||||
|
|
||||||
#include <QScreenDriverPlugin>
|
|
||||||
#include <QStringList>
|
|
||||||
|
|
||||||
class SvgalibPlugin : public QScreenDriverPlugin
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SvgalibPlugin();
|
|
||||||
|
|
||||||
QStringList keys() const;
|
|
||||||
QScreen *create(const QString&, int displayId);
|
|
||||||
};
|
|
||||||
|
|
||||||
SvgalibPlugin::SvgalibPlugin()
|
|
||||||
: QScreenDriverPlugin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList SvgalibPlugin::keys() const
|
|
||||||
{
|
|
||||||
return (QStringList() << "svgalib");
|
|
||||||
}
|
|
||||||
|
|
||||||
QScreen* SvgalibPlugin::create(const QString& driver, int displayId)
|
|
||||||
{
|
|
||||||
if (driver.toLower() != "svgalib")
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return new SvgalibScreen(displayId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Q_EXPORT_STATIC_PLUGIN(Svgalib)
|
|
||||||
Q_EXPORT_PLUGIN2(svgalibscreendriver, SvgalibPlugin)
|
|
@ -1,353 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "svgalibscreen.h"
|
|
||||||
#include "svgalibsurface.h"
|
|
||||||
|
|
||||||
#include <QVector>
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QColor>
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
static int getModeDepth(vga_modeinfo *mode)
|
|
||||||
{
|
|
||||||
const int bits = int(log2(mode->colors));
|
|
||||||
if (bits == 24 && mode->bytesperpixel == 4)
|
|
||||||
return 32;
|
|
||||||
return bits;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
bool SvgalibScreen::connect(const QString &displaySpec)
|
|
||||||
{
|
|
||||||
int mode = vga_getdefaultmode();
|
|
||||||
if (mode <= 0) {
|
|
||||||
qCritical("SvgalibScreen::connect(): invalid vga mode");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
vga_modeinfo *modeinfo = vga_getmodeinfo(mode);
|
|
||||||
|
|
||||||
QScreen::lstep = modeinfo->linewidth;
|
|
||||||
QScreen::dw = QScreen::w = modeinfo->width;
|
|
||||||
QScreen::dh = QScreen::h = modeinfo->height;
|
|
||||||
QScreen::d = getModeDepth(modeinfo);
|
|
||||||
QScreen::size = QScreen::lstep * dh;
|
|
||||||
QScreen::data = 0;
|
|
||||||
|
|
||||||
switch (depth()) {
|
|
||||||
case 32:
|
|
||||||
setPixelFormat(QImage::Format_ARGB32_Premultiplied);
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
setPixelFormat(QImage::Format_RGB888);
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
setPixelFormat(QImage::Format_RGB16);
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
setPixelFormat(QImage::Format_RGB555);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int dpi = 72;
|
|
||||||
QScreen::physWidth = qRound(QScreen::dw * 25.4 / dpi);
|
|
||||||
QScreen::physHeight = qRound(QScreen::dh * 25.4 / dpi);
|
|
||||||
|
|
||||||
const QStringList args = displaySpec.split(QLatin1Char(':'),
|
|
||||||
QString::SkipEmptyParts);
|
|
||||||
grayscale = args.contains(QLatin1String("grayscale"), Qt::CaseInsensitive);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
void SvgalibScreen::initColorMap()
|
|
||||||
{
|
|
||||||
const int numColors = vga_getcolors();
|
|
||||||
if (numColors == 2 || numColors > 256) {
|
|
||||||
screencols = 0;
|
|
||||||
return; // not a palette based mode
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numColors == 16) {
|
|
||||||
if (grayscale) {
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
const int c = i * 16 / 256;
|
|
||||||
vga_setpalette(i, c, c, c);
|
|
||||||
}
|
|
||||||
screencols = 256; // XXX: takes advantage of optimization in alloc()
|
|
||||||
} else { // read in EGA palette
|
|
||||||
int r, g, b;
|
|
||||||
for (int i = 0; i < 16; ++i) {
|
|
||||||
vga_getpalette(i, &r, &g, &b);
|
|
||||||
screenclut[i] = qRgb(r, g, b);
|
|
||||||
}
|
|
||||||
screencols = 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Q_ASSERT(numColors == 256);
|
|
||||||
|
|
||||||
if (grayscale) {
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
const int c = i * 64 / 256;
|
|
||||||
vga_setpalette(i, c, c, c);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// read in EGA palette
|
|
||||||
while (i < 16) {
|
|
||||||
int r, g, b;
|
|
||||||
vga_getpalette(i, &r, &g, &b);
|
|
||||||
screenclut[i] = qRgb(r, g, b);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
screencols = 16;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// 6 * 6 * 6 color cube
|
|
||||||
for (int r = 0; r < 6; ++r) {
|
|
||||||
for (int g = 0; g < 6; ++g) {
|
|
||||||
for (int b = 0; b < 6; ++b) {
|
|
||||||
vga_setpalette(i, r * 64/6, g * 64/6, b * 64/6);
|
|
||||||
screenclut[i] = qRgb(r * 256/6, g * 256/6, b * 256/6);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
screencols = i;
|
|
||||||
|
|
||||||
while (i < 256) {
|
|
||||||
screenclut[i] = qRgb(0, 0, 0);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
bool SvgalibScreen::initDevice()
|
|
||||||
{
|
|
||||||
if (vga_init() != 0) {
|
|
||||||
qCritical("SvgalibScreen::initDevice(): unable to initialize svgalib");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mode = vga_getdefaultmode();
|
|
||||||
if (vga_setmode(mode) == -1) {
|
|
||||||
qCritical("SvgalibScreen::initialize(): unable to set graphics mode");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gl_setcontextvga(mode) != 0) {
|
|
||||||
qCritical("SvgalibScreen::initDevice(): unable to set vga context");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
context = gl_allocatecontext();
|
|
||||||
gl_getcontext(context);
|
|
||||||
|
|
||||||
vga_modeinfo *modeinfo = vga_getmodeinfo(mode);
|
|
||||||
if (modeinfo->flags & IS_LINEAR)
|
|
||||||
QScreen::data = vga_getgraphmem();
|
|
||||||
|
|
||||||
initColorMap();
|
|
||||||
|
|
||||||
QScreenCursor::initSoftwareCursor();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
void SvgalibScreen::shutdownDevice()
|
|
||||||
{
|
|
||||||
gl_freecontext(context);
|
|
||||||
vga_setmode(TEXT);
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
void SvgalibScreen::disconnect()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
void SvgalibScreen::solidFill(const QColor &color, const QRegion ®)
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
if (depth() == 4 || depth() == 8)
|
|
||||||
c = alloc(color.red(), color.green(), color.blue());
|
|
||||||
else
|
|
||||||
c = gl_rgbcolor(color.red(), color.green(), color.blue());
|
|
||||||
|
|
||||||
const QVector<QRect> rects = (reg & region()).rects();
|
|
||||||
for (int i = 0; i < rects.size(); ++i) {
|
|
||||||
const QRect r = rects.at(i);
|
|
||||||
gl_fillbox(r.left(), r.top(), r.width(), r.height(), c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
void SvgalibScreen::blit16To8(const QImage &image,
|
|
||||||
const QPoint &topLeft, const QRegion ®ion)
|
|
||||||
{
|
|
||||||
const int imageStride = image.bytesPerLine() / 2;
|
|
||||||
const QVector<QRect> rects = region.rects();
|
|
||||||
|
|
||||||
for (int i = 0; i < rects.size(); ++i) {
|
|
||||||
const QRect r = rects.at(i).translated(-topLeft);
|
|
||||||
int y = r.y();
|
|
||||||
const quint16 *s = reinterpret_cast<const quint16*>(image.scanLine(y));
|
|
||||||
|
|
||||||
while (y <= r.bottom()) {
|
|
||||||
int x1 = r.x();
|
|
||||||
while (x1 <= r.right()) {
|
|
||||||
const quint16 c = s[x1];
|
|
||||||
int x2 = x1;
|
|
||||||
// find span length
|
|
||||||
while ((x2+1 < r.right()) && (s[x2+1] == c))
|
|
||||||
++x2;
|
|
||||||
gl_hline(x1 + topLeft.x(), y + topLeft.y(), x2 + topLeft.x(),
|
|
||||||
qt_colorConvert<quint8, quint16>(c, 0));
|
|
||||||
x1 = x2 + 1;
|
|
||||||
}
|
|
||||||
s += imageStride;
|
|
||||||
++y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvgalibScreen::blit32To8(const QImage &image,
|
|
||||||
const QPoint &topLeft, const QRegion ®ion)
|
|
||||||
{
|
|
||||||
const int imageStride = image.bytesPerLine() / 4;
|
|
||||||
const QVector<QRect> rects = region.rects();
|
|
||||||
|
|
||||||
for (int i = 0; i < rects.size(); ++i) {
|
|
||||||
const QRect r = rects.at(i).translated(-topLeft);
|
|
||||||
int y = r.y();
|
|
||||||
const quint32 *s = reinterpret_cast<const quint32*>(image.scanLine(y));
|
|
||||||
|
|
||||||
while (y <= r.bottom()) {
|
|
||||||
int x1 = r.x();
|
|
||||||
while (x1 <= r.right()) {
|
|
||||||
const quint32 c = s[x1];
|
|
||||||
int x2 = x1;
|
|
||||||
// find span length
|
|
||||||
while ((x2+1 < r.right()) && (s[x2+1] == c))
|
|
||||||
++x2;
|
|
||||||
gl_hline(x1 + topLeft.x(), y + topLeft.y(), x2 + topLeft.x(),
|
|
||||||
qt_colorConvert<quint8, quint32>(c, 0));
|
|
||||||
x1 = x2 + 1;
|
|
||||||
}
|
|
||||||
s += imageStride;
|
|
||||||
++y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
void SvgalibScreen::blit(const QImage &img, const QPoint &topLeft,
|
|
||||||
const QRegion ®)
|
|
||||||
{
|
|
||||||
if (depth() == 8) {
|
|
||||||
switch (img.format()) {
|
|
||||||
case QImage::Format_RGB16:
|
|
||||||
blit16To8(img, topLeft, reg);
|
|
||||||
return;
|
|
||||||
case QImage::Format_RGB32:
|
|
||||||
case QImage::Format_ARGB32:
|
|
||||||
case QImage::Format_ARGB32_Premultiplied:
|
|
||||||
blit32To8(img, topLeft, reg);
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (img.format() != pixelFormat()) {
|
|
||||||
if (base())
|
|
||||||
QScreen::blit(img, topLeft, reg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QVector<QRect> rects = (reg & region()).rects();
|
|
||||||
|
|
||||||
for (int i = 0; i < rects.size(); ++i) {
|
|
||||||
const QRect r = rects.at(i);
|
|
||||||
gl_putboxpart(r.x(), r.y(), r.width(), r.height(),
|
|
||||||
img.width(), img.height(),
|
|
||||||
static_cast<void*>(const_cast<uchar*>(img.bits())),
|
|
||||||
r.x() - topLeft.x(), r.y() - topLeft.y());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [5]
|
|
||||||
|
|
||||||
//! [7]
|
|
||||||
QWSWindowSurface* SvgalibScreen::createSurface(QWidget *widget) const
|
|
||||||
{
|
|
||||||
if (base()) {
|
|
||||||
static int onScreenPaint = -1;
|
|
||||||
if (onScreenPaint == -1)
|
|
||||||
onScreenPaint = qgetenv("QT_ONSCREEN_PAINT").toInt();
|
|
||||||
|
|
||||||
if (onScreenPaint > 0 || widget->testAttribute(Qt::WA_PaintOnScreen))
|
|
||||||
return new SvgalibSurface(widget);
|
|
||||||
}
|
|
||||||
return QScreen::createSurface(widget);
|
|
||||||
}
|
|
||||||
//! [7]
|
|
||||||
|
|
||||||
//! [8]
|
|
||||||
QWSWindowSurface* SvgalibScreen::createSurface(const QString &key) const
|
|
||||||
{
|
|
||||||
if (key == QLatin1String("svgalib"))
|
|
||||||
return new SvgalibSurface;
|
|
||||||
return QScreen::createSurface(key);
|
|
||||||
}
|
|
||||||
//! [8]
|
|
@ -1,83 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 SVGALIBSCREEN_H
|
|
||||||
#define SVGALIBSCREEN_H
|
|
||||||
|
|
||||||
#include <QScreen>
|
|
||||||
|
|
||||||
#include <vga.h>
|
|
||||||
#include <vgagl.h>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class SvgalibScreen : public QScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SvgalibScreen(int displayId) : QScreen(displayId) {}
|
|
||||||
~SvgalibScreen() {}
|
|
||||||
|
|
||||||
bool connect(const QString &displaySpec);
|
|
||||||
bool initDevice();
|
|
||||||
void shutdownDevice();
|
|
||||||
void disconnect();
|
|
||||||
|
|
||||||
void setMode(int, int, int) {}
|
|
||||||
void blank(bool) {}
|
|
||||||
|
|
||||||
void blit(const QImage &img, const QPoint &topLeft, const QRegion ®ion);
|
|
||||||
void solidFill(const QColor &color, const QRegion ®ion);
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
QWSWindowSurface* createSurface(QWidget *widget) const;
|
|
||||||
QWSWindowSurface* createSurface(const QString &key) const;
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
private:
|
|
||||||
void initColorMap();
|
|
||||||
void blit16To8(const QImage &image,
|
|
||||||
const QPoint &topLeft, const QRegion ®ion);
|
|
||||||
void blit32To8(const QImage &image,
|
|
||||||
const QPoint &topLeft, const QRegion ®ion);
|
|
||||||
|
|
||||||
GraphicsContext *context;
|
|
||||||
};
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
#endif // SVGALIBSCREEN_H
|
|
@ -1,86 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 "svgalibsurface.h"
|
|
||||||
#include "svgalibpaintdevice.h"
|
|
||||||
|
|
||||||
#include <vgagl.h>
|
|
||||||
|
|
||||||
SvgalibSurface::SvgalibSurface() : QWSWindowSurface(), pdevice(0)
|
|
||||||
{
|
|
||||||
setSurfaceFlags(Opaque);
|
|
||||||
}
|
|
||||||
|
|
||||||
SvgalibSurface::SvgalibSurface(QWidget *w)
|
|
||||||
: QWSWindowSurface(w)
|
|
||||||
{
|
|
||||||
setSurfaceFlags(Opaque);
|
|
||||||
pdevice = new SvgalibPaintDevice(w);
|
|
||||||
}
|
|
||||||
|
|
||||||
SvgalibSurface::~SvgalibSurface()
|
|
||||||
{
|
|
||||||
delete pdevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvgalibSurface::setGeometry(const QRect &rect)
|
|
||||||
{
|
|
||||||
QWSWindowSurface::setGeometry(rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
QPoint SvgalibSurface::painterOffset() const
|
|
||||||
{
|
|
||||||
return geometry().topLeft() + QWSWindowSurface::painterOffset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
bool SvgalibSurface::scroll(const QRegion ®ion, int dx, int dy)
|
|
||||||
{
|
|
||||||
const QVector<QRect> rects = region.rects();
|
|
||||||
for (int i = 0; i < rects.size(); ++i) {
|
|
||||||
const QRect r = rects.at(i);
|
|
||||||
gl_copybox(r.left(), r.top(), r.width(), r.height(),
|
|
||||||
r.left() + dx, r.top() + dy);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 SVGALIBSURFACE_H
|
|
||||||
#define SVGALIBSURFACE_H
|
|
||||||
|
|
||||||
#include "svgalibpaintengine.h"
|
|
||||||
#include "svgalibpaintdevice.h"
|
|
||||||
#include <private/qwindowsurface_qws_p.h>
|
|
||||||
|
|
||||||
class SvgalibPaintDevice;
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class SvgalibSurface : public QWSWindowSurface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SvgalibSurface();
|
|
||||||
SvgalibSurface(QWidget *w);
|
|
||||||
~SvgalibSurface();
|
|
||||||
|
|
||||||
void setGeometry(const QRect &rect);
|
|
||||||
bool isValid() const { return true; }
|
|
||||||
bool scroll(const QRegion ®ion, int dx, int dy);
|
|
||||||
QString key() const { return QLatin1String("svgalib"); }
|
|
||||||
|
|
||||||
bool attach(const QByteArray &) { return true; }
|
|
||||||
void detach() {}
|
|
||||||
|
|
||||||
QImage image() const { return QImage(); }
|
|
||||||
QPaintDevice *paintDevice() { return pdevice; }
|
|
||||||
QPoint painterOffset() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
SvgalibPaintDevice *pdevice;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif // SVGALIBSURFACE_H
|
|
Loading…
Reference in New Issue
Block a user