2023-04-13 17:19:36 +02:00
|
|
|
/******************************************************************************
|
2023-05-12 14:26:24 +02:00
|
|
|
* QSkinny - Copyright (C) 2023 Edelhirsch Software GmbH
|
2023-04-13 17:19:36 +02:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2023-07-02 12:18:47 +02:00
|
|
|
/*
|
|
|
|
Definitions ( where possible ) taken from
|
|
|
|
https://www.figma.com/file/NAWMapFlXnoOb86Q2H5GKr/Windows-UI-(Community)
|
|
|
|
*/
|
2023-06-17 12:23:34 +02:00
|
|
|
#include "QskFluent2Skin.h"
|
2023-07-02 12:18:47 +02:00
|
|
|
#include "QskFluent2Theme.h"
|
2023-04-13 17:19:36 +02:00
|
|
|
|
|
|
|
#include <QskSkinHintTableEditor.h>
|
|
|
|
|
|
|
|
#include <QskBox.h>
|
|
|
|
#include <QskCheckBox.h>
|
|
|
|
#include <QskComboBox.h>
|
|
|
|
#include <QskDialogButtonBox.h>
|
|
|
|
#include <QskFocusIndicator.h>
|
|
|
|
#include <QskListView.h>
|
|
|
|
#include <QskMenu.h>
|
|
|
|
#include <QskPageIndicator.h>
|
|
|
|
#include <QskPushButton.h>
|
|
|
|
#include <QskProgressBar.h>
|
|
|
|
#include <QskRadioBox.h>
|
|
|
|
#include <QskScrollView.h>
|
|
|
|
#include <QskSegmentedBar.h>
|
|
|
|
#include <QskSeparator.h>
|
|
|
|
#include <QskShadowMetrics.h>
|
|
|
|
#include <QskSlider.h>
|
|
|
|
#include <QskSpinBox.h>
|
|
|
|
#include <QskStandardSymbol.h>
|
|
|
|
#include <QskSubWindow.h>
|
|
|
|
#include <QskSwitchButton.h>
|
|
|
|
#include <QskSwitchButtonSkinlet.h>
|
|
|
|
#include <QskTabBar.h>
|
|
|
|
#include <QskTabButton.h>
|
|
|
|
#include <QskTabView.h>
|
|
|
|
#include <QskTextInput.h>
|
|
|
|
#include <QskTextLabel.h>
|
|
|
|
#include <QskVirtualKeyboard.h>
|
|
|
|
|
|
|
|
#include <QskAnimationHint.h>
|
|
|
|
#include <QskAspect.h>
|
|
|
|
#include <QskBoxBorderColors.h>
|
|
|
|
#include <QskBoxBorderMetrics.h>
|
|
|
|
#include <QskBoxShapeMetrics.h>
|
2023-07-02 12:18:47 +02:00
|
|
|
#include <QskColorFilter.h>
|
|
|
|
#include <QskFunctions.h>
|
|
|
|
#include <QskGraphic.h>
|
|
|
|
#include <QskGraphicIO.h>
|
2023-04-13 17:19:36 +02:00
|
|
|
#include <QskMargins.h>
|
|
|
|
#include <QskRgbValue.h>
|
|
|
|
|
|
|
|
#include <QskNamespace.h>
|
|
|
|
#include <QskPlatform.h>
|
|
|
|
|
|
|
|
#include <QGuiApplication>
|
|
|
|
#include <QScreen>
|
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
2023-07-02 12:18:47 +02:00
|
|
|
inline QFont createFont( const QString& name, qreal lineHeight,
|
|
|
|
qreal size, qreal tracking, QFont::Weight weight )
|
|
|
|
{
|
|
|
|
QFont font( name, qRound( size ) );
|
|
|
|
font.setPixelSize( qRound( lineHeight ) );
|
|
|
|
|
|
|
|
if( !qskFuzzyCompare( tracking, 0.0 ) )
|
|
|
|
font.setLetterSpacing( QFont::AbsoluteSpacing, tracking );
|
|
|
|
|
|
|
|
font.setWeight( weight );
|
|
|
|
|
|
|
|
return font;
|
|
|
|
}
|
|
|
|
|
2023-06-20 17:41:08 +02:00
|
|
|
inline constexpr QRgb rgbGray( int value, qreal opacity = 1.0 )
|
|
|
|
{
|
|
|
|
return qRgba( value, value, value, qRound( opacity * 255 ) );
|
|
|
|
}
|
|
|
|
|
2023-05-12 16:27:20 +02:00
|
|
|
inline QRgb flattenedColor( QRgb foregroundColor, QRgb backgroundColor )
|
|
|
|
{
|
|
|
|
const qreal alphaRatio = ( ( foregroundColor & QskRgb::AlphaMask ) >> 24 ) / 255.0;
|
|
|
|
return QskRgb::interpolated( backgroundColor, foregroundColor, alphaRatio );
|
|
|
|
}
|
|
|
|
|
2023-04-13 17:19:36 +02:00
|
|
|
class Editor : private QskSkinHintTableEditor
|
|
|
|
{
|
|
|
|
public:
|
2023-06-17 12:23:34 +02:00
|
|
|
Editor( QskSkinHintTable* table, const QskFluent2Theme& palette )
|
2023-04-13 17:19:36 +02:00
|
|
|
: QskSkinHintTableEditor( table )
|
|
|
|
, theme( palette )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void setup();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void setupBox();
|
|
|
|
void setupCheckBox();
|
|
|
|
void setupComboBox();
|
|
|
|
void setupDialogButtonBox();
|
|
|
|
void setupFocusIndicator();
|
|
|
|
void setupInputPanel();
|
|
|
|
void setupListView();
|
|
|
|
void setupMenu();
|
|
|
|
void setupPageIndicator();
|
|
|
|
void setupPopup();
|
|
|
|
void setupProgressBar();
|
|
|
|
void setupPushButton();
|
|
|
|
void setupRadioBox();
|
|
|
|
void setupScrollView();
|
|
|
|
void setupSegmentedBar();
|
|
|
|
void setupSeparator();
|
|
|
|
void setupSlider();
|
|
|
|
void setupSpinBox();
|
|
|
|
void setupSubWindow();
|
|
|
|
void setupSwitchButton();
|
|
|
|
void setupTabButton();
|
|
|
|
void setupTabBar();
|
|
|
|
void setupTabView();
|
|
|
|
void setupTextInput();
|
|
|
|
void setupTextLabel();
|
|
|
|
void setupVirtualKeyboard();
|
|
|
|
|
|
|
|
QskGraphic symbol( const char* name ) const
|
|
|
|
{
|
2023-06-17 12:23:34 +02:00
|
|
|
const QString path = QStringLiteral( ":fluent2/icons/qvg/" )
|
2023-04-13 17:19:36 +02:00
|
|
|
+ name + QStringLiteral( ".qvg" );
|
|
|
|
|
|
|
|
return QskGraphicIO::read( path );
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
void setBoxBorderGradient( QskAspect aspect, QskFluent2Theme::BorderGradient gradient, QRgb baseColor )
|
2023-05-12 16:27:20 +02:00
|
|
|
{
|
|
|
|
const QRgb leftTopRightColor = flattenedColor( gradient[ 0 ], baseColor );
|
|
|
|
const QRgb bottomColor = flattenedColor( gradient[ 1 ], baseColor );
|
|
|
|
|
|
|
|
setBoxBorderColors( aspect, { leftTopRightColor, leftTopRightColor, leftTopRightColor, bottomColor } );
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
const QskFluent2Theme& theme;
|
2023-04-13 17:19:36 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setup()
|
|
|
|
{
|
|
|
|
setupBox();
|
|
|
|
setupCheckBox();
|
|
|
|
setupComboBox();
|
|
|
|
setupDialogButtonBox();
|
|
|
|
setupFocusIndicator();
|
|
|
|
setupInputPanel();
|
|
|
|
setupListView();
|
|
|
|
setupMenu();
|
|
|
|
setupPageIndicator();
|
|
|
|
setupPopup();
|
|
|
|
setupProgressBar();
|
|
|
|
setupPushButton();
|
|
|
|
setupRadioBox();
|
|
|
|
setupScrollView();
|
|
|
|
setupSegmentedBar();
|
|
|
|
setupSeparator();
|
|
|
|
setupSlider();
|
|
|
|
setupSpinBox();
|
|
|
|
setupSubWindow();
|
|
|
|
setupSwitchButton();
|
|
|
|
setupTabButton();
|
|
|
|
setupTabBar();
|
|
|
|
setupTabView();
|
|
|
|
setupTextInput();
|
|
|
|
setupTextLabel();
|
|
|
|
setupVirtualKeyboard();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupBox()
|
|
|
|
{
|
2023-04-29 10:38:55 +02:00
|
|
|
using Q = QskBox;
|
|
|
|
using A = QskAspect;
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel, pal.background.solid.base );
|
|
|
|
setGradient( Q::Panel | A::Header, pal.background.solid.tertiary );
|
|
|
|
setGradient( Q::Panel | A::Footer, pal.background.solid.tertiary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupCheckBox()
|
|
|
|
{
|
2023-05-01 19:34:36 +02:00
|
|
|
using Q = QskCheckBox;
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
|
|
|
|
2023-05-01 19:34:36 +02:00
|
|
|
setStrutSize( Q::Panel, 126, 38 );
|
|
|
|
setSpacing( Q::Panel, 8 );
|
|
|
|
|
|
|
|
setStrutSize( Q::Box, { 20, 20 } ); // 18 + 2*1 border
|
|
|
|
setBoxShape( Q::Box, 4 ); // adapt to us taking the border into account
|
|
|
|
setBoxBorderMetrics( Q::Box, 1 );
|
|
|
|
setPadding( Q::Box, 5 ); // "icon size"
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box, pal.fillColor.controlAlt.secondary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Box, pal.strokeColor.controlStrong.defaultColor );
|
2023-05-01 19:34:36 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Checked, pal.fillColor.accent.defaultColor );
|
|
|
|
setBoxBorderColors( Q::Box | Q::Checked, pal.fillColor.accent.defaultColor );
|
2023-05-01 19:34:36 +02:00
|
|
|
|
|
|
|
const auto checkMark = symbol( "checkmark" );
|
|
|
|
setSymbol( Q::Indicator | Q::Checked, checkMark, { QskStateCombination::CombinationNoState, Q::Disabled } );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Indicator, QskFluent2Skin::GraphicRoleFillColorTextOnAccentPrimary );
|
2023-05-01 19:34:36 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-05-01 19:34:36 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Hovered, pal.fillColor.controlAlt.tertiary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Box | Q::Hovered, pal.strokeColor.controlStrong.defaultColor );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Hovered | Q::Checked, pal.fillColor.accent.secondary );
|
|
|
|
setBoxBorderColors( Q::Box | Q::Hovered | Q::Checked, pal.fillColor.accent.secondary );
|
2023-05-01 19:34:36 +02:00
|
|
|
// indicator the same as in Rest state
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Pressed, pal.fillColor.controlAlt.quaternary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Box | Q::Pressed, pal.strokeColor.controlStrong.disabled );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Pressed | Q::Checked, pal.fillColor.accent.tertiary );
|
|
|
|
setBoxBorderColors( Q::Box | Q::Pressed | Q::Checked, pal.fillColor.accent.tertiary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Indicator | Q::Pressed | Q::Checked, QskFluent2Skin::GraphicRoleFillColorTextOnAccentSecondary );
|
2023-05-01 19:34:36 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Disabled, pal.fillColor.controlAlt.disabled );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Box | Q::Disabled, pal.strokeColor.controlStrong.disabled );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Box | Q::Disabled | Q::Checked, pal.fillColor.accent.disabled );
|
|
|
|
setBoxBorderColors( Q::Box | Q::Disabled | Q::Checked, pal.fillColor.accent.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Indicator | Q::Disabled | Q::Checked, QskFluent2Skin::GraphicRoleFillColorTextOnAccentDisabled );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupComboBox()
|
|
|
|
{
|
2023-06-05 17:05:46 +02:00
|
|
|
using Q = QskComboBox;
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
|
|
|
|
2023-06-05 17:05:46 +02:00
|
|
|
setStrutSize( Q::Panel, { -1, 32 } );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
|
|
|
setBoxShape( Q::Panel, 3 );
|
|
|
|
setPadding( Q::Panel, { 11, 0, 11, 0 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel, pal.fillColor.control.defaultColor );
|
|
|
|
setBoxBorderGradient( Q::Panel, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.defaultColor );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Icon, 12, 12 );
|
|
|
|
setPadding( Q::Icon, { 0, 0, 8, 0 } );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon, QskFluent2Skin::GraphicRoleFillColorTextPrimary );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
setAlignment( Q::Text, Qt::AlignLeft | Qt::AlignVCenter );
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::StatusIndicator, 12, 12 );
|
|
|
|
setSymbol( Q::StatusIndicator, symbol( "spin-box-arrow-down" ) );
|
|
|
|
setSymbol( Q::StatusIndicator | Q::PopupOpen, symbol( "spin-box-arrow-up" ) );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::StatusIndicator, QskFluent2Skin::GraphicRoleFillColorTextSecondary );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
// Hovered:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Hovered, pal.fillColor.control.secondary );
|
|
|
|
setBoxBorderGradient( Q::Panel | Q::Hovered, pal.elevation.textControl.border,
|
|
|
|
pal.fillColor.control.secondary );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
// Focused (Pressed doesn't exist yet):
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::Panel | Q::Focused, { 1, 1, 1, 2 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Focused, pal.fillColor.control.inputActive );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
auto gradient = pal.elevation.textControl.border;
|
|
|
|
gradient.at( 1 ) = pal.fillColor.accent.defaultColor;
|
2023-06-05 17:05:46 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | Q::Focused, gradient, pal.fillColor.control.inputActive );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
// Disabled:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Disabled, pal.fillColor.control.disabled );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel | Q::Disabled, pal.strokeColor.control.defaultColor );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::StatusIndicator | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupDialogButtonBox()
|
|
|
|
{
|
2023-06-09 10:34:19 +02:00
|
|
|
using Q = QskDialogButtonBox;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-09 10:34:19 +02:00
|
|
|
|
|
|
|
setPadding( Q::Panel, 24 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel, pal.background.solid.base );
|
2023-06-09 10:34:19 +02:00
|
|
|
setPadding(Q::Panel, 20 );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupFocusIndicator()
|
|
|
|
{
|
2023-05-12 14:33:39 +02:00
|
|
|
using Q = QskFocusIndicator;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-12 14:33:39 +02:00
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::Panel, 2 );
|
|
|
|
setPadding( Q::Panel, 3 );
|
|
|
|
setBoxShape( Q::Panel, 4 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel, pal.strokeColor.focus.outer );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupInputPanel()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupListView()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupMenu()
|
|
|
|
{
|
2023-05-06 15:46:12 +02:00
|
|
|
using Q = QskMenu;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-06 15:46:12 +02:00
|
|
|
|
2023-06-05 17:05:46 +02:00
|
|
|
setPadding( Q::Panel, { 4, 6, 4, 6 } );
|
2023-05-06 15:46:12 +02:00
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel, pal.strokeColor.surface.flyout );
|
2023-05-06 15:46:12 +02:00
|
|
|
setBoxShape( Q::Panel, 7 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel, pal.background.flyout.defaultColor );
|
|
|
|
setShadowMetrics( Q::Panel, theme.shadow.flyout.metrics );
|
|
|
|
setShadowColor( Q::Panel, theme.shadow.flyout.color );
|
2023-05-06 15:46:12 +02:00
|
|
|
|
|
|
|
setPadding( Q::Segment, { 0, 10, 0, 10 } );
|
|
|
|
setSpacing( Q::Segment, 15 );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Segment | Q::Selected, pal.fillColor.subtle.secondary );
|
2023-06-05 17:05:46 +02:00
|
|
|
setBoxBorderMetrics( Q::Segment | Q::Selected, { 3, 0, 0, 0 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
QskGradient selectedGradient( { { 0.0, pal.fillColor.subtle.secondary },
|
|
|
|
{ 0.25, pal.fillColor.subtle.secondary },
|
|
|
|
{ 0.25, pal.fillColor.accent.defaultColor },
|
|
|
|
{ 0.75, pal.fillColor.accent.defaultColor },
|
|
|
|
{ 0.75, pal.fillColor.subtle.secondary },
|
|
|
|
{ 1.0, pal.fillColor.subtle.secondary } } );
|
2023-06-05 17:05:46 +02:00
|
|
|
setBoxBorderColors( Q::Segment | Q::Selected, selectedGradient );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-06-05 17:05:46 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Icon, 12, 12 );
|
|
|
|
setPadding( Q::Icon, { 8, 8, 0, 8 } );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon, QskFluent2Skin::GraphicRoleFillColorTextPrimary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupPageIndicator()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupPopup()
|
|
|
|
{
|
2023-06-09 10:34:19 +02:00
|
|
|
using Q = QskPopup;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-09 10:34:19 +02:00
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Overlay, pal.background.overlay.defaultColor );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupProgressBar()
|
|
|
|
{
|
2023-06-02 15:14:13 +02:00
|
|
|
using Q = QskProgressBar;
|
|
|
|
using A = QskAspect;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-02 15:14:13 +02:00
|
|
|
|
|
|
|
setMetric( Q::Groove | A::Size, 1 );
|
|
|
|
setBoxShape( Q::Groove, 100, Qt::RelativeSize );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Groove, pal.strokeColor.controlStrong.defaultColor );
|
2023-06-02 15:14:13 +02:00
|
|
|
|
|
|
|
setMetric( Q::Bar| A::Size, 3 );
|
|
|
|
setBoxShape( Q::Bar, 100, Qt::RelativeSize );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Bar, pal.fillColor.accent.defaultColor );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupPushButton()
|
|
|
|
{
|
|
|
|
using Q = QskPushButton;
|
2023-06-17 12:23:34 +02:00
|
|
|
using W = QskFluent2Skin;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-04-13 17:19:36 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Panel, { 120, 32 } );
|
|
|
|
setBoxShape( Q::Panel, 4 );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
// Fluent buttons don't really have icons,
|
2023-05-08 17:35:14 +02:00
|
|
|
// but for the sake of compatibility with the
|
|
|
|
// gallery app, let's define their style here as well:
|
|
|
|
setStrutSize( Q::Icon, 12, 12 );
|
|
|
|
setPadding( Q::Icon, { 0, 0, 8, 0 } );
|
2023-04-13 17:19:36 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-04-13 17:19:36 +02:00
|
|
|
|
2023-04-30 10:15:17 +02:00
|
|
|
// Accent buttons:
|
2023-04-13 17:19:36 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | W::Accent, pal.elevation.accentControl.border,
|
|
|
|
pal.fillColor.accent.defaultColor );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | W::Accent, pal.fillColor.accent.defaultColor );
|
|
|
|
setColor( Q::Text | W::Accent, pal.fillColor.textOnAccent.primary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | W::Accent, QskFluent2Skin::GraphicRoleFillColorTextOnAccentPrimary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | W::Accent | Q::Hovered, pal.elevation.accentControl.border,
|
|
|
|
pal.fillColor.accent.secondary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | W::Accent | Q::Hovered, pal.fillColor.accent.secondary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | W::Accent | Q::Pressed, pal.fillColor.accent.tertiary );
|
|
|
|
setColor( Q::Text | W::Accent | Q::Pressed, pal.fillColor.textOnAccent.secondary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | W::Accent | Q::Pressed, QskFluent2Skin::GraphicRoleFillColorTextOnAccentSecondary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
const QRgb accentPressedBorderColor = flattenedColor( pal.strokeColor.control.onAccentDefault,
|
2023-06-20 16:52:42 +02:00
|
|
|
pal.fillColor.accent.tertiary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
setBoxBorderColors( Q::Panel | W::Accent | Q::Pressed, accentPressedBorderColor );
|
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | W::Accent | Q::Disabled, pal.fillColor.accent.disabled );
|
|
|
|
setColor( Q::Text | W::Accent | Q::Disabled, pal.fillColor.textOnAccent.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | W::Accent | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextOnAccentDisabled );
|
2023-04-30 10:15:17 +02:00
|
|
|
setBoxBorderMetrics( Q::Panel | W::Accent | Q::Disabled, 0 );
|
|
|
|
|
|
|
|
|
|
|
|
// Standard buttons:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.defaultColor );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel, pal.fillColor.control.defaultColor );
|
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon, QskFluent2Skin::GraphicRoleFillColorTextPrimary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | Q::Hovered, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.secondary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Hovered, pal.fillColor.control.secondary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
const QRgb standardPressedBorderColor = flattenedColor( pal.strokeColor.control.defaultColor,
|
2023-06-20 16:52:42 +02:00
|
|
|
pal.fillColor.control.tertiary );
|
2023-04-30 10:15:17 +02:00
|
|
|
|
|
|
|
setBoxBorderColors( Q::Panel | Q::Pressed, standardPressedBorderColor );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Pressed, pal.fillColor.control.tertiary );
|
|
|
|
setColor( Q::Text | Q::Pressed, pal.fillColor.text.secondary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Pressed, QskFluent2Skin::GraphicRoleFillColorTextSecondary );
|
2023-04-29 10:38:55 +02:00
|
|
|
|
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
const QRgb standardDisabledBorderColor = flattenedColor( pal.strokeColor.control.defaultColor,
|
2023-06-20 16:52:42 +02:00
|
|
|
pal.fillColor.control.disabled );
|
2023-04-29 10:38:55 +02:00
|
|
|
|
2023-04-30 10:15:17 +02:00
|
|
|
setBoxBorderColors( Q::Panel | Q::Disabled, standardDisabledBorderColor );
|
2023-04-29 10:38:55 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Disabled, pal.fillColor.control.disabled );
|
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupRadioBox()
|
|
|
|
{
|
2023-05-03 17:57:48 +02:00
|
|
|
using Q = QskRadioBox;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
setSpacing( Q::Button, 8 );
|
|
|
|
setStrutSize( Q::Button, { 115, 38 } );
|
|
|
|
|
|
|
|
setStrutSize( Q::CheckIndicatorPanel, { 20, 20 } );
|
|
|
|
setBoxShape( Q::CheckIndicatorPanel, 100, Qt::RelativeSize );
|
|
|
|
setBoxBorderMetrics( Q::CheckIndicatorPanel, 1 );
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
// Rest
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel, pal.fillColor.controlAlt.secondary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::CheckIndicatorPanel, pal.strokeColor.controlStrong.defaultColor );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Selected, pal.fillColor.accent.defaultColor );
|
2023-05-03 17:57:48 +02:00
|
|
|
setBoxBorderMetrics( Q::CheckIndicatorPanel | Q::Selected, 0 );
|
|
|
|
|
|
|
|
setPadding( Q::CheckIndicatorPanel | Q::Selected, { 5, 5 } ); // indicator "strut size"
|
|
|
|
|
|
|
|
setBoxShape( Q::CheckIndicator | Q::Selected, 100, Qt::RelativeSize );
|
|
|
|
setBoxBorderMetrics( Q::CheckIndicator | Q::Selected, 1 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicator | Q::Selected, pal.fillColor.textOnAccent.primary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::CheckIndicator | Q::Selected, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.defaultColor );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
// Hover
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Hovered, pal.fillColor.controlAlt.tertiary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Hovered | Q::Selected, pal.fillColor.accent.secondary );
|
2023-05-03 17:57:48 +02:00
|
|
|
setPadding( Q::CheckIndicatorPanel | Q::Hovered | Q::Selected, { 4, 4 } ); // indicator "strut size"
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::CheckIndicator | Q::Hovered, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.secondary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
// Pressed
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Pressed, pal.fillColor.controlAlt.quaternary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::CheckIndicatorPanel | Q::Pressed, pal.strokeColor.controlStrong.disabled );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
setPadding( Q::CheckIndicatorPanel | Q::Pressed, { 7, 7 } ); // indicator "strut size"
|
|
|
|
|
|
|
|
setBoxShape( Q::CheckIndicator | Q::Pressed, 100, Qt::RelativeSize );
|
|
|
|
setBoxBorderMetrics( Q::CheckIndicator | Q::Pressed, 0 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicator | Q::Pressed, pal.fillColor.textOnAccent.primary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Pressed | Q::Selected, pal.fillColor.accent.tertiary );
|
2023-05-03 17:57:48 +02:00
|
|
|
setBoxBorderMetrics( Q::CheckIndicatorPanel | Q::Pressed | Q::Selected, 0 );
|
|
|
|
|
|
|
|
setPadding( Q::CheckIndicatorPanel | Q::Pressed | Q::Selected, { 6, 6 } ); // indicator "strut size"
|
|
|
|
setBoxBorderMetrics( Q::CheckIndicator | Q::Pressed, 1 );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::CheckIndicator | Q::Pressed | Q::Selected, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.tertiary );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
|
|
|
// Disabled
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Disabled, pal.fillColor.controlAlt.disabled );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::CheckIndicatorPanel | Q::Disabled, pal.strokeColor.controlStrong.disabled );
|
2023-05-03 17:57:48 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicatorPanel | Q::Disabled | Q::Selected, pal.fillColor.accent.disabled );
|
2023-05-03 17:57:48 +02:00
|
|
|
setBoxBorderMetrics( Q::CheckIndicatorPanel | Q::Disabled | Q::Selected, 0 );
|
|
|
|
|
|
|
|
setPadding( Q::CheckIndicatorPanel | Q::Disabled | Q::Selected, { 6, 6 } ); // indicator "strut size"
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::CheckIndicator | Q::Disabled | Q::Selected, 0 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::CheckIndicator | Q::Disabled | Q::Selected, pal.fillColor.textOnAccent.primary );
|
2023-05-03 17:57:48 +02:00
|
|
|
setBoxShape( Q::CheckIndicator | Q::Disabled | Q::Selected, 100, Qt::RelativeSize );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupScrollView()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSegmentedBar()
|
|
|
|
{
|
2023-06-02 15:51:12 +02:00
|
|
|
using Q = QskSegmentedBar;
|
|
|
|
using A = QskAspect;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
const QSizeF segmentStrutSize( 120, 32 );
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.defaultColor );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel, pal.fillColor.control.defaultColor );
|
2023-06-02 15:51:12 +02:00
|
|
|
setSpacing( Q::Panel, 8 );
|
|
|
|
|
|
|
|
setStrutSize( Q::Icon, { 12, 12 } );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon, QskFluent2Skin::GraphicRoleFillColorTextPrimary );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Segment | A::Horizontal, segmentStrutSize );
|
|
|
|
setStrutSize( Q::Segment | A::Vertical, segmentStrutSize.transposed() );
|
|
|
|
setBoxShape( Q::Segment , 4 );
|
|
|
|
setPadding( Q::Segment, { 8, 0, 8, 0 } );
|
|
|
|
|
|
|
|
// Hovered:
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Segment | Q::Hovered, pal.fillColor.control.secondary );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Segment | Q::Hovered, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.secondary );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
// Selected:
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Segment | Q::Selected, pal.fillColor.accent.defaultColor );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Selected, QskFluent2Skin::GraphicRoleFillColorTextOnAccentPrimary );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Selected, pal.fillColor.textOnAccent.primary );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
// Disabled:
|
2023-06-20 19:10:44 +02:00
|
|
|
const QRgb standardDisabledBorderColor = flattenedColor( pal.strokeColor.control.defaultColor,
|
2023-06-20 16:52:42 +02:00
|
|
|
pal.fillColor.control.disabled );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
setBoxBorderColors( Q::Segment | Q::Disabled, standardDisabledBorderColor );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Segment | Q::Disabled, pal.fillColor.control.disabled );
|
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
2023-06-02 15:51:12 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Segment | Q::Selected | Q::Disabled, pal.fillColor.accent.disabled );
|
|
|
|
setColor( Q::Text | Q::Selected | Q::Disabled, pal.fillColor.textOnAccent.disabled );
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::Icon | Q::Selected | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextOnAccentDisabled );
|
2023-06-02 15:51:12 +02:00
|
|
|
setBoxBorderMetrics( Q::Panel | Q::Selected | Q::Disabled, 0 );
|
|
|
|
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSeparator()
|
|
|
|
{
|
2023-06-20 16:52:42 +02:00
|
|
|
using A = QskAspect;
|
|
|
|
using Q = QskSeparator;
|
|
|
|
|
|
|
|
const auto& pal = theme.palette;
|
|
|
|
|
|
|
|
for ( auto variation : { A::Horizontal, A::Vertical } )
|
|
|
|
{
|
|
|
|
const auto aspect = Q::Panel | variation;
|
|
|
|
|
|
|
|
setMetric( aspect | A::Size, 1 );
|
|
|
|
setBoxShape( Q::Panel, 0 );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 0 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( aspect, pal.strokeColor.divider.defaultColor );
|
2023-06-20 16:52:42 +02:00
|
|
|
}
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSlider()
|
|
|
|
{
|
2023-05-13 08:49:30 +02:00
|
|
|
using Q = QskSlider;
|
|
|
|
using A = QskAspect;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-13 08:49:30 +02:00
|
|
|
|
|
|
|
const qreal extent = 22;
|
|
|
|
setMetric( Q::Panel | A::Size, extent );
|
|
|
|
setBoxShape( Q::Panel, 0 );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 0 );
|
|
|
|
setGradient( Q::Panel, {} );
|
|
|
|
|
|
|
|
setPadding( Q::Panel | A::Horizontal, QskMargins( 0.5 * extent, 0 ) );
|
|
|
|
setPadding( Q::Panel | A::Vertical, QskMargins( 0, 0.5 * extent ) );
|
|
|
|
|
|
|
|
setMetric( Q::Groove | A::Size, 4 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove, pal.fillColor.controlStrong.defaultColor );
|
2023-05-13 08:49:30 +02:00
|
|
|
setBoxShape( Q::Groove, 100, Qt::RelativeSize );
|
|
|
|
|
|
|
|
setMetric( Q::Fill | A::Size, 4 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Fill, pal.fillColor.accent.defaultColor );
|
2023-05-13 08:49:30 +02:00
|
|
|
setBoxShape( Q::Fill, 100, Qt::RelativeSize );
|
|
|
|
|
|
|
|
setStrutSize( Q::Handle, { 22, 22 } );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Handle, pal.fillColor.controlSolid.defaultColor );
|
2023-05-13 08:49:30 +02:00
|
|
|
setBoxShape( Q::Handle, 100, Qt::RelativeSize );
|
|
|
|
setBoxBorderMetrics( Q::Handle, 1 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Handle, pal.elevation.circle.border, pal.fillColor.controlSolid.defaultColor );
|
2023-05-13 08:49:30 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Ripple, { 12, 12 } );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Ripple, pal.fillColor.accent.defaultColor );
|
2023-05-13 08:49:30 +02:00
|
|
|
setBoxShape( Q::Ripple, 100, Qt::RelativeSize );
|
|
|
|
|
|
|
|
setStrutSize( Q::Ripple | Q::Hovered, { 14, 14 } );
|
|
|
|
|
|
|
|
setStrutSize( Q::Ripple | Q::Pressed, { 10, 10 } );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Ripple | Q::Pressed, pal.fillColor.accent.tertiary );
|
2023-05-13 08:49:30 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove | Q::Disabled, pal.fillColor.controlStrong.disabled );
|
|
|
|
setGradient( Q::Fill | Q::Disabled, pal.fillColor.accent.disabled );
|
|
|
|
setGradient( Q::Ripple | Q::Disabled, pal.fillColor.controlStrong.disabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSpinBox()
|
|
|
|
{
|
2023-05-13 10:15:02 +02:00
|
|
|
using Q = QskSpinBox;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
setHint( Q::Panel | QskAspect::Style, Q::ButtonsRight );
|
|
|
|
setStrutSize( Q::Panel, { -1, 32 } );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
|
|
|
setBoxShape( Q::Panel, 3 );
|
|
|
|
setPadding( Q::Panel, { 11, 0, 11, 0 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel, pal.fillColor.control.defaultColor );
|
|
|
|
setBoxBorderGradient( Q::Panel, pal.elevation.control.border,
|
|
|
|
pal.fillColor.control.defaultColor );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
setAlignment( Q::Text, Qt::AlignLeft );
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
setPadding( Q::TextPanel, { 11, 5, 0, 0 } );
|
|
|
|
|
|
|
|
setStrutSize( Q::UpPanel, 16, 16 );
|
|
|
|
setStrutSize( Q::DownPanel, 16, 16 );
|
|
|
|
|
|
|
|
setStrutSize( Q::UpPanel, 32, 20 );
|
|
|
|
setPadding( Q::UpPanel, { 11, 7, 11, 7 } );
|
2023-07-02 12:18:47 +02:00
|
|
|
|
2023-05-13 10:15:02 +02:00
|
|
|
setStrutSize( Q::DownPanel, 34, 20 );
|
|
|
|
setPadding( Q::DownPanel, { 11, 7, 13, 7 } );
|
|
|
|
|
|
|
|
setSymbol( Q::UpIndicator, symbol( "spin-box-arrow-up" ) );
|
|
|
|
setSymbol( Q::DownIndicator, symbol( "spin-box-arrow-down" ) );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::UpIndicator, QskFluent2Skin::GraphicRoleFillColorTextSecondary );
|
|
|
|
setGraphicRole( Q::DownIndicator, QskFluent2Skin::GraphicRoleFillColorTextSecondary );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
// Hovered:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Hovered, pal.fillColor.control.secondary );
|
|
|
|
setBoxBorderGradient( Q::Panel | Q::Hovered, pal.elevation.textControl.border,
|
|
|
|
pal.fillColor.control.secondary );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
// Focused (Pressed doesn't exist yet):
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::Panel | Q::Focused, { 1, 1, 1, 2 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Focused, pal.fillColor.control.inputActive );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
auto gradient = pal.elevation.textControl.border;
|
|
|
|
gradient.at( 1 ) = pal.fillColor.accent.defaultColor;
|
2023-05-13 10:15:02 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | Q::Focused, gradient, pal.fillColor.control.inputActive );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
|
|
|
// Disabled:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Disabled, pal.fillColor.control.disabled );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel | Q::Disabled, pal.strokeColor.control.defaultColor );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-05-13 10:15:02 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setGraphicRole( Q::UpIndicator | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
|
|
|
setGraphicRole( Q::DownIndicator | Q::Disabled, QskFluent2Skin::GraphicRoleFillColorTextDisabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupTabBar()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupTabButton()
|
|
|
|
{
|
2023-05-06 09:54:00 +02:00
|
|
|
using Q = QskTabButton;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-06 09:54:00 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Panel, { -1, 31 } );
|
|
|
|
setPadding( Q::Panel, { 7, 0, 7, 0 } );
|
|
|
|
setBoxShape( Q::Panel, { 7, 7, 0, 0 } );
|
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel, Qt::transparent );
|
2023-05-06 09:54:00 +02:00
|
|
|
setBoxBorderMetrics( Q::Panel, { 0, 0, 0, 1 } );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel, pal.strokeColor.card.defaultColor );
|
2023-05-06 09:54:00 +02:00
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel | Q::Checked, pal.background.solid.tertiary );
|
2023-05-06 09:54:00 +02:00
|
|
|
setBoxBorderMetrics( Q::Panel | Q::Checked, { 1, 1, 1, 0 } );
|
|
|
|
|
|
|
|
setAlignment( Q::Text, Qt::AlignLeft | Qt::AlignVCenter );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.secondary );
|
2023-05-06 09:54:00 +02:00
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text | Q::Checked, QskFluent2Skin::BodyStrong );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Checked, pal.fillColor.text.primary );
|
2023-05-06 09:54:00 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Hovered, pal.fillColor.subtle.secondary );
|
2023-05-06 09:54:00 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Pressed, pal.fillColor.subtle.tertiary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupTabView()
|
|
|
|
{
|
2023-05-06 09:54:00 +02:00
|
|
|
using Q = QskTabView;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-06 09:54:00 +02:00
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Page, pal.background.solid.tertiary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupTextLabel()
|
|
|
|
{
|
2023-05-06 15:20:36 +02:00
|
|
|
using Q = QskTextLabel;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-06 15:20:36 +02:00
|
|
|
|
|
|
|
setPadding( Q::Panel, 10 );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.primary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Editor::setupTextInput()
|
|
|
|
{
|
2023-05-12 16:27:20 +02:00
|
|
|
using Q = QskTextInput;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-12 16:27:20 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Panel, { -1, 30 } );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
|
|
|
setBoxShape( Q::Panel, 3 );
|
|
|
|
setPadding( Q::Panel, { 11, 0, 11, 0 } );
|
|
|
|
|
|
|
|
setAlignment( Q::Text, Qt::AlignLeft | Qt::AlignVCenter );
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::Text, QskFluent2Skin::Body );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text, pal.fillColor.text.secondary );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel, pal.fillColor.control.defaultColor );
|
|
|
|
setBoxBorderGradient( Q::Panel, pal.elevation.textControl.border,
|
|
|
|
pal.fillColor.control.defaultColor );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::PanelSelected, pal.fillColor.accent.selectedTextBackground );
|
|
|
|
setColor( Q::TextSelected, pal.fillColor.textOnAccent.selectedText );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
|
|
|
// Hovered:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Hovered, pal.fillColor.control.secondary );
|
|
|
|
setBoxBorderGradient( Q::Panel | Q::Hovered, pal.elevation.textControl.border,
|
|
|
|
pal.fillColor.control.secondary );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
// Pressed & Focused:
|
|
|
|
|
|
|
|
for( const auto& state : { Q::Focused, Q::Editing } )
|
|
|
|
{
|
|
|
|
setBoxBorderMetrics( Q::Panel | state, { 1, 1, 1, 2 } );
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | state, pal.fillColor.control.inputActive );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
auto gradient = pal.elevation.textControl.border;
|
|
|
|
gradient.at( 1 ) = pal.fillColor.accent.defaultColor;
|
2023-05-12 16:27:20 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Panel | state, gradient, pal.fillColor.control.inputActive );
|
2023-05-12 16:27:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Disabled:
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Panel | Q::Disabled, pal.fillColor.control.disabled );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel | Q::Disabled, pal.strokeColor.control.defaultColor );
|
2023-05-12 16:27:20 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::Text | Q::Disabled, pal.fillColor.text.disabled );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSwitchButton()
|
|
|
|
{
|
2023-05-01 11:57:19 +02:00
|
|
|
using Q = QskSwitchButton;
|
|
|
|
using A = QskAspect;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
const QSizeF strutSize( 38, 18 );
|
|
|
|
setStrutSize( Q::Groove | A::Horizontal, strutSize );
|
|
|
|
setStrutSize( Q::Groove | A::Vertical, strutSize.transposed() );
|
|
|
|
setBoxShape( Q::Groove, 100, Qt::RelativeSize );
|
|
|
|
setBoxBorderMetrics( Q::Groove, 1 );
|
|
|
|
setBoxBorderMetrics( Q::Groove | Q::Checked, 0 );
|
|
|
|
|
|
|
|
setBoxShape( Q::Handle, 100, Qt::RelativeSize );
|
|
|
|
setPosition( Q::Handle, 0.1, { QskStateCombination::CombinationNoState, Q::Disabled } );
|
|
|
|
setPosition( Q::Handle | Q::Checked, 0.9, { QskStateCombination::CombinationNoState, Q::Disabled } );
|
|
|
|
setAnimation( Q::Handle | A::Metric, 100 );
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Q::Handle | Q::Checked, 1 );
|
|
|
|
|
|
|
|
// ### big size during animation
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove, pal.fillColor.controlAlt.secondary );
|
|
|
|
setGradient( Q::Groove | Q::Checked, pal.fillColor.accent.defaultColor );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Groove, pal.strokeColor.controlStrong.defaultColor );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Handle, 12, 12 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Handle, pal.strokeColor.controlStrong.defaultColor );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Handle | Q::Checked, pal.fillColor.textOnAccent.primary );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Handle | Q::Checked, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.defaultColor );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove | Q::Hovered, pal.fillColor.controlAlt.tertiary );
|
|
|
|
setGradient( Q::Groove | Q::Hovered | Q::Checked, pal.fillColor.accent.secondary );
|
|
|
|
setBoxBorderColors( Q::Groove | Q::Hovered, pal.fillColor.text.secondary );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Handle | Q::Hovered, 14, 14, { QskStateCombination::CombinationNoState, Q::Checked } );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Handle | Q::Hovered, pal.fillColor.text.secondary );
|
2023-05-01 11:57:19 +02:00
|
|
|
// Handle | Hovered | Checked is the same as in Rest state
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Handle | Q::Hovered | Q::Checked, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.secondary );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove | Q::Pressed, pal.fillColor.controlAlt.quaternary );
|
|
|
|
setGradient( Q::Groove | Q::Pressed | Q::Checked, pal.fillColor.accent.tertiary );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Groove | Q::Pressed, pal.strokeColor.controlStrong.defaultColor );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
const QSizeF pressedSize( 17, 14 );
|
|
|
|
setStrutSize( Q::Handle | Q::Pressed | A::Horizontal, pressedSize, { QskStateCombination::CombinationNoState, Q::Checked } );
|
|
|
|
setStrutSize( Q::Handle | Q::Pressed | A::Vertical, pressedSize.transposed(), { QskStateCombination::CombinationNoState, Q::Checked } );
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Handle | Q::Pressed, pal.strokeColor.controlStrong.defaultColor );
|
2023-05-01 11:57:19 +02:00
|
|
|
// Handle | Pressed | Checked is the same as in Rest state
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setBoxBorderGradient( Q::Handle | Q::Pressed | Q::Checked, pal.elevation.circle.border,
|
|
|
|
pal.fillColor.accent.tertiary );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Groove | Q::Disabled, pal.fillColor.controlAlt.disabled );
|
|
|
|
setBoxBorderColors( Q::Groove | Q::Disabled, pal.fillColor.text.disabled );
|
|
|
|
setGradient( Q::Groove | Q::Disabled | Q::Checked, pal.fillColor.accent.disabled );
|
|
|
|
setBoxBorderColors( Q::Groove | Q::Disabled | Q::Checked, pal.fillColor.accent.disabled );
|
2023-05-01 11:57:19 +02:00
|
|
|
|
|
|
|
setStrutSize( Q::Handle | Q::Disabled, 12, 12, { QskStateCombination::CombinationNoState, Q::Checked } );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::Handle | Q::Disabled, pal.fillColor.text.disabled );
|
|
|
|
setGradient( Q::Handle | Q::Disabled | Q::Checked, pal.fillColor.textOnAccent.disabled );
|
2023-05-01 11:57:19 +02:00
|
|
|
setBoxBorderMetrics( Q::Handle | Q::Disabled | Q::Checked, 1 );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupSubWindow()
|
|
|
|
{
|
2023-06-09 10:34:19 +02:00
|
|
|
using Q = QskSubWindow;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-09 10:34:19 +02:00
|
|
|
|
|
|
|
setPadding( Q::Panel, { 0, 31, 0, 0 } );
|
|
|
|
setBoxShape( Q::Panel, 7 );
|
|
|
|
setBoxBorderMetrics( Q::Panel, 1 );
|
2023-06-20 19:10:44 +02:00
|
|
|
setBoxBorderColors( Q::Panel, pal.strokeColor.surface.defaultColor );
|
|
|
|
setGradient( Q::Panel, pal.background.layer.alt );
|
|
|
|
setShadowMetrics( Q::Panel, theme.shadow.dialog.metrics );
|
|
|
|
setShadowColor( Q::Panel, theme.shadow.dialog.color );
|
2023-06-09 10:34:19 +02:00
|
|
|
|
|
|
|
setHint( Q::TitleBarPanel | QskAspect::Style, Q::TitleBar | Q::Title );
|
|
|
|
setPadding( Q::TitleBarPanel, { 24, 31, 24, 0 } );
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::TitleBarText, QskFluent2Skin::Subtitle );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::TitleBarText, pal.fillColor.text.primary );
|
2023-06-09 10:34:19 +02:00
|
|
|
setAlignment( Q::TitleBarText, Qt::AlignLeft );
|
|
|
|
setTextOptions( Q::TitleBarText, Qt::ElideRight, QskTextOptions::NoWrap );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::setupVirtualKeyboard()
|
|
|
|
{
|
2023-06-16 10:59:32 +02:00
|
|
|
using Q = QskVirtualKeyboard;
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& pal = theme.palette;
|
2023-06-16 10:59:32 +02:00
|
|
|
|
|
|
|
setMargin( Q::ButtonPanel, 2 );
|
2023-06-20 16:52:42 +02:00
|
|
|
setGradient( Q::ButtonPanel, pal.fillColor.control.defaultColor );
|
|
|
|
setGradient( Q::ButtonPanel | Q::Hovered, pal.fillColor.control.secondary );
|
|
|
|
setGradient( Q::ButtonPanel | QskPushButton::Pressed, pal.fillColor.control.tertiary );
|
2023-06-16 10:59:32 +02:00
|
|
|
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::ButtonText, pal.fillColor.text.primary );
|
2023-06-17 12:23:34 +02:00
|
|
|
setFontRole( Q::ButtonText, QskFluent2Skin::BodyLarge );
|
2023-06-20 16:52:42 +02:00
|
|
|
setColor( Q::ButtonText | QskPushButton::Pressed, pal.fillColor.text.secondary );
|
2023-06-16 10:59:32 +02:00
|
|
|
|
2023-06-20 19:10:44 +02:00
|
|
|
setGradient( Q::Panel, pal.background.solid.secondary );
|
2023-06-16 10:59:32 +02:00
|
|
|
setPadding( Q::Panel, 8 );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
QskFluent2Skin::QskFluent2Skin( const QskFluent2Theme& palette, QObject* parent )
|
2023-04-13 17:19:36 +02:00
|
|
|
: Inherited( parent )
|
|
|
|
{
|
|
|
|
setupFonts();
|
|
|
|
setupGraphicFilters( palette );
|
|
|
|
|
|
|
|
Editor editor( &hintTable(), palette );
|
|
|
|
editor.setup();
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
QskFluent2Skin::~QskFluent2Skin()
|
2023-04-13 17:19:36 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
void QskFluent2Skin::setupFonts()
|
2023-04-13 17:19:36 +02:00
|
|
|
{
|
|
|
|
static QString fontName( QStringLiteral( "Segoe UI Variable" ) );
|
|
|
|
Inherited::setupFonts( fontName );
|
|
|
|
|
|
|
|
setFont( Caption, createFont( fontName, 12, 16, 0.0, QFont::Normal ) );
|
|
|
|
setFont( Body, createFont( fontName, 14, 20, 0.0, QFont::Normal ) );
|
|
|
|
setFont( BodyStrong, createFont( fontName, 14, 20, 0.0, QFont::DemiBold ) );
|
|
|
|
setFont( BodyLarge, createFont( fontName, 18, 24, 0.0, QFont::Medium ) );
|
|
|
|
setFont( Subtitle, createFont( fontName, 20, 28, 0.0, QFont::DemiBold ) );
|
|
|
|
setFont( Title, createFont( fontName, 28, 36, 0.0, QFont::DemiBold ) );
|
|
|
|
setFont( TitleLarge, createFont( fontName, 40, 52, 0.0, QFont::DemiBold ) );
|
|
|
|
setFont( Display, createFont( fontName, 68, 92, 0.0, QFont::DemiBold ) );
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
void QskFluent2Skin::setGraphicColor( GraphicRole role, QRgb rgb )
|
2023-04-13 17:19:36 +02:00
|
|
|
{
|
|
|
|
QskColorFilter colorFilter;
|
|
|
|
colorFilter.setMask( QskRgb::RGBAMask );
|
2023-05-08 17:35:14 +02:00
|
|
|
colorFilter.addColorSubstitution( QskRgb::Black, rgb );
|
2023-04-13 17:19:36 +02:00
|
|
|
|
|
|
|
setGraphicFilter( role, colorFilter );
|
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
void QskFluent2Skin::setupGraphicFilters( const QskFluent2Theme& theme )
|
2023-04-13 17:19:36 +02:00
|
|
|
{
|
2023-06-20 16:52:42 +02:00
|
|
|
const auto& colors = theme.palette.fillColor;
|
|
|
|
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextDisabled, colors.text.disabled );
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextOnAccentDisabled, colors.textOnAccent.disabled );
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextOnAccentPrimary, colors.textOnAccent.primary );
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextOnAccentSecondary, colors.textOnAccent.secondary );
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextPrimary, colors.text.primary );
|
|
|
|
setGraphicColor( GraphicRoleFillColorTextSecondary, colors.text.secondary );
|
2023-04-13 17:19:36 +02:00
|
|
|
}
|
|
|
|
|
2023-06-17 12:23:34 +02:00
|
|
|
#include "moc_QskFluent2Skin.cpp"
|