diff --git a/src/app/puzzle/share/resources/puzzleicon.qrc b/src/app/puzzle/share/resources/puzzleicon.qrc
index 50e94a444..12c2a72ee 100644
--- a/src/app/puzzle/share/resources/puzzleicon.qrc
+++ b/src/app/puzzle/share/resources/puzzleicon.qrc
@@ -11,5 +11,8 @@
puzzleicon/64x64/iconGrainlineHorizontal.png
puzzleicon/64x64/cursorRotate.png
puzzleicon/64x64/iconProperties.png
+ puzzleicon/svg/icon_scissors.svg
+ puzzleicon/svg/icon_scissors_vertical.svg
+ puzzleicon/svg/icon_scissors_horizontal.svg
diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors.svg
new file mode 100644
index 000000000..fd1bd78c7
--- /dev/null
+++ b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors.svg
@@ -0,0 +1,75 @@
+
+
diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_horizontal.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_horizontal.svg
new file mode 100644
index 000000000..03d29b139
--- /dev/null
+++ b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_horizontal.svg
@@ -0,0 +1,77 @@
+
+
diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_vertical.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_vertical.svg
new file mode 100644
index 000000000..c88794863
--- /dev/null
+++ b/src/app/puzzle/share/resources/puzzleicon/svg/icon_scissors_vertical.svg
@@ -0,0 +1,77 @@
+
+
diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp
index 14f621bc3..6efa30b7e 100644
--- a/src/app/puzzle/vpmainwindow.cpp
+++ b/src/app/puzzle/vpmainwindow.cpp
@@ -713,7 +713,6 @@ void VPMainWindow::generateTiledPdf(QString fileName)
QSizeF tilesSize = m_layout->GetTilesSize();
QMarginsF tilesMargins = m_layout->GetTilesMargins();
-
// ------------- Set up the printer
QPrinter* printer = new QPrinter();
@@ -739,8 +738,7 @@ void VPMainWindow::generateTiledPdf(QString fileName)
printer->setOutputFileName(fileName);
printer->setResolution(static_cast(PrintDPI));
-
- printer->setDocName("Test");
+ printer->setDocName("Test"); // FIXME
// ------------- Set up the painter
@@ -752,8 +750,10 @@ void VPMainWindow::generateTiledPdf(QString fileName)
}
painter.setFont( QFont( QStringLiteral("Arial"), 8, QFont::Normal ) );
painter.setRenderHint(QPainter::Antialiasing, true);
- painter.setPen(QPen(Qt::black, qApp->Settings()->WidthMainLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.setBrush ( QBrush ( Qt::NoBrush ) );
+ QPen penTileInfos = QPen(QColor(180,180,180), qApp->Settings()->WidthHairLine(), Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
+ QPen penTileDrawing = QPen(Qt::black, qApp->Settings()->WidthMainLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+
if(tilesOrientation == PageOrientation::Landscape)
{
@@ -797,12 +797,67 @@ void VPMainWindow::generateTiledPdf(QString fileName)
int nbCol = qCeil(drawingWidth/tilesDrawingAreaWidth);
int nbRow = qCeil(drawingHeight/tilesDrawingAreaHeight);
+
+ // ------------- prepare triangles for positioning
+ // top triangle
+ QRectF rectTop = QRectF(tilesMargins.left()+ tilesDrawingAreaWidth/2 - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ tilesMargins.top(),
+ UnitConvertor(1, Unit::Cm, Unit::Px),
+ UnitConvertor(0.5, Unit::Cm, Unit::Px)
+ );
+ QPainterPath triangleTop;
+ triangleTop.moveTo(rectTop.topLeft());
+ triangleTop.lineTo(rectTop.topRight());
+ triangleTop.lineTo(rectTop.left() + (rectTop.width() / 2), rectTop.bottom());
+ triangleTop.lineTo(rectTop.topLeft());
+
+ // left triangle
+ QRectF rectLeft = QRectF(tilesMargins.left(),
+ tilesMargins.top() + tilesDrawingAreaHeight/2 - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ UnitConvertor(1, Unit::Cm, Unit::Px)
+ );
+ QPainterPath triangleLeft;
+ triangleLeft.moveTo(rectLeft.topLeft());
+ triangleLeft.lineTo(rectLeft.right(), rectLeft.top() + (rectLeft.height() / 2));
+ triangleLeft.lineTo(rectLeft.bottomLeft());
+ triangleLeft.lineTo(rectLeft.topLeft());
+
+ // bottom triangle
+ QRectF rectBottom = QRectF(tilesMargins.left()+ tilesDrawingAreaWidth/2 - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ tilesMargins.top()+tilesDrawingAreaHeight - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ UnitConvertor(1, Unit::Cm, Unit::Px),
+ UnitConvertor(0.5, Unit::Cm, Unit::Px)
+ );
+ QPainterPath triangleBottom;
+ triangleBottom.moveTo(rectBottom.bottomLeft());
+ triangleBottom.lineTo(rectBottom.left() + (rectBottom.width() / 2), rectBottom.top());
+ triangleBottom.lineTo(rectBottom.bottomRight());
+ triangleBottom.lineTo(rectBottom.bottomLeft());
+
+ // right triangle
+ QRectF rectRight = QRectF(tilesMargins.left() + tilesDrawingAreaWidth - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ tilesMargins.top() + tilesDrawingAreaHeight/2 - UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ UnitConvertor(0.5, Unit::Cm, Unit::Px),
+ UnitConvertor(1, Unit::Cm, Unit::Px)
+ );
+ QPainterPath triangleRight;
+ triangleRight.moveTo(rectRight.topRight());
+ triangleRight.lineTo(rectRight.bottomRight());
+ triangleRight.lineTo(rectRight.left(), rectRight.top() + (rectRight.height() / 2));
+ triangleRight.lineTo(rectRight.topRight());
+
+ QBrush triangleBush = QBrush(QColor(200,200,200));
+
+
// ------------- Perform the tiling
- for(int i=0;inewPage())
{
@@ -811,12 +866,93 @@ void VPMainWindow::generateTiledPdf(QString fileName)
}
}
- QRectF source = QRectF(j*tilesDrawingAreaWidth, i*tilesDrawingAreaHeight, tilesDrawingAreaWidth, tilesDrawingAreaHeight);
- QRectF target = QRectF(m_layout->GetTilesMargins().left(), m_layout->GetTilesMargins().top(),
- source.width(), source.height());
+ // add the tiles decorations (cutting and gluing lines, scissors, infos etc.)
+ penTileInfos.setStyle(Qt::DashLine);
+ painter.setPen(penTileInfos);
- // TODO: add the lines etc
+ if(row > 0)
+ {
+ // add top triangle
+ painter.fillPath(triangleTop, triangleBush);
+ // scissors along the top line
+ svgRenderer->load(QStringLiteral("://puzzleicon/svg/icon_scissors_horizontal.svg"));
+ svgRenderer->render(&painter, QRectF(tilesMargins.left()+tilesDrawingAreaWidth,
+ tilesMargins.top(),
+ UnitConvertor(1, Unit::Cm, Unit::Px),
+ UnitConvertor(0.56, Unit::Cm, Unit::Px)
+ ));
+
+ // top line
+ painter.drawLine(QPointF(tilesMargins.left(),
+ tilesMargins.top()),
+ QPointF(tilesMargins.left() + tilesDrawingAreaWidth + UnitConvertor(1, Unit::Cm, Unit::Px),
+ tilesMargins.top())
+ );
+ }
+ if(col > 0)
+ {
+ // add left triangle
+ painter.fillPath(triangleLeft, triangleBush);
+
+ // scissors along the left line
+ svgRenderer->load(QStringLiteral("://puzzleicon/svg/icon_scissors_vertical.svg"));
+ svgRenderer->render(&painter, QRectF(tilesMargins.left(),
+ tilesMargins.top()+tilesDrawingAreaHeight,
+ UnitConvertor(0.56, Unit::Cm, Unit::Px),
+ UnitConvertor(1, Unit::Cm, Unit::Px)
+ ));
+
+ // left line
+ painter.drawLine(QPointF(tilesMargins.left(),
+ tilesMargins.top()),
+ QPointF(tilesMargins.left(),
+ tilesMargins.top() + tilesDrawingAreaHeight + UnitConvertor(1, Unit::Cm, Unit::Px))
+ );
+ }
+
+ penTileInfos.setStyle(Qt::DotLine);
+ painter.setPen(penTileInfos);
+
+ if(row < nbRow-1)
+ {
+ // add bottom triangle
+ painter.fillPath(triangleBottom, triangleBush);
+
+ // bottom line
+ painter.drawLine(QPointF(tilesMargins.left(),
+ tilesMargins.top() + tilesDrawingAreaHeight),
+ QPointF(tilesMargins.left() + tilesDrawingAreaWidth + UnitConvertor(1, Unit::Cm, Unit::Px),
+ tilesMargins.top() + tilesDrawingAreaHeight)
+ );
+ }
+
+ if(col < nbCol-1)
+ {
+ // add right triangle
+ painter.fillPath(triangleRight, triangleBush);
+
+ // right line
+ painter.drawLine(QPointF(tilesMargins.left() + tilesDrawingAreaWidth,
+ tilesMargins.top()),
+ QPointF(tilesMargins.left() + tilesDrawingAreaWidth,
+ tilesMargins.top()+ tilesDrawingAreaHeight + UnitConvertor(1, Unit::Cm, Unit::Px))
+ );
+ }
+
+ // paint the page
+ QRectF source = QRectF(col*tilesDrawingAreaWidth,
+ row*tilesDrawingAreaHeight,
+ tilesDrawingAreaWidth + UnitConvertor(1, Unit::Cm, Unit::Px),
+ tilesDrawingAreaHeight + UnitConvertor(1, Unit::Cm, Unit::Px)
+ );
+ QRectF target = QRectF(tilesMargins.left(),
+ tilesMargins.top(),
+ source.width(),
+ source.height()
+ );
+
+ painter.setPen(penTileDrawing);
m_graphicsView->GetScene()->render(&painter, target, source, Qt::IgnoreAspectRatio);
}
}