1
0
Fork 0

Merge pull request #3728 from torusrxxx/patch000000e4

Save graph image as PDF
This commit is contained in:
Duncan Ogilvie 2025-12-14 14:45:50 +01:00 committed by GitHub
commit bc9c79d899
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 8 deletions

View File

@ -16,6 +16,7 @@
#include "StringUtil.h"
#include "MiscUtil.h"
#include <QMainWindow>
#include <QPdfWriter>
DisassemblerGraphView::DisassemblerGraphView(Architecture* architecture, QWidget* parent)
: QAbstractScrollArea(parent),
@ -2547,7 +2548,7 @@ void DisassemblerGraphView::refreshSlot()
DbgCmdExec(QString("graph %1, force").arg(ToPtrString(this->cur_instr)));
}
QImage DisassemblerGraphView::getImage()
void DisassemblerGraphView::paintImage(QPainter* painter)
{
//this->viewport()->update();
@ -2566,12 +2567,7 @@ QImage DisassemblerGraphView::getImage()
}
//save viewport to image
auto scaleFactor = devicePixelRatioF();
QRect completeRenderRect = QRect(0, 0, renderWidth * scaleFactor, renderHeight * scaleFactor);
QImage img(completeRenderRect.size(), QImage::Format_ARGB32);
img.setDevicePixelRatio(scaleFactor);
QPainter painter(&img);
viewport()->render(&painter);
viewport()->render(painter);
//restore changes made to viewport for full render saving
viewport()->resize(size);
@ -2581,16 +2577,37 @@ QImage DisassemblerGraphView::getImage()
horizontalScrollBar()->setValue(scrollbarPos.x());
verticalScrollBar()->setValue(scrollbarPos.y());
}
}
QImage DisassemblerGraphView::getImage()
{
auto scaleFactor = devicePixelRatioF();
QSize completeRenderRect = QSize(renderWidth * scaleFactor, renderHeight * scaleFactor);
QImage img(completeRenderRect, QImage::Format_ARGB32);
img.setDevicePixelRatio(scaleFactor);
QPainter painter(&img);
paintImage(&painter);
return img;
}
void DisassemblerGraphView::saveImageSlot()
{
QString path = QFileDialog::getSaveFileName(this, tr("Save as image"), "", tr("PNG file (*.png);;WebP file (*.webp);;BMP file (*.bmp);;TIFF file (*.tif)"));
QString path = QFileDialog::getSaveFileName(this, tr("Save as image"), "", tr("PNG file (*.png);;WebP lossless file (*.webp);;BMP file (*.bmp);;TIFF file (*.tif);;PDF file (*.pdf)"));
if(path.isEmpty())
return;
if(path.endsWith(".pdf", Qt::CaseInsensitive))
{
QPdfWriter pdf(path);
pdf.setCreator(QApplication::applicationDisplayName());
pdf.setPageSize(QPageSize(QSizeF(renderWidth, renderHeight), QPageSize::Point));
pdf.setResolution(72.0);
pdf.setTitle(getSymbolicName(currentGraph.entryPoint));
pdf.setPageMargins(QMarginsF(0.0, 0.0, 0.0, 0.0));
QPainter painter(&pdf);
paintImage(&painter);
return;
}
QImage img = getImage();
bool success;
if(!path.endsWith(".webp", Qt::CaseInsensitive))

View File

@ -393,5 +393,6 @@ private:
void addReferenceAction(QMenu* menu, duint addr, const QString & description);
bool getHighlightedTokenValueText(QString & text) const;
void paintImage(QPainter* painter);
QImage getImage();
};