shadows example improved
This commit is contained in:
parent
1e675e5b8c
commit
bf15d21fb5
@ -14,40 +14,103 @@
|
||||
ShadowedBox::ShadowedBox( QQuickItem* parentItem )
|
||||
: QskBox( true, parentItem )
|
||||
{
|
||||
QColor c( Qt::darkRed );
|
||||
#if 0
|
||||
c.setAlpha( 100 );
|
||||
#endif
|
||||
|
||||
setGradientHint( Panel, c );
|
||||
setBoxShapeHint( Panel, QskBoxShapeMetrics( 40, 0, 15, 0 ) );
|
||||
|
||||
setBoxBorderMetricsHint( Panel, 0 );
|
||||
|
||||
#if 0
|
||||
setBoxBorderMetricsHint( Panel, 10 );
|
||||
setBoxBorderColorsHint( Panel, Qt::blue );
|
||||
#endif
|
||||
|
||||
setShadowColorHint( Panel, Qt::black );
|
||||
}
|
||||
|
||||
ShadowedBox::~ShadowedBox()
|
||||
{
|
||||
}
|
||||
|
||||
void ShadowedBox::setShadow( const QskShadowMetrics& shadow )
|
||||
void ShadowedBox::setOffsetX( qreal dx )
|
||||
{
|
||||
setShadowMetricsHint( Panel, shadow );
|
||||
auto metrics = shadowMetrics();
|
||||
metrics.setOffsetX( dx );
|
||||
|
||||
setShadowMetrics( metrics );
|
||||
}
|
||||
|
||||
void ShadowedBox::setShadowColor( const QColor& color )
|
||||
qreal ShadowedBox::offsetX() const
|
||||
{
|
||||
return shadowMetrics().offset().x();
|
||||
}
|
||||
|
||||
void ShadowedBox::setOffsetY( qreal dy )
|
||||
{
|
||||
auto metrics = shadowMetrics();
|
||||
metrics.setOffsetY( dy );
|
||||
|
||||
setShadowMetrics( metrics );
|
||||
}
|
||||
|
||||
qreal ShadowedBox::offsetY() const
|
||||
{
|
||||
return shadowMetrics().offset().y();
|
||||
}
|
||||
|
||||
void ShadowedBox::setSpreadRadius( qreal radius )
|
||||
{
|
||||
auto metrics = shadowMetrics();
|
||||
metrics.setSpreadRadius( radius );
|
||||
|
||||
setShadowMetrics( metrics );
|
||||
}
|
||||
|
||||
qreal ShadowedBox::spreadRadius() const
|
||||
{
|
||||
return shadowMetrics().spreadRadius();
|
||||
}
|
||||
|
||||
void ShadowedBox::setBlurRadius( qreal radius )
|
||||
{
|
||||
auto metrics = shadowMetrics();
|
||||
metrics.setBlurRadius( radius );
|
||||
|
||||
setShadowMetrics( metrics );
|
||||
}
|
||||
|
||||
qreal ShadowedBox::blurRadius() const
|
||||
{
|
||||
return shadowMetrics().blurRadius();
|
||||
}
|
||||
|
||||
void ShadowedBox::setOpacity( qreal opacity )
|
||||
{
|
||||
opacity = qBound( 0.0, opacity, 1.0 );
|
||||
|
||||
auto color = shadowColorHint( Panel );
|
||||
color.setAlphaF( opacity );
|
||||
|
||||
setShadowColorHint( Panel, color );
|
||||
}
|
||||
|
||||
void ShadowedBox::setGradient( const QskGradient& gradient )
|
||||
qreal ShadowedBox::opacity() const
|
||||
{
|
||||
setGradientHint( Panel, gradient );
|
||||
return shadowColorHint( Panel ).alphaF();
|
||||
}
|
||||
|
||||
void ShadowedBox::setShape( const QskBoxShapeMetrics& shape )
|
||||
QskShadowMetrics ShadowedBox::shadowMetrics() const
|
||||
{
|
||||
setBoxShapeHint( Panel, shape );
|
||||
return shadowMetricsHint( Panel );
|
||||
}
|
||||
|
||||
void ShadowedBox::setBorderWidth( qreal width )
|
||||
void ShadowedBox::setShadowMetrics( const QskShadowMetrics& metrics )
|
||||
{
|
||||
setBoxBorderMetricsHint( Panel, width );
|
||||
}
|
||||
|
||||
void ShadowedBox::setBorderColors( const QskBoxBorderColors& colors )
|
||||
{
|
||||
setBoxBorderColorsHint( Panel, colors );
|
||||
setShadowMetricsHint( Panel, metrics );
|
||||
}
|
||||
|
||||
#include "moc_ShadowedBox.cpp"
|
||||
|
@ -7,25 +7,34 @@
|
||||
|
||||
#include <QskBox.h>
|
||||
|
||||
class QskGradient;
|
||||
class QskShadowMetrics;
|
||||
class QskBoxShapeMetrics;
|
||||
class QskBoxBorderColors;
|
||||
|
||||
class ShadowedBox : public QskBox
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ShadowedBox(QQuickItem* parent = nullptr);
|
||||
ShadowedBox( QQuickItem* parent = nullptr );
|
||||
~ShadowedBox() override;
|
||||
|
||||
void setShape( const QskBoxShapeMetrics& );
|
||||
void setGradient( const QskGradient& );
|
||||
qreal offsetX() const;
|
||||
qreal offsetY() const;
|
||||
|
||||
void setBorderWidth( qreal width );
|
||||
void setBorderColors( const QskBoxBorderColors& );
|
||||
qreal spreadRadius() const;
|
||||
qreal blurRadius() const;
|
||||
|
||||
void setShadow( const QskShadowMetrics& );
|
||||
void setShadowColor( const QColor& );
|
||||
qreal opacity() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setOffsetX( qreal );
|
||||
void setOffsetY( qreal );
|
||||
|
||||
void setSpreadRadius( qreal );
|
||||
void setBlurRadius( qreal );
|
||||
|
||||
void setOpacity( qreal );
|
||||
|
||||
private:
|
||||
QskShadowMetrics shadowMetrics() const;
|
||||
void setShadowMetrics( const QskShadowMetrics& );
|
||||
};
|
||||
|
@ -7,43 +7,122 @@
|
||||
|
||||
#include <QskObjectCounter.h>
|
||||
#include <QskWindow.h>
|
||||
#include <QskLinearBox.h>
|
||||
#include <QskGridBox.h>
|
||||
#include <QskSlider.h>
|
||||
#include <QskTextLabel.h>
|
||||
#include <QskRgbValue.h>
|
||||
|
||||
#include <QskGradient.h>
|
||||
#include <QskShadowMetrics.h>
|
||||
#include <QskBoxShapeMetrics.h>
|
||||
#include <QskBoxBorderColors.h>
|
||||
|
||||
#include <SkinnyShortcut.h>
|
||||
#include <QGuiApplication>
|
||||
#include <QFontMetrics>
|
||||
|
||||
class Box : public ShadowedBox
|
||||
class BoxPanel : public QskBox
|
||||
{
|
||||
public:
|
||||
Box( QQuickItem* parent = nullptr )
|
||||
: ShadowedBox( parent )
|
||||
BoxPanel( QQuickItem* parent = nullptr )
|
||||
: QskBox( parent )
|
||||
{
|
||||
const qreal w = 10;
|
||||
setAutoLayoutChildren( true );
|
||||
setPadding( 60 );
|
||||
|
||||
QskShadowMetrics shadow;
|
||||
//shadow.setOffset( 20.0, 20.0 );
|
||||
shadow.setSpreadRadius( w );
|
||||
shadow.setBlurRadius( w );
|
||||
setPanel( true );
|
||||
setGradientHint( QskBox::Panel, QGradient::SnowAgain );
|
||||
}
|
||||
};
|
||||
|
||||
setShadow( shadow );
|
||||
setShadowColor( Qt::black );
|
||||
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 );
|
||||
}
|
||||
};
|
||||
|
||||
QColor c( Qt::darkRed );
|
||||
#if 0
|
||||
c.setAlpha( 100 );
|
||||
#endif
|
||||
class ValueLabel : public QskTextLabel
|
||||
{
|
||||
public:
|
||||
ValueLabel( QQuickItem* parent = nullptr )
|
||||
: QskTextLabel( parent )
|
||||
{
|
||||
setFixedWidth( QFontMetrics( font() ).horizontalAdvance( "-100" ) );
|
||||
setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
|
||||
}
|
||||
|
||||
setGradient( c );
|
||||
setShape( QskBoxShapeMetrics( 40, 10, 15, 5 ) );
|
||||
void setValue( qreal value )
|
||||
{
|
||||
setText( QString::number( value ) );
|
||||
}
|
||||
};
|
||||
|
||||
setBorderWidth( w );
|
||||
setBorderColors( Qt::blue );
|
||||
class GridBox : public QskGridBox
|
||||
{
|
||||
public:
|
||||
GridBox( QQuickItem* parent = nullptr )
|
||||
: QskGridBox( parent )
|
||||
{
|
||||
setMargins( 5 );
|
||||
setColumnStretchFactor( 1, 1 );
|
||||
|
||||
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 ) ); } );
|
||||
}
|
||||
};
|
||||
|
||||
@ -57,20 +136,8 @@ int main( int argc, char* argv[] )
|
||||
|
||||
SkinnyShortcut::enable( SkinnyShortcut::AllShortcuts );
|
||||
|
||||
auto layout = new QskLinearBox();
|
||||
layout->setPanel( true );
|
||||
#if 1
|
||||
layout->setGradientHint( QskBox::Panel,
|
||||
QskGradient( Qt::Vertical, QskRgb::WhiteSmoke, QskRgb::MistyRose ) );
|
||||
#else
|
||||
layout->setGradientHint( QskBox::Panel, Qt::white );
|
||||
#endif
|
||||
layout->setPadding( 60 );
|
||||
(void ) new Box( layout );
|
||||
|
||||
QskWindow window;
|
||||
window.setColor( QskRgb::PapayaWhip );
|
||||
window.addItem( layout );
|
||||
window.addItem( new GridBox() );
|
||||
window.resize( 600, 600 );
|
||||
window.show();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user