/************************************************ * * ***********************************************/ int PreviewWidget::pageAt(const QPoint &point) const { Sheet * sheet = project->currentSheet(); if (!sheet) return -1; for (int i=0; i<sheet->count(); ++i) { if (pageRect(i).contains(point)) return i; } return -1; }
void PreviewWidget::paintEvent(QPaintEvent *event) { //#define DEBUG_LAYOUT #ifdef DEBUG_LAYOUT { if (mImage.isNull()) return; if (mSheetNum < 0) return; Sheet *sheet = project->previewSheet(mSheetNum); if (!sheet) return; QPainter painter(this); QRectF rect = project->printer()->paperRect(); painter.fillRect(rect, Qt::white); for (int i=0; i< sheet->count(); ++i) { QPen pen = painter.pen(); pen.setStyle(Qt::DotLine); pen.setColor(Qt::darkGray); painter.setPen(pen); TransformSpec spec = project->layout()->transformSpec(sheet, i, project->rotation()); painter.drawRect(spec.rect); QFont font = painter.font(); font.setPixelSize(spec.rect.height() / 2 ); painter.setFont(font); painter.drawText(spec.rect, Qt::AlignCenter, QString("%1").arg(i+1)); pen.setStyle(Qt::SolidLine); pen.setColor(Qt::red); painter.setPen(pen); switch (spec.rotation) { case NoRotate: painter.drawLine(spec.rect.topLeft(), spec.rect.topRight()); break; case Rotate90: painter.drawLine(spec.rect.topRight(), spec.rect.bottomRight()); break; case Rotate180: painter.drawLine(spec.rect.bottomLeft(), spec.rect.bottomRight()); break; case Rotate270: painter.drawLine(spec.rect.topLeft(), spec.rect.bottomLeft()); break; } } return; } #endif if (mImage.isNull()) return; QSizeF printerSize = project->printer()->paperRect().size(); Rotation rotation = project->rotation(); if (isLandscape(rotation)) printerSize.transpose(); mScaleFactor = qMin((this->geometry().width() - 2.0 * MARGIN_H) * 1.0 / printerSize.width(), (this->geometry().height() - 2.0 * MARGIN_V) * 1.0 / printerSize.height()); if (mScaleFactor == 0) { mDrawRect = QRect(); return; } QSize size = QSize(printerSize.width() * mScaleFactor, printerSize.height() * mScaleFactor); mDrawRect = QRect(QPoint(0, 0), size); mDrawRect.moveCenter(QPoint(0, 0)); QRectF clipRect = mDrawRect; if (mHints.testFlag(Sheet::HintOnlyLeft)) { switch (rotation) { case NoRotate: clipRect.setBottom(0); break; case Rotate90: clipRect.setRight(0); break; case Rotate180: clipRect.setBottom(0); break; case Rotate270: clipRect.setRight(0); break; } } if (mHints.testFlag(Sheet::HintOnlyRight)) { switch (rotation) { case NoRotate: clipRect.setTop(0); break; case Rotate90: clipRect.setLeft(0); break; case Rotate180: clipRect.setTop(0); break; case Rotate270: clipRect.setLeft(0); break; } } QImage img = mImage.scaled(mDrawRect.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // Draw ..................................... QPainter painter(this); painter.save(); QPoint center = QRect(0, 0, geometry().width(), geometry().height()).center(); painter.translate(center); if (mHints.testFlag(Sheet::HintSubBooklet)) { painter.save(); QPoint center = mDrawRect.center(); QRectF imgRect; clipRect = mDrawRect; clipRect.setRight(center.x()); clipRect.adjust(-MARGIN_BOOKLET, 0, -MARGIN_BOOKLET, 0); painter.setClipRect(clipRect); imgRect = img.rect(); imgRect.setRight(img.rect().center().x()); painter.drawImage(clipRect, img, imgRect); drawShadow(painter, clipRect); clipRect = mDrawRect; clipRect.setLeft(center.x()); clipRect.adjust(MARGIN_BOOKLET, 0, MARGIN_BOOKLET, 0); painter.setClipRect(clipRect); imgRect = img.rect(); imgRect.setLeft(img.rect().center().x()); painter.drawImage(clipRect, img, imgRect); drawShadow(painter, clipRect); painter.restore(); } else { painter.save(); painter.setClipRect(clipRect); painter.drawImage(mDrawRect, img); drawShadow(painter, clipRect); painter.restore(); } if (mHints.testFlag(Sheet::HintDrawFold) && !mHints.testFlag(Sheet::HintSubBooklet)) { QPen pen = painter.pen(); pen.setStyle(Qt::SolidLine); pen.setColor(Qt::lightGray); painter.setPen(pen); if (isLandscape(rotation)) painter.drawLine(0, mDrawRect.top(), 0, mDrawRect.bottom()); else painter.drawLine(mDrawRect.left(), 0, mDrawRect.right(), 0); } painter.restore(); mDrawRect.moveCenter(center); // Draw current page rect ................... Sheet *sheet = project->currentSheet(); if (sheet) { ProjectPage *curPage = project->currentPage(); if (curPage) { painter.save(); QPen pen = painter.pen(); pen.setStyle(Qt::DashLine); //pen.setColor(QColor(142, 188, 226, 128)); pen.setColor(QColor(105, 101, 98, 70)); painter.setPen(pen); painter.drawRect(this->pageRect(sheet->indexOfPage(curPage))); painter.restore(); } } //#define DEBUG_CLICK_RECT #ifdef DEBUG_CLICK_RECT { Sheet *sheet = project->currentSheet(); if (sheet) { ProjectPage *curPage = project->currentPage(); painter.save(); for (int i=0; i< sheet->count(); ++i) { QPen pen = painter.pen(); pen.setStyle(Qt::DotLine); if (sheet->page(i) == curPage) pen.setColor(Qt::red); else pen.setColor(QColor(142, 188, 226)); painter.setPen(pen); painter.drawRect(this->pageRect(i)); painter.drawText(this->pageRect(i).translated(10, 10), QString("%1").arg(i)); } painter.restore(); } } #endif }