From f14036c12414dec217927b941c7b67d95b922fe7 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Mon, 31 Oct 2022 18:02:35 +0100 Subject: [PATCH] using QskGrdient::Stops for separator hints --- skins/squiek/QskSquiekSkin.cpp | 16 +++------------- src/controls/QskMenuSkinlet.cpp | 7 ++++++- src/controls/QskSeparatorSkinlet.cpp | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/skins/squiek/QskSquiekSkin.cpp b/skins/squiek/QskSquiekSkin.cpp index 8e3a8477..5c13478b 100644 --- a/skins/squiek/QskSquiekSkin.cpp +++ b/skins/squiek/QskSquiekSkin.cpp @@ -176,12 +176,7 @@ namespace void Editor::setSeparator( QskAspect aspect ) { - QskLinearGradient gradient( Qt::Vertical, m_pal.lighter110, m_pal.darker125 ); - - if ( aspect.placement() == QskAspect::Vertical ) - gradient.setOrientation( Qt::Horizontal ); - - setGradient( aspect, gradient ); + setGradient( aspect, m_pal.lighter110, m_pal.darker125 ); setBoxShape( aspect, 0 ); setBoxBorderMetrics( aspect, 0 ); } @@ -351,11 +346,8 @@ void Editor::setupMenu() const bool isCascading = qskMaybeDesktopPlatform(); setFlagHint( Q::Panel | A::Style, isCascading ); -#if 0 - setPadding( Q::Separator, QMarginsF( 10, 0, 10, 0 ) ); -#endif setMetric( Q::Separator | A::Size, qskDpiScaled( 2 ) ); - setSeparator( Q::Separator | A::Horizontal ); + setSeparator( Q::Separator ); setPadding( Q::Segment, QskMargins( 2, 10, 2, 10 ) ); setSpacing( Q::Segment, 5 ); @@ -471,9 +463,7 @@ void Editor::setupSeparator() using Q = QskSeparator; setMetric( Q::Panel | A::Size, 4 ); - - setSeparator( Q::Panel | A::Horizontal ); - setSeparator( Q::Panel | A::Vertical ); + setSeparator( Q::Panel ); } void Editor::setupSegmentedBar() diff --git a/src/controls/QskMenuSkinlet.cpp b/src/controls/QskMenuSkinlet.cpp index fe25626a..4c92c9b6 100644 --- a/src/controls/QskMenuSkinlet.cpp +++ b/src/controls/QskMenuSkinlet.cpp @@ -14,6 +14,7 @@ #include "QskFunctions.h" #include "QskMargins.h" #include "QskFunctions.h" +#include "QskLinearGradient.h" #include #include @@ -531,7 +532,11 @@ QSGNode* QskMenuSkinlet::updateSampleNode( const QskSkinnable* skinnable, if ( subControl == Q::Separator ) { - return updateBoxNode( menu, node, rect, subControl ); + auto gradient = menu->gradientHint( subControl ); + if ( ( gradient.type() == QskGradient::Stops ) && !gradient.isMonochrome() ) + gradient = QskLinearGradient( Qt::Vertical, gradient.stops() ); + + return updateBoxNode( menu, node, rect, gradient, subControl ); } return nullptr; diff --git a/src/controls/QskSeparatorSkinlet.cpp b/src/controls/QskSeparatorSkinlet.cpp index 7df87569..5d3ff38c 100644 --- a/src/controls/QskSeparatorSkinlet.cpp +++ b/src/controls/QskSeparatorSkinlet.cpp @@ -6,6 +6,7 @@ #include "QskSeparatorSkinlet.h" #include "QskSeparator.h" +#include "QskLinearGradient.h" #include "QskAspect.h" QskSeparatorSkinlet::QskSeparatorSkinlet( QskSkin* skin ) @@ -38,7 +39,21 @@ QSGNode* QskSeparatorSkinlet::updateSubNode( { case PanelRole: { - return updateBoxNode( separator, node, QskSeparator::Panel ); + using Q = QskSeparator; + + const auto rect = separator->subControlRect( Q::Panel ); + + auto gradient = separator->gradientHint( Q::Panel ); + if ( ( gradient.type() == QskGradient::Stops ) && !gradient.isMonochrome() ) + { + // gradient in opposite orientation + const auto orientation = ( separator->orientation() == Qt::Vertical ) + ? Qt::Horizontal : Qt::Vertical; + + gradient = QskLinearGradient( orientation, gradient.stops() ); + } + + return updateBoxNode( separator, node, rect, gradient, Q::Panel ); } }