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
|
||||
|
||||
embedded:SUBDIRS += qws
|
||||
contains(QT_BUILD_PARTS, tools):!contains(QT_CONFIG, no-gui):SUBDIRS += qtestlib
|
||||
contains(QT_CONFIG, opengl): SUBDIRS += opengl
|
||||
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