aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/doc/codesnippets/doc/src/snippets/separations
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside2/doc/codesnippets/doc/src/snippets/separations')
-rw-r--r--sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp136
-rw-r--r--sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp60
-rw-r--r--sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp227
-rw-r--r--sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp338
4 files changed, 0 insertions, 761 deletions
diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp
deleted file mode 100644
index d9b5a78e1..000000000
--- a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
-finalwidget.cpp
-
-A widget to display an image and a label containing a description.
-*/
-
-#include <QtWidgets>
-#include "finalwidget.h"
-
-FinalWidget::FinalWidget(QWidget *parent, const QString &name,
- const QSize &labelSize)
- : QFrame(parent)
-{
- hasImage = false;
- imageLabel = new QLabel;
- imageLabel->setFrameShadow(QFrame::Sunken);
- imageLabel->setFrameShape(QFrame::StyledPanel);
- imageLabel->setMinimumSize(labelSize);
- nameLabel = new QLabel(name);
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(imageLabel, 1);
- layout->addWidget(nameLabel, 0);
- setLayout(layout);
-}
-
-/*!
- If the mouse moves far enough when the left mouse button is held down,
- start a drag and drop operation.
-*/
-
-void FinalWidget::mouseMoveEvent(QMouseEvent *event)
-{
- if (!(event->buttons() & Qt::LeftButton))
- return;
- if ((event->pos() - dragStartPosition).manhattanLength()
- < QApplication::startDragDistance())
- return;
- if (!hasImage)
- return;
-
- QDrag *drag = new QDrag(this);
- QMimeData *mimeData = new QMimeData;
-
-//! [0]
- output = QByteArray()
- outputBuffer = QBuffer(output)
- outputBuffer.open(QIODevice.WriteOnly)
- imageLabel.pixmap().toImage().save(outputBuffer, "PNG")
- mimeData.setData("image/png", output)
-//! [0]
-/*
-//! [1]
- mimeData.setImageData(QVariant(imageLabel.pixmap()))
-//! [1]
-*/
- drag.setMimeData(mimeData)
- drag.setPixmap(imageLabel.pixmap().scaled(64, 64, Qt.KeepAspectRatio))
-//! [2]
- drag.setHotSpot(QPoint(drag.pixmap().width()/2,
- drag.pixmap().height()))
-//! [2]
-
- drag->start();
-}
-
-/*!
- Check for left mouse button presses in order to enable drag and drop.
-*/
-
-void FinalWidget::mousePressEvent(QMouseEvent *event)
-{
- if (event->button() == Qt::LeftButton)
- dragStartPosition = event->pos();
-}
-
-const QPixmap* FinalWidget::pixmap() const
-{
- return imageLabel->pixmap();
-}
-
-void FinalWidget::setPixmap(const QPixmap &pixmap)
-{
- imageLabel->setPixmap(pixmap);
- hasImage = true;
-}
diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp
deleted file mode 100644
index f2ea7f2cf..000000000
--- a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include "viewer.h"
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- Viewer viewer;
- viewer.show();
- return app.exec();
-}
diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp
deleted file mode 100644
index 5f0bd6f4d..000000000
--- a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
-screenwidget.cpp
-
-A widget to display colour components from an image using independently
-selected colors. Controls are provided to allow the image to be inverted, and
-the color to be selection via a standard dialog. The image is displayed in a
-label widget.
-*/
-
-#include <QApplication>
-#include <QColorDialog>
-#include <QGridLayout>
-#include <QImage>
-#include <QLabel>
-#include <QMenu>
-#include <QMimeData>
-#include <QMouseEvent>
-#include <QPixmap>
-#include <QPushButton>
-#include <QWidget>
-
-#include "screenwidget.h"
-
-/*!
-Initializes the paint color, the mask color (cyan, magenta,
-or yellow), connects the color selector and invert checkbox to functions,
-and creates a two-by-two grid layout.
-*/
-
-ScreenWidget::ScreenWidget(QWidget *parent, QColor initialColor,
- const QString &name, Separation mask,
- const QSize &labelSize)
- : QFrame(parent)
-{
- paintColor = initialColor;
- maskColor = mask;
- inverted = false;
-
- imageLabel = new QLabel;
- imageLabel->setFrameShadow(QFrame::Sunken);
- imageLabel->setFrameShape(QFrame::StyledPanel);
- imageLabel->setMinimumSize(labelSize);
-
- nameLabel = new QLabel(name);
- colorButton = new QPushButton(tr("Modify..."));
- colorButton->setBackgroundRole(QPalette::Button);
- colorButton->setMinimumSize(32, 32);
-
- QPalette palette(colorButton->palette());
- palette.setColor(QPalette::Button, initialColor);
- colorButton->setPalette(palette);
-
- invertButton = new QPushButton(tr("Invert"));
- //invertButton->setToggleButton(true);
- //invertButton->setOn(inverted);
- invertButton->setEnabled(false);
-
- connect(colorButton, SIGNAL(clicked()), this, SLOT(setColor()));
- connect(invertButton, SIGNAL(clicked()), this, SLOT(invertImage()));
-
- QGridLayout *gridLayout = new QGridLayout;
- gridLayout->addWidget(imageLabel, 0, 0, 1, 2);
- gridLayout->addWidget(nameLabel, 1, 0);
- gridLayout->addWidget(colorButton, 1, 1);
- gridLayout->addWidget(invertButton, 2, 1, 1, 1);
- setLayout(gridLayout);
-}
-
-/*!
- Creates a new image by separating out the cyan, magenta, or yellow
- component, depending on the mask color specified in the constructor.
-
- The amount of the component found in each pixel of the image is used
- to determine how much of a user-selected ink is used for each pixel
- in the new image for the label widget.
-*/
-
-void ScreenWidget::createImage()
-{
- newImage = originalImage.copy();
-
- // Create CMY components for the ink being used.
- float cyanInk = (255 - paintColor.red())/255.0;
- float magentaInk = (255 - paintColor.green())/255.0;
- float yellowInk = (255 - paintColor.blue())/255.0;
-
- int (*convert)(QRgb);
-
- switch (maskColor) {
- case Cyan:
- convert = qRed;
- break;
- case Magenta:
- convert = qGreen;
- break;
- case Yellow:
- convert = qBlue;
- break;
- }
-
- for (int y = 0; y < newImage.height(); ++y) {
- for (int x = 0; x < newImage.width(); ++x) {
- QRgb p(originalImage.pixel(x, y));
-
- // Separate the source pixel into its cyan component.
- int amount;
-
- if (inverted)
- amount = convert(p);
- else
- amount = 255 - convert(p);
-
- QColor newColor(
- 255 - qMin(int(amount * cyanInk), 255),
- 255 - qMin(int(amount * magentaInk), 255),
- 255 - qMin(int(amount * yellowInk), 255));
-
- newImage.setPixel(x, y, newColor.rgb());
- }
- }
-
- imageLabel->setPixmap(QPixmap::fromImage(newImage));
-}
-
-/*!
- Returns a pointer to the modified image.
-*/
-
-QImage* ScreenWidget::image()
-{
- return &newImage;
-}
-
-/*!
- Sets whether the amount of ink applied to the canvas is to be inverted
- (subtracted from the maximum value) before the ink is applied.
-*/
-
-void ScreenWidget::invertImage()
-{
- //inverted = invertButton->isOn();
- inverted = !inverted;
- createImage();
- emit imageChanged();
-}
-
-/*!
- Separate the current image into cyan, magenta, and yellow components.
- Create a representation of how each component might appear when applied
- to a blank white piece of paper.
-*/
-
-void ScreenWidget::setColor()
-{
- QColor newColor = QColorDialog::getColor(paintColor);
-
- if (newColor.isValid()) {
- paintColor = newColor;
- QPalette palette(colorButton->palette());
- palette.setColor(QPalette::Button, paintColor);
- colorButton->setPalette(palette);
- createImage();
- emit imageChanged();
- }
-}
-
-/*!
- Records the original image selected by the user, creates a color
- separation, and enables the invert image checkbox.
-*/
-
-void ScreenWidget::setImage(QImage &image)
-{
- originalImage = image;
- createImage();
- invertButton->setEnabled(true);
-}
diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp
deleted file mode 100644
index 008279c1a..000000000
--- a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
-viewer.cpp
-
-Provides a main window for displaying a user-specified original image
-with three color separations in a grid layout.
-
-A main menu provides entries for selecting files, and adjusting the
-brightness of the separations.
-*/
-
-#include <QtWidgets>
-
-#include "finalwidget.h"
-#include "screenwidget.h"
-#include "viewer.h"
-
-/*
- Constructor: initializes a default value for the brightness, creates
- the main menu entries, and constructs a central widget that contains
- enough space for images to be displayed.
-*/
-
-Viewer::Viewer()
-{
- setWindowTitle(tr("QImage Color Separations"));
-
- brightness = 255;
-
- createMenus();
- setCentralWidget(createCentralWidget());
-}
-
-/*
- Creates a main menu with two entries: a File menu, to allow the image
- to be selected, and a Brightness menu to allow the brightness of the
- separations to be changed.
-
- Initially, the Brightness menu items are disabled, but the first entry in
- the menu is checked to reflect the default brightness.
-*/
-
-void Viewer::createMenus()
-{
- fileMenu = new QMenu(tr("&File"), this);
- brightnessMenu = new QMenu(tr("&Brightness"), this);
-
- QAction *openAction = fileMenu->addAction(tr("&Open..."));
- openAction->setShortcut(QKeySequence("Ctrl+O"));
- saveAction = fileMenu->addAction(tr("&Save..."));
- saveAction->setShortcut(QKeySequence("Ctrl+S"));
- saveAction->setEnabled(false);
- QAction *quitAction = fileMenu->addAction(tr("E&xit"));
- quitAction->setShortcut(QKeySequence("Ctrl+Q"));
-
- QAction *noBrightness = brightnessMenu->addAction(tr("&0%"));
- noBrightness->setCheckable(true);
- QAction *quarterBrightness = brightnessMenu->addAction(tr("&25%"));
- quarterBrightness->setCheckable(true);
- QAction *halfBrightness = brightnessMenu->addAction(tr("&50%"));
- halfBrightness->setCheckable(true);
- QAction *threeQuartersBrightness = brightnessMenu->addAction(tr("&75%"));
- threeQuartersBrightness->setCheckable(true);
- QAction *fullBrightness = brightnessMenu->addAction(tr("&100%"));
- fullBrightness->setCheckable(true);
-
- menuMap[noBrightness] = None;
- menuMap[quarterBrightness] = Quarter;
- menuMap[halfBrightness] = Half;
- menuMap[threeQuartersBrightness] = ThreeQuarters;
- menuMap[fullBrightness] = Full;
-
- currentBrightness = fullBrightness;
- currentBrightness->setChecked(true);
- brightnessMenu->setEnabled(false);
-
- menuBar()->addMenu(fileMenu);
- menuBar()->addMenu(brightnessMenu);
-
- connect(openAction, SIGNAL(triggered()), this, SLOT(chooseFile()));
- connect(saveAction, SIGNAL(triggered()), this, SLOT(saveImage()));
- connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
- connect(brightnessMenu, SIGNAL(triggered(QAction *)), this,
- SLOT(setBrightness(QAction *)));
-}
-
-/*
- Constructs a central widget for the window consisting of a two-by-two
- grid of labels, each of which will contain an image. We restrict the
- size of the labels to 256 pixels, and ensure that the window cannot
- be resized.
-*/
-
-QFrame* Viewer::createCentralWidget()
-{
- QFrame* frame = new QFrame(this);
- grid = new QGridLayout(frame);
- grid->setSpacing(8);
- grid->setMargin(4);
-
- layout()->setSizeConstraint(QLayout::SetFixedSize);
-
- QSize labelSize(256, 256);
-
- finalWidget = new FinalWidget(frame, tr("Final image"), labelSize);
-
- cyanWidget = new ScreenWidget(frame, Qt::cyan, tr("Cyan"),
- ScreenWidget::Cyan, labelSize);
- magentaWidget = new ScreenWidget(frame, Qt::magenta, tr("Magenta"),
- ScreenWidget::Magenta, labelSize);
- yellowWidget = new ScreenWidget(frame, Qt::yellow, tr("Yellow"),
- ScreenWidget::Yellow, labelSize);
-
- connect(cyanWidget, SIGNAL(imageChanged()), this, SLOT(createImage()));
- connect(magentaWidget, SIGNAL(imageChanged()), this, SLOT(createImage()));
- connect(yellowWidget, SIGNAL(imageChanged()), this, SLOT(createImage()));
-
- grid->addWidget(finalWidget, 0, 0, Qt::AlignTop | Qt::AlignHCenter);
- grid->addWidget(cyanWidget, 0, 1, Qt::AlignTop | Qt::AlignHCenter);
- grid->addWidget(magentaWidget, 1, 0, Qt::AlignTop | Qt::AlignHCenter);
- grid->addWidget(yellowWidget, 1, 1, Qt::AlignTop | Qt::AlignHCenter);
-
- return frame;
-}
-
-/*
- Provides a dialog window to allow the user to specify an image file.
- If a file is selected, the appropriate function is called to process
- and display it.
-*/
-
-void Viewer::chooseFile()
-{
- QString imageFile = QFileDialog::getOpenFileName(this,
- tr("Choose an image file to open"), path, tr("Images (*.*)"));
-
- if (!imageFile.isEmpty()) {
- openImageFile(imageFile);
- path = imageFile;
- }
-}
-
-/*
- Changes the value of the brightness according to the entry selected in the
- Brightness menu. The selected entry is checked, and the previously selected
- entry is unchecked.
-
- The color separations are updated to use the new value for the brightness.
-*/
-
-void Viewer::setBrightness(QAction *action)
-{
- if (!menuMap.contains(action) || scaledImage.isNull())
- return;
-
- Brightness amount = menuMap[action];
-
- switch (amount) {
- case None:
- brightness = 0; break;
- case Quarter:
- brightness = 64; break;
- case Half:
- brightness = 128; break;
- case ThreeQuarters:
- brightness = 191; break;
- case Full:
- brightness = 255; break;
- default: return;
- }
-
- currentBrightness->setChecked(false);
- currentBrightness = action;
- currentBrightness->setChecked(true);
-
- createImage();
-}
-
-/*
- Load the image from the file given, and create four pixmaps based
- on the original image.
-
- The window caption is set, and the Brightness menu enabled if the image file
- can be loaded.
-*/
-
-void Viewer::openImageFile(QString &imageFile)
-{
- QImage originalImage;
-
- if (originalImage.load(imageFile)) {
- setWindowTitle(imageFile);
- //menuBar()->setItemEnabled(brightnessMenuId, true);
- saveAction->setEnabled(true);
- brightnessMenu->setEnabled(true);
-
- /* Note: the ScaleMin value may be different for Qt 4. */
- scaledImage = originalImage.scaled(256, 256, Qt::KeepAspectRatio);
-
- cyanWidget->setImage(scaledImage);
- magentaWidget->setImage(scaledImage);
- yellowWidget->setImage(scaledImage);
- createImage();
- }
- else
- (void) QMessageBox::warning(this, tr("Cannot open file"),
- tr("The selected file could not be opened."),
- QMessageBox::Cancel, QMessageBox::NoButton, QMessageBox::NoButton);
-}
-
-/*
- Creates an image by combining the contents of the three screens
- to present a page preview.
-
- The image associated with each screen is separated into cyan,
- magenta, and yellow components. We add up the values for each
- component from the three screen images, and subtract the totals
- from the maximum value for each corresponding primary color.
-*/
-
-void Viewer::createImage()
-{
- QImage newImage = scaledImage.copy();
-
- QImage *image1 = cyanWidget->image();
- QImage *image2 = magentaWidget->image();
- QImage *image3 = yellowWidget->image();
- int darkness = 255 - brightness;
-
- for (int y = 0; y < newImage.height(); ++y) {
- for (int x = 0; x < newImage.width(); ++x) {
-
- // Create three screens, using the quantities of the source
- // CMY components to determine how much of each of the
- // inks are to be put on each screen.
- QRgb p1(image1->pixel(x, y));
- float cyan1 = 255 - qRed(p1);
- float magenta1 = 255 - qGreen(p1);
- float yellow1 = 255 - qBlue(p1);
-
- QRgb p2(image2->pixel(x, y));
- float cyan2 = 255 - qRed(p2);
- float magenta2 = 255 - qGreen(p2);
- float yellow2 = 255 - qBlue(p2);
-
- QRgb p3(image3->pixel(x, y));
- float cyan3 = 255 - qRed(p3);
- float magenta3 = 255 - qGreen(p3);
- float yellow3 = 255 - qBlue(p3);
-
- QColor newColor(
- qMax(255 - int(cyan1+cyan2+cyan3) - darkness, 0),
- qMax(255 - int(magenta1+magenta2+magenta3) - darkness, 0),
- qMax(255 - int(yellow1+yellow2+yellow3) - darkness, 0));
-
- newImage.setPixel(x, y, newColor.rgb());
- }
- }
-
- finalWidget->setPixmap(QPixmap::fromImage(newImage));
-}
-
-/*
- Provides a dialog window to allow the user to save the image file.
-*/
-
-void Viewer::saveImage()
-{
- QString imageFile = QFileDialog::getSaveFileName(this,
- tr("Choose a filename to save the image"), "", tr("Images (*.png)"));
-
- QFileInfo info(imageFile);
-
- if (!info.baseName().isEmpty()) {
- QString newImageFile = QFileInfo(info.absoluteDir(),
- info.baseName() + ".png").absoluteFilePath();
-
- if (!finalWidget->pixmap()->save(newImageFile, "PNG"))
- (void) QMessageBox::warning(this, tr("Cannot save file"),
- tr("The file could not be saved."),
- QMessageBox::Cancel, QMessageBox::NoButton,
- QMessageBox::NoButton);
- }
- else
- (void) QMessageBox::warning(this, tr("Cannot save file"),
- tr("Please enter a valid filename."),
- QMessageBox::Cancel, QMessageBox::NoButton,
- QMessageBox::NoButton);
-}