M3_ using px instead of dp what seems to match much better with the

displayed controls on the M3 web pages. Also using pt instead of dp.
Not sure why the specs mention dp as unit and what is exactly meant by
it.
This commit is contained in:
Uwe Rathmann 2024-12-12 10:18:47 +01:00
parent 3a09458031
commit 8d18c6622f
2 changed files with 144 additions and 160 deletions

View File

@ -104,47 +104,28 @@ namespace
namespace
{
inline constexpr qreal dpToPixels( qreal value )
/*
mapping between px/pt and Qt's logical coordinates
*/
inline constexpr double operator ""_px( long double value ) Q_DECL_UNUSED
{
/*
see: https://en.wikipedia.org/wiki/Device-independent_pixel
https://developer.android.com/training/multiscreen/screendensities
One dp is a virtual pixel unit that's roughly equal to one pixel
on a medium-density screen ( 160 dpi ).
One logical pixel is equivalent to 1/96th of an inch.
*/
/*
For non scalable resources the following density buckets
are recommended:
ldpi: ( 0 -> 140 ) : 120
mdpi: ( 140 -> 200 ): 160
hdpi: ( 140 -> 280 ): 240
xhdpi: ( 280 -> 400 ): 320
xxhdpi: ( 400 -> 560 ): 480
xxxhdpi: ( 560 -> ... ): 640
For some reason the metrics from the Figma model seem to be
too small on our deskop system. Until this has bee understood
we use the ldpi bucket as the density of the logical coordinate
system falls into it.
Need to find out why TODO ...
*/
return value * 96.0 / 120.0;
return static_cast< double >( value );
}
Q_DECL_UNUSED inline constexpr double operator ""_dp( long double value )
inline constexpr double operator ""_px( unsigned long long value ) Q_DECL_UNUSED
{
return dpToPixels( static_cast< qreal >( value ) );
return static_cast< double >( value );
}
Q_DECL_UNUSED inline constexpr double operator ""_dp( unsigned long long value )
inline constexpr double operator ""_pt( long double value ) Q_DECL_UNUSED
{
return dpToPixels( value );
// px: 1/96 inch, pt: 1/72 inch
return value * 72.0 / 96.0;
}
inline constexpr double operator ""_pt( unsigned long long value ) Q_DECL_UNUSED
{
return value * 72.0 / 96.0;
}
class Combination : public QskStateCombination
@ -169,6 +150,9 @@ namespace
void setup()
{
// default font
setFontRole( QskAspect::NoSubcontrol, BodyLarge );
for ( int i = 0; i < staticMetaObject.methodCount(); i++ )
staticMetaObject.method( i ).invokeOnGadget( this );
}
@ -234,15 +218,15 @@ void Editor::setupCheckBox()
// == metrics
setSpacing( Q::Panel, 40_dp );
setSpacing( Q::Panel, 6_px );
{
setStrutSize( Q::Box, 18_dp, 18_dp );
setBoxBorderMetrics( Q::Box, 2_dp );
setBoxShape( Q::Box, 2_dp );
setPadding( Q::Box, 3_dp ); // "icon size"
setStrutSize( Q::Box, 18_px, 18_px );
setBoxBorderMetrics( Q::Box, 2_px );
setBoxShape( Q::Box, 2_px );
setPadding( Q::Box, 3_px ); // "icon size"
QskShadowMetrics shadowMetrics( 12_dp, 0.0 );
QskShadowMetrics shadowMetrics( 12_px, 0.0 );
shadowMetrics.setShapeMode( QskShadowMetrics::Ellipse );
setShadowMetrics( Q::Box, shadowMetrics );
}
@ -324,13 +308,13 @@ void Editor::setupComboBox()
{
using Q = QskComboBox;
setStrutSize( Q::Panel, -1.0, 56_dp );
setPadding( Q::Panel, { 12_dp, 8_dp, 12_dp, 8_dp } );
setStrutSize( Q::Panel, -1.0, 56_px );
setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } );
setGradient( Q::Panel, m_pal.surfaceVariant );
setBoxShape( Q::Panel, m_pal.shapeExtraSmallTop );
setBoxBorderMetrics( Q::Panel, { 0, 0, 0, 1_dp } );
setBoxBorderMetrics( Q::Panel, { 0, 0, 0, 1_px } );
setBoxBorderColors( Q::Panel, m_pal.onSurfaceVariant );
setSpacing( Q::Panel, 8_dp );
setSpacing( Q::Panel, 8_px );
setGradient( Q::Panel | Q::Hovered,
m_pal.hoverColor( m_pal.onSurfaceVariant, m_pal.surfaceVariant ) );
@ -344,13 +328,13 @@ void Editor::setupComboBox()
setGradient( Q::Panel | Q::PopupOpen,
m_pal.pressedColor( m_pal.onSurfaceVariant, m_pal.surfaceVariant ) );
setStrutSize( Q::Icon, 24_dp, 24_dp );
setStrutSize( Q::Icon, 24_px, 24_px );
setGraphicRole( Q::Icon, QskMaterial3Skin::GraphicRoleOnSurface );
setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyMedium );
setFontRole( Q::Text, BodyLarge );
setStrutSize( Q::StatusIndicator, 12_dp, 12_dp );
setStrutSize( Q::StatusIndicator, 12_px, 12_px );
setGraphicRole( Q::StatusIndicator, QskMaterial3Skin::GraphicRoleOnSurface );
setAlignment( Q::StatusIndicator, Qt::AlignRight | Qt::AlignVCenter );
@ -396,7 +380,7 @@ void Editor::setupMenu()
setHint( Q::Overlay | A::Style, false );
setGradient( Q::Overlay, stateLayerColor( m_pal.outline, 0.8 ) );
setBoxShape( Q::Panel, 4_dp );
setBoxShape( Q::Panel, 4_px );
setBoxBorderMetrics( Q::Panel, 0 );
setPadding( Q::Panel, 0 );
@ -408,13 +392,13 @@ void Editor::setupMenu()
setShadowMetrics( Q::Panel, m_pal.elevation2 );
setShadowColor( Q::Panel, m_pal.shadow );
setMetric( Q::Separator | A::Size, 1_dp );
setMetric( Q::Separator | A::Size, 1_px );
setBoxShape( Q::Separator, 0 );
setBoxBorderMetrics( Q::Separator, 0 );
setGradient( Q::Separator, m_pal.primary12 );
setPadding( Q::Segment, 6_dp );
setSpacing( Q::Segment, 5_dp );
setPadding( Q::Segment, 6_px );
setSpacing( Q::Segment, 5_px );
setGradient( Q::Segment, Qt::transparent );
setGradient( Q::Segment | Q::Hovered,
@ -426,12 +410,12 @@ void Editor::setupMenu()
setGradient( Q::Segment | Q::Pressed | Q::Selected,
m_pal.pressedColor( m_pal.onSurface, m_pal.primary12 ) );
setPadding( Q::Icon, 7_dp );
setStrutSize( Q::Icon, 24_dp, 24_dp );
setPadding( Q::Icon, 7_px );
setStrutSize( Q::Icon, 24_px, 24_px );
setGraphicRole( Q::Icon, QskMaterial3Skin::GraphicRoleOnSurface );
setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyMedium );
setFontRole( Q::Text, BodyLarge );
setAnimation( Q::Cursor | A::Position | A::Metric, 75, QEasingCurve::OutCubic );
@ -443,7 +427,8 @@ void Editor::setupTextLabel()
using Q = QskTextLabel;
setColor( Q::Text, m_pal.onSurface );
setPadding( Q::Panel, 5_dp );
setFontRole( Q::Text, BodyLarge );
setPadding( Q::Panel, 5_px );
}
void Editor::setupTextField()
@ -451,14 +436,14 @@ void Editor::setupTextField()
using Q = QskTextField;
using SK = QskTextFieldSkinlet;
setStrutSize( Q::Panel, -1.0, 56_dp );
setPadding( Q::Panel, { 12_dp, 8_dp, 12_dp, 8_dp } );
setStrutSize( Q::Panel, -1.0, 56_px );
setPadding( Q::Panel, { 12_px, 8_px, 12_px, 8_px } );
setGradient( Q::Panel, m_pal.surfaceVariant );
setColor( Q::Panel | SK::Selected, m_pal.primary12 );
setBoxShape( Q::Panel, m_pal.shapeExtraSmallTop );
setBoxBorderMetrics( Q::Panel, { 0, 0, 0, 1_dp } );
setBoxBorderMetrics( Q::Panel, { 0, 0, 0, 1_px } );
setBoxBorderColors( Q::Panel, m_pal.onSurfaceVariant );
setSpacing( Q::Panel, 8_dp );
setSpacing( Q::Panel, 8_px );
const auto hoverColor = flattenedColor( m_pal.onSurfaceVariant,
m_pal.surfaceVariant, m_pal.hoverOpacity );
@ -471,7 +456,7 @@ void Editor::setupTextField()
// ### Also add a pressed state
setColor( Q::Text, m_pal.onSurface );
setFontRole( Q::Text, BodyMedium );
setFontRole( Q::Text, BodyLarge );
setAlignment( Q::Text, Qt::AlignLeft | Qt::AlignVCenter );
setAlignment( Q::PlaceholderText, Qt::AlignLeft | Qt::AlignVCenter );
@ -485,7 +470,7 @@ void Editor::setupTextField()
// PlaceholderText
setColor( Q::PlaceholderText, color( Q::Text ) );
setFontRole( Q::PlaceholderText, fontRole( Q::Text ) );
setFontRole( Q::PlaceholderText, BodyLarge );
setAlignment( Q::PlaceholderText, alignment( Q::Text ) );
}
@ -497,7 +482,7 @@ void Editor::setupProgressBar()
for ( auto subControl : { Q::Groove, Q::Fill } )
{
setBoxShape( subControl, { 100, Qt::RelativeSize } );
setMetric( subControl | A::Size, 4_dp );
setMetric( subControl | A::Size, 4_px );
}
setGradient( Q::Groove, m_pal.surfaceContainerHighest );
@ -511,13 +496,13 @@ void Editor::setupProgressRing()
{
using Q = QskProgressRing;
setArcMetrics( Q::Groove, 90, -360, 4_dp );
setArcMetrics( Q::Groove, 90, -360, 4_px );
setGradient( Q::Groove, m_pal.surfaceContainerHighest );
setGradient( Q::Groove | Q::Disabled, m_pal.onSurface12 );
setSpacing( Q::Fill, 10 );
setStrutSize( Q::Fill, { 48_dp, 48_dp } );
setArcMetrics( Q::Fill, 90, -360, 4_dp );
setStrutSize( Q::Fill, { 48_px, 48_px } );
setArcMetrics( Q::Fill, 90, -360, 4_px );
setGradient( Q::Fill, m_pal.primary );
setGradient( Q::Fill | Q::Disabled, m_pal.onSurface38 );
}
@ -527,17 +512,17 @@ void Editor::setupRadioBox()
using Q = QskRadioBox;
using A = QskAspect;
setSpacing( Q::Panel, 10_dp );
setSpacing( Q::Button, 10_dp );
setSpacing( Q::Panel, 6_px );
setSpacing( Q::Button, 10_px );
setStrutSize( Q::CheckIndicatorPanel, 20_dp, 20_dp );
setStrutSize( Q::CheckIndicatorPanel, 20_px, 20_px );
for ( auto subControl : { Q::CheckIndicatorPanel, Q::CheckIndicator } )
setBoxShape( subControl, 100, Qt::RelativeSize ); // circular
setBoxBorderMetrics( Q::CheckIndicatorPanel, 2_dp );
setBoxBorderMetrics( Q::CheckIndicatorPanel, 2_px );
setBoxBorderColors( Q::CheckIndicatorPanel, m_pal.onBackground );
setPadding( Q::CheckIndicatorPanel, 5_dp );
setPadding( Q::CheckIndicatorPanel, 5_px );
setGradient( Q::Button, QskGradient() );
@ -550,7 +535,7 @@ void Editor::setupRadioBox()
{
const auto aspect = Q::CheckIndicatorPanel | state1 | state2;
setShadowMetrics( aspect, { 10_dp, 0 } );
setShadowMetrics( aspect, { 10_px, 0 } );
auto rgb = ( state2 == Q::Selected ) ? m_pal.primary : m_pal.onSurface;
rgb = stateLayerColor( rgb, m_pal.stateOpacity( state1 ) );
@ -584,19 +569,19 @@ void Editor::setupSegmentedBar()
using A = QskAspect;
using Q = QskSegmentedBar;
const QSizeF panelStrutSize( -1, 48_dp );
const QSizeF segmentStrutSize( 48_dp, 40_dp );
const QSizeF panelStrutSize( -1, 48_px );
const QSizeF segmentStrutSize( 48_px, 40_px );
{
// Container
setGradient( Q::Panel, Qt::transparent );
setPadding( Q::Panel, 0 );
setSpacing( Q::Panel, 8_dp );
setSpacing( Q::Panel, 8_px );
setBoxShape( Q::Panel, 100, Qt::RelativeSize );
setBoxBorderMetrics( Q::Panel, 1_dp );
setBoxBorderMetrics( Q::Panel, 1_px );
setBoxBorderColors( Q::Panel, m_pal.outline );
setBoxBorderColors( Q::Panel | Q::Disabled, m_pal.onSurface12 );
@ -625,15 +610,15 @@ void Editor::setupSegmentedBar()
setGradient( Q::Segment | Q::Selected | Q::Disabled, m_pal.onSurface12 );
setPadding( Q::Segment | A::Horizontal, 12_dp, 0, 12_dp, 0 );
setPadding( Q::Segment | A::Vertical, 0, 12_dp, 0, 12_dp );
setPadding( Q::Segment | A::Horizontal, 12_px, 0, 12_px, 0 );
setPadding( Q::Segment | A::Vertical, 0, 12_px, 0, 12_px );
}
{
// Separator
setStrutSize( Q::Separator | A::Horizontal, 1_dp, segmentStrutSize.height() );
setStrutSize( Q::Separator | A::Vertical, segmentStrutSize.height(), 1_dp );
setStrutSize( Q::Separator | A::Horizontal, 1_px, segmentStrutSize.height() );
setStrutSize( Q::Separator | A::Vertical, segmentStrutSize.height(), 1_px );
setPadding( Q::Separator, 0 );
setGradient( Q::Separator, m_pal.outline );
setColor( Q::Separator | Q::Disabled, m_pal.onSurface12 );
@ -663,7 +648,7 @@ void Editor::setupSegmentedBar()
// Icon
setSymbol( Q::Icon, symbol( "check" ) );
setStrutSize( Q::Icon, 18_dp, 18_dp );
setStrutSize( Q::Icon, 18_px, 18_px );
setGraphicRole( Q::Icon, QskMaterial3Skin::GraphicRoleOnSurface );
setGraphicRole( Q::Icon | Q::Selected,
@ -681,7 +666,7 @@ void Editor::setupSeparator()
{
const auto aspect = Q::Panel | variation;
setMetric( aspect | A::Size, 1_dp );
setMetric( aspect | A::Size, 1_px );
setBoxShape( Q::Panel, 0 );
setBoxBorderMetrics( Q::Panel, 0 );
setGradient( aspect, m_pal.outlineVariant );
@ -692,12 +677,12 @@ void Editor::setupPageIndicator()
{
using Q = QskPageIndicator;
const auto extent = 9_dp;
const auto extent = 9_px;
setStrutSize( Q::Bullet, extent, extent );
// circles, without border
setBoxShape( Q::Bullet, 100, Qt::RelativeSize );
setBoxBorderMetrics( Q::Bullet, 0 );
setBoxBorderMetrics( Q::Bullet, 0_px );
setGradient( Q::Bullet, m_pal.primaryContainer );
setGradient( Q::Bullet | Q::Selected, m_pal.primary );
@ -705,8 +690,8 @@ void Editor::setupPageIndicator()
setGradient( Q::Bullet | Q::Disabled, m_pal.onSurface12 );
setGradient( Q::Bullet | Q::Selected | Q::Disabled, m_pal.onSurface38 );
setSpacing( Q::Panel, 3_dp );
setPadding( Q::Panel, 0 );
setSpacing( Q::Panel, 3_px );
setPadding( Q::Panel, 0_px );
setGradient( Q::Panel, QskGradient() ); // invisible
}
@ -720,20 +705,20 @@ void Editor::setupPushButton()
constexpr auto Text = QskAspect::Tiny;
setHint( Q::Panel | QskAspect::Direction, Qsk::LeftToRight );
setStrutSize( Q::Panel, -1, 40_dp );
setSpacing( Q::Panel, 8_dp );
setPadding( Q::Panel, { 24_dp, 0, 24_dp, 0 } );
setStrutSize( Q::Panel, -1, 40_px );
setSpacing( Q::Panel, 8_px );
setPadding( Q::Panel, { 24_px, 0, 24_px, 0 } );
setBoxShape( Q::Panel, 100, Qt::RelativeSize );
setShadowColor( Q::Panel, m_pal.shadow );
setStrutSize( Q::Icon, 18_dp, 18_dp );
setPadding( Q::Icon, { 0, 0, 8_dp, 0 } );
setStrutSize( Q::Icon, 18_px, 18_px );
setPadding( Q::Icon, { 0, 0, 8_px, 0 } );
setGraphicRole( Q::Icon, QskMaterial3Skin::GraphicRoleOnPrimary );
setFontRole( Q::Text, LabelLarge );
setPadding( Q::Text, 0 );
setBoxShape( Q::Splash, 40_dp );
setBoxShape( Q::Splash, 40_px );
setAnimation( Q::Splash | QskAspect::Color, qskDuration );
const auto checkedOpacity = m_pal.focusOpacity + m_pal.pressedOpacity;
@ -833,7 +818,7 @@ void Editor::setupPushButton()
setGradient( Q::Panel | Outlined, m_pal.surface );
setBoxBorderColors( Q::Panel | Outlined, m_pal.outline );
setBoxBorderMetrics( Q::Panel | Outlined, 1_dp );
setBoxBorderMetrics( Q::Panel | Outlined, 1_px );
setShadowMetrics( Q::Panel | Outlined, m_pal.elevation0 );
setColor( Q::Text | Outlined, m_pal.primary );
@ -919,8 +904,8 @@ void Editor::setupSlider()
using Q = QskSlider;
using SK = QskSliderSkinlet;
const auto extentGroove = 16_dp;
const auto extentPanel = 44_dp;
const auto extentGroove = 16_px;
const auto extentPanel = 44_px;
setStrutSize( Q::Panel | A::Horizontal, 3 * extentGroove, extentPanel );
setStrutSize( Q::Panel | A::Vertical, extentPanel, 3 * extentGroove );
@ -938,7 +923,7 @@ void Editor::setupSlider()
setBoxShape( Q::Groove, 100, Qt::RelativeSize );
setBoxShape( Q::Fill, 100, Qt::RelativeSize );
setStrutSize( Q::Tick, { 4_dp, 4_dp } );
setStrutSize( Q::Tick, { 4_px, 4_px } );
setBoxShape( Q::Tick, 100, Qt::RelativeSize );
setGradient( Q::Tick, m_pal.primary );
@ -954,8 +939,8 @@ void Editor::setupSlider()
for ( const auto variation : { A::Horizontal, A::Vertical } )
{
QSizeF handleSize( extentGroove, extentPanel );
QskMargins margin1{ 6_dp, 0_dp };
QskMargins margin2{ 7_dp, 0_dp };
QskMargins margin1{ 6_px, 0_px };
QskMargins margin2{ 7_px, 0_px };
if ( variation == A::Vertical )
{
@ -987,29 +972,29 @@ void Editor::setupSpinBox()
setHint( Q::Panel | QskAspect::Style, Q::ButtonsLeftAndRight );
setStrutSize( Q::Panel, -1.0, 48_dp );
setBoxShape( Q::Panel, 4_dp );
setBoxBorderMetrics( Q::Panel, 1_dp );
setStrutSize( Q::Panel, -1.0, 48_px );
setBoxShape( Q::Panel, 4_px );
setBoxBorderMetrics( Q::Panel, 1_px );
setBoxBorderColors( Q::Panel, m_pal.outline );
setBoxBorderColors( Q::Panel | Q::Focused, m_pal.primary,
Combination( { Q::Increasing, Q::Decreasing } ) );
setPadding( Q::Panel, 4_dp );
setSpacing( Q::Panel, 4_dp );
setPadding( Q::Panel, 4_px );
setSpacing( Q::Panel, 4_px );
setStrutSize( Q::TextPanel, 80_dp, 40_dp );
setStrutSize( Q::UpPanel, 40_dp, 40_dp );
setStrutSize( Q::DownPanel, 40_dp, 40_dp );
setStrutSize( Q::TextPanel, 80_px, 40_px );
setStrutSize( Q::UpPanel, 40_px, 40_px );
setStrutSize( Q::DownPanel, 40_px, 40_px );
setAlignment( Q::Text, Qt::AlignCenter );
for( const auto subControl : { Q::DownPanel, Q::UpPanel, Q::TextPanel } )
{
setBoxBorderMetrics( subControl, 1_dp );
setBoxBorderMetrics( subControl, 1_px );
}
setBoxShape( Q::TextPanel, 4_dp );
setBoxShape( Q::TextPanel, 4_px );
setBoxShape( Q::DownPanel, 100, Qt::RelativeSize );
setBoxShape( Q::UpPanel, 100, Qt::RelativeSize );
@ -1017,7 +1002,7 @@ void Editor::setupSpinBox()
for( const auto subControl : { Q::DownPanel, Q::UpPanel } )
{
setGradient( subControl | Q::Hovered, m_pal.primary8 );
setPadding( subControl, 11_dp );
setPadding( subControl, 11_px );
}
{
@ -1041,19 +1026,19 @@ void Editor::setupSpinBox()
setColor( Q::Text | Q::Disabled, m_pal.onSurface38 );
#if 0
setPadding( Q::TextPanel, 5_dp );
setBoxShape( Q::TextPanel, 4_dp, 4_dp, 0, 0 );
setBoxBorderMetrics( Q::TextPanel, 0, 0, 0, 1_dp );
setPadding( Q::TextPanel, 5_px );
setBoxShape( Q::TextPanel, 4_px, 4_px, 0, 0 );
setBoxBorderMetrics( Q::TextPanel, 0, 0, 0, 1_px );
setBoxBorderColors( Q::TextPanel, m_pal.onSurface );
setBoxBorderMetrics( Q::TextPanel | Q::Focused, 0, 0, 0, 2_dp );
setBoxBorderMetrics( Q::TextPanel | Q::Focused, 0, 0, 0, 2_px );
setBoxBorderColors( Q::TextPanel | Q::Focused, m_pal.primary );
setGradient( Q::TextPanel, m_pal.surfaceVariant );
const auto c1 = QskRgb::toTransparentF( m_pal.onSurface, 0.04 );
setGradient( Q::TextPanel | Q::Disabled, c1 );
setBoxBorderMetrics( Q::TextPanel | Q::Disabled, 0, 0, 0, 1_dp );
setBoxBorderMetrics( Q::TextPanel | Q::Disabled, 0, 0, 0, 1_px );
setColor( Q::TextPanel | Q::Disabled, m_pal.onSurface38 );
setBoxBorderColors( Q::TextPanel | Q::Disabled, m_pal.onSurface38 );
@ -1066,7 +1051,7 @@ void Editor::setupSwitchButton()
using Q = QskSwitchButton;
setBoxShape( Q::Groove, 100, Qt::RelativeSize );
const QSizeF strutSize( 52_dp, 32_dp );
const QSizeF strutSize( 52_px, 32_px );
setStrutSize( Q::Groove | A::Horizontal, strutSize );
setStrutSize( Q::Groove | A::Vertical, strutSize.transposed() );
setGradient( Q::Groove, m_pal.surfaceVariant );
@ -1075,23 +1060,23 @@ void Editor::setupSwitchButton()
setGradient( Q::Groove | Q::Checked, m_pal.primary );
setGradient( Q::Groove | Q::Checked | Q::Disabled, m_pal.onSurface12 );
setBoxBorderMetrics( Q::Groove, 2_dp );
setBoxBorderMetrics( Q::Groove, 2_px );
setBoxBorderColors( Q::Groove, m_pal.outline );
setBoxBorderColors( Q::Groove | Q::Disabled, m_pal.onSurface12 );
setBoxBorderMetrics( Q::Groove | Q::Checked, 0 );
setBoxShape( Q::Handle, 100, Qt::RelativeSize );
setStrutSize( Q::Handle, { 30_dp, 30_dp } );
setMargin( Q::Handle, 7_dp );
setShadowMetrics( Q::Handle, { 17_dp, 0 } );
setStrutSize( Q::Handle, { 28_px, 28_px } );
setMargin( Q::Handle, 7_px );
setShadowMetrics( Q::Handle, { 17_px, 0 } );
setShadowColor( Q::Handle, QskRgb::Transparent );
setGradient( Q::Handle, m_pal.outline );
setGradient( Q::Handle | Q::Checked, m_pal.onPrimary );
setStrutSize( Q::Icon, { 16_dp, 16_dp } );
setPadding( Q::Icon, 6_dp );
setStrutSize( Q::Icon, { 16_px, 16_px } );
setPadding( Q::Icon, 6_px );
setSymbol( Q::Icon, symbol( "switchbutton-unchecked" ) );
setSymbol( Q::Icon | Q::Checked, symbol( "switchbutton-checked" ) );
@ -1111,13 +1096,13 @@ void Editor::setupSwitchButton()
if ( state1 == Q::Pressed )
{
setShadowMetrics( aspect, { 10_dp, 0 } );
setShadowMetrics( aspect, { 10_px, 0 } );
setMargin( aspect, 0.0 );
}
else if ( state2 == Q::Checked )
{
setShadowMetrics( aspect, { 13_dp, 0 } );
setMargin( aspect, 3_dp );
setShadowMetrics( aspect, { 13_px, 0 } );
setMargin( aspect, 3_px );
}
if ( state1 )
@ -1160,7 +1145,7 @@ void Editor::setupTabButton()
using A = QskAspect;
using Q = QskTabButton;
setStrutSize( Q::Panel, 48_dp, 64_dp );
setStrutSize( Q::Panel, 48_px, 48_px );
#if 1
// couldn't find a value in the specs
setPadding( Q::Panel, 8, 0, 8, 0 );
@ -1176,7 +1161,7 @@ void Editor::setupTabButton()
setColor( Q::Text | Q::Hovered, m_pal.primary );
QskBoxBorderMetrics border;
border.setWidthAt( Qt::BottomEdge, 3_dp );
border.setWidthAt( Qt::BottomEdge, 3_px );
setBoxBorderMetrics( Q::Panel, border );
QskBoxBorderColors borderColors( m_pal.surface );
@ -1211,7 +1196,7 @@ void Editor::setupTabButton()
setAnimation( Q::Panel | A::Color, qskDuration );
setFontRole( Q::Text, LabelLarge );
setFontRole( Q::Text, TitleSmall );
setAlignment( Q::Text, Qt::AlignCenter );
}
@ -1256,11 +1241,11 @@ void Editor::setupVirtualKeyboard()
using Q = QskVirtualKeyboard;
// key panel
setMargin( Q::ButtonPanel, 5_dp );
setMargin( Q::ButtonPanel, 5_px );
setGradient( Q::ButtonPanel, m_pal.surface2 );
setGradient( Q::ButtonPanel | QskPushButton::Pressed, m_pal.surface );
setColor( Q::ButtonText | QskPushButton::Pressed, m_pal.outlineVariant );
setBoxShape( Q::ButtonPanel, 6_dp );
setBoxShape( Q::ButtonPanel, 6_px );
setBoxShape( Q::ButtonPanel | A::Huge, 100, Qt::RelativeSize );
setGradient( Q::ButtonPanel | A::Huge, m_pal.primary );
@ -1286,7 +1271,7 @@ void Editor::setupVirtualKeyboard()
// panel
setGradient( Q::Panel, m_pal.background );
setPadding( Q::Panel, { 3_dp, 25_dp, 3_dp, 5_dp } );
setPadding( Q::Panel, { 3_px, 25_px, 3_px, 5_px } );
}
void Editor::setupScrollView()
@ -1299,11 +1284,11 @@ void Editor::setupScrollView()
for ( auto subControl : { Q::HorizontalScrollBar, Q::VerticalScrollBar } )
{
setMetric( subControl | A::Size, 6_dp );
setMetric( subControl | A::Size, 6_px );
setPadding( subControl, 0 );
}
const auto handleExtent = 40_dp;
const auto handleExtent = 40_px;
setStrutSize( Q::HorizontalScrollHandle, handleExtent, 0.0 );
setStrutSize( Q::VerticalScrollHandle, 0.0, handleExtent );
@ -1324,8 +1309,8 @@ void Editor::setupListView()
using Q = QskListView;
using A = QskAspect;
setStrutSize( Q::Cell, { -1, 56_dp } );
setPadding( Q::Cell, { 16_dp, 8_dp, 24_dp, 8_dp } );
setStrutSize( Q::Cell, { -1, 56_px } );
setPadding( Q::Cell, { 16_px, 8_px, 24_px, 8_px } );
setBoxBorderColors( Q::Cell, m_pal.outline );
@ -1376,7 +1361,7 @@ void Editor::setupListView()
}
}
setFontRole( Q::Text, BodyMedium );
setFontRole( Q::Text, BodyLarge );
setColor( Q::Text, m_pal.onSurface );
setColor( Q::Text | Q::Disabled, m_pal.onSurface38 );
@ -1394,17 +1379,17 @@ void Editor::setupSubWindow()
// Panel
setPadding( Q::Panel, { 24_dp, 0, 24_dp, 24_dp } );
setStrutSize( Q::Panel, { 280_dp, -1 } );
setBoxShape( Q::Panel, 28_dp );
setPadding( Q::Panel, { 24_px, 0, 24_px, 24_px } );
setStrutSize( Q::Panel, { 280_px, -1 } );
setBoxShape( Q::Panel, 28_px );
setBoxBorderMetrics( Q::Panel, 0 );
setGradient( Q::Panel, m_pal.secondaryContainer );
setShadowMetrics( Q::Panel, m_pal.elevation3 );
setShadowColor( Q::Panel, m_pal.shadow );
// TitleBarPanel
setBoxShape( Q::TitleBarPanel, { 28_dp, 28_dp, 0, 0 } );
setPadding( Q::TitleBarPanel, { 24_dp, 24_dp, 24_dp, 16_dp } );
setBoxShape( Q::TitleBarPanel, { 28_px, 28_px, 0, 0 } );
setPadding( Q::TitleBarPanel, { 24_px, 24_px, 24_px, 16_px } );
setHint( Q::TitleBarPanel | QskAspect::Style, Q::NoDecoration );
setGradient( Q::TitleBarPanel, m_pal.secondaryContainer );
@ -1584,7 +1569,7 @@ QskMaterial3Theme::QskMaterial3Theme( QskSkin::ColorScheme colorScheme,
elevation2 = QskShadowMetrics( -2, 8, { 0, 2 } );
elevation3 = QskShadowMetrics( -1, 11, { 0, 2 } );
shapeExtraSmallTop = QskBoxShapeMetrics( 4_dp, 4_dp, 0, 0 );
shapeExtraSmallTop = QskBoxShapeMetrics( 4_px, 4_px, 0, 0 );
}
qreal QskMaterial3Theme::stateOpacity( int state ) const
@ -1633,7 +1618,7 @@ QskMaterial3Skin::~QskMaterial3Skin()
{
}
static inline QFont createFont( qreal size, int lineHeight,
static inline QFont createFont( qreal size, qreal lineHeight,
qreal spacing, QFont::Weight weight )
{
Q_UNUSED( lineHeight );
@ -1652,8 +1637,7 @@ static inline QFont createFont( qreal size, int lineHeight,
checkFont = false;
}
// px: 1/96 inch, pt: 1/72 inch
font.setPointSize( size * 72.0 / 96.0 );
font.setPointSizeF( size );
if ( spacing > 0.0 )
font.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
@ -1668,30 +1652,30 @@ void QskMaterial3Skin::setupFonts()
From the results on our desktop system we guess they are in pt
- corresponding to the QFont point size.
*/
setFont( LabelSmall, createFont( 11, 16_dp, 0.5, QFont::Medium ) );
setFont( LabelMedium, createFont( 12, 16_dp, 0.5, QFont::Medium ) );
setFont( LabelLarge, createFont( 14, 20_dp, 0.1, QFont::Medium ) );
setFont( LabelSmall, createFont( 11_pt, 16_pt, 0.5_pt, QFont::Medium ) );
setFont( LabelMedium, createFont( 12_pt, 16_pt, 0.5_pt, QFont::Medium ) );
setFont( LabelLarge, createFont( 14_pt, 20_pt, 0.1_pt, QFont::Medium ) );
setFont( BodySmall, createFont( 12, 16_dp, 0.4, QFont::Normal ) );
setFont( BodyMedium, createFont( 14, 20_dp, 0.25, QFont::Normal ) );
setFont( BodyLarge, createFont( 16, 24_dp, 0.5, QFont::Normal ) );
setFont( BodySmall, createFont( 12_pt, 16_pt, 0.4_pt, QFont::Normal ) );
setFont( BodyMedium, createFont( 14_pt, 20_pt, 0.25_pt, QFont::Normal ) );
setFont( BodyLarge, createFont( 16_pt, 24_pt, 0.5_pt, QFont::Normal ) );
setFont( TitleSmall, createFont( 14, 20_dp, 0.1, QFont::Medium ) );
setFont( TitleMedium, createFont( 16, 24_dp, 0.15, QFont::Medium ) );
setFont( TitleLarge, createFont( 22, 28_dp, 0.0, QFont::Normal ) );
setFont( TitleSmall, createFont( 14_pt, 20_pt, 0.1_pt, QFont::Medium ) );
setFont( TitleMedium, createFont( 16_pt, 24_pt, 0.15_pt, QFont::Medium ) );
setFont( TitleLarge, createFont( 22_pt, 28_pt, 0.0_pt, QFont::Normal ) );
setFont( HeadlineSmall, createFont( 24, 32_dp, 0.0, QFont::Normal ) );
setFont( HeadlineMedium, createFont( 28, 36_dp, 0.0, QFont::Medium ) );
setFont( HeadlineLarge, createFont( 32, 40_dp, 0.0, QFont::Medium ) );
setFont( HeadlineSmall, createFont( 24_pt, 32_pt, 0.0_pt, QFont::Normal ) );
setFont( HeadlineMedium, createFont( 28_pt, 36_pt, 0.0_pt, QFont::Medium ) );
setFont( HeadlineLarge, createFont( 32_pt, 40_pt, 0.0_pt, QFont::Medium ) );
setFont( DisplaySmall, createFont( 36, 44_dp, 0.0, QFont::Normal ) );
setFont( DisplayMedium, createFont( 45, 52_dp, 0.0, QFont::Normal ) );
setFont( DisplayLarge, createFont( 57, 64_dp, 0.0, QFont::Normal ) );
setFont( DisplaySmall, createFont( 36_pt, 44_pt, 0.0_pt, QFont::Normal ) );
setFont( DisplayMedium, createFont( 45_pt, 52_pt, 0.0_pt, QFont::Normal ) );
setFont( DisplayLarge, createFont( 57_pt, 64_pt, 0.0_pt, QFont::Normal ) );
// to have something for the unused roles
setFont( { QskFontRole::Subtitle, QskFontRole::Normal },
createFont( 16, 24_dp, 0.0, QFont::Normal ) );
createFont( 16_pt, 24_pt, 0_pt, QFont::Normal ) );
QskSkin::completeFontTable();
}

View File

@ -38,7 +38,7 @@ namespace
: ButtonBox( Qt::Horizontal, 3, parent )
{
setDefaultAlignment( Qt::AlignCenter );
setSpacing( 25 );
setSpacing( 10 );
populate();
}