QskProgressBar improved

This commit is contained in:
Uwe Rathmann 2020-08-06 09:28:18 +02:00
parent c9717a9d33
commit 27a95ee60f
3 changed files with 66 additions and 46 deletions

View File

@ -161,7 +161,7 @@ void QskMaterialSkin::initCommonHints()
using namespace QskAspect;
using Q = QskControl;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Control | Padding, 4 );
@ -176,7 +176,7 @@ void QskMaterialSkin::initBoxHints()
using namespace QskAspect;
using Q = QskBox;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setGradient( Q::Panel, pal.baseColor );
setBoxShape( Q::Panel, 4 );
@ -188,7 +188,7 @@ void QskMaterialSkin::initPopupHints()
using namespace QskAspect;
using Q = QskPopup;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setSkinHint( Q::Overlay | QskAspect::Style, true );
@ -203,7 +203,7 @@ void QskMaterialSkin::initTextLabelHints()
using namespace QskAspect;
using Q = QskTextLabel;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setSkinHint( Q::Text | Alignment, Qt::AlignCenter );
setColor( Q::Text, pal.textColor );
@ -223,7 +223,7 @@ void QskMaterialSkin::initTextInputHints()
setSkinHint( Q::Text | Alignment,
static_cast< int >( Qt::AlignLeft | Qt::AlignTop ) );
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setColor( Q::Text, pal.textColor );
setColor( Q::PanelSelected, pal.accentColor );
@ -239,13 +239,22 @@ void QskMaterialSkin::initTextInputHints()
void QskMaterialSkin::initProgressBarHints()
{
using namespace QskAspect;
using namespace QskRgbValue;
using Q = QskProgressBar;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setGradient( Q::Groove, Qt::white );
setMetric( Q::Groove | Size, 10 );
for ( auto subControl : { Q::Groove, Q::Bar } )
{
setMetric( subControl | Size, 5 );
setMargins( subControl | Padding, 0 );
setBoxShape( subControl, 0 );
setBoxBorderMetrics( subControl, 0 );
}
setGradient( Q::Groove, Grey );
setMetric( Q::Groove | Size, 5 );
setGradient( Q::Bar, pal.accentColor );
}
@ -254,7 +263,7 @@ void QskMaterialSkin::initFocusIndicatorHints()
using namespace QskAspect;
using Q = QskFocusIndicator;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Q::Panel | Padding, 5 );
setBoxShape( Q::Panel, 4 );
@ -268,7 +277,7 @@ void QskMaterialSkin::initSeparatorHints()
using namespace QskAspect;
using Q = QskSeparator;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
for ( auto placement : { Horizontal, Vertical } )
{
@ -286,7 +295,7 @@ void QskMaterialSkin::initPageIndicatorHints()
using namespace QskAspect;
using Q = QskPageIndicator;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
for ( auto subControl : { Q::Bullet, Q::Highlighted } )
{
@ -316,7 +325,7 @@ void QskMaterialSkin::initPushButtonHints()
using namespace QskRgbValue;
using Q = QskPushButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMetric( Q::Panel | MinimumWidth, qskDpiScaled( 75.0 ) );
setMetric( Q::Panel | MinimumHeight, qskDpiScaled( 23.0 ) );
@ -377,7 +386,7 @@ void QskMaterialSkin::initDialogButtonHints()
using namespace QskRgbValue;
using Q = QskDialogButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMetric( Q::Panel | MinimumWidth, 30 );
setMetric( Q::Panel | MinimumHeight, 16 );
@ -430,7 +439,7 @@ void QskMaterialSkin::initDialogButtonBoxHints()
using namespace QskAspect;
using Q = QskDialogButtonBox;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setGradient( Q::Panel, pal.baseColor );
setBoxShape( Q::Panel, 0 );
@ -443,7 +452,7 @@ void QskMaterialSkin::initSliderHints()
using namespace QskRgbValue;
using Q = QskSlider;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
const qreal dim = 30;
@ -466,7 +475,6 @@ void QskMaterialSkin::initSliderHints()
setBoxShape( subControl, 0 );
setBoxBorderMetrics( subControl, 0 );
setGradient( subControl, QskGradient() );
}
setGradient( Q::Groove, Grey );
@ -488,7 +496,7 @@ void QskMaterialSkin::initSliderHints()
// should be transparent, but the current renderer doesn't "cut out" the background
setGradient( Q::Handle, pal.accentColor );
setGradient( Q::Pressed | Q::Handle, pal.accentColor );
setGradient( Q::Handle | Q::Pressed, pal.accentColor );
for ( auto state : { NoState, Q::Pressed, Q::Pressed | Q::Hovered } )
{
@ -515,7 +523,7 @@ void QskMaterialSkin::initTabButtonHints()
using namespace QskAspect;
using Q = QskTabButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMetric( Q::Panel | MinimumWidth, 30 );
setMetric( Q::Panel | MinimumHeight, 16 );
@ -594,7 +602,7 @@ void QskMaterialSkin::initTabViewHints()
using namespace QskAspect;
using Q = QskTabView;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setBoxShape( Q::Page, 0 );
setBoxBorderMetrics( Q::Page, 0 );
@ -609,7 +617,7 @@ void QskMaterialSkin::initInputPanelHints()
using namespace QskAspect;
using Q = QskInputPanelBox;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setBoxShape( Q::Panel, 0 );
setBoxBorderMetrics( Q::Panel, 0 );
@ -622,7 +630,7 @@ void QskMaterialSkin::initVirtualKeyboardHints()
using namespace QskAspect;
using Q = QskVirtualKeyboard;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// key panel
setMargins( Q::ButtonPanel | Margin, 2 );
@ -651,7 +659,7 @@ void QskMaterialSkin::initScrollViewHints()
using namespace QskAspect;
using Q = QskScrollView;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMetric( Q::Panel | Spacing, 2 );
@ -696,7 +704,7 @@ void QskMaterialSkin::initListViewHints()
using namespace QskAspect;
using Q = QskListView;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// padding for each cell
setMargins( Q::Cell | Padding, QskMargins( 4, 8 ) );
@ -713,7 +721,7 @@ void QskMaterialSkin::initSubWindowHints()
using namespace QskAspect;
using Q = QskSubWindow;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// Panel

View File

@ -132,7 +132,7 @@ QskSquiekSkin::~QskSquiekSkin()
void QskSquiekSkin::setSeparator( QskAspect::Aspect aspect )
{
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
QskGradient gradient( QskGradient::Vertical, pal.lighter110, pal.darker125 );
@ -150,7 +150,7 @@ void QskSquiekSkin::setButton(
#if 1
// Buttons shift ???
#endif
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
QskBoxBorderColors borderColors;
@ -211,7 +211,7 @@ void QskSquiekSkin::setPanel( QskAspect::Aspect aspect, PanelStyle style )
void QskSquiekSkin::setTab( QskAspect::Aspect aspect )
{
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setGradient( aspect,
QskGradient( QskGradient::Vertical, pal.lighter125, pal.lighter150 ) );
@ -287,7 +287,7 @@ void QskSquiekSkin::initCommonHints()
using namespace QskAspect;
using Q = QskControl;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Control | Padding, 4 );
@ -315,7 +315,7 @@ void QskSquiekSkin::initTextLabelHints()
using namespace QskAspect;
using Q = QskTextLabel;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setSkinHint( Q::Text | Alignment, Qt::AlignCenter );
setColor( Q::Text, pal.themeForeground );
@ -339,7 +339,7 @@ void QskSquiekSkin::initTextInputHints()
using namespace QskAspect;
using Q = QskTextInput;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setSkinHint( Q::Text | Alignment,
static_cast< int >( Qt::AlignLeft | Qt::AlignTop ) );
@ -387,12 +387,15 @@ void QskSquiekSkin::initProgressBarHints()
using namespace QskAspect;
using Q = QskProgressBar;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setGradient( Q::Groove, Qt::white );
setMetric( Q::Groove | Size, 10 );
setMetric( Q::Groove | Size, 8 );
setMargins( Q::Groove | Padding, 0 );
setGradient( Q::Groove, pal.darker200 );
setBoxShape( Q::Groove, 4 );
setGradient( Q::Bar, pal.highlighted );
setBoxShape( Q::Bar, 4 );
}
void QskSquiekSkin::initFocusIndicatorHints()
@ -400,7 +403,7 @@ void QskSquiekSkin::initFocusIndicatorHints()
using namespace QskAspect;
using Q = QskFocusIndicator;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Q::Panel | Padding, 5 );
setBoxBorderMetrics( Q::Panel, 2 );
@ -425,7 +428,7 @@ void QskSquiekSkin::initPageIndicatorHints()
using namespace QskAspect;
using Q = QskPageIndicator;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
for ( auto subControl : { Q::Bullet, Q::Highlighted } )
{
@ -452,7 +455,7 @@ void QskSquiekSkin::initPushButtonHints()
using namespace QskAspect;
using Q = QskPushButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// Panel
@ -494,7 +497,7 @@ void QskSquiekSkin::initDialogButtonHints()
using namespace QskAspect;
using Q = QskDialogButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// panel
setMetric( Q::Panel | MinimumWidth, qskDpiScaled( 75.0 ) );
@ -522,7 +525,7 @@ void QskSquiekSkin::initDialogButtonBoxHints()
using namespace QskAspect;
using Q = QskDialogButtonBox;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setBoxBorderColors( Q::Panel, pal.theme );
setGradient( Q::Panel, pal.lighter135 );
@ -535,7 +538,7 @@ void QskSquiekSkin::initTabButtonHints()
using namespace QskAspect;
using Q = QskTabButton;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMetric( Q::Panel | MinimumWidth, 30 );
setMetric( Q::Panel | MinimumHeight, 16 );
@ -593,7 +596,7 @@ void QskSquiekSkin::initSliderHints()
using namespace QskAspect;
using Q = QskSlider;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
const qreal dim = 40;
@ -687,7 +690,7 @@ void QskSquiekSkin::initInputPredictionBar()
using namespace QskAspect;
using Q = QskInputPredictionBar;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Q::Panel | Padding, 5 );
setPanel( Q::Panel, Flat );
@ -705,7 +708,7 @@ void QskSquiekSkin::initVirtualKeyboardHints()
using namespace QskAspect;
using Q = QskVirtualKeyboard;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
setMargins( Q::Panel | Padding, 5 );
setMetric( Q::Panel | Spacing, 5 );
@ -778,7 +781,7 @@ void QskSquiekSkin::initListViewHints()
using namespace QskAspect;
using Q = QskListView;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
// padding for each cell
setMargins( Q::Cell | Padding, QskMargins( 4, 8 ) );
@ -795,7 +798,7 @@ void QskSquiekSkin::initSubWindowHints()
using namespace QskAspect;
using Q = QskSubWindow;
const ColorPalette& pal = m_data->palette;
const auto& pal = m_data->palette;
const qreal radius = 5.0;

View File

@ -6,6 +6,7 @@
#include "QskProgressBarSkinlet.h"
#include "QskProgressBar.h"
#include "QskIntervalF.h"
#include "QskBoxBorderMetrics.h"
#include <cmath>
@ -122,8 +123,16 @@ QSGNode* QskProgressBarSkinlet::updateBarNode(
QRectF QskProgressBarSkinlet::barRect( const QskProgressBar* bar ) const
{
auto rect = bar->subControlRect( QskProgressBar::Groove );
rect = bar->innerBox( QskProgressBar::Groove, rect );
const auto subControl = QskProgressBar::Groove;
auto rect = bar->subControlRect( subControl );
const auto borderMetrics = bar->boxBorderMetricsHint( subControl );
auto m = bar->marginsHint( subControl | QskAspect::Padding );
m += 0.5 * borderMetrics.toAbsolute( rect.size() ).widths();
rect = rect.marginsRemoved( m );
const auto intv = qskBarInterval( bar );