using QskGrdient::Stops for separator hints

This commit is contained in:
Uwe Rathmann 2022-10-31 18:02:35 +01:00
parent fe8e696f40
commit f14036c124
3 changed files with 25 additions and 15 deletions

View File

@ -176,12 +176,7 @@ namespace
void Editor::setSeparator( QskAspect aspect ) void Editor::setSeparator( QskAspect aspect )
{ {
QskLinearGradient gradient( Qt::Vertical, m_pal.lighter110, m_pal.darker125 ); setGradient( aspect, m_pal.lighter110, m_pal.darker125 );
if ( aspect.placement() == QskAspect::Vertical )
gradient.setOrientation( Qt::Horizontal );
setGradient( aspect, gradient );
setBoxShape( aspect, 0 ); setBoxShape( aspect, 0 );
setBoxBorderMetrics( aspect, 0 ); setBoxBorderMetrics( aspect, 0 );
} }
@ -351,11 +346,8 @@ void Editor::setupMenu()
const bool isCascading = qskMaybeDesktopPlatform(); const bool isCascading = qskMaybeDesktopPlatform();
setFlagHint( Q::Panel | A::Style, isCascading ); setFlagHint( Q::Panel | A::Style, isCascading );
#if 0
setPadding( Q::Separator, QMarginsF( 10, 0, 10, 0 ) );
#endif
setMetric( Q::Separator | A::Size, qskDpiScaled( 2 ) ); setMetric( Q::Separator | A::Size, qskDpiScaled( 2 ) );
setSeparator( Q::Separator | A::Horizontal ); setSeparator( Q::Separator );
setPadding( Q::Segment, QskMargins( 2, 10, 2, 10 ) ); setPadding( Q::Segment, QskMargins( 2, 10, 2, 10 ) );
setSpacing( Q::Segment, 5 ); setSpacing( Q::Segment, 5 );
@ -471,9 +463,7 @@ void Editor::setupSeparator()
using Q = QskSeparator; using Q = QskSeparator;
setMetric( Q::Panel | A::Size, 4 ); setMetric( Q::Panel | A::Size, 4 );
setSeparator( Q::Panel );
setSeparator( Q::Panel | A::Horizontal );
setSeparator( Q::Panel | A::Vertical );
} }
void Editor::setupSegmentedBar() void Editor::setupSegmentedBar()

View File

@ -14,6 +14,7 @@
#include "QskFunctions.h" #include "QskFunctions.h"
#include "QskMargins.h" #include "QskMargins.h"
#include "QskFunctions.h" #include "QskFunctions.h"
#include "QskLinearGradient.h"
#include <qfontmetrics.h> #include <qfontmetrics.h>
#include <qmath.h> #include <qmath.h>
@ -531,7 +532,11 @@ QSGNode* QskMenuSkinlet::updateSampleNode( const QskSkinnable* skinnable,
if ( subControl == Q::Separator ) 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; return nullptr;

View File

@ -6,6 +6,7 @@
#include "QskSeparatorSkinlet.h" #include "QskSeparatorSkinlet.h"
#include "QskSeparator.h" #include "QskSeparator.h"
#include "QskLinearGradient.h"
#include "QskAspect.h" #include "QskAspect.h"
QskSeparatorSkinlet::QskSeparatorSkinlet( QskSkin* skin ) QskSeparatorSkinlet::QskSeparatorSkinlet( QskSkin* skin )
@ -38,7 +39,21 @@ QSGNode* QskSeparatorSkinlet::updateSubNode(
{ {
case PanelRole: 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 );
} }
} }