Added SVG support to image objects.
This commit is contained in:
@@ -29,6 +29,7 @@ endif ()
|
|||||||
find_package(Qt5Widgets 5.4 REQUIRED)
|
find_package(Qt5Widgets 5.4 REQUIRED)
|
||||||
find_package(Qt5PrintSupport 5.4 REQUIRED)
|
find_package(Qt5PrintSupport 5.4 REQUIRED)
|
||||||
find_package(Qt5Xml 5.4 REQUIRED)
|
find_package(Qt5Xml 5.4 REQUIRED)
|
||||||
|
find_package(Qt5Svg 5.4 REQUIRED)
|
||||||
|
|
||||||
find_package(ZLIB 1.2 REQUIRED)
|
find_package(ZLIB 1.2 REQUIRED)
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ target_link_libraries (glabels-qt
|
|||||||
${Qt5Widgets_LIBRARIES}
|
${Qt5Widgets_LIBRARIES}
|
||||||
${Qt5PrintSupport_LIBRARIES}
|
${Qt5PrintSupport_LIBRARIES}
|
||||||
${Qt5Xml_LIBRARIES}
|
${Qt5Xml_LIBRARIES}
|
||||||
|
${Qt5Svg_LIBRARIES}
|
||||||
${ZLIB_LIBRARIES}
|
${ZLIB_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -157,6 +158,7 @@ include_directories (
|
|||||||
${Qt5Widgets_INCLUDE_DIRS}
|
${Qt5Widgets_INCLUDE_DIRS}
|
||||||
${Qt5PrintSupport_INCLUDE_DIRS}
|
${Qt5PrintSupport_INCLUDE_DIRS}
|
||||||
${Qt5Xml_INCLUDE_DIRS}
|
${Qt5Xml_INCLUDE_DIRS}
|
||||||
|
${Qt5Svg_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
link_directories (
|
link_directories (
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
#include <QBrush>
|
#include <QBrush>
|
||||||
#include <QPen>
|
#include <QPen>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@@ -39,7 +41,7 @@ QImage* LabelModelImageObject::smDefaultImage = 0;
|
|||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
LabelModelImageObject::LabelModelImageObject() : mImage(0)
|
LabelModelImageObject::LabelModelImageObject() : mImage(0), mSvg(0)
|
||||||
{
|
{
|
||||||
mOutline = new Outline( this );
|
mOutline = new Outline( this );
|
||||||
|
|
||||||
@@ -152,7 +154,7 @@ void LabelModelImageObject::drawObject( QPainter* painter, bool inEditor, merge:
|
|||||||
{
|
{
|
||||||
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
|
||||||
if ( inEditor && (mFilenameNode.isField() || !mImage ) )
|
if ( inEditor && (mFilenameNode.isField() || (!mImage && !mSvg) ) )
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->setRenderHint( QPainter::SmoothPixmapTransform, false );
|
painter->setRenderHint( QPainter::SmoothPixmapTransform, false );
|
||||||
@@ -163,8 +165,13 @@ void LabelModelImageObject::drawObject( QPainter* painter, bool inEditor, merge:
|
|||||||
{
|
{
|
||||||
painter->drawImage( destRect, *mImage );
|
painter->drawImage( destRect, *mImage );
|
||||||
}
|
}
|
||||||
|
else if ( mSvg )
|
||||||
|
{
|
||||||
|
mSvg->render( painter, destRect );
|
||||||
|
}
|
||||||
else if ( mFilenameNode.isField() )
|
else if ( mFilenameNode.isField() )
|
||||||
{
|
{
|
||||||
|
// TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,37 +197,76 @@ void LabelModelImageObject::loadImage()
|
|||||||
{
|
{
|
||||||
delete mImage;
|
delete mImage;
|
||||||
}
|
}
|
||||||
|
if ( mSvg )
|
||||||
|
{
|
||||||
|
delete mSvg;
|
||||||
|
}
|
||||||
|
|
||||||
if ( mFilenameNode.isField() )
|
if ( mFilenameNode.isField() )
|
||||||
{
|
{
|
||||||
mImage = 0;
|
mImage = 0;
|
||||||
|
mSvg = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QString filename = mFilenameNode.data();
|
QString filename = mFilenameNode.data();
|
||||||
mImage = new QImage( filename );
|
QFileInfo fileInfo( filename );
|
||||||
if ( mImage->isNull() )
|
|
||||||
|
if ( fileInfo.isReadable() )
|
||||||
{
|
{
|
||||||
mImage = 0;
|
if ( (fileInfo.suffix() == "svg") || (fileInfo.suffix() == "SVG") )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
double imageW = mImage->width();
|
|
||||||
double imageH = mImage->height();
|
|
||||||
double aspectRatio = imageH / imageW;
|
|
||||||
if ( mH > mW*aspectRatio )
|
|
||||||
{
|
{
|
||||||
mH = mW*aspectRatio;
|
mSvg = new QSvgRenderer( filename );
|
||||||
|
if ( !mSvg->isValid() )
|
||||||
|
{
|
||||||
|
mSvg = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Adjust size based on aspect ratio of SVG image
|
||||||
|
QRectF rect = mSvg->viewBoxF();
|
||||||
|
double aspectRatio = rect.height() / rect.width();
|
||||||
|
if ( mH > mW*aspectRatio )
|
||||||
|
{
|
||||||
|
mH = mW*aspectRatio;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mW = mH/aspectRatio;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mW = mH/aspectRatio;
|
mImage = new QImage( filename );
|
||||||
|
if ( mImage->isNull() )
|
||||||
|
{
|
||||||
|
mImage = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Adjust size based on aspect ratio of image
|
||||||
|
double imageW = mImage->width();
|
||||||
|
double imageH = mImage->height();
|
||||||
|
double aspectRatio = imageH / imageW;
|
||||||
|
if ( mH > mW*aspectRatio )
|
||||||
|
{
|
||||||
|
mH = mW*aspectRatio;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mW = mH/aspectRatio;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Create shadow image
|
||||||
|
///
|
||||||
QImage* LabelModelImageObject::createShadowImage( const QColor& color ) const
|
QImage* LabelModelImageObject::createShadowImage( const QColor& color ) const
|
||||||
{
|
{
|
||||||
int r = color.red();
|
int r = color.red();
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
|
|
||||||
|
#include <QSvgRenderer>
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Label Model Image Object
|
/// Label Model Image Object
|
||||||
@@ -84,6 +86,7 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
TextNode mFilenameNode;
|
TextNode mFilenameNode;
|
||||||
QImage* mImage;
|
QImage* mImage;
|
||||||
|
QSvgRenderer* mSvg;
|
||||||
|
|
||||||
static QImage* smDefaultImage;
|
static QImage* smDefaultImage;
|
||||||
|
|
||||||
|
|||||||
@@ -490,11 +490,25 @@ void ObjectEditor::onFillControlsChanged()
|
|||||||
|
|
||||||
void ObjectEditor::onImageFileButtonClicked()
|
void ObjectEditor::onImageFileButtonClicked()
|
||||||
{
|
{
|
||||||
|
QString filters =
|
||||||
|
tr("Image files (*.png *.jpg *.jpeg *.gif *.bmp *.pbm *.pgm *.ppm *.xbm *.xpm *.svg)") + ";;" +
|
||||||
|
tr("All files (*)") + ";;" +
|
||||||
|
tr("PNG - Portable Network Graphics (*.png)") + ";;" +
|
||||||
|
tr("BMP - Windows Bitmap (*.bmp)") + ";;" +
|
||||||
|
tr("GIF - Graphics Interchange Format (*.gif)") + ";;" +
|
||||||
|
tr("JPEG - Joint Photographic Experts Group (*.jpg *.jpeg)") + ";;" +
|
||||||
|
tr("PBM - Portable Bitmap (*.pbm)") + ";;" +
|
||||||
|
tr("PGM - Portable Graymap (*.pgm)") + ";;" +
|
||||||
|
tr("PPM - Portable Pixmap (*.ppm)") + ";;" +
|
||||||
|
tr("SVG - Scalable Vector Graphics (*.svg)") + ";;" +
|
||||||
|
tr("XBM - X11 Bitmap (*.xbm)") + ";;" +
|
||||||
|
tr("XPM - X11 Pixmap (*.xpm)");
|
||||||
|
|
||||||
QString filename =
|
QString filename =
|
||||||
QFileDialog::getOpenFileName( this->window(),
|
QFileDialog::getOpenFileName( this->window(),
|
||||||
tr("gLabels - Select image file"),
|
tr("gLabels - Select image file"),
|
||||||
".",
|
".", filters );
|
||||||
tr("Image Files (*.png *.jpg *.bmp);;All files (*)") );
|
|
||||||
if ( !filename.isEmpty() )
|
if ( !filename.isEmpty() )
|
||||||
{
|
{
|
||||||
mUndoRedoModel->checkpoint( tr("Set image") );
|
mUndoRedoModel->checkpoint( tr("Set image") );
|
||||||
|
|||||||
Reference in New Issue
Block a user