Fix issue with tile font size.
This commit is contained in:
parent
9cddf75d97
commit
9bbf384a0a
|
@ -1,6 +1,7 @@
|
||||||
# Valentina 0.7.51 (unreleased)
|
# Valentina 0.7.51 (unreleased)
|
||||||
- Z value change for a layout piece.
|
- Z value change for a layout piece.
|
||||||
- Fix issue with Custom template.
|
- Fix issue with Custom template.
|
||||||
|
- Fix issue with tile font size.
|
||||||
|
|
||||||
# Valentina 0.7.50 February 14, 2022
|
# Valentina 0.7.50 February 14, 2022
|
||||||
- Fix regression. Minimal seam allowance width is less than the point accuracy values.
|
- Fix regression. Minimal seam allowance width is less than the point accuracy values.
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "../layout/vplayout.h"
|
#include "../layout/vplayout.h"
|
||||||
#include "../layout/vpsheet.h"
|
#include "../layout/vpsheet.h"
|
||||||
#include "../vmisc/vmath.h"
|
#include "../vmisc/vmath.h"
|
||||||
|
#include "../vwidgets/global.h"
|
||||||
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QImageReader>
|
#include <QImageReader>
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
constexpr qreal penWidth = 1;
|
constexpr qreal penWidth = 1;
|
||||||
|
constexpr qreal minTextFontSize = 5.0;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto SheetMargins(const VPSheetPtr &sheet) -> QMarginsF
|
auto SheetMargins(const VPSheetPtr &sheet) -> QMarginsF
|
||||||
|
@ -30,17 +32,29 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect,
|
||||||
int flags = Qt::TextDontClip|Qt::TextWordWrap, double goalError = 0.01,
|
int flags = Qt::TextDontClip|Qt::TextWordWrap, double goalError = 0.01,
|
||||||
int maxIterationNumber=10) -> QFont
|
int maxIterationNumber=10) -> QFont
|
||||||
{
|
{
|
||||||
|
QFont font;
|
||||||
|
|
||||||
|
if (not drawRect.isValid())
|
||||||
|
{
|
||||||
|
font.setPointSizeF(0.00000001);
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
QRect fontBoundRect;
|
|
||||||
QFont font;
|
|
||||||
double minError = std::numeric_limits<double>::max();
|
double minError = std::numeric_limits<double>::max();
|
||||||
double error = std::numeric_limits<double>::max();
|
double error = std::numeric_limits<double>::max();
|
||||||
int iterationNumber=0;
|
int iterationNumber=0;
|
||||||
while((error > goalError) && (iterationNumber<maxIterationNumber))
|
while((error > goalError) && (iterationNumber<maxIterationNumber))
|
||||||
{
|
{
|
||||||
iterationNumber++;
|
iterationNumber++;
|
||||||
fontBoundRect = painter->fontMetrics().boundingRect(drawRect.toRect(), flags, text);
|
QRect fontBoundRect = painter->fontMetrics().boundingRect(drawRect.toRect(), flags, text);
|
||||||
|
if (fontBoundRect.isNull())
|
||||||
|
{
|
||||||
|
font.setPointSizeF(0.00000001);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
double xFactor = drawRect.width() / fontBoundRect.width();
|
double xFactor = drawRect.width() / fontBoundRect.width();
|
||||||
double yFactor = drawRect.height() / fontBoundRect.height();
|
double yFactor = drawRect.height() / fontBoundRect.height();
|
||||||
double factor;
|
double factor;
|
||||||
|
@ -74,7 +88,12 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
font = painter->font();
|
font = painter->font();
|
||||||
font.setPointSizeF(font.pointSizeF()*factor);
|
qreal size = font.pointSizeF()*factor;
|
||||||
|
if (size <= 0)
|
||||||
|
{
|
||||||
|
size = 0.00000001;
|
||||||
|
}
|
||||||
|
font.setPointSizeF(size);
|
||||||
painter->setFont(font);
|
painter->setFont(font);
|
||||||
}
|
}
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
@ -145,19 +164,6 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
qreal xScale = layout->LayoutSettings().HorizontalScale();
|
qreal xScale = layout->LayoutSettings().HorizontalScale();
|
||||||
qreal yScale = layout->LayoutSettings().VerticalScale();
|
qreal yScale = layout->LayoutSettings().VerticalScale();
|
||||||
|
|
||||||
const qreal width = (layout->TileFactory()->DrawingAreaWidth() - VPTileFactory::tileStripeWidth) / xScale;
|
|
||||||
const qreal height = (layout->TileFactory()->DrawingAreaHeight() - VPTileFactory::tileStripeWidth) / yScale;
|
|
||||||
|
|
||||||
VPSheetPtr sheet = layout->GetSheet(m_sheetUuid);
|
|
||||||
QMarginsF sheetMargins = SheetMargins(sheet);
|
|
||||||
|
|
||||||
const int nbCol = layout->TileFactory()->ColNb(sheet);
|
|
||||||
const int nbRow = layout->TileFactory()->RowNb(sheet);
|
|
||||||
|
|
||||||
QFont font = OptimizeFontSizeToFitTextInRect(painter,
|
|
||||||
QRectF(sheetMargins.left(), sheetMargins.top(), width/3., height/3.),
|
|
||||||
QString::number(nbRow * nbCol));
|
|
||||||
|
|
||||||
VWatermarkData watermarkData = layout->TileFactory()->WatermarkData();
|
VWatermarkData watermarkData = layout->TileFactory()->WatermarkData();
|
||||||
|
|
||||||
auto PaintWatermark = [painter, layout, xScale, yScale, watermarkData]
|
auto PaintWatermark = [painter, layout, xScale, yScale, watermarkData]
|
||||||
|
@ -180,10 +186,25 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto PaintTileNumber = [painter, layout, nbCol, font]
|
const qreal width = (layout->TileFactory()->DrawingAreaWidth() - VPTileFactory::tileStripeWidth) / xScale;
|
||||||
|
const qreal height = (layout->TileFactory()->DrawingAreaHeight() - VPTileFactory::tileStripeWidth) / yScale;
|
||||||
|
|
||||||
|
VPSheetPtr sheet = layout->GetSheet(m_sheetUuid);
|
||||||
|
QMarginsF sheetMargins = SheetMargins(sheet);
|
||||||
|
|
||||||
|
const int nbCol = layout->TileFactory()->ColNb(sheet);
|
||||||
|
const int nbRow = layout->TileFactory()->RowNb(sheet);
|
||||||
|
|
||||||
|
QFont font = OptimizeFontSizeToFitTextInRect(painter,
|
||||||
|
QRectF(sheetMargins.left(), sheetMargins.top(), width/3., height/3.),
|
||||||
|
QString::number(nbRow * nbCol));
|
||||||
|
|
||||||
|
const qreal scale = SceneScale(scene());
|
||||||
|
|
||||||
|
auto PaintTileNumber = [painter, layout, nbCol, font, scale]
|
||||||
(const QRectF &img, int i, int j)
|
(const QRectF &img, int i, int j)
|
||||||
{
|
{
|
||||||
if (layout->LayoutSettings().GetShowTileNumber())
|
if (layout->LayoutSettings().GetShowTileNumber() && font.pointSizeF() * scale >= minTextFontSize)
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user