Merge with feature.
Fixed issue #589. Error: Valentina lock up if not enough space for label. --HG-- branch : develop
This commit is contained in:
commit
c2e038c57b
|
@ -47,6 +47,7 @@
|
||||||
- [#580] Extend the list of heights.
|
- [#580] Extend the list of heights.
|
||||||
- [#582] Issue with standard path to shared data on Linux.
|
- [#582] Issue with standard path to shared data on Linux.
|
||||||
- [#595] GapWidth affecting to the margins.
|
- [#595] GapWidth affecting to the margins.
|
||||||
|
- [#589] Valentina lock up if not enough space for label.
|
||||||
|
|
||||||
# Version 0.4.6
|
# Version 0.4.6
|
||||||
- [#594] Broken export on Mac.
|
- [#594] Broken export on Mac.
|
||||||
|
|
|
@ -148,15 +148,10 @@ void VLayoutDetail::SetDetail(const QString& qsName, const VPatternPieceData& da
|
||||||
|
|
||||||
// generate text
|
// generate text
|
||||||
d->m_tmDetail.SetFont(font);
|
d->m_tmDetail.SetFont(font);
|
||||||
int iFS = data.GetFontSize();
|
d->m_tmDetail.SetFontSize(data.GetFontSize());
|
||||||
if (iFS < MIN_FONT_SIZE)
|
|
||||||
{
|
|
||||||
iFS = MIN_FONT_SIZE;
|
|
||||||
}
|
|
||||||
d->m_tmDetail.SetFontSize(iFS);
|
|
||||||
d->m_tmDetail.Update(qsName, data);
|
d->m_tmDetail.Update(qsName, data);
|
||||||
// this will generate the lines of text
|
// this will generate the lines of text
|
||||||
d->m_tmDetail.SetFontSize(iFS);
|
d->m_tmDetail.SetFontSize(data.GetFontSize());
|
||||||
d->m_tmDetail.FitFontSize(data.GetLabelWidth(), data.GetLabelHeight());
|
d->m_tmDetail.FitFontSize(data.GetLabelWidth(), data.GetLabelHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,17 +175,12 @@ void VLayoutDetail::SetPatternInfo(const VAbstractPattern* pDoc, const VPatternI
|
||||||
|
|
||||||
// Generate text
|
// Generate text
|
||||||
d->m_tmPattern.SetFont(font);
|
d->m_tmPattern.SetFont(font);
|
||||||
int iFS = geom.GetFontSize();
|
d->m_tmPattern.SetFontSize(geom.GetFontSize());
|
||||||
if (iFS < MIN_FONT_SIZE)
|
|
||||||
{
|
|
||||||
iFS = MIN_FONT_SIZE;
|
|
||||||
}
|
|
||||||
d->m_tmPattern.SetFontSize(iFS);
|
|
||||||
|
|
||||||
d->m_tmPattern.Update(pDoc, dSize, dHeight);
|
d->m_tmPattern.Update(pDoc, dSize, dHeight);
|
||||||
|
|
||||||
// generate lines of text
|
// generate lines of text
|
||||||
d->m_tmPattern.SetFontSize(iFS);
|
d->m_tmPattern.SetFontSize(geom.GetFontSize());
|
||||||
d->m_tmPattern.FitFontSize(geom.GetLabelWidth(), geom.GetLabelHeight());
|
d->m_tmPattern.FitFontSize(geom.GetLabelWidth(), geom.GetLabelHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,18 +571,20 @@ void VLayoutDetail::CreateTextItems()
|
||||||
fnt.setPixelSize(d->m_tmDetail.GetFont().pixelSize() + tl.m_iFontSize);
|
fnt.setPixelSize(d->m_tmDetail.GetFont().pixelSize() + tl.m_iFontSize);
|
||||||
fnt.setWeight(tl.m_eFontWeight);
|
fnt.setWeight(tl.m_eFontWeight);
|
||||||
fnt.setStyle(tl.m_eStyle);
|
fnt.setStyle(tl.m_eStyle);
|
||||||
dY += tl.m_iHeight;
|
|
||||||
|
QFontMetrics fm(fnt);
|
||||||
|
|
||||||
|
dY += fm.height();
|
||||||
// check if the next line will go out of bounds
|
// check if the next line will go out of bounds
|
||||||
if (dY > dH)
|
if (dY > dH)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFontMetrics fm(fnt);
|
|
||||||
QString qsText = tl.m_qsText;
|
QString qsText = tl.m_qsText;
|
||||||
if (fm.width(qsText) > dW)
|
if (fm.width(qsText) > dW)
|
||||||
{
|
{
|
||||||
qsText = fm.elidedText(qsText, Qt::ElideRight, dW);
|
qsText = fm.elidedText(qsText, Qt::ElideMiddle, static_cast<int>(dW));
|
||||||
}
|
}
|
||||||
// find the correct horizontal offset, depending on the alignment flag
|
// find the correct horizontal offset, depending on the alignment flag
|
||||||
if ((tl.m_eAlign & Qt::AlignLeft) > 0)
|
if ((tl.m_eAlign & Qt::AlignLeft) > 0)
|
||||||
|
@ -636,17 +628,19 @@ void VLayoutDetail::CreateTextItems()
|
||||||
fnt.setPixelSize(d->m_tmPattern.GetFont().pixelSize() + tl.m_iFontSize);
|
fnt.setPixelSize(d->m_tmPattern.GetFont().pixelSize() + tl.m_iFontSize);
|
||||||
fnt.setWeight(tl.m_eFontWeight);
|
fnt.setWeight(tl.m_eFontWeight);
|
||||||
fnt.setStyle(tl.m_eStyle);
|
fnt.setStyle(tl.m_eStyle);
|
||||||
dY += tl.m_iHeight;
|
|
||||||
|
QFontMetrics fm(fnt);
|
||||||
|
|
||||||
|
dY += fm.height();
|
||||||
if (dY > dH)
|
if (dY > dH)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFontMetrics fm(fnt);
|
|
||||||
QString qsText = tl.m_qsText;
|
QString qsText = tl.m_qsText;
|
||||||
if (fm.width(qsText) > dW)
|
if (fm.width(qsText) > dW)
|
||||||
{
|
{
|
||||||
qsText = fm.elidedText(qsText, Qt::ElideRight, dW);
|
qsText = fm.elidedText(qsText, Qt::ElideMiddle, static_cast<int>(dW));
|
||||||
}
|
}
|
||||||
if ((tl.m_eAlign & Qt::AlignLeft) > 0)
|
if ((tl.m_eAlign & Qt::AlignLeft) > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,11 +32,11 @@
|
||||||
#include <QLatin1String>
|
#include <QLatin1String>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QtMath>
|
|
||||||
|
|
||||||
#include "../ifc/xml/vabstractpattern.h"
|
#include "../ifc/xml/vabstractpattern.h"
|
||||||
#include "../vpatterndb/vpatternpiecedata.h"
|
#include "../vpatterndb/vpatternpiecedata.h"
|
||||||
#include "../vmisc/vabstractapplication.h"
|
#include "../vmisc/vabstractapplication.h"
|
||||||
|
#include "../vmisc/vmath.h"
|
||||||
#include "vtextmanager.h"
|
#include "vtextmanager.h"
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -44,8 +44,11 @@
|
||||||
* @brief TextLine::TextLine default constructor
|
* @brief TextLine::TextLine default constructor
|
||||||
*/
|
*/
|
||||||
TextLine::TextLine()
|
TextLine::TextLine()
|
||||||
:m_qsText(), m_iFontSize(MIN_FONT_SIZE), m_eFontWeight(QFont::Normal), m_eStyle(QFont::StyleNormal),
|
: m_qsText(),
|
||||||
m_eAlign(Qt::AlignCenter), m_iHeight(0)
|
m_iFontSize(MIN_FONT_SIZE),
|
||||||
|
m_eFontWeight(QFont::Normal),
|
||||||
|
m_eStyle(QFont::StyleNormal),
|
||||||
|
m_eAlign(Qt::AlignCenter)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -53,7 +56,7 @@ TextLine::TextLine()
|
||||||
* @brief VTextManager::VTextManager constructor
|
* @brief VTextManager::VTextManager constructor
|
||||||
*/
|
*/
|
||||||
VTextManager::VTextManager()
|
VTextManager::VTextManager()
|
||||||
:m_font(), m_liLines()
|
: m_font(), m_liLines()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -117,14 +120,7 @@ const QFont& VTextManager::GetFont() const
|
||||||
*/
|
*/
|
||||||
void VTextManager::SetFontSize(int iFS)
|
void VTextManager::SetFontSize(int iFS)
|
||||||
{
|
{
|
||||||
if (iFS < MIN_FONT_SIZE)
|
iFS < MIN_FONT_SIZE ? m_font.setPixelSize(MIN_FONT_SIZE) : m_font.setPixelSize(iFS);
|
||||||
{
|
|
||||||
m_font.setPixelSize(MIN_FONT_SIZE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_font.setPixelSize(iFS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -172,7 +168,7 @@ const TextLine& VTextManager::GetSourceLine(int i) const
|
||||||
{
|
{
|
||||||
Q_ASSERT(i >= 0);
|
Q_ASSERT(i >= 0);
|
||||||
Q_ASSERT(i < m_liLines.count());
|
Q_ASSERT(i < m_liLines.count());
|
||||||
return m_liLines[i];
|
return m_liLines.at(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -193,7 +189,7 @@ void VTextManager::FitFontSize(qreal fW, qreal fH)
|
||||||
// get ratio between char width and height
|
// get ratio between char width and height
|
||||||
|
|
||||||
int iMaxLen = 0;
|
int iMaxLen = 0;
|
||||||
int iTW;
|
TextLine maxLine;
|
||||||
QFont fnt;
|
QFont fnt;
|
||||||
for (int i = 0; i < GetSourceLinesCount(); ++i)
|
for (int i = 0; i < GetSourceLinesCount(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -203,23 +199,30 @@ void VTextManager::FitFontSize(qreal fW, qreal fH)
|
||||||
fnt.setWeight(tl.m_eFontWeight);
|
fnt.setWeight(tl.m_eFontWeight);
|
||||||
fnt.setStyle(tl.m_eStyle);
|
fnt.setStyle(tl.m_eStyle);
|
||||||
QFontMetrics fm(fnt);
|
QFontMetrics fm(fnt);
|
||||||
iTW = fm.width(GetSourceLine(i).m_qsText);
|
const int iTW = fm.width(tl.m_qsText);
|
||||||
if (iTW > iMaxLen)
|
if (iTW > iMaxLen)
|
||||||
{
|
{
|
||||||
iMaxLen = iTW;
|
iMaxLen = iTW;
|
||||||
|
maxLine = tl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (iMaxLen > fW)
|
if (iMaxLen > fW)
|
||||||
{
|
{
|
||||||
iFS = qFloor(iFS*fW/iMaxLen);
|
QFont fnt = m_font;
|
||||||
|
fnt.setWeight(maxLine.m_eFontWeight);
|
||||||
|
fnt.setStyle(maxLine.m_eStyle);
|
||||||
|
|
||||||
|
int lineLength = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
--iFS;
|
||||||
|
fnt.setPixelSize(iFS + maxLine.m_iFontSize);
|
||||||
|
QFontMetrics fm(fnt);
|
||||||
|
lineLength = fm.width(maxLine.m_qsText);
|
||||||
|
}
|
||||||
|
while (lineLength > fW && iFS > MIN_FONT_SIZE);
|
||||||
}
|
}
|
||||||
iFS = qMax(MIN_FONT_SIZE, iFS);
|
|
||||||
int iH = 4*iFS/3;
|
|
||||||
SetFontSize(iFS);
|
SetFontSize(iFS);
|
||||||
for (int i = 0; i < GetSourceLinesCount(); ++i)
|
|
||||||
{
|
|
||||||
m_liLines[i].m_iHeight = iH;
|
|
||||||
}
|
|
||||||
qDebug() << "Font size" << GetSourceLinesCount() << iFS;
|
qDebug() << "Font size" << GetSourceLinesCount() << iFS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ class QFontMetrics;
|
||||||
class VAbstractPattern;
|
class VAbstractPattern;
|
||||||
class VPatternPieceData;
|
class VPatternPieceData;
|
||||||
|
|
||||||
#define MIN_FONT_SIZE 12
|
#define MIN_FONT_SIZE 5
|
||||||
#define MAX_FONT_SIZE 128
|
#define MAX_FONT_SIZE 128
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,7 +57,6 @@ struct TextLine
|
||||||
QFont::Weight m_eFontWeight;
|
QFont::Weight m_eFontWeight;
|
||||||
QFont::Style m_eStyle;
|
QFont::Style m_eStyle;
|
||||||
Qt::Alignment m_eAlign;
|
Qt::Alignment m_eAlign;
|
||||||
int m_iHeight;
|
|
||||||
|
|
||||||
TextLine();
|
TextLine();
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,12 +49,12 @@ class QWidget;
|
||||||
class VAbstractPattern;
|
class VAbstractPattern;
|
||||||
class VPatternPieceData;
|
class VPatternPieceData;
|
||||||
|
|
||||||
#define RESIZE_SQUARE 30
|
const qreal resizeSquare = (3./*mm*/ / 25.4) * PrintDPI;
|
||||||
#define ROTATE_CIRCLE 20
|
const qreal rotateCircle = (2./*mm*/ / 25.4) * PrintDPI;
|
||||||
#define ROTATE_RECT 60
|
#define ROTATE_RECT 60
|
||||||
#define ROTATE_ARC 50
|
#define ROTATE_ARC 50
|
||||||
#define MIN_W 120
|
const qreal minW = (4./*mm*/ / 25.4) * PrintDPI + resizeSquare;
|
||||||
#define MIN_H 60
|
const qreal minH = (4./*mm*/ / 25.4) * PrintDPI + resizeSquare;
|
||||||
#define INACTIVE_Z 2
|
#define INACTIVE_Z 2
|
||||||
#define ACTIVE_Z 10
|
#define ACTIVE_Z 10
|
||||||
|
|
||||||
|
@ -64,12 +64,21 @@ class VPatternPieceData;
|
||||||
* @param pParent pointer to the parent item
|
* @param pParent pointer to the parent item
|
||||||
*/
|
*/
|
||||||
VTextGraphicsItem::VTextGraphicsItem(QGraphicsItem* pParent)
|
VTextGraphicsItem::VTextGraphicsItem(QGraphicsItem* pParent)
|
||||||
:QGraphicsObject(pParent), m_eMode(VTextGraphicsItem::mNormal), m_bReleased(false),
|
: QGraphicsObject(pParent),
|
||||||
m_ptStartPos(), m_ptStart(), m_ptRotCenter(), m_szStart(), m_dRotation(0), m_dAngle(0),
|
m_eMode(VTextGraphicsItem::mNormal),
|
||||||
m_rectResize(), m_iMinH(MIN_H), m_rectBoundingBox(), m_tm()
|
m_bReleased(false),
|
||||||
|
m_ptStartPos(),
|
||||||
|
m_ptStart(),
|
||||||
|
m_ptRotCenter(),
|
||||||
|
m_szStart(),
|
||||||
|
m_dRotation(0),
|
||||||
|
m_dAngle(0),
|
||||||
|
m_rectResize(),
|
||||||
|
m_rectBoundingBox(),
|
||||||
|
m_tm()
|
||||||
{
|
{
|
||||||
m_rectBoundingBox.setTopLeft(QPointF(0, 0));
|
m_rectBoundingBox.setTopLeft(QPointF(0, 0));
|
||||||
SetSize(MIN_W, m_iMinH);
|
SetSize(minW, minH);
|
||||||
setZValue(INACTIVE_Z);
|
setZValue(INACTIVE_Z);
|
||||||
setAcceptHoverEvents(true);
|
setAcceptHoverEvents(true);
|
||||||
}
|
}
|
||||||
|
@ -101,7 +110,8 @@ void VTextGraphicsItem::SetFont(const QFont& fnt)
|
||||||
void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
{
|
{
|
||||||
Q_UNUSED(widget);
|
Q_UNUSED(widget);
|
||||||
painter->fillRect(option->rect, QColor(251, 251, 175));
|
Q_UNUSED(option);
|
||||||
|
painter->fillRect(m_rectBoundingBox, QColor(251, 251, 175));
|
||||||
painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||||
|
|
||||||
painter->setPen(Qt::black);
|
painter->setPen(Qt::black);
|
||||||
|
@ -112,25 +122,28 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
for (int i = 0; i < m_tm.GetSourceLinesCount(); ++i)
|
for (int i = 0; i < m_tm.GetSourceLinesCount(); ++i)
|
||||||
{
|
{
|
||||||
const TextLine& tl = m_tm.GetSourceLine(i);
|
const TextLine& tl = m_tm.GetSourceLine(i);
|
||||||
// check if the next line will go out of bounds
|
|
||||||
if (iY + tl.m_iHeight > boundingRect().height())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fnt.setPixelSize(m_tm.GetFont().pixelSize() + tl.m_iFontSize);
|
fnt.setPixelSize(m_tm.GetFont().pixelSize() + tl.m_iFontSize);
|
||||||
fnt.setWeight(tl.m_eFontWeight);
|
fnt.setWeight(tl.m_eFontWeight);
|
||||||
fnt.setStyle(tl.m_eStyle);
|
fnt.setStyle(tl.m_eStyle);
|
||||||
|
|
||||||
QString qsText = tl.m_qsText;
|
QString qsText = tl.m_qsText;
|
||||||
QFontMetrics fm(fnt);
|
QFontMetrics fm(fnt);
|
||||||
|
|
||||||
|
// check if the next line will go out of bounds
|
||||||
|
if (iY + fm.height() > boundingRect().height())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (fm.width(qsText) > iW)
|
if (fm.width(qsText) > iW)
|
||||||
{
|
{
|
||||||
qsText = fm.elidedText(qsText, Qt::ElideRight, iW);
|
qsText = fm.elidedText(qsText, Qt::ElideMiddle, iW);
|
||||||
}
|
}
|
||||||
|
|
||||||
painter->setFont(fnt);
|
painter->setFont(fnt);
|
||||||
painter->drawText(0, iY, iW, tl.m_iHeight, tl.m_eAlign, qsText);
|
painter->drawText(0, iY, iW, fm.height(), tl.m_eAlign, qsText);
|
||||||
iY += tl.m_iHeight + m_tm.GetSpacing();
|
iY += fm.height() + m_tm.GetSpacing();
|
||||||
}
|
}
|
||||||
|
|
||||||
// now draw the features specific to non-normal modes
|
// now draw the features specific to non-normal modes
|
||||||
|
@ -145,13 +158,13 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
// draw the resize square
|
// draw the resize square
|
||||||
painter->setPen(Qt::black);
|
painter->setPen(Qt::black);
|
||||||
painter->setBrush(Qt::black);
|
painter->setBrush(Qt::black);
|
||||||
painter->drawRect(m_rectResize);
|
painter->drawRect(m_rectResize.adjusted(-1, -1, -1, -1));
|
||||||
|
|
||||||
if (m_eMode == mResize)
|
if (m_eMode == mResize)
|
||||||
{
|
{
|
||||||
// draw the resize diagonal lines
|
// draw the resize diagonal lines
|
||||||
painter->drawLine(0, 0, qRound(m_rectBoundingBox.width()), qRound(m_rectBoundingBox.height()));
|
painter->drawLine(1, 1, qFloor(m_rectBoundingBox.width())-1, qFloor(m_rectBoundingBox.height())-1);
|
||||||
painter->drawLine(0, qRound(m_rectBoundingBox.height()), qRound(m_rectBoundingBox.width()), 0);
|
painter->drawLine(1, qFloor(m_rectBoundingBox.height())-1, qFloor(m_rectBoundingBox.width())-1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -161,20 +174,23 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
|
||||||
painter->setBrush(Qt::black);
|
painter->setBrush(Qt::black);
|
||||||
painter->drawEllipse(
|
painter->drawEllipse(
|
||||||
QPointF(m_rectBoundingBox.width()/2, m_rectBoundingBox.height()/2),
|
QPointF(m_rectBoundingBox.width()/2, m_rectBoundingBox.height()/2),
|
||||||
ROTATE_CIRCLE,
|
rotateCircle,
|
||||||
ROTATE_CIRCLE
|
rotateCircle
|
||||||
);
|
);
|
||||||
painter->setPen(QPen(Qt::black, 3));
|
if (m_rectBoundingBox.width() > minW*3 && m_rectBoundingBox.height() > minH*3)
|
||||||
painter->setBrush(Qt::NoBrush);
|
{
|
||||||
// and then draw the arc in each of the corners
|
painter->setPen(QPen(Qt::black, 3));
|
||||||
int iTop = ROTATE_RECT - ROTATE_ARC;
|
painter->setBrush(Qt::NoBrush);
|
||||||
int iLeft = ROTATE_RECT - ROTATE_ARC;
|
// and then draw the arc in each of the corners
|
||||||
int iRight = qRound(m_rectBoundingBox.width()) - ROTATE_RECT;
|
int iTop = ROTATE_RECT - ROTATE_ARC;
|
||||||
int iBottom = qRound(m_rectBoundingBox.height()) - ROTATE_RECT;
|
int iLeft = ROTATE_RECT - ROTATE_ARC;
|
||||||
painter->drawArc(iLeft, iTop, ROTATE_ARC, ROTATE_ARC, 180*16, -90*16);
|
int iRight = qRound(m_rectBoundingBox.width()) - ROTATE_RECT;
|
||||||
painter->drawArc(iRight, iTop, ROTATE_ARC, ROTATE_ARC, 90*16, -90*16);
|
int iBottom = qRound(m_rectBoundingBox.height()) - ROTATE_RECT;
|
||||||
painter->drawArc(iLeft, iBottom, ROTATE_ARC, ROTATE_ARC, 270*16, -90*16);
|
painter->drawArc(iLeft, iTop, ROTATE_ARC, ROTATE_ARC, 180*16, -90*16);
|
||||||
painter->drawArc(iRight, iBottom, ROTATE_ARC, ROTATE_ARC, 0*16, -90*16);
|
painter->drawArc(iRight, iTop, ROTATE_ARC, ROTATE_ARC, 90*16, -90*16);
|
||||||
|
painter->drawArc(iLeft, iBottom, ROTATE_ARC, ROTATE_ARC, 270*16, -90*16);
|
||||||
|
painter->drawArc(iRight, iBottom, ROTATE_ARC, ROTATE_ARC, 0*16, -90*16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,24 +225,6 @@ bool VTextGraphicsItem::IsIdle() const
|
||||||
void VTextGraphicsItem::AddLine(const TextLine& tl)
|
void VTextGraphicsItem::AddLine(const TextLine& tl)
|
||||||
{
|
{
|
||||||
m_tm.AddSourceLine(tl);
|
m_tm.AddSourceLine(tl);
|
||||||
/*
|
|
||||||
qreal fW = MIN_W;
|
|
||||||
qreal fH = m_iMinH;
|
|
||||||
qreal fMinW;
|
|
||||||
qreal fMinH;
|
|
||||||
while (m_tm.IsBigEnough(fW, fH, MIN_FONT_SIZE, fMinW, fMinH) == false)
|
|
||||||
{
|
|
||||||
SetSize(fMinW, fMinH);
|
|
||||||
fW = m_rectBoundingBox.width();
|
|
||||||
fH = m_rectBoundingBox.height();
|
|
||||||
}
|
|
||||||
qreal dX;
|
|
||||||
qreal dY;
|
|
||||||
if (IsContained(m_rectBoundingBox, rotation(), dX, dY) == false)
|
|
||||||
{
|
|
||||||
setPos(m_rectBoundingBox.left() + dX, m_rectBoundingBox.top() + dY);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -249,37 +247,32 @@ void VTextGraphicsItem::SetSize(qreal fW, qreal fH)
|
||||||
{
|
{
|
||||||
qDebug() << "Setting size to" << fW << parentItem()->boundingRect().width();
|
qDebug() << "Setting size to" << fW << parentItem()->boundingRect().width();
|
||||||
// don't allow resize under specific size
|
// don't allow resize under specific size
|
||||||
if (fW < MIN_W || fH < m_iMinH)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fW > parentItem()->boundingRect().width())
|
if (fW > parentItem()->boundingRect().width())
|
||||||
{
|
{
|
||||||
fW = parentItem()->boundingRect().width();
|
fW = parentItem()->boundingRect().width();
|
||||||
}
|
}
|
||||||
if (fW < MIN_W)
|
if (fW < minW)
|
||||||
{
|
{
|
||||||
fW = MIN_W;
|
fW = minW;
|
||||||
}
|
}
|
||||||
if (fH > parentItem()->boundingRect().height())
|
if (fH > parentItem()->boundingRect().height())
|
||||||
{
|
{
|
||||||
fH = parentItem()->boundingRect().height();
|
fH = parentItem()->boundingRect().height();
|
||||||
}
|
}
|
||||||
if (fH < m_iMinH)
|
if (fH < minH)
|
||||||
{
|
{
|
||||||
fH = m_iMinH;
|
fH = minH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepareGeometryChange();
|
||||||
qDebug() << "Actual size set to" << fW;
|
qDebug() << "Actual size set to" << fW;
|
||||||
m_rectBoundingBox.setTopLeft(QPointF(0, 0));
|
m_rectBoundingBox.setTopLeft(QPointF(0, 0));
|
||||||
m_rectBoundingBox.setWidth(fW);
|
m_rectBoundingBox.setWidth(fW);
|
||||||
m_rectBoundingBox.setHeight(fH);
|
m_rectBoundingBox.setHeight(fH);
|
||||||
m_rectResize.setTopLeft(QPointF(fW - RESIZE_SQUARE, fH - RESIZE_SQUARE));
|
m_rectResize.setTopLeft(QPointF(fW - resizeSquare, fH - resizeSquare));
|
||||||
m_rectResize.setWidth(RESIZE_SQUARE);
|
m_rectResize.setWidth(resizeSquare);
|
||||||
m_rectResize.setHeight(RESIZE_SQUARE);
|
m_rectResize.setHeight(resizeSquare);
|
||||||
setTransformOriginPoint(m_rectBoundingBox.center());
|
setTransformOriginPoint(m_rectBoundingBox.center());
|
||||||
prepareGeometryChange();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -440,7 +433,7 @@ void VTextGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME)
|
||||||
qreal dX;
|
qreal dX;
|
||||||
qreal dY;
|
qreal dY;
|
||||||
QRectF rectBB;
|
QRectF rectBB;
|
||||||
QPointF ptDiff = pME->scenePos() - m_ptStart;
|
const QPointF ptDiff = pME->scenePos() - m_ptStart;
|
||||||
if (m_eMode == mMove)
|
if (m_eMode == mMove)
|
||||||
{
|
{
|
||||||
// in move mode move the label along the mouse move from the origin
|
// in move mode move the label along the mouse move from the origin
|
||||||
|
@ -465,12 +458,14 @@ void VTextGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME)
|
||||||
QSizeF sz(m_szStart.width() + ptDiff.x(), m_szStart.height() + ptDiff.y());
|
QSizeF sz(m_szStart.width() + ptDiff.x(), m_szStart.height() + ptDiff.y());
|
||||||
rectBB.setSize(sz);
|
rectBB.setSize(sz);
|
||||||
// before resizing the label to a new size, check if it will still be inside the parent item
|
// before resizing the label to a new size, check if it will still be inside the parent item
|
||||||
if (IsContained(rectBB, rotation(), dX, dY) == true)
|
if (IsContained(rectBB, rotation(), dX, dY) == false)
|
||||||
{
|
{
|
||||||
SetSize(sz.width(), sz.height());
|
sz = QSizeF(sz.width()+dX, sz.height()+dY);
|
||||||
Update();
|
|
||||||
emit SignalShrink();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetSize(sz.width(), sz.height());
|
||||||
|
Update();
|
||||||
|
emit SignalShrink();
|
||||||
}
|
}
|
||||||
else if (m_eMode == mRotate)
|
else if (m_eMode == mRotate)
|
||||||
{
|
{
|
||||||
|
@ -658,7 +653,7 @@ QRectF VTextGraphicsItem::GetBoundingRect(QRectF rectBB, qreal dRot) const
|
||||||
qreal dY1 = 0;
|
qreal dY1 = 0;
|
||||||
qreal dY2 = 0;
|
qreal dY2 = 0;
|
||||||
|
|
||||||
double dAng = qDegreesToRadians(dRot);
|
double dAng = qDegreesToRadians(dRot);
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
QPointF pt = apt[i] - ptCenter;
|
QPointF pt = apt[i] - ptCenter;
|
||||||
|
|
|
@ -75,13 +75,14 @@ public:
|
||||||
virtual ~VTextGraphicsItem();
|
virtual ~VTextGraphicsItem();
|
||||||
|
|
||||||
void SetFont(const QFont& fnt);
|
void SetFont(const QFont& fnt);
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||||
|
QWidget *widget) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
bool IsIdle() const;
|
bool IsIdle() const;
|
||||||
|
|
||||||
int GetFontSize() const;
|
int GetFontSize() const;
|
||||||
QRectF boundingRect() const;
|
virtual QRectF boundingRect() const Q_DECL_OVERRIDE;
|
||||||
void AddLine(const TextLine& tl);
|
void AddLine(const TextLine& tl);
|
||||||
void Clear();
|
void Clear();
|
||||||
void SetSize(qreal fW, qreal fH);
|
void SetSize(qreal fW, qreal fH);
|
||||||
|
@ -92,11 +93,11 @@ public:
|
||||||
int GetTextLines() const;
|
int GetTextLines() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent* pME);
|
virtual void mousePressEvent(QGraphicsSceneMouseEvent* pME) Q_DECL_OVERRIDE;
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent* pME);
|
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* pME) Q_DECL_OVERRIDE;
|
||||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent* pME);
|
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* pME) Q_DECL_OVERRIDE;
|
||||||
void hoverMoveEvent(QGraphicsSceneHoverEvent* pHE);
|
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent* pHE) Q_DECL_OVERRIDE;
|
||||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent* pHE);
|
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent* pHE) Q_DECL_OVERRIDE;
|
||||||
void UpdateBox();
|
void UpdateBox();
|
||||||
void CorrectLabel();
|
void CorrectLabel();
|
||||||
|
|
||||||
|
@ -118,7 +119,6 @@ private:
|
||||||
double m_dRotation;
|
double m_dRotation;
|
||||||
double m_dAngle;
|
double m_dAngle;
|
||||||
QRectF m_rectResize;
|
QRectF m_rectResize;
|
||||||
int m_iMinH;
|
|
||||||
QRectF m_rectBoundingBox;
|
QRectF m_rectBoundingBox;
|
||||||
VTextManager m_tm;
|
VTextManager m_tm;
|
||||||
|
|
||||||
|
|
|
@ -837,12 +837,10 @@ void VToolDetail::UpdateLabel()
|
||||||
if (data.IsVisible() == true)
|
if (data.IsVisible() == true)
|
||||||
{
|
{
|
||||||
QFont fnt = qApp->font();
|
QFont fnt = qApp->font();
|
||||||
int iFS = data.GetFontSize();
|
|
||||||
if (iFS < MIN_FONT_SIZE)
|
|
||||||
{
|
{
|
||||||
iFS = MIN_FONT_SIZE;
|
const int iFS = data.GetFontSize();
|
||||||
|
iFS < MIN_FONT_SIZE ? fnt.setPixelSize(MIN_FONT_SIZE) : fnt.setPixelSize(iFS);
|
||||||
}
|
}
|
||||||
fnt.setPixelSize(iFS);
|
|
||||||
dataLabel->SetFont(fnt);
|
dataLabel->SetFont(fnt);
|
||||||
dataLabel->SetSize(data.GetLabelWidth(), data.GetLabelHeight());
|
dataLabel->SetSize(data.GetLabelWidth(), data.GetLabelHeight());
|
||||||
dataLabel->UpdateData(detail.getName(), data);
|
dataLabel->UpdateData(detail.getName(), data);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user