146 lines
3.8 KiB
C++
Raw Normal View History

2020-10-06 15:49:46 +02:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the 3-clause BSD License
*****************************************************************************/
#include "ShadowedBox.h"
#include <QskObjectCounter.h>
#include <QskWindow.h>
2022-06-14 11:58:56 +02:00
#include <QskGridBox.h>
#include <QskSlider.h>
#include <QskTextLabel.h>
2020-10-06 15:49:46 +02:00
#include <QskRgbValue.h>
2022-06-13 17:01:15 +02:00
#include <SkinnyShortcut.h>
#include <QGuiApplication>
2022-06-14 11:58:56 +02:00
#include <QFontMetrics>
2022-06-13 17:01:15 +02:00
2022-06-14 11:58:56 +02:00
class BoxPanel : public QskBox
2020-10-06 15:49:46 +02:00
{
public:
2022-06-14 11:58:56 +02:00
BoxPanel( QQuickItem* parent = nullptr )
: QskBox( parent )
2020-10-06 15:49:46 +02:00
{
2022-06-14 11:58:56 +02:00
setAutoLayoutChildren( true );
setPadding( 60 );
2021-09-18 14:48:25 +02:00
2022-06-14 11:58:56 +02:00
setPanel( true );
setGradientHint( QskBox::Panel, QGradient::SnowAgain );
}
};
2020-10-06 15:49:46 +02:00
2022-06-14 11:58:56 +02:00
class Slider : public QskSlider
{
public:
Slider( qreal min, qreal max, qreal step, qreal value, QQuickItem* parent = nullptr )
: QskSlider( parent )
{
setBoundaries( min, max );
setStepSize( step );
setSnap( true );
setValue( value );
}
};
2021-09-18 14:48:25 +02:00
2022-06-14 11:58:56 +02:00
class ValueLabel : public QskTextLabel
{
public:
ValueLabel( QQuickItem* parent = nullptr )
: QskTextLabel( parent )
{
setFixedWidth( QFontMetrics( font() ).horizontalAdvance( "-100" ) );
setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
}
void setValue( qreal value )
{
setText( QString::number( value ) );
}
};
2021-09-18 14:48:25 +02:00
2022-06-14 11:58:56 +02:00
class GridBox : public QskGridBox
{
public:
GridBox( QQuickItem* parent = nullptr )
: QskGridBox( parent )
{
setMargins( 5 );
setColumnStretchFactor( 1, 1 );
2021-09-18 14:48:25 +02:00
2022-06-14 11:58:56 +02:00
auto sliderX = new Slider( -50, 50, 1, 10 );
auto sliderY = new Slider( -50, 50, 1, 10 );
auto sliderSpread = new Slider( 0, 50, 1, 0 );
auto sliderBlur = new Slider( 0, 50, 1, 10 );
auto sliderOpacity = new Slider( 0, 1, 0.01, 1 );
auto panel = new BoxPanel();
int row = 0;
addSlider( row++, "Offset X", sliderX );
addSlider( row++, "Offset Y", sliderY );
addSlider( row++, "Spread Radius", sliderSpread );
addSlider( row++, "Blur Radius", sliderBlur );
addSlider( row++, "Opacity", sliderOpacity );
addItem( panel, row, 0, -1, -1 );
auto box = new ShadowedBox( panel );
box->setOffsetX( sliderX->value() );
box->setOffsetY( sliderY->value() );
box->setSpreadRadius( sliderSpread->value() );
box->setBlurRadius( sliderBlur->value() );
box->setOpacity( sliderOpacity->value() );
connect( sliderX, &QskSlider::valueChanged,
box, &ShadowedBox::setOffsetX );
connect( sliderY, &QskSlider::valueChanged,
box, &ShadowedBox::setOffsetY );
connect( sliderSpread, &QskSlider::valueChanged,
box, &ShadowedBox::setSpreadRadius );
connect( sliderBlur, &QskSlider::valueChanged,
box, &ShadowedBox::setBlurRadius );
connect( sliderOpacity, &QskSlider::valueChanged,
box, &ShadowedBox::setOpacity );
}
private:
void addSlider( int row, const QString& text, QskSlider* slider )
{
addItem( new QskTextLabel( text ), row, 0 );
addItem( slider, row, 1 );
auto label = new ValueLabel();
label->setValue( slider->value() );
addItem( label, row, 2 );
connect( slider, &QskSlider::valueChanged,
label, [label]( qreal value ) { label->setText( QString::number( value ) ); } );
2020-10-06 15:49:46 +02:00
}
};
int main( int argc, char* argv[] )
{
#ifdef ITEM_STATISTICS
QskObjectCounter counter( true );
#endif
QGuiApplication app( argc, argv );
2021-09-18 14:48:25 +02:00
SkinnyShortcut::enable( SkinnyShortcut::AllShortcuts );
2020-10-06 15:49:46 +02:00
QskWindow window;
2022-06-14 11:58:56 +02:00
window.addItem( new GridBox() );
2020-10-06 15:49:46 +02:00
window.resize( 600, 600 );
window.show();
return app.exec();
}