99581bc990
- Updated header inclusions from QtGui to QtWidgets for consistency and compatibility with Qt 5 and later. - Replaced deprecated QApplication::desktop() with QApplication::primaryScreen() for obtaining screen DPI. - Modified MyOutputHandler to use QMessageLogContext and QString for improved logging. - Changed QMatrix to QTransform for image rotation in ImageCutout class. - Updated various debug statements to use toLocal8Bit() instead of toAscii() for better string handling. - Refactored several classes to use QElapsedTimer instead of QTime for performance measurement. - Ensured all operator overloads in Section and Tag classes are marked as const for better const-correctness.
182 lines
4.7 KiB
C++
182 lines
4.7 KiB
C++
/************************************************************************
|
|
* $Id: drawerscene.cpp 661 2011-04-05 13:16:53Z elzubeir $
|
|
*
|
|
* ------------
|
|
* Description:
|
|
* ------------
|
|
*
|
|
* (C) Copyright 2009-2011 ALLCONTENT. All rights reserved.
|
|
*
|
|
* -----------------
|
|
* Revision Details: (Updated by Revision Control System)
|
|
* -----------------
|
|
* $Date: 2011-04-05 17:16:53 +0400 (Tue, 05 Apr 2011) $
|
|
* $Author: elzubeir $
|
|
* $Revision: 661 $
|
|
* $HeadURL: file:///opt/svn/socialhose/trunk/app/ClippingStation/drawerscene.cpp $
|
|
*
|
|
************************************************************************/
|
|
|
|
#include "drawerscene.h"
|
|
|
|
#include <QGraphicsSceneDragDropEvent>
|
|
#include <QMimeData>
|
|
#include <QGraphicsPixmapItem>
|
|
#include <QPainter>
|
|
#include <QPrinter>
|
|
#include <QImage>
|
|
#include <QApplication>
|
|
#include <QScreen>
|
|
|
|
#include "constants.h"
|
|
|
|
DrawerScene::DrawerScene(bool isfirst, QObject * parent):
|
|
QGraphicsScene(parent)
|
|
{
|
|
setBackgroundBrush(Qt::gray);
|
|
|
|
// by now this is A4 format, so we set the scene Rect with a A4 geometry + margins borders (30 pix).
|
|
createPageItem("A4", isfirst);
|
|
if (m_pageItem)
|
|
setSceneRect(-10.0, -10.0, m_pageItem->boundingRect().width()+20.0, m_pageItem->boundingRect().height()+20.0);
|
|
|
|
m_timer = new QTimer(); //create a timer and connect it's timeout signal to the update slot
|
|
connect( m_timer, SIGNAL( timeout() ), this, SLOT( thumbnail() ) );
|
|
}
|
|
|
|
DrawerScene::~DrawerScene()
|
|
{
|
|
//qDebug("~DrawerScene()");
|
|
if(m_pageItem)
|
|
{
|
|
delete m_pageItem;
|
|
m_pageItem = 0;
|
|
}
|
|
|
|
if(m_timer)
|
|
{
|
|
if (m_timer->isActive())
|
|
m_timer->stop();
|
|
|
|
delete m_timer;
|
|
m_timer = 0;
|
|
}
|
|
}
|
|
|
|
void DrawerScene::dropEvent(QGraphicsSceneDragDropEvent * event)
|
|
{
|
|
//event->ignore();
|
|
QGraphicsScene::dropEvent(event);
|
|
|
|
//qDebug() << "emit signal";
|
|
//emit createThumbnail();
|
|
m_timer->start(100);
|
|
}
|
|
|
|
bool DrawerScene::createPageItem(const QString & paperFormat, bool isfirst)
|
|
{
|
|
// format is useless by now
|
|
m_pageItem = new PageItem(paperFormat, isfirst);
|
|
addItem(m_pageItem);
|
|
return true;
|
|
}
|
|
|
|
QImage DrawerScene::screenShot()
|
|
{
|
|
//first we hide the margins
|
|
m_pageItem->hideMargins();
|
|
m_pageItem->unselectItems();
|
|
|
|
int dpi = QApplication::primaryScreen()->logicalDotsPerInchX();
|
|
int w = static_cast<int> (dpi * A4_WIDTH);
|
|
int h = static_cast<int> (dpi * A4_HEIGHT);
|
|
//int w = 827;
|
|
//int h = 1169;
|
|
|
|
|
|
QImage image(w, h, QImage::Format_RGB32);
|
|
|
|
QPainter painter(&image);
|
|
|
|
setBackgroundBrush(Qt::white);
|
|
painter.setBackgroundMode(Qt::TransparentMode);
|
|
painter.setBackground(Qt::white);
|
|
painter.setRenderHint(QPainter::Antialiasing);
|
|
|
|
//QRect rec = m_pageItem->boundingRect().toRect();
|
|
//rec.setX(rec.x() - 20);
|
|
//rec.setY(rec.y() - 20);
|
|
//rec.setX(rec.x()-20);
|
|
//rec.setWidth(rec.width()-20);
|
|
|
|
QPoint bottomright = m_pageItem->boundingRect().toRect().bottomRight();
|
|
bottomright.setX(bottomright.x()+1);
|
|
bottomright.setY(bottomright.y()+1);
|
|
|
|
QRect rec(QPoint(-1, -1), bottomright);
|
|
|
|
//this->render(&painter, m_pageItem->boundingRect().toRect(), m_pageItem->boundingRect().toRect() );
|
|
this->render(&painter, rec, m_pageItem->boundingRect().toRect());
|
|
|
|
setBackgroundBrush(Qt::gray);
|
|
|
|
|
|
m_pageItem->hideMargins(false);
|
|
|
|
return image;
|
|
}
|
|
|
|
void DrawerScene::addThumbnail(QImage &img)
|
|
{
|
|
m_pageItem->addThumbnail(img);
|
|
}
|
|
|
|
void DrawerScene::addCutout(QImage &img, QPointF &pos, qreal scale)
|
|
{
|
|
m_pageItem->addCutout(img, pos, scale);
|
|
}
|
|
|
|
|
|
void DrawerScene::transform(qreal zoomFactor)
|
|
{
|
|
if (!m_pageItem)
|
|
return;
|
|
|
|
m_zoomfactor = zoomFactor;
|
|
|
|
// we compute image center.
|
|
qreal imageCenterX = m_pageItem->x()+ m_pageItem->boundingRect().width()/2;
|
|
qreal imageCenterY = m_pageItem->y()+ m_pageItem->boundingRect().height()/2;
|
|
|
|
qreal imageX, imageY;
|
|
imageX = m_pageItem->boundingRect().width()/2;
|
|
imageY = m_pageItem->boundingRect().height()/2;
|
|
|
|
//m_pageItem->setTransformationMode(Qt::SmoothTransformation);
|
|
m_pageItem->setTransform(QTransform().translate(imageCenterX, imageCenterY).scale(zoomFactor, zoomFactor).translate(-imageCenterX, -imageCenterY));
|
|
|
|
//qDebug("Zoom Factor %.2d", zoomFactor);
|
|
}
|
|
|
|
void DrawerScene::thumbnail()
|
|
{
|
|
emit createThumbnail();
|
|
|
|
m_timer->stop();
|
|
}
|
|
|
|
void DrawerScene::setPixmap(const QPixmap &pix) const
|
|
{
|
|
m_pageItem->setPixmap(pix);
|
|
}
|
|
|
|
int DrawerScene::cutoutsCount()
|
|
{
|
|
return m_pageItem->cutoutsCount();
|
|
}
|
|
|
|
QRectF DrawerScene::centerCutouts(bool isArabic)
|
|
{
|
|
return m_pageItem->centerCutouts(isArabic);
|
|
}
|