22 #if QT_VERSION >= 0x050200 24 static QwtText qwtStringToText(
const QString& text )
33 static const struct RegisterQwtText
35 inline RegisterQwtText()
37 qRegisterMetaType< QwtText >();
39 #if QT_VERSION >= 0x050200 40 QMetaType::registerConverter< QString, QwtText >( qwtStringToText );
52 static TextEngineDict& dict();
66 inline const QwtTextEngine* engine( EngineMap::const_iterator& it )
const 74 TextEngineDict& TextEngineDict::dict()
76 static TextEngineDict engineDict;
80 TextEngineDict::TextEngineDict()
83 #ifndef QT_NO_RICHTEXT 88 TextEngineDict::~TextEngineDict()
90 for ( EngineMap::const_iterator it = m_map.constBegin();
91 it != m_map.constEnd(); ++it )
98 const QwtTextEngine* TextEngineDict::textEngine(
const QString& text,
103 for ( EngineMap::const_iterator it = m_map.begin();
104 it != m_map.end(); ++it )
115 EngineMap::const_iterator it = m_map.find( format );
116 if ( it != m_map.end() )
136 EngineMap::const_iterator it = m_map.constFind( format );
137 if ( it != m_map.constEnd() )
139 delete this->engine( it );
140 m_map.remove( format );
143 if ( engine != NULL )
144 m_map.insert( format, engine );
152 EngineMap::const_iterator it = m_map.find( format );
153 if ( it != m_map.end() )
164 renderFlags( Qt::AlignCenter ),
166 borderPen( Qt::NoPen ),
167 backgroundBrush( Qt::NoBrush ),
204 m_data->
textEngine = textEngine( m_data->text, PlainText );
219 m_data->textEngine = textEngine( text, textFormat );
238 delete m_layoutCache;
266 return !( other == *this );
281 m_data->textEngine = textEngine( text, textFormat );
282 m_layoutCache->invalidate();
306 if ( renderFlags != m_data->renderFlags )
308 m_data->renderFlags = renderFlags;
309 m_layoutCache->invalidate();
319 return m_data->renderFlags;
332 setPaintAttribute( PaintUsingTextFont );
352 if ( m_data->paintAttributes & PaintUsingTextFont )
367 m_data->color =
color;
368 setPaintAttribute( PaintUsingTextColor );
374 return m_data->color;
388 if ( m_data->paintAttributes & PaintUsingTextColor )
389 return m_data->color;
402 m_data->borderRadius =
qwtMaxF( 0.0, radius );
411 return m_data->borderRadius;
422 m_data->borderPen = pen;
423 setPaintAttribute( PaintBackground );
432 return m_data->borderPen;
443 m_data->backgroundBrush = brush;
444 setPaintAttribute( PaintBackground );
453 return m_data->backgroundBrush;
469 m_data->paintAttributes |= attribute;
471 m_data->paintAttributes &= ~attribute;
484 return m_data->paintAttributes & attribute;
497 m_data->layoutAttributes |= attribute;
499 m_data->layoutAttributes &= ~attribute;
512 return m_data->layoutAttributes | attribute;
524 return heightForWidth( width, QFont() );
544 if ( m_data->layoutAttributes & MinimumLayout )
547 m_data->textEngine->textMargins( font, m_data->text,
548 left, right, top, bottom );
550 h = m_data->textEngine->heightForWidth(
551 font, m_data->renderFlags, m_data->text,
552 width + left + right );
558 h = m_data->textEngine->heightForWidth(
559 font, m_data->renderFlags, m_data->text, width );
572 return textSize( QFont() );
588 if ( !m_layoutCache->textSize.isValid()
589 || m_layoutCache->font != font )
591 m_layoutCache->textSize = m_data->textEngine->textSize(
592 font, m_data->renderFlags, m_data->text );
593 m_layoutCache->font = font;
596 QSizeF sz = m_layoutCache->textSize;
598 if ( m_data->layoutAttributes & MinimumLayout )
601 m_data->textEngine->textMargins( font, m_data->text,
602 left, right, top, bottom );
603 sz -= QSizeF( left + right, top + bottom );
617 if ( m_data->paintAttributes & PaintBackground )
619 if ( m_data->borderPen != Qt::NoPen ||
620 m_data->backgroundBrush != Qt::NoBrush )
624 painter->setPen( m_data->borderPen );
625 painter->setBrush( m_data->backgroundBrush );
627 if ( m_data->borderRadius == 0 )
633 painter->setRenderHint( QPainter::Antialiasing,
true );
634 painter->drawRoundedRect( rect,
635 m_data->borderRadius, m_data->borderRadius );
644 if ( m_data->paintAttributes & PaintUsingTextFont )
646 painter->setFont( m_data->font );
649 if ( m_data->paintAttributes & PaintUsingTextColor )
651 if ( m_data->color.isValid() )
652 painter->setPen( m_data->color );
655 QRectF expandedRect = rect;
656 if ( m_data->layoutAttributes & MinimumLayout )
664 m_data->textEngine->textMargins(
665 font, m_data->text, left, right, top, bottom );
667 expandedRect.setTop( rect.top() -
top );
668 expandedRect.setBottom( rect.bottom() + bottom );
669 expandedRect.setLeft( rect.left() -
left );
670 expandedRect.setRight( rect.right() +
right );
673 m_data->textEngine->draw( painter, expandedRect,
674 m_data->renderFlags, m_data->text );
697 return TextEngineDict::dict().textEngine( text, format );
716 TextEngineDict::dict().setTextEngine( format, engine );
729 return TextEngineDict::dict().textEngine( format );
735 return m_data->text.isNull();
741 return m_data->text.isEmpty();
bool operator==(const QwtText &) const
Relational operator.
virtual bool mightRender(const QString &text) const =0
QwtText::PaintAttributes paintAttributes
void setFont(const QFont &)
QFont usedFont(const QFont &) const
void setRenderFlags(int)
Change the render flags.
void setText(const QString &, QwtText::TextFormat textFormat=AutoText)
double heightForWidth(double width) const
QWT_CONSTEXPR float qwtMaxF(float a, float b)
void setBorderPen(const QPen &)
static const QwtTextEngine * textEngine(const QString &text, QwtText::TextFormat=AutoText)
Use the Scribe framework (Qt Rich Text) to render the text.
bool testPaintAttribute(PaintAttribute) const
double borderRadius() const
void setColor(const QColor &)
static void setTextEngine(QwtText::TextFormat, QwtTextEngine *)
const QwtTextEngine * textEngine
QwtText::LayoutAttributes layoutAttributes
QColor usedColor(const QColor &) const
PaintAttribute
Paint Attributes.
QBrush backgroundBrush() const
void draw(QPainter *painter, const QRectF &rect) const
bool testLayoutAttribute(LayoutAttribute) const
void setLayoutAttribute(LayoutAttribute, bool on=true)
A class representing a text.
A text engine for Qt rich texts.
Abstract base class for rendering text strings.
QColor color() const
Return the pen color, used for painting the text.
void setBackgroundBrush(const QBrush &)
void setPaintAttribute(PaintAttribute, bool on=true)
LayoutCache * m_layoutCache
static void drawRect(QPainter *, qreal x, qreal y, qreal w, qreal h)
Wrapper for QPainter::drawRect()
LayoutAttribute
Layout Attributes The layout attributes affects some aspects of the layout of the text...
QFont font() const
Return the font.
static QFont scaledFont(const QFont &, const QPaintDevice *=nullptr)
void setBorderRadius(double)
bool operator!=(const QwtText &) const
Relational operator.
Draw the text as it is, using a QwtPlainTextEngine.
std::basic_string< Char > format(const text_style &ts, const S &format_str, const Args &... args)
A text engine for plain texts.
QwtText & operator=(const QwtText &)
Assignment operator.