diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2018-06-26 17:26:29 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2018-07-24 16:45:41 +0000 |
commit | bafa5a14dde4415b13de3f3d44af6333538deff5 (patch) | |
tree | 85853528fa445119f8a0c6ba1df73987d257c63f /examples/widgets/painting/gradients/gradients.cpp | |
parent | 5d0827cbe712ae6d49d1232c712227fe3d56b964 (diff) |
Add demo of the new QGradient presets to the gradients example
In the gradients example, allow the user to select and show
QGradient's named presets.
Change-Id: I40bc6cbe3a0316ce49d67d63511881b6f6112574
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'examples/widgets/painting/gradients/gradients.cpp')
-rw-r--r-- | examples/widgets/painting/gradients/gradients.cpp | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/examples/widgets/painting/gradients/gradients.cpp b/examples/widgets/painting/gradients/gradients.cpp index 78c174a8bf..6d9f514a8d 100644 --- a/examples/widgets/painting/gradients/gradients.cpp +++ b/examples/widgets/painting/gradients/gradients.cpp @@ -301,8 +301,15 @@ GradientWidget::GradientWidget(QWidget *parent) m_reflectSpreadButton = new QRadioButton(tr("Reflect Spread"), spreadGroup); m_repeatSpreadButton = new QRadioButton(tr("Repeat Spread"), spreadGroup); + QGroupBox *presetsGroup = new QGroupBox(mainGroup); + presetsGroup->setTitle(tr("Presets")); + QPushButton *prevPresetButton = new QPushButton(tr("<"), presetsGroup); + m_presetButton = new QPushButton(tr("(unset)"), presetsGroup); + QPushButton *nextPresetButton = new QPushButton(tr(">"), presetsGroup); + updatePresetName(); + QGroupBox *defaultsGroup = new QGroupBox(mainGroup); - defaultsGroup->setTitle(tr("Defaults")); + defaultsGroup->setTitle(tr("Examples")); QPushButton *default1Button = new QPushButton(tr("1"), defaultsGroup); QPushButton *default2Button = new QPushButton(tr("2"), defaultsGroup); QPushButton *default3Button = new QPushButton(tr("3"), defaultsGroup); @@ -327,11 +334,12 @@ GradientWidget::GradientWidget(QWidget *parent) mainLayout->addWidget(m_renderer); mainLayout->addWidget(mainGroup); - mainGroup->setFixedWidth(180); + mainGroup->setFixedWidth(200); QVBoxLayout *mainGroupLayout = new QVBoxLayout(mainGroup); mainGroupLayout->addWidget(editorGroup); mainGroupLayout->addWidget(typeGroup); mainGroupLayout->addWidget(spreadGroup); + mainGroupLayout->addWidget(presetsGroup); mainGroupLayout->addWidget(defaultsGroup); mainGroupLayout->addStretch(1); mainGroupLayout->addWidget(showSourceButton); @@ -353,6 +361,11 @@ GradientWidget::GradientWidget(QWidget *parent) spreadGroupLayout->addWidget(m_repeatSpreadButton); spreadGroupLayout->addWidget(m_reflectSpreadButton); + QHBoxLayout *presetsGroupLayout = new QHBoxLayout(presetsGroup); + presetsGroupLayout->addWidget(prevPresetButton); + presetsGroupLayout->addWidget(m_presetButton, 1); + presetsGroupLayout->addWidget(nextPresetButton); + QHBoxLayout *defaultsGroupLayout = new QHBoxLayout(defaultsGroup); defaultsGroupLayout->addWidget(default1Button); defaultsGroupLayout->addWidget(default2Button); @@ -375,6 +388,13 @@ GradientWidget::GradientWidget(QWidget *parent) connect(m_repeatSpreadButton, &QRadioButton::clicked, m_renderer, &GradientRenderer::setRepeatSpread); + connect(prevPresetButton, &QPushButton::clicked, + this, &GradientWidget::setPrevPreset); + connect(m_presetButton, &QPushButton::clicked, + this, &GradientWidget::setPreset); + connect(nextPresetButton, &QPushButton::clicked, + this, &GradientWidget::setNextPreset); + connect(default1Button, &QPushButton::clicked, this, &GradientWidget::setDefault1); connect(default2Button, &QPushButton::clicked, @@ -471,6 +491,40 @@ void GradientWidget::setDefault(int config) m_renderer->setGradientStops(stops); } +void GradientWidget::updatePresetName() +{ + QMetaEnum presetEnum = QMetaEnum::fromType<QGradient::Preset>(); + m_presetButton->setText(QLatin1String(presetEnum.key(m_presetIndex))); +} + +void GradientWidget::changePresetBy(int indexOffset) +{ + QMetaEnum presetEnum = QMetaEnum::fromType<QGradient::Preset>(); + m_presetIndex = qBound(0, m_presetIndex + indexOffset, presetEnum.keyCount() - 1); + + QGradient::Preset preset = static_cast<QGradient::Preset>(presetEnum.value(m_presetIndex)); + QGradient gradient(preset); + if (gradient.type() != QGradient::LinearGradient) + return; + + QLinearGradient *linearGradientPointer = static_cast<QLinearGradient *>(&gradient); + QLineF objectStopsLine(linearGradientPointer->start(), linearGradientPointer->finalStop()); + qreal scaleX = qFuzzyIsNull(objectStopsLine.dx()) ? 1.0 : (0.8 * m_renderer->width() / qAbs(objectStopsLine.dx())); + qreal scaleY = qFuzzyIsNull(objectStopsLine.dy()) ? 1.0 : (0.8 * m_renderer->height() / qAbs(objectStopsLine.dy())); + QLineF logicalStopsLine = QTransform::fromScale(scaleX, scaleY).map(objectStopsLine); + logicalStopsLine.translate(m_renderer->rect().center() - logicalStopsLine.center()); + QPolygonF logicalStops; + logicalStops << logicalStopsLine.p1() << logicalStopsLine.p2(); + + m_linearButton->animateClick(); + m_padSpreadButton->animateClick(); + m_editor->setGradientStops(gradient.stops()); + m_renderer->hoverPoints()->setPoints(logicalStops); + m_renderer->setGradientStops(gradient.stops()); + + updatePresetName(); +} + GradientRenderer::GradientRenderer(QWidget *parent) : ArthurFrame(parent) { |