void PaintWidget::paintTo(const QRect &dirtyRect, QPainter &painter) { painter.setRenderHint(QPainter::SmoothPixmapTransform, true); painter.setRenderHint(QPainter::Antialiasing, true); //painter.setRenderHint(QPainter::HighQualityAntialiasing, true); //draw screenshot if enabled if(drawScreenhot_) { painter.save(); auto size = painter.viewport().size(); QSize s = screenshot_.size(); QRect r = calcDrawArea(s, size); painter.drawPixmap(r,screenshot_); painter.restore(); } //draw pdf if available if(drawPdf_ && pdfDocument_) { QSize s(4, 3); QRect area = calcDrawArea(s, painter.viewport().size()); //std::cout << area.x() << ' ' << area.y() << ' ' << area.width() << ' ' << area.height() << std::endl; painter.drawImage(area, pdfImage_); } painter.save(); //draw the overlay image auto size = this->size(); painter.scale( (qreal)size.width() / (qreal)overlayImage_.width(), (qreal)size.height() / (qreal)overlayImage_.height()); painter.drawImage(dirtyRect, overlayImage_, dirtyRect); //draw temporary stuff if(isPainting_ && paintTool_ == PaintToolType::Rectangle) { QColor color(pen_.color()); color.setAlpha(100); painter.fillRect(rectTool, color); } painter.restore(); }
void ViewportWidget::resizeEvent(QResizeEvent *event) { Q_UNUSED(event); Q_ASSERT(this->parentWidget()); this->resize(calcDrawArea(this->parentWidget()->width(), this->parentWidget()->height())); this->setGeometry(this->parentWidget()->width() / 2 - this->width() / 2, this->parentWidget()->height() / 2 - this->height() / 2, this->width(), this->height()); /* This if fb filling background draw is wanted instead of buildPane() _pixelRatio = (qreal)this->width() / (qreal)SCREEN_WIDTH; */ buildPane(); }
// update the pdf image void PaintWidget::updatePdfPageImage() { if(pdfDocument_ == nullptr) return; //TODO calculate right dpi for output size auto page = pdfDocument_->page(pdfCurrentPage_); auto size = page->pageSize(); //page size in points, 72 dpi == each point one pixel auto rect = calcDrawArea(size, outputSize_); //scale up to size //extract factor float xfactor = 72.0 * ((qreal)rect.width()/(qreal)size.width()); float yfactor = 72.0 * ((qreal)rect.height()/(qreal)size.height()); pdfImage_ = page->renderToImage(xfactor, yfactor); delete page; }