Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_cmb_gradient.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#include "kis_cmb_gradient.h"
7
8#include <QPainter>
9#include <QResizeEvent>
10#include <QStyleOptionComboBox>
11#include <QApplication>
12
14#include <KoResource.h>
16#include <KisGradientChooser.h>
17
19 : KisPopupButton(parent)
20 , m_gradientChooser(new KisGradientChooser(this))
21 , m_checkersPainter(4)
22{
23 m_gradientChooser->setContentsMargins(10, 10, 10, 10);
24 connect(m_gradientChooser, SIGNAL(resourceSelected(KoResourceSP )), SLOT(gradientSelected(KoResourceSP )));
26 [this](KoAbstractGradientSP resource) { gradientSelected(resource); });
28}
29
34
36{
37 return m_gradientChooser->currentResource(includeHidden).dynamicCast<KoAbstractGradient>();
38}
39
44
46{
47 KoAbstractGradientSP gradient = resource.dynamicCast<KoAbstractGradient>();
48 if (!gradient) return;
49
50 QImage preview = gradient->generatePreview(iconSize().width(), iconSize().height(), m_gradientChooser->canvasResourcesInterface());
51
52 QImage thumbnail(preview.size(), QImage::Format_ARGB32);
53
54 {
55 QPainter gc(&thumbnail);
56 m_checkersPainter.paint(gc, preview.rect());
57 gc.drawImage(QPoint(), preview);
58 }
59
60 setIcon(QIcon(QPixmap::fromImage(thumbnail)));
61
63}
64
66{
67 ensurePolished();
68 QFontMetrics fm = fontMetrics();
69 int maxW = 7 * fm.horizontalAdvance(QChar('x')) + 18;
70 int maxH = qMax(fm.lineSpacing(), 14) + 2;
71
72 QStyleOptionComboBox options;
73 options.initFrom(this);
74
75 return style()->sizeFromContents(QStyle::CT_ComboBox, &options, QSize(maxW, maxH), this);
76}
77
78void KisCmbGradient::resizeEvent(QResizeEvent *event)
79{
80 setIconSize(QSize(event->size().width() - 30, event->size().height() - 4));
81 KisPopupButton::resizeEvent(event);
82}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int iconSize(qreal width, qreal height)
KisCmbGradient(QWidget *parent=0)
void gradientSelected(KoResourceSP resource)
void setGradient(KoAbstractGradientSP gradient)
void gradientChanged(KoAbstractGradientSP)
QSize sizeHint() const override
KisGradientChooser * m_gradientChooser
KoAbstractGradientSP gradient(bool includeHidden=false) const
void resizeEvent(QResizeEvent *event) override
KoCheckerBoardPainter m_checkersPainter
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
void gradientEdited(KoAbstractGradientSP resource)
Emitted when a resource was changed or added.
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
void setCurrentResource(KoResourceSP resource)
KoCanvasResourcesInterfaceSP canvasResourcesInterface
KoResourceSP currentResource(bool includeHidden=false)
void setPopupWidget(QWidget *widget)
void paint(QPainter &painter, const QRectF &rect, const QPointF &patternOrigin) const