elide mode for QskTextField::PlaceholderText added

This commit is contained in:
Uwe Rathmann 2024-12-10 11:27:16 +01:00
parent 0038f6d3b3
commit 0d86454774
4 changed files with 37 additions and 9 deletions

View File

@ -676,24 +676,34 @@ QSGNode* QskSkinlet::updateTextNode(
const QskSkinnable* skinnable, QSGNode* node,
const QRectF& rect, Qt::Alignment alignment,
const QString& text, QskAspect::Subcontrol subControl )
{
const auto textOptions = skinnable->textOptionsHint( subControl );
return updateTextNode( skinnable, node, rect, alignment,
textOptions, text, subControl );
}
QSGNode* QskSkinlet::updateTextNode( const QskSkinnable* skinnable,
QSGNode* node, const QRectF& rect,
Qt::Alignment alignment, const QskTextOptions& textOptions,
const QString& text, QskAspect::Subcontrol subControl )
{
if ( text.isEmpty() || rect.isEmpty() )
return nullptr;
const auto textColors = qskTextColors( skinnable, subControl );
const auto textOptions = skinnable->textOptionsHint( subControl );
const auto colors = qskTextColors( skinnable, subControl );
auto textStyle = Qsk::Normal;
if ( textColors.styleColor().alpha() == 0 )
auto style = Qsk::Normal;
if ( colors.styleColor().isValid() )
{
textStyle = skinnable->flagHint< Qsk::TextStyle >(
style = skinnable->flagHint< Qsk::TextStyle >(
subControl | QskAspect::Style, Qsk::Normal );
}
const auto font = skinnable->effectiveFont( subControl );
return qskUpdateTextNode( skinnable, node, rect, alignment,
text, font, textOptions, textColors, textStyle );
text, font, textOptions, colors, style );
}
QSGNode* QskSkinlet::updateTextNode(

View File

@ -110,7 +110,7 @@ class QSK_EXPORT QskSkinlet
static QSGNode* updateLineNode( const QskSkinnable*, QSGNode*,
const QLineF&, QskAspect::Subcontrol );
static QSGNode* updateLinesNode( const QskSkinnable*,
static QSGNode* updateLinesNode( const QskSkinnable*,
QSGNode*, const QVector< QLineF >&, QskAspect::Subcontrol );
static QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
@ -120,6 +120,10 @@ class QSK_EXPORT QskSkinlet
const QRectF&, Qt::Alignment, const QString&, const QFont&,
const QskTextOptions&, const QskTextColors&, Qsk::TextStyle );
static QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
const QRectF&, Qt::Alignment, const QskTextOptions&,
const QString&, QskAspect::Subcontrol );
// keeping the aspect ratio
static QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
const QskGraphic&, const QskColorFilter&, const QRectF&,

View File

@ -61,10 +61,21 @@ QSGNode* QskTextFieldSkinlet::updateSubNode(
}
case PlaceholderTextRole:
{
if ( textField->text().isEmpty() )
if ( textField->text().isEmpty()
&& !textField->placeholderText().isEmpty() )
{
const auto subControl = Q::PlaceholderText;
QskSkinHintStatus status;
auto options = skinnable->textOptionsHint( subControl, &status );
if ( !status.isValid() )
options.setElideMode( Qt::ElideRight );
return updateTextNode( skinnable, node,
textField->placeholderText(), Q::PlaceholderText );
textField->subControlRect( subControl ),
textField->alignmentHint( subControl, Qt::AlignLeft ),
options, textField->placeholderText(), subControl );
}
return nullptr;

View File

@ -43,6 +43,9 @@ void QskTextNode::setTextData(
const QFont& font, const QskTextOptions& options, const QskTextColors& colors,
Qt::Alignment alignment, Qsk::TextStyle textStyle )
{
if ( !colors.styleColor().isValid() )
textStyle = Qsk::Normal;
QMatrix4x4 matrix;
matrix.translate( rect.left(), rect.top() );