diff --git a/examples/gallery/inputs/InputPage.cpp b/examples/gallery/inputs/InputPage.cpp index 512cfabe..93f20925 100644 --- a/examples/gallery/inputs/InputPage.cpp +++ b/examples/gallery/inputs/InputPage.cpp @@ -70,24 +70,25 @@ namespace setSpacing( 20 ); { - auto textField = new QskTextField( "Joe", this ); - textField->setPlaceholderText( "" ); - } + { + auto field = new QskTextField( this ); + field->setText( "John Doe" ); + field->setPlaceholderText( "" ); + } - { - auto textField = new QskTextField( "Only Read Me", this ); - textField->setReadOnly( true ); - textField->setSizePolicy( Qt::Horizontal, QskSizePolicy::MinimumExpanding ); - } + { + auto field = new QskTextField( this ); + field->setReadOnly( true ); + field->setText( "Read Only" ); + field->setSizePolicy( Qt::Horizontal, QskSizePolicy::MinimumExpanding ); + } - { - auto textField = new QskTextField( "12345", this ); - textField->setPlaceholderText( "" ); - textField->setMaxLength( 5 ); - textField->setEchoMode( QskTextField::PasswordEchoOnEdit ); -#if 1 - textField->setFixedWidth( 100 ); -#endif + { + auto field = new QskTextField( this ); + field->setMaxLength( 5 ); + field->setEchoMode( QskTextField::Password ); + field->setPlaceholderText( "" ); + } } } }; diff --git a/src/controls/QskTextFieldSkinlet.cpp b/src/controls/QskTextFieldSkinlet.cpp index 2405e0c8..4e1a0946 100644 --- a/src/controls/QskTextFieldSkinlet.cpp +++ b/src/controls/QskTextFieldSkinlet.cpp @@ -10,7 +10,18 @@ using Q = QskTextField; -QSK_SYSTEM_STATE( QskTextFieldSkinlet, Selected, QskAspect::FirstUserState >> 1 ) +QSK_SYSTEM_STATE( QskTextFieldSkinlet, Selected, QskAspect::FirstSystemState << 3 ) + +static QString qskEffectivePlaceholderText( const QskTextField* textField ) +{ + if ( textField->text().isEmpty() && + !( textField->isReadOnly() || textField->isEditing() ) ) + { + return textField->placeholderText(); + } + + return QString(); +} QskTextFieldSkinlet::QskTextFieldSkinlet( QskSkin* skin ) : Inherited( skin ) @@ -61,24 +72,22 @@ QSGNode* QskTextFieldSkinlet::updateSubNode( } case PlaceholderTextRole: { - if ( textField->text().isEmpty() - && !textField->placeholderText().isEmpty() ) - { - const auto subControl = Q::PlaceholderText; + const auto text = qskEffectivePlaceholderText( textField ); + if ( text.isEmpty() ) + return nullptr; - QskSkinHintStatus status; + const auto subControl = Q::PlaceholderText; - auto options = skinnable->textOptionsHint( subControl, &status ); - if ( !status.isValid() ) - options.setElideMode( Qt::ElideRight ); + QskSkinHintStatus status; - return updateTextNode( skinnable, node, - textField->subControlRect( subControl ), - textField->alignmentHint( subControl, Qt::AlignLeft ), - options, textField->placeholderText(), subControl ); - } + auto options = skinnable->textOptionsHint( subControl, &status ); + if ( !status.isValid() ) + options.setElideMode( Qt::ElideRight ); - return nullptr; + return updateTextNode( skinnable, node, + textField->subControlRect( subControl ), + textField->alignmentHint( subControl, Qt::AlignLeft ), + options, text, subControl ); } }