diff --git a/CMakeLists.txt b/CMakeLists.txt
index 027b2856..6287dbb4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -212,12 +212,13 @@ else()
set(Qt5Widgets_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Widgets")
set(Qt5PrintSupport_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5PrintSupport")
set(Qt5Network_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Network")
- set(Qt5WinExtras_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5WinExtras")
+ set(Qt5Svg_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Svg")
endif()
find_package(Qt5Widgets)
find_package(Qt5PrintSupport)
find_package(Qt5Network)
+find_package(Qt5Svg)
if (WIN32)
find_package(Qt5WinExtras)
@@ -418,9 +419,9 @@ add_custom_target(
add_library(${LIB_GUI_PROJECT_NAME} ${LIB_GUI_FILES} ${CMAKE_BINARY_DIR}/src/lib_gui/version.h)
if(UNIX)
- target_link_libraries(${LIB_GUI_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} Qt5::Widgets Qt5::Network)
+ target_link_libraries(${LIB_GUI_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} Qt5::Widgets Qt5::Network Qt5::Svg)
else()
- target_link_libraries(${LIB_GUI_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} Qt5::Widgets Qt5::Network Qt5::WinExtras)
+ target_link_libraries(${LIB_GUI_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} Qt5::Widgets Qt5::Network Qt5::Svg Qt5::WinExtras)
endif()
# command for versioning script
@@ -630,7 +631,10 @@ if (APPLE)
get_property(QT_NETWORK_PATH TARGET ${Qt5Network_LIBRARIES} PROPERTY LOCATION)
get_filename_component(QT_NETWORK_PATH ${QT_NETWORK_PATH} REALPATH)
- list(APPEND MACOSX_QT_FRAMEWORKS ${QT_CORE_PATH} ${QT_GUI_PATH} ${QT_WIDGETS_PATH} ${QT_PRINT_PATH} ${QT_NETWORK_PATH})
+ get_property(QT_SVG_PATH TARGET ${Qt5Svg_LIBRARIES} PROPERTY LOCATION)
+ get_filename_component(QT_SVG_PATH ${QT_SVG_PATH} REALPATH)
+
+ list(APPEND MACOSX_QT_FRAMEWORKS ${QT_CORE_PATH} ${QT_GUI_PATH} ${QT_WIDGETS_PATH} ${QT_PRINT_PATH} ${QT_NETWORK_PATH} ${QT_SVG_PATH})
string(REPLACE ";" " " MACOSX_QT_FRAMEWORKS "${MACOSX_QT_FRAMEWORKS}")
set(MACOSX_QT_DIR "$ENV{QT_DIR}")
diff --git a/cmake/linux_package.cmake b/cmake/linux_package.cmake
index 74bb6f10..d02a87c7 100644
--- a/cmake/linux_package.cmake
+++ b/cmake/linux_package.cmake
@@ -37,11 +37,12 @@ endfunction(GetAndInstallLibrary)
function(InstallQt qtversion)
InstallQtModule(Gui ${qtversion})
- InstallQtModule(Core ${qtversion} )
- InstallQtModule(Network ${qtversion} )
- InstallQtModule(XcbQpa ${qtversion} )
- InstallQtModule(Widgets ${qtversion} )
- InstallQtModule(DBus ${qtversion} )
+ InstallQtModule(Core ${qtversion})
+ InstallQtModule(Network ${qtversion})
+ InstallQtModule(XcbQpa ${qtversion})
+ InstallQtModule(Widgets ${qtversion})
+ InstallQtModule(DBus ${qtversion})
+ InstallQtModule(Svg ${qtversion})
endfunction(InstallQt)
function(AddSharedToComponent)
diff --git a/deployment/windows/wixSetup/installDir.wxs b/deployment/windows/wixSetup/installDir.wxs
index b6b33a99..24bf8d3b 100644
--- a/deployment/windows/wixSetup/installDir.wxs
+++ b/deployment/windows/wixSetup/installDir.wxs
@@ -45,6 +45,10 @@
+
+
+
+
diff --git a/deployment/windows/wixSetup/sourcetrail.wxs b/deployment/windows/wixSetup/sourcetrail.wxs
index e9aec391..88c66fca 100644
--- a/deployment/windows/wixSetup/sourcetrail.wxs
+++ b/deployment/windows/wixSetup/sourcetrail.wxs
@@ -174,6 +174,7 @@
+
diff --git a/script/setup.sh b/script/setup.sh
index 4c012a8c..9a4881c0 100755
--- a/script/setup.sh
+++ b/script/setup.sh
@@ -72,6 +72,7 @@ if [ $PLATFORM == "Windows" ]; then
cp -u -r ${QT_DIR}/bin/Qt5Core$SUFFIX.dll build/win$1/$2/$3
cp -u -r ${QT_DIR}/bin/Qt5Gui$SUFFIX.dll build/win$1/$2/$3
cp -u -r ${QT_DIR}/bin/Qt5Network$SUFFIX.dll build/win$1/$2/$3
+ cp -u -r ${QT_DIR}/bin/Qt5Svg$SUFFIX.dll build/win$1/$2/$3
cp -u -r ${QT_DIR}/bin/Qt5Widgets$SUFFIX.dll build/win$1/$2/$3
cp -u -r ${QT_DIR}/bin/Qt5WinExtras$SUFFIX.dll build/win$1/$2/$3
cp -u -r ${QT_DIR}/plugins/platforms/qwindows$SUFFIX.dll build/win$1/$2/$3/platforms
diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp
index e8b2e917..72607cc7 100644
--- a/src/lib/component/view/GraphViewStyle.cpp
+++ b/src/lib/component/view/GraphViewStyle.cpp
@@ -196,27 +196,27 @@ size_t GraphViewStyle::getFontSizeOfGroupNode()
std::string GraphViewStyle::getFontNameForDataNode()
{
- return s_fontName;
+ return s_fontName + ", consolas, monospace, sans-serif";
}
std::string GraphViewStyle::getFontNameOfAccessNode()
{
- return "Fira Sans";
+ return "Fira Sans, sans-serif";
}
std::string GraphViewStyle::getFontNameOfExpandToggleNode()
{
- return "Fira Sans";
+ return "Fira Sans, sans-serif";
}
std::string GraphViewStyle::getFontNameOfTextNode()
{
- return "Fira Sans";
+ return "Fira Sans, sans-serif";
}
std::string GraphViewStyle::getFontNameOfGroupNode()
{
- return s_fontName;
+ return s_fontName + ", consolas, monospace, sans-serif";
}
GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForDataNode(NodeType::StyleType type, bool hasIcon, bool hasChildren)
diff --git a/src/lib_gui/qt/graphics/QtGraphicsView.cpp b/src/lib_gui/qt/graphics/QtGraphicsView.cpp
index 99fc61c5..bc9d6239 100644
--- a/src/lib_gui/qt/graphics/QtGraphicsView.cpp
+++ b/src/lib_gui/qt/graphics/QtGraphicsView.cpp
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include "qt/element/QtIconButton.h"
#include "qt/view/graphElements/QtGraphEdge.h"
@@ -108,7 +109,6 @@ void QtGraphicsView::setAppZoomFactor(float appZoomFactor)
void QtGraphicsView::setSceneRect(const QRectF& rect)
{
QGraphicsView::setSceneRect(rect);
-
scene()->setSceneRect(rect);
}
@@ -441,10 +441,42 @@ void QtGraphicsView::stopTimer()
void QtGraphicsView::exportGraph()
{
- QString fileName = QtFileDialog::showSaveFileDialog(
- nullptr, "Save image", FilePath(), "PNG (*.png);;JPEG (*.JPEG);;BMP Files (*.bmp)");
+ const QString exportNotice = "Exported from Sourcetrail";
+ const int margin = 10;
- if (!fileName.isNull())
+ FilePath filePath(QtFileDialog::showSaveFileDialog(
+ nullptr, "Save image", FilePath(), "PNG (*.png);;JPEG (*.JPEG);;BMP Files (*.bmp);;SVG (*.svg)"
+ ).toStdWString());
+
+
+ if (filePath.extension() == L".svg")
+ {
+ QSvgGenerator svgGen;
+ svgGen.setFileName(QString::fromStdWString(filePath.wstr()));
+ svgGen.setSize(scene()->sceneRect().size().toSize());
+ svgGen.setViewBox(QRect(QPoint(0, 0), scene()->sceneRect().size().toSize()));
+ svgGen.setTitle(QString::fromStdWString(filePath.withoutExtension().fileName()));
+ svgGen.setDescription(QString("Graph exported from Sourcetrail") + QChar(0x00AE));
+
+ QPainter painter(&svgGen);
+ scene()->render(&painter);
+
+ {
+ QFont font("Fira Sans, sans-serif");
+ font.setPixelSize(8);
+ painter.setFont(font);
+ }
+ {
+ QRect boundingRect;
+ painter.drawText(
+ QRect(margin, margin, svgGen.size().width() - 2 * margin, svgGen.size().height() - 2 * margin),
+ Qt::AlignBottom | Qt::AlignHCenter,
+ exportNotice + ' ' + QChar(0x00AE),
+ &boundingRect
+ );
+ }
+ }
+ else if (!filePath.empty())
{
QImage image(scene()->sceneRect().size().toSize() * 2, QImage::Format_ARGB32);
image.fill(Qt::transparent);
@@ -453,21 +485,19 @@ void QtGraphicsView::exportGraph()
painter.setRenderHint(QPainter::Antialiasing);
scene()->render(&painter);
- // different approach: only currently visible part
- // QPixmap pixMap = grab();
- // pixMap.save(fileName);
-
{
- const int margin = 10;
-
- {
- QFont font = painter.font();
- font.setPixelSize(14);
- painter.setFont(font);
- }
-
+ QFont font = painter.font();
+ font.setPixelSize(14);
+ painter.setFont(font);
+ }
+ {
QRect boundingRect;
- painter.drawText(QRect(margin, margin, image.size().width() - 2 * margin, image.size().height() - 2 * margin), Qt::AlignBottom | Qt::AlignHCenter, "Exported from Sourcetrail", &boundingRect);
+ painter.drawText(
+ QRect(margin, margin, image.size().width() - 2 * margin, image.size().height() - 2 * margin),
+ Qt::AlignBottom | Qt::AlignHCenter,
+ exportNotice,
+ &boundingRect
+ );
{
QFont font = painter.font();
@@ -475,10 +505,14 @@ void QtGraphicsView::exportGraph()
painter.setFont(font);
}
- painter.drawText(boundingRect.right() + boundingRect.height() / 5, boundingRect.top() + boundingRect.height() / 2, QChar(0x00AE));
+ painter.drawText(
+ boundingRect.right() + boundingRect.height() / 5,
+ boundingRect.top() + boundingRect.height() / 2,
+ QChar(0x00AE)
+ );
}
- image.save(fileName);
+ image.save(QString::fromStdWString(filePath.wstr()));
}
}