Fit Valentina's scale and an image resolution.
This commit is contained in:
parent
10a2de6b1d
commit
d4f791f0ee
|
@ -27,9 +27,9 @@
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#include "vbackgroundpatternimage.h"
|
#include "vbackgroundpatternimage.h"
|
||||||
|
|
||||||
#include "qglobal.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "../vmisc/compatibility.h"
|
#include "../vmisc/compatibility.h"
|
||||||
|
#include "../vmisc/defglobal.h"
|
||||||
|
|
||||||
#include <QMimeType>
|
#include <QMimeType>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
#include <QImageReader>
|
#include <QImageReader>
|
||||||
#include <ciso646>
|
#include <ciso646>
|
||||||
|
#include <QSvgRenderer>
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VBackgroundPatternImage::FromFile(const QString &fileName, bool builtIn) -> VBackgroundPatternImage
|
auto VBackgroundPatternImage::FromFile(const QString &fileName, bool builtIn) -> VBackgroundPatternImage
|
||||||
|
@ -90,6 +91,7 @@ void VBackgroundPatternImage::SetContentData(const QByteArray &newContentData, c
|
||||||
m_contentData = newContentData;
|
m_contentData = newContentData;
|
||||||
m_contentType = newContentType;
|
m_contentType = newContentType;
|
||||||
m_filePath.clear();
|
m_filePath.clear();
|
||||||
|
m_size = QSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -181,6 +183,7 @@ void VBackgroundPatternImage::SetFilePath(const QString &newFilePath)
|
||||||
m_filePath = newFilePath;
|
m_filePath = newFilePath;
|
||||||
m_contentData.clear();
|
m_contentData.clear();
|
||||||
m_contentType.clear();
|
m_contentType.clear();
|
||||||
|
m_size = QSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -239,21 +242,66 @@ auto VBackgroundPatternImage::Size() const -> QSize
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (not m_size.isValid())
|
||||||
|
{
|
||||||
|
auto ScaleRasterImage = [](QImageReader &imageReader)
|
||||||
|
{
|
||||||
|
const QImage image = imageReader.read();
|
||||||
|
const double ratioX = PrintDPI / (image.dotsPerMeterX() / 100. * 2.54);
|
||||||
|
const double ratioY = PrintDPI / (image.dotsPerMeterY() / 100. * 2.54);
|
||||||
|
const QSize imageSize = image.size();
|
||||||
|
return QSize(qRound(imageSize.width()*ratioX), qRound(imageSize.height()*ratioY));
|
||||||
|
};
|
||||||
|
|
||||||
|
auto ScaleVectorImage = [](const QSvgRenderer &renderer)
|
||||||
|
{
|
||||||
|
const QSize imageSize = renderer.defaultSize();
|
||||||
|
constexpr double ratio = PrintDPI / 90.;
|
||||||
|
return QSize(qRound(imageSize.width()*ratio), qRound(imageSize.height()*ratio));
|
||||||
|
};
|
||||||
|
|
||||||
if (not m_filePath.isEmpty())
|
if (not m_filePath.isEmpty())
|
||||||
{
|
{
|
||||||
return QImageReader(m_filePath).size();
|
if (Type() == PatternImage::Raster)
|
||||||
|
{
|
||||||
|
QImageReader imageReader(m_filePath);
|
||||||
|
m_size = ScaleRasterImage(imageReader);
|
||||||
|
return m_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Type() == PatternImage::Vector)
|
||||||
|
{
|
||||||
|
QSvgRenderer renderer;
|
||||||
|
renderer.load(m_filePath);
|
||||||
|
m_size = ScaleVectorImage(renderer);
|
||||||
|
return m_size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not m_contentData.isEmpty())
|
if (not m_contentData.isEmpty())
|
||||||
{
|
{
|
||||||
QByteArray array = QByteArray::fromBase64(m_contentData);
|
QByteArray array = QByteArray::fromBase64(m_contentData);
|
||||||
|
|
||||||
|
if (Type() == PatternImage::Raster)
|
||||||
|
{
|
||||||
QBuffer buffer(&array);
|
QBuffer buffer(&array);
|
||||||
buffer.open(QIODevice::ReadOnly);
|
buffer.open(QIODevice::ReadOnly);
|
||||||
|
QImageReader imageReader(&buffer);
|
||||||
return QImageReader(&buffer).size();
|
m_size = ScaleRasterImage(imageReader);
|
||||||
|
return m_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
if (Type() == PatternImage::Vector)
|
||||||
|
{
|
||||||
|
QSvgRenderer renderer;
|
||||||
|
renderer.load(array);
|
||||||
|
m_size = ScaleVectorImage(renderer);
|
||||||
|
return m_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -47,7 +47,7 @@ enum class PatternImage
|
||||||
|
|
||||||
class VBackgroundPatternImage
|
class VBackgroundPatternImage
|
||||||
{
|
{
|
||||||
Q_DECLARE_TR_FUNCTIONS(VBackgroundPatternImage)
|
Q_DECLARE_TR_FUNCTIONS(VBackgroundPatternImage) // NOLINT
|
||||||
public:
|
public:
|
||||||
VBackgroundPatternImage() = default;
|
VBackgroundPatternImage() = default;
|
||||||
|
|
||||||
|
@ -79,7 +79,6 @@ public:
|
||||||
void SetId(const QUuid &newId);
|
void SetId(const QUuid &newId);
|
||||||
|
|
||||||
auto Size() const -> QSize;
|
auto Size() const -> QSize;
|
||||||
void SetSize(const QSize &newSize);
|
|
||||||
|
|
||||||
auto ErrorString() const -> const QString &;
|
auto ErrorString() const -> const QString &;
|
||||||
|
|
||||||
|
@ -108,6 +107,7 @@ private:
|
||||||
bool m_hold{false};
|
bool m_hold{false};
|
||||||
bool m_visible{true};
|
bool m_visible{true};
|
||||||
qreal m_opacity{1.0};
|
qreal m_opacity{1.0};
|
||||||
|
mutable QSize m_size{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VBACKGROUNDPATTERNIMAGE_H
|
#endif // VBACKGROUNDPATTERNIMAGE_H
|
||||||
|
|
|
@ -213,14 +213,33 @@ auto VBackgroundPixmapItem::Pixmap() const -> QPixmap
|
||||||
return m_pixmap;
|
return m_pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Scale to Valentina resolution
|
||||||
|
auto ScaleImage = [](const QImage &image)
|
||||||
|
{
|
||||||
|
const double ratioX = PrintDPI / (image.dotsPerMeterX() / 100. * 2.54);
|
||||||
|
const double ratioY = PrintDPI / (image.dotsPerMeterY() / 100. * 2.54);
|
||||||
|
const QSize imageSize = image.size();
|
||||||
|
return image.scaled(qRound(imageSize.width()*ratioX),
|
||||||
|
qRound(imageSize.height()*ratioY),
|
||||||
|
Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
|
};
|
||||||
|
|
||||||
if (not image.FilePath().isEmpty())
|
if (not image.FilePath().isEmpty())
|
||||||
{
|
{
|
||||||
QImageReader imageReader(image.FilePath());
|
QImageReader imageReader(image.FilePath());
|
||||||
m_pixmap = QPixmap::fromImageReader(&imageReader);
|
QImage image = imageReader.read();
|
||||||
|
if (not image.isNull())
|
||||||
|
{
|
||||||
|
m_pixmap = QPixmap::fromImage(ScaleImage(image));
|
||||||
if (m_pixmap.isNull())
|
if (m_pixmap.isNull())
|
||||||
{
|
{
|
||||||
m_pixmap = InvalidImage();
|
m_pixmap = InvalidImage();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_pixmap = InvalidImage();
|
||||||
|
}
|
||||||
MakeFresh();
|
MakeFresh();
|
||||||
return m_pixmap;
|
return m_pixmap;
|
||||||
}
|
}
|
||||||
|
@ -232,11 +251,19 @@ auto VBackgroundPixmapItem::Pixmap() const -> QPixmap
|
||||||
buffer.open(QIODevice::ReadOnly);
|
buffer.open(QIODevice::ReadOnly);
|
||||||
|
|
||||||
QImageReader imageReader(&buffer);
|
QImageReader imageReader(&buffer);
|
||||||
m_pixmap = QPixmap::fromImageReader(&imageReader);
|
QImage image = imageReader.read();
|
||||||
|
if (not image.isNull())
|
||||||
|
{
|
||||||
|
m_pixmap = QPixmap::fromImage(ScaleImage(image));
|
||||||
if (m_pixmap.isNull())
|
if (m_pixmap.isNull())
|
||||||
{
|
{
|
||||||
m_pixmap = InvalidImage();
|
m_pixmap = InvalidImage();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_pixmap = InvalidImage();
|
||||||
|
}
|
||||||
MakeFresh();
|
MakeFresh();
|
||||||
return m_pixmap;
|
return m_pixmap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
**
|
**
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#include "vbackgroundsvgitem.h"
|
#include "vbackgroundsvgitem.h"
|
||||||
|
#include <QSize>
|
||||||
|
|
||||||
#include <QStyleOptionGraphicsItem>
|
#include <QStyleOptionGraphicsItem>
|
||||||
#include <QSvgRenderer>
|
#include <QSvgRenderer>
|
||||||
|
@ -52,7 +53,10 @@ VBackgroundSVGItem::~VBackgroundSVGItem()
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VBackgroundSVGItem::boundingRect() const -> QRectF
|
auto VBackgroundSVGItem::boundingRect() const -> QRectF
|
||||||
{
|
{
|
||||||
return Image().Matrix().mapRect(QRectF(QPointF(0, 0), Renderer()->defaultSize()));
|
QSize size = Renderer()->defaultSize();
|
||||||
|
constexpr double ratio = PrintDPI / 90.;
|
||||||
|
size = QSize(qRound(size.width()*ratio), qRound(size.height()*ratio));
|
||||||
|
return Image().Matrix().mapRect(QRectF(QPointF(0, 0), size));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -68,6 +72,7 @@ void VBackgroundSVGItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->setTransform(Image().Matrix(), true);
|
painter->setTransform(Image().Matrix(), true);
|
||||||
painter->setOpacity(Image().Opacity());
|
painter->setOpacity(Image().Opacity());
|
||||||
|
painter->scale(PrintDPI / 90., PrintDPI / 90.);
|
||||||
|
|
||||||
renderer->render(painter, QRectF(QPointF(0, 0), renderer->defaultSize()));
|
renderer->render(painter, QRectF(QPointF(0, 0), renderer->defaultSize()));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user