QskAbstractTextInputSkinlet removed as it does not work well in

combination with subcontrol substitution
This commit is contained in:
Uwe Rathmann 2025-02-04 14:28:25 +01:00
parent 8dffb14aeb
commit 4462815617
12 changed files with 93 additions and 186 deletions

View File

@ -299,9 +299,6 @@ namespace
void setupTabViewMetrics(); void setupTabViewMetrics();
void setupTabViewColors( QskAspect::Section, const QskFluent2Theme& ); void setupTabViewColors( QskAspect::Section, const QskFluent2Theme& );
void setupTextInputMetrics();
void setupTextInputColors( QskAspect::Section, const QskFluent2Theme& );
void setupTextAreaMetrics(); void setupTextAreaMetrics();
void setupTextAreaColors( QskAspect::Section, const QskFluent2Theme& ); void setupTextAreaColors( QskAspect::Section, const QskFluent2Theme& );
@ -364,7 +361,6 @@ void Editor::setupMetrics()
setupTabButtonMetrics(); setupTabButtonMetrics();
setupTabBarMetrics(); setupTabBarMetrics();
setupTabViewMetrics(); setupTabViewMetrics();
setupTextInputMetrics();
setupTextAreaMetrics(); setupTextAreaMetrics();
setupTextFieldMetrics(); setupTextFieldMetrics();
setupTextLabelMetrics(); setupTextLabelMetrics();
@ -405,7 +401,6 @@ void Editor::setupColors( QskAspect::Section section, const QskFluent2Theme& the
setupTabButtonColors( section, theme ); setupTabButtonColors( section, theme );
setupTabBarColors( section, theme ); setupTabBarColors( section, theme );
setupTabViewColors( section, theme ); setupTabViewColors( section, theme );
setupTextInputColors( section, theme );
setupTextAreaColors( section, theme ); setupTextAreaColors( section, theme );
setupTextFieldColors( section, theme ); setupTextFieldColors( section, theme );
setupTextLabelColors( section, theme ); setupTextLabelColors( section, theme );
@ -1787,33 +1782,11 @@ void Editor::setupTextLabelColors(
setColor( Q::Text | section, pal.fillColor.text.primary ); setColor( Q::Text | section, pal.fillColor.text.primary );
} }
void Editor::setupTextInputMetrics()
{
using Q = QskAbstractTextInput;
setFontRole( Q::Text, Fluent2::Body );
}
void Editor::setupTextInputColors(
QskAspect::Section section, const QskFluent2Theme& theme )
{
using Q = QskAbstractTextInput;
const auto& pal = theme.palette;
const auto text = Q::Text | section;
#if 1
setColor( text, pal.fillColor.text.primary );
setColor( text | Q::Selected, pal.fillColor.textOnAccent.selectedText );
setColor( text | Q::Disabled, pal.fillColor.text.disabled );
#endif
}
void Editor::setupTextAreaMetrics() void Editor::setupTextAreaMetrics()
{ {
using Q = QskTextArea; using Q = QskTextArea;
// === setFontRole( Q::Text, Fluent2::Body );
setStrutSize( Q::TextPanel, { -1, 30_px } ); setStrutSize( Q::TextPanel, { -1, 30_px } );
setPadding( Q::TextPanel, { 11_px, 0, 11_px, 0 } ); setPadding( Q::TextPanel, { 11_px, 0, 11_px, 0 } );
@ -1836,6 +1809,14 @@ void Editor::setupTextAreaColors(
const auto& pal = theme.palette; const auto& pal = theme.palette;
const auto text = Q::Text | section;
#if 1
setColor( text, pal.fillColor.text.primary );
setColor( text | Q::Selected, pal.fillColor.textOnAccent.selectedText );
setColor( text | Q::Disabled, pal.fillColor.text.disabled );
#endif
setColor( Q::TextPanel | Q::Selected, pal.fillColor.accent.selectedTextBackground ); setColor( Q::TextPanel | Q::Selected, pal.fillColor.accent.selectedTextBackground );
setColor( Q::Placeholder, pal.fillColor.text.secondary ); setColor( Q::Placeholder, pal.fillColor.text.secondary );
@ -1879,6 +1860,8 @@ void Editor::setupTextFieldMetrics()
{ {
using Q = QskTextField; using Q = QskTextField;
setFontRole( Q::Text, Fluent2::Body );
setStrutSize( Q::TextPanel, { -1, 30_px } ); setStrutSize( Q::TextPanel, { -1, 30_px } );
setPadding( Q::TextPanel, { 11_px, 0, 11_px, 0 } ); setPadding( Q::TextPanel, { 11_px, 0, 11_px, 0 } );
@ -1895,11 +1878,20 @@ void Editor::setupTextFieldMetrics()
void Editor::setupTextFieldColors( void Editor::setupTextFieldColors(
QskAspect::Section section, const QskFluent2Theme& theme ) QskAspect::Section section, const QskFluent2Theme& theme )
{ {
using A = QskAspect;
using Q = QskTextField; using Q = QskTextField;
using A = QskAspect;
using W = QskFluent2Skin;
const auto& pal = theme.palette; const auto& pal = theme.palette;
const auto text = Q::Text | section;
#if 1
setColor( text, pal.fillColor.text.primary );
setColor( text | Q::Selected, pal.fillColor.textOnAccent.selectedText );
setColor( text | Q::Disabled, pal.fillColor.text.disabled );
#endif
setColor( Q::TextPanel | Q::Selected, pal.fillColor.accent.selectedTextBackground ); setColor( Q::TextPanel | Q::Selected, pal.fillColor.accent.selectedTextBackground );
setColor( Q::Placeholder, pal.fillColor.text.secondary ); setColor( Q::Placeholder, pal.fillColor.text.secondary );

View File

@ -143,7 +143,6 @@ namespace
Q_INVOKABLE void setupTabBar(); Q_INVOKABLE void setupTabBar();
Q_INVOKABLE void setupTabView(); Q_INVOKABLE void setupTabView();
Q_INVOKABLE void setupTextInput();
Q_INVOKABLE void setupTextArea(); Q_INVOKABLE void setupTextArea();
Q_INVOKABLE void setupTextField(); Q_INVOKABLE void setupTextField();
Q_INVOKABLE void setupTextLabel(); Q_INVOKABLE void setupTextLabel();
@ -386,9 +385,9 @@ void Editor::setupTextLabel()
setBoxBorderColors( Q::Panel, QskRgb::lighter( m_pal.outline, 108 ) ); setBoxBorderColors( Q::Panel, QskRgb::lighter( m_pal.outline, 108 ) );
} }
void Editor::setupTextInput() void Editor::setupTextField()
{ {
using Q = QskAbstractTextInput; using Q = QskTextField;
using A = QskAspect; using A = QskAspect;
using P = QPalette; using P = QPalette;
@ -399,19 +398,10 @@ void Editor::setupTextInput()
setColor( Q::Text | state, m_pal.color( colorGroup, P::Text ) ); setColor( Q::Text | state, m_pal.color( colorGroup, P::Text ) );
setColor( Q::Text | Q::Selected | state, m_pal.color( colorGroup, P::HighlightedText ) ); setColor( Q::Text | Q::Selected | state, m_pal.color( colorGroup, P::HighlightedText ) );
} }
}
void Editor::setupTextField()
{
using Q = QskTextField;
setAlignment( Q::Text, Qt::AlignLeft | Qt::AlignVCenter );
setAlignment( Q::Placeholder, Qt::AlignLeft | Qt::AlignVCenter ); setAlignment( Q::Placeholder, Qt::AlignLeft | Qt::AlignVCenter );
// ===
using A = QskAspect;
using P = QPalette;
for ( auto state : { A::NoState, Q::Disabled } ) for ( auto state : { A::NoState, Q::Disabled } )
{ {
const auto colorGroup = ( state == A::NoState ) ? P::Active : P::Disabled; const auto colorGroup = ( state == A::NoState ) ? P::Active : P::Disabled;
@ -419,6 +409,8 @@ void Editor::setupTextField()
setColor( Q::TextPanel | state, m_pal.color( colorGroup, P::Base ) ); setColor( Q::TextPanel | state, m_pal.color( colorGroup, P::Base ) );
setColor( Q::TextPanel | Q::Selected | state, m_pal.color( colorGroup, P::Highlight ) ); setColor( Q::TextPanel | Q::Selected | state, m_pal.color( colorGroup, P::Highlight ) );
setColor( Q::Text | state, m_pal.color( colorGroup, P::Text ) );
setColor( Q::Text | Q::Selected | state, m_pal.color( colorGroup, P::HighlightedText ) );
setColor( Q::Placeholder, m_pal.color( colorGroup, P::PlaceholderText ) ); setColor( Q::Placeholder, m_pal.color( colorGroup, P::PlaceholderText ) );
} }
@ -438,14 +430,19 @@ void Editor::setupTextField()
void Editor::setupTextArea() void Editor::setupTextArea()
{ {
using Q = QskTextArea; using Q = QskTextArea;
setAlignment( Q::Placeholder, Qt::AlignLeft | Qt::AlignTop );
// ========
using A = QskAspect; using A = QskAspect;
using P = QPalette; using P = QPalette;
for ( auto state : { A::NoState, Q::Disabled } )
{
const auto colorGroup = ( state == A::NoState ) ? P::Active : P::Disabled;
setColor( Q::Text | state, m_pal.color( colorGroup, P::Text ) );
setColor( Q::Text | Q::Selected | state, m_pal.color( colorGroup, P::HighlightedText ) );
}
setAlignment( Q::Placeholder, Qt::AlignLeft | Qt::AlignTop );
for ( auto state : { A::NoState, Q::Disabled } ) for ( auto state : { A::NoState, Q::Disabled } )
{ {
const auto colorGroup = ( state == A::NoState ) ? P::Active : P::Disabled; const auto colorGroup = ( state == A::NoState ) ? P::Active : P::Disabled;

View File

@ -187,7 +187,6 @@ namespace
Q_INVOKABLE void setupTabBar(); Q_INVOKABLE void setupTabBar();
Q_INVOKABLE void setupTabView(); Q_INVOKABLE void setupTabView();
Q_INVOKABLE void setupTextInput();
Q_INVOKABLE void setupTextArea(); Q_INVOKABLE void setupTextArea();
Q_INVOKABLE void setupTextField(); Q_INVOKABLE void setupTextField();
Q_INVOKABLE void setupTextLabel(); Q_INVOKABLE void setupTextLabel();
@ -435,20 +434,13 @@ void Editor::setupTextLabel()
setPadding( Q::Panel, 5_px ); setPadding( Q::Panel, 5_px );
} }
void Editor::setupTextInput()
{
using Q = QskAbstractTextInput;
setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyLarge );
setColor( Q::Text | Q::Disabled, m_pal.onSurface38 );
}
void Editor::setupTextArea() void Editor::setupTextArea()
{ {
using Q = QskTextArea; using Q = QskTextArea;
// ========== setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyLarge );
setColor( Q::Text | Q::Disabled, m_pal.onSurface38 );
setStrutSize( Q::Panel, -1.0, 56_px ); setStrutSize( Q::Panel, -1.0, 56_px );
setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } ); setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } );
@ -487,6 +479,10 @@ void Editor::setupTextField()
{ {
using Q = QskTextField; using Q = QskTextField;
setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyLarge );
setColor( Q::Text | Q::Disabled, m_pal.onSurface38 );
setStrutSize( Q::Panel, -1.0, 56_px ); setStrutSize( Q::Panel, -1.0, 56_px );
setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } ); setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } );
setGradient( Q::Panel, m_pal.surfaceVariant ); setGradient( Q::Panel, m_pal.surfaceVariant );

View File

@ -198,7 +198,6 @@ endif()
list(APPEND HEADERS list(APPEND HEADERS
controls/QskAbstractButton.h controls/QskAbstractButton.h
controls/QskAbstractTextInput.h controls/QskAbstractTextInput.h
controls/QskAbstractTextInputSkinlet.h
controls/QskAnimationHint.h controls/QskAnimationHint.h
controls/QskAnimator.h controls/QskAnimator.h
controls/QskMainView.h controls/QskMainView.h
@ -307,7 +306,6 @@ list(APPEND PRIVATE_HEADERS
list(APPEND SOURCES list(APPEND SOURCES
controls/QskAbstractButton.cpp controls/QskAbstractButton.cpp
controls/QskAbstractTextInput.cpp controls/QskAbstractTextInput.cpp
controls/QskAbstractTextInputSkinlet.cpp
controls/QskAnimator.cpp controls/QskAnimator.cpp
controls/QskAnimationHint.cpp controls/QskAnimationHint.cpp
controls/QskMainView.cpp controls/QskMainView.cpp

View File

@ -705,7 +705,9 @@ Qt::Alignment QskAbstractTextInput::alignment() const
void QskAbstractTextInput::updateLayout() void QskAbstractTextInput::updateLayout()
{ {
QMetaObject::invokeMethod( m_data->input, "updateMetrics" ); QMetaObject::invokeMethod( m_data->input, "updateMetrics" );
qskSetItemGeometry( m_data->input, subControlRect( Text ) );
const auto subControl = effectiveSubcontrol( Text );
qskSetItemGeometry( m_data->input, subControlRect( subControl ) );
} }
void QskAbstractTextInput::updateNode( QSGNode* node ) void QskAbstractTextInput::updateNode( QSGNode* node )

View File

@ -1,67 +0,0 @@
/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#include "QskAbstractTextInputSkinlet.h"
#include "QskAbstractTextInput.h"
using Q = QskAbstractTextInput;
QskAbstractTextInputSkinlet::QskAbstractTextInputSkinlet( QskSkin* skin )
: Inherited( skin )
{
setNodeRoles( { TextPanelRole } );
}
QskAbstractTextInputSkinlet::~QskAbstractTextInputSkinlet()
{
}
QRectF QskAbstractTextInputSkinlet::subControlRect( const QskSkinnable* skinnable,
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const
{
if ( subControl == Q::TextPanel )
return contentsRect;
if ( subControl == Q::Text )
{
auto rect = skinnable->subControlContentsRect( contentsRect, Q::TextPanel );
rect = rect.marginsAdded( skinnable->marginHint( Q::Text ) );
return rect;
}
return Inherited::subControlRect( skinnable, contentsRect, subControl );
}
QSGNode* QskAbstractTextInputSkinlet::updateSubNode(
const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const
{
switch ( nodeRole )
{
case TextPanelRole:
return updateBoxNode( skinnable, node, Q::TextPanel );
}
return Inherited::updateSubNode( skinnable, nodeRole, node );
}
QSizeF QskAbstractTextInputSkinlet::sizeHint( const QskSkinnable* skinnable,
Qt::SizeHint which, const QSizeF& constraint ) const
{
if ( which != Qt::PreferredSize )
return QSizeF();
Q_UNUSED( constraint ); // TODO ...
const auto input = static_cast< const QskAbstractTextInput* >( skinnable );
auto hint = input->unwrappedTextSize();
hint = input->outerBoxSize( Q::TextPanel, hint );
hint = hint.expandedTo( input->strutSizeHint( Q::TextPanel ) );
return hint;
}
#include "moc_QskAbstractTextInputSkinlet.cpp"

View File

@ -1,38 +0,0 @@
/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#ifndef QSK_ABSTRACT_TEXT_INPUT_SKINLET_H
#define QSK_ABSTRACT_TEXT_INPUT_SKINLET_H
#include "QskSkinlet.h"
class QSK_EXPORT QskAbstractTextInputSkinlet : public QskSkinlet
{
Q_GADGET
using Inherited = QskSkinlet;
public:
enum NodeRole : quint8
{
TextPanelRole,
RoleCount
};
Q_INVOKABLE QskAbstractTextInputSkinlet( QskSkin* = nullptr );
~QskAbstractTextInputSkinlet() override;
QRectF subControlRect( const QskSkinnable*,
const QRectF& rect, QskAspect::Subcontrol ) const override;
QSizeF sizeHint( const QskSkinnable*,
Qt::SizeHint, const QSizeF& ) const override;
protected:
QSGNode* updateSubNode( const QskSkinnable*,
quint8 nodeRole, QSGNode* ) const override;
};
#endif

View File

@ -25,9 +25,6 @@
#include <cmath> #include <cmath>
#include "QskAbstractTextInput.h"
#include "QskAbstractTextInputSkinlet.h"
#include "QskBox.h" #include "QskBox.h"
#include "QskBoxSkinlet.h" #include "QskBoxSkinlet.h"
@ -194,7 +191,6 @@ QskSkin::QskSkin( QObject* parent )
{ {
declareSkinlet< QskControl, QskSkinlet >(); declareSkinlet< QskControl, QskSkinlet >();
declareSkinlet< QskAbstractTextInput, QskAbstractTextInputSkinlet >();
declareSkinlet< QskBox, QskBoxSkinlet >(); declareSkinlet< QskBox, QskBoxSkinlet >();
declareSkinlet< QskCheckBox, QskCheckBoxSkinlet >(); declareSkinlet< QskCheckBox, QskCheckBoxSkinlet >();
declareSkinlet< QskComboBox, QskComboBoxSkinlet >(); declareSkinlet< QskComboBox, QskComboBoxSkinlet >();

View File

@ -11,7 +11,7 @@ using Q = QskTextArea;
QskTextAreaSkinlet::QskTextAreaSkinlet( QskSkin* skin ) QskTextAreaSkinlet::QskTextAreaSkinlet( QskSkin* skin )
: Inherited( skin ) : Inherited( skin )
{ {
setNodeRoles( { PanelRole, TextPanelRole, PlaceholderTextRole } ); setNodeRoles( { PanelRole, TextPanelRole, PlaceholderRole } );
} }
QskTextAreaSkinlet::~QskTextAreaSkinlet() QskTextAreaSkinlet::~QskTextAreaSkinlet()
@ -27,6 +27,9 @@ QRectF QskTextAreaSkinlet::subControlRect( const QskSkinnable* skinnable,
if ( subControl == Q::TextPanel ) if ( subControl == Q::TextPanel )
return skinnable->subControlContentsRect( contentsRect, Q::Panel ); return skinnable->subControlContentsRect( contentsRect, Q::Panel );
if ( subControl == Q::Text )
return skinnable->subControlContentsRect( contentsRect, Q::TextPanel );
if ( subControl == Q::Placeholder ) if ( subControl == Q::Placeholder )
{ {
const auto textArea = static_cast< const QskTextArea* >( skinnable ); const auto textArea = static_cast< const QskTextArea* >( skinnable );
@ -50,8 +53,11 @@ QSGNode* QskTextAreaSkinlet::updateSubNode(
{ {
return updateBoxNode( skinnable, node, Q::Panel ); return updateBoxNode( skinnable, node, Q::Panel );
} }
case TextPanelRole:
case PlaceholderTextRole: {
return updateBoxNode( skinnable, node, Q::TextPanel );
}
case PlaceholderRole:
{ {
const auto text = effectivePlaceholderText( textArea ); const auto text = effectivePlaceholderText( textArea );
if ( text.isEmpty() ) if ( text.isEmpty() )
@ -78,10 +84,19 @@ QSGNode* QskTextAreaSkinlet::updateSubNode(
QSizeF QskTextAreaSkinlet::sizeHint( const QskSkinnable* skinnable, QSizeF QskTextAreaSkinlet::sizeHint( const QskSkinnable* skinnable,
Qt::SizeHint which, const QSizeF& constraint ) const Qt::SizeHint which, const QSizeF& constraint ) const
{ {
Q_UNUSED( constraint ); // TODO ...
if ( which != Qt::PreferredSize ) if ( which != Qt::PreferredSize )
return QSizeF(); return QSizeF();
auto hint = Inherited::sizeHint( skinnable, which, constraint ); const auto input = static_cast< const QskAbstractTextInput* >( skinnable );
auto hint = input->unwrappedTextSize();
hint = hint.grownBy( skinnable->marginHint( Q::Text ) );
hint = input->outerBoxSize( Q::TextPanel, hint );
hint = hint.expandedTo( input->strutSizeHint( Q::TextPanel ) );
hint = skinnable->outerBoxSize( Q::Panel, hint ); hint = skinnable->outerBoxSize( Q::Panel, hint );
hint = hint.expandedTo( skinnable->strutSizeHint( Q::Panel ) ); hint = hint.expandedTo( skinnable->strutSizeHint( Q::Panel ) );

View File

@ -6,22 +6,23 @@
#ifndef QSK_TEXT_AREA_SKINLET_H #ifndef QSK_TEXT_AREA_SKINLET_H
#define QSK_TEXT_AREA_SKINLET_H #define QSK_TEXT_AREA_SKINLET_H
#include "QskAbstractTextInputSkinlet.h" #include "QskSkinlet.h"
class QskTextArea; class QskTextArea;
class QSK_EXPORT QskTextAreaSkinlet : public QskAbstractTextInputSkinlet class QSK_EXPORT QskTextAreaSkinlet : public QskSkinlet
{ {
Q_GADGET Q_GADGET
using Inherited = QskAbstractTextInputSkinlet; using Inherited = QskSkinlet;
public: public:
enum NodeRole : quint8 enum NodeRole : quint8
{ {
PanelRole = Inherited::RoleCount, PanelRole,
TextPanelRole,
PlaceholderRole,
PlaceholderTextRole,
RoleCount RoleCount
}; };

View File

@ -27,6 +27,9 @@ QRectF QskTextFieldSkinlet::subControlRect( const QskSkinnable* skinnable,
if ( subControl == Q::TextPanel ) if ( subControl == Q::TextPanel )
return skinnable->subControlContentsRect( contentsRect, Q::Panel ); return skinnable->subControlContentsRect( contentsRect, Q::Panel );
if ( subControl == Q::Text )
return skinnable->subControlContentsRect( contentsRect, Q::TextPanel );
if ( subControl == Q::Placeholder ) if ( subControl == Q::Placeholder )
{ {
const auto textField = static_cast< const QskTextField* >( skinnable ); const auto textField = static_cast< const QskTextField* >( skinnable );
@ -50,7 +53,10 @@ QSGNode* QskTextFieldSkinlet::updateSubNode(
{ {
return updateBoxNode( skinnable, node, Q::Panel ); return updateBoxNode( skinnable, node, Q::Panel );
} }
case TextPanelRole:
{
return updateBoxNode( skinnable, node, Q::TextPanel );
}
case PlaceholderRole: case PlaceholderRole:
{ {
const auto text = effectivePlaceholderText( textField ); const auto text = effectivePlaceholderText( textField );
@ -78,10 +84,19 @@ QSGNode* QskTextFieldSkinlet::updateSubNode(
QSizeF QskTextFieldSkinlet::sizeHint( const QskSkinnable* skinnable, QSizeF QskTextFieldSkinlet::sizeHint( const QskSkinnable* skinnable,
Qt::SizeHint which, const QSizeF& constraint ) const Qt::SizeHint which, const QSizeF& constraint ) const
{ {
Q_UNUSED( constraint ); // TODO ...
if ( which != Qt::PreferredSize ) if ( which != Qt::PreferredSize )
return QSizeF(); return QSizeF();
auto hint = Inherited::sizeHint( skinnable, which, constraint ); const auto input = static_cast< const QskAbstractTextInput* >( skinnable );
auto hint = input->unwrappedTextSize();
hint = hint.grownBy( skinnable->marginHint( Q::Text ) );
hint = input->outerBoxSize( Q::TextPanel, hint );
hint = hint.expandedTo( input->strutSizeHint( Q::TextPanel ) );
hint = skinnable->outerBoxSize( Q::Panel, hint ); hint = skinnable->outerBoxSize( Q::Panel, hint );
hint = hint.expandedTo( skinnable->strutSizeHint( Q::Panel ) ); hint = hint.expandedTo( skinnable->strutSizeHint( Q::Panel ) );

View File

@ -6,21 +6,21 @@
#ifndef QSK_TEXT_FIELD_SKINLET_H #ifndef QSK_TEXT_FIELD_SKINLET_H
#define QSK_TEXT_FIELD_SKINLET_H #define QSK_TEXT_FIELD_SKINLET_H
#include "QskAbstractTextInputSkinlet.h" #include "QskSkinlet.h"
class QskTextField; class QskTextField;
class QSK_EXPORT QskTextFieldSkinlet : public QskAbstractTextInputSkinlet class QSK_EXPORT QskTextFieldSkinlet : public QskSkinlet
{ {
Q_GADGET Q_GADGET
using Inherited = QskAbstractTextInputSkinlet; using Inherited = QskSkinlet;
public: public:
enum NodeRole : quint8 enum NodeRole : quint8
{ {
PanelRole = QskAbstractTextInputSkinlet::RoleCount, PanelRole,
TextPanelRole,
PlaceholderRole, PlaceholderRole,
RoleCount RoleCount
}; };