7#ifndef KIS_SIMPLE_PAINTOP_FACTORY_H
8#define KIS_SIMPLE_PAINTOP_FACTORY_H
18#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
22template<
class,
class = std::
void_t<> >
23struct has_preinitialize_statically : std::false_type { };
26struct has_preinitialize_statically<T,
std::void_t<decltype(std::declval<T>().preinitializeOpStatically(KisPaintOpSettingsSP()))>> : std::true_type { };
30void preinitializeOpStatically(
const KisPaintOpSettingsSP settings,
typename std::enable_if_t<has_preinitialize_statically<T>::value> * = 0)
32 T::preinitializeOpStatically(settings);
36void preinitializeOpStatically(
const KisPaintOpSettingsSP settings,
typename std::enable_if_t<!has_preinitialize_statically<T>::value> * = 0)
48template<
class,
class = std::
void_t<> >
52struct has_prepare_linked_resources<T,
std::void_t<decltype(std::declval<T>().prepareLinkedResources(KisPaintOpSettingsSP(),KisResourcesInterfaceSP()))>> : std::true_type { };
59 return T::prepareLinkedResources(settings, resourcesInterface);
68 Q_UNUSED(resourcesInterface);
74template<
class,
class = std::
void_t<> >
78struct has_prepare_embedded_resources<T,
std::void_t<decltype(std::declval<T>().prepareEmbeddedResources(KisPaintOpSettingsSP(),KisResourcesInterfaceSP()))>> : std::true_type { };
85 return T::prepareEmbeddedResources(settings, resourcesInterface);
94 Q_UNUSED(resourcesInterface);
99template<
class,
class = std::
void_t<> >
109 return T::createInterstrokeDataFactory(settings, resourcesInterface);
117 Q_UNUSED(resourcesInterface);
122template<
class,
class = std::
void_t<> >
127 std::void_t<decltype(T(std::declval<QWidget*>(),
128 std::declval<KisResourcesInterfaceSP>(),
129 std::declval<KoCanvasResourcesInterfaceSP>()))> > : std::true_type { };
135 T* widget =
new T(parent, resourcesInterface, canvasResourcesInterface);
136 widget->setResourcesInterface(resourcesInterface);
137 widget->setCanvasResourcesInterface(canvasResourcesInterface);
146 T* widget =
new T(parent);
147 widget->setResourcesInterface(resourcesInterface);
148 widget->setCanvasResourcesInterface(canvasResourcesInterface);
163 const QString& pixmap,
const QString& model = QString(),
180#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
182 detail::preinitializeOpStatically<Op>(settings);
187 KisPaintOp * op =
new Op(settings, painter, node, image);
193 return detail::prepareLinkedResources<Op>(settings, resourcesInterface);
197 return detail::prepareEmbeddedResources<Op>(settings, resourcesInterface);
201 return detail::createInterstrokeDataFactory<Op>(settings, resourcesInterface);
206 settings->setModelName(
m_model);
211 return detail::createConfigWidget<OpSettingsWidget>(parent, resourcesInterface, canvasResourcesInterface);
214 QString
id()
const override {
218 QString
name()
const override {
QList< QString > QStringList
QStringList whiteListedCompositeOps() const
void setPriority(int newPriority)
QString id() const override
KisSimplePaintOpFactory(const QString &id, const QString &name, const QString &category, const QString &pixmap, const QString &model=QString(), const QStringList &whiteListedCompositeOps=QStringList(), int priority=100, bool lodSizeThresholdSupported=true)
QList< KoResourceLoadResult > prepareLinkedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface) override
QIcon icon() override
icon
KisPaintOpConfigWidget * createConfigWidget(QWidget *parent, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface) override
QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface) override
KisInterstrokeDataFactory * createInterstrokeDataFactory(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface) const override
bool lodSizeThresholdSupported() const override
QString category() const override
bool m_lodSizeThresholdSupported
QString name() const override
~KisSimplePaintOpFactory() override
KisPaintOpSettingsSP createSettings(KisResourcesInterfaceSP resourcesInterface) override
KisPaintOp * createOp(const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image) override
QIcon loadIcon(const QString &name)
QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface, std::enable_if_t< has_prepare_embedded_resources< T >::value > *=0)
KisInterstrokeDataFactory * createInterstrokeDataFactory(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface, std::enable_if_t< has_create_interstroke_data_factory< T >::value > *=0)
QList< KoResourceLoadResult > prepareLinkedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface, std::enable_if_t< has_prepare_linked_resources< T >::value > *=0)
KisPaintOpConfigWidget * createConfigWidget(QWidget *parent, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface, std::enable_if_t< supports_extended_initilization< T >::value > *=0)