17#include <QGlobalStatic>
24#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
36 if (KisBrushOptionProperties::isTextBrush(settings.
data())) {
38 brushOption.
readOptionSetting(settings, settings->resourcesInterface(), settings->canvasResourcesInterface());
70 m_textureOption(settings.data(),
71 settings->resourcesInterface(),
72 settings->canvasResourcesInterface(),
73 painter->device()->defaultBounds()->currentLevelOfDetail(),
75 m_mirrorOption(settings.data()),
76 m_precisionOption(settings.data())
80#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
88 if (brushBasedSettings) {
95 qWarning() <<
"Could not find brush tip " << settings->getString(
"brush_definition") <<
", will use a default brush instead";
96 QString brushDefinition(
"<Brush useAutoSpacing=\"1\" angle=\"0\" spacing=\"0.1\" density=\"1\" BrushVersion=\"2\" type=\"auto_brush\" randomness=\"0\" autoSpacingCoeff=\"0.8\"> <MaskGenerator spikes=\"2\" hfade=\"1\" ratio=\"1\" diameter=\"40\" id=\"default\" type=\"circle\" antialiasEdges=\"1\" vfade=\"1\"/> </Brush> ");
98 d.setContent(brushDefinition,
false);
99 QDomElement element =
d.firstChildElement(
"Brush");
105 m_brush->notifyStrokeStarted();
153 return effectiveSpacing(metric.width(), metric.height(), 1.0,
false, 0.0,
false);
180 isotropicSpacing, rotation, implicitFlipped,
185 airbrushOption, spacingOption,
191 bool isotropicSpacing, qreal rotation,
192 bool axesFlipped)
const
Q_GLOBAL_STATIC(KisStoragePluginRegistry, s_instance)
~KisBrushBasedPaintOp() override
KisMirrorOption m_mirrorOption
KisBrushBasedPaintOp(const KisPaintOpSettingsSP settings, KisPainter *painter, KisBrushTextureFlags textureFlags=None)
KisPrecisionOption m_precisionOption
KisTextureOption m_textureOption
bool canPaint() const override
Reimplemented, false if brush is 0.
static QList< KoResourceLoadResult > prepareLinkedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
KisSpacingInformation effectiveSpacing(qreal scale) const
bool checkSizeTooSmall(qreal scale)
static QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
static KisBrushRegistry * instance()
KoResourceLoadResult createBrush(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)
void setPrecisionOption(KisPrecisionOption *option)
void setMirrorPostprocessing(KisMirrorOption *option)
The KisDabCache class provides caching for dabs into the brush paintop.
void setTexturePostprocessing(KisTextureOption *option)
MirrorProperties apply(const KisPaintInformation &info) const
QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface) const
void readOptionSetting(KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
bool hasImprecisePositionOptions() const
void setHasImprecisePositionOptions(bool value)
bool isotropicSpacing() const
static QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)
static QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)
KoResourceSP resource() const noexcept
static TextBrushInitializationWorkaround * instance()
KisPropertiesConfigurationSP m_settings
~TextBrushInitializationWorkaround()
TextBrushInitializationWorkaround()
void preinitialize(KisPaintOpSettingsSP settings)
KisBrushSP tryGetBrush(const KisPropertiesConfigurationSP settings)
KisSpacingInformation effectiveSpacing(qreal dabWidth, qreal dabHeight, bool isotropicSpacing, qreal rotation, bool axesFlipped, qreal spacingVal, bool autoSpacingActive, qreal autoSpacingCoeff, qreal lodScale, const KisAirbrushOptionData *airbrushOption, const KisSpacingOption *spacingOption, const KisPaintInformation &pi)
KisSpacingInformation effectiveSpacing(qreal dabWidth, qreal dabHeight, qreal extraScale, bool distanceSpacingEnabled, bool isotropicSpacing, qreal rotation, bool axesFlipped, qreal spacingVal, bool autoSpacingActive, qreal autoSpacingCoeff, qreal lodScale)
bool checkSizeTooSmall(qreal scale, qreal width, qreal height)