qskinny/playground/shadows/ArcPage.cpp

117 lines
3.2 KiB
C++
Raw Normal View History

/******************************************************************************
2024-01-17 13:31:45 +00:00
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#include "ArcPage.h"
#include "ShadowedArc.h"
#include "Slider.h"
#include <QskGridBox.h>
#include <QskRgbValue.h>
namespace
{
class ControlPanel : public QskGridBox
{
Q_OBJECT
public:
ControlPanel( ShadowedArc* arc, QQuickItem* parent = nullptr )
: QskGridBox( parent )
{
setMargins( 5 );
setSpacing( 10 );
{
auto slider = new Slider( "Start", 0, 360, 10, arc->startAngle() );
connect( slider, &Slider::valueChanged, arc, &ShadowedArc::setStartAngle );
addItem( slider, 0, 0 );
}
{
auto slider = new Slider( "Span", -360, 360, 10, arc->spanAngle() );
connect( slider, &Slider::valueChanged, arc, &ShadowedArc::setSpanAngle );
addItem( slider, 0, 1 );
}
{
auto slider = new Slider( "Extent", 0, 100, 1, arc->thickness() );
connect( slider, &Slider::valueChanged, arc, &ShadowedArc::setThickness );
addItem( slider, 1, 0 );
}
{
2024-07-16 08:42:13 +00:00
auto slider = new Slider( "Border", 0, 50, 1, arc->borderWidth() );
connect( slider, &Slider::valueChanged, arc, &ShadowedArc::setBorderWidth );
addItem( slider, 1, 1);
}
}
};
2024-06-05 08:34:19 +00:00
class Arc : public ShadowedArc
{
public:
Arc()
{
setBackgroundColor( QskRgb::LemonChiffon );
setClip( true ); // for testing if the arc stays inside its bounding rectangle
2024-06-05 08:34:19 +00:00
setStartAngle( 45.0 );
setSpanAngle( 270.0 );
setThickness( 30.0 );
2024-06-05 08:34:19 +00:00
setBorderWidth( 5.0 );
2024-07-16 08:42:13 +00:00
setBorderColor( QColor( 0, 0, 0, 150 ) );
2024-06-05 08:34:19 +00:00
#if 0
const QskGradientStops stops =
{
{ 0.1, Qt::darkRed },
{ 0.1, Qt::darkYellow },
{ 0.5, Qt::darkYellow },
{ 0.5, Qt::darkBlue },
{ 0.75, Qt::darkBlue },
{ 0.75, Qt::darkRed }
};
2024-06-12 10:10:57 +00:00
#endif
#if 0
2024-06-05 08:34:19 +00:00
const QskGradientStops stops =
{
{ 0.1, Qt::darkRed },
{ 0.5, Qt::darkYellow },
{ 0.75, Qt::darkBlue },
{ 1.0, Qt::darkRed }
};
#endif
2024-06-12 10:10:57 +00:00
#if 1
QskGradientStops stops;
for ( int i = 0; i < 100; i++ )
{
const auto pos = i * 1.0 / 100;
stops += { pos, ( i % 2 ) ? Qt::darkRed : Qt::darkBlue };
stops += { pos, ( i % 2 ) ? Qt::darkBlue : Qt::darkRed };
}
#endif
2024-06-05 08:34:19 +00:00
setFillGradient( stops );
}
};
}
ArcPage::ArcPage( QQuickItem* parent )
: QskLinearBox( Qt::Vertical, parent )
{
2024-06-05 08:34:19 +00:00
auto arc = new Arc();
auto panel = new ControlPanel( arc );
panel->setSizePolicy( Qt::Vertical, QskSizePolicy::Fixed );
addItem( panel );
addItem( arc );
}
#include "ArcPage.moc"