2024-01-06 14:05:30 +00:00
|
|
|
/******************************************************************************
|
2024-01-17 13:31:45 +00:00
|
|
|
* QSkinny - Copyright (C) The authors
|
2024-01-06 14:05:30 +00:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#include "ArcPage.h"
|
|
|
|
#include "ShadowedArc.h"
|
|
|
|
#include "Slider.h"
|
|
|
|
|
|
|
|
#include <QskGridBox.h>
|
2024-07-17 12:19:54 +00:00
|
|
|
#include <QskRgbValue.h>
|
2024-01-06 14:05:30 +00:00
|
|
|
|
|
|
|
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() );
|
2024-01-06 14:05:30 +00:00
|
|
|
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()
|
|
|
|
{
|
2024-07-17 12:19:54 +00:00
|
|
|
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 );
|
2024-07-18 16:13:28 +00:00
|
|
|
setThickness( 30.0 );
|
2024-06-05 08:34:19 +00:00
|
|
|
|
2024-07-18 16:13:28 +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 );
|
|
|
|
}
|
|
|
|
};
|
2024-01-06 14:05:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ArcPage::ArcPage( QQuickItem* parent )
|
|
|
|
: QskLinearBox( Qt::Vertical, parent )
|
|
|
|
{
|
2024-06-05 08:34:19 +00:00
|
|
|
auto arc = new Arc();
|
2024-01-06 14:05:30 +00:00
|
|
|
|
|
|
|
auto panel = new ControlPanel( arc );
|
|
|
|
panel->setSizePolicy( Qt::Vertical, QskSizePolicy::Fixed );
|
|
|
|
|
|
|
|
addItem( panel );
|
|
|
|
addItem( arc );
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "ArcPage.moc"
|