Пример #1
0
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();
}
Пример #2
0
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();
}
Пример #3
0
// 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;
}