From 0d86454774aa440af1d403f9d8f6dc6f843eafbe Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 10 Dec 2024 11:27:16 +0100 Subject: [PATCH] elide mode for QskTextField::PlaceholderText added --- src/controls/QskSkinlet.cpp | 22 ++++++++++++++++------ src/controls/QskSkinlet.h | 6 +++++- src/controls/QskTextFieldSkinlet.cpp | 15 +++++++++++++-- src/nodes/QskTextNode.cpp | 3 +++ 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/controls/QskSkinlet.cpp b/src/controls/QskSkinlet.cpp index 9119f696..1d8e85aa 100644 --- a/src/controls/QskSkinlet.cpp +++ b/src/controls/QskSkinlet.cpp @@ -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( diff --git a/src/controls/QskSkinlet.h b/src/controls/QskSkinlet.h index e4a76de6..c13142bd 100644 --- a/src/controls/QskSkinlet.h +++ b/src/controls/QskSkinlet.h @@ -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&, diff --git a/src/controls/QskTextFieldSkinlet.cpp b/src/controls/QskTextFieldSkinlet.cpp index 0792e840..2405e0c8 100644 --- a/src/controls/QskTextFieldSkinlet.cpp +++ b/src/controls/QskTextFieldSkinlet.cpp @@ -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; diff --git a/src/nodes/QskTextNode.cpp b/src/nodes/QskTextNode.cpp index 11ba3d2b..eedd145a 100644 --- a/src/nodes/QskTextNode.cpp +++ b/src/nodes/QskTextNode.cpp @@ -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() );