File indexing completed on 2024-06-16 04:17:26

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_PAINTOP_PLUGIN_UTILS_H
0008 #define __KIS_PAINTOP_PLUGIN_UTILS_H
0009 
0010 #include "kis_paint_information.h"
0011 #include "kis_paintop_utils.h"
0012 #include "kis_paintop_settings.h"
0013 #include "KisAirbrushOptionData.h"
0014 #include "KisStandardOptions.h"
0015 #include "KisAirbrushOptionData.h"
0016 #include "KisSpacingOption.h"
0017 
0018 namespace KisPaintOpPluginUtils {
0019 
0020 /**
0021  * Similar to KisPaintOpUtils::effectiveSpacing, but some of the required parameters are obtained
0022  * from the provided configuration options. This function assumes a common configuration where
0023  * spacing and airbrush settings are configured through a KisSpacingOption and
0024  * KisAirbrushOptionData. This type of configuration is used by several different paintops.
0025  * @param dabWidth - The dab width.
0026  * @param dabHeight - The dab height.
0027  * @param isotropicSpacing - If @c true the spacing should be isotropic.
0028  * @param rotation - The rotation angle in radians.
0029  * @param axesFlipped - If @c true the axes should be flipped.
0030  * @param spacingVal - The spacing value.
0031  * @param autoSpacingActive - If @c true the autospacing will be activated.
0032  * @param autoSpacingCoeff - The autospacing coefficient.
0033  * @param lodScale - The level of details scale.
0034  * @param airbrushOption - The airbrushing option. Can be null for paintops that don't support
0035  *                         airbrushing.
0036  * @param spacingOption - The pressure-curve spacing option. Can be null for paintops that don't
0037  *                        support pressure-based spacing.
0038  * @param pi - The paint information.
0039  * @see KisPaintInformation
0040  */
0041 KisSpacingInformation effectiveSpacing(qreal dabWidth,
0042                                        qreal dabHeight,
0043                                        bool isotropicSpacing,
0044                                        qreal rotation,
0045                                        bool axesFlipped,
0046                                        qreal spacingVal,
0047                                        bool autoSpacingActive,
0048                                        qreal autoSpacingCoeff,
0049                                        qreal lodScale,
0050                                        const KisAirbrushOptionData *airbrushOption,
0051                                        const KisSpacingOption *spacingOption,
0052                                        const KisPaintInformation &pi)
0053 {
0054     // Extract required parameters.
0055     bool distanceSpacingEnabled = true;
0056     if (airbrushOption && airbrushOption->isChecked) {
0057         distanceSpacingEnabled = !airbrushOption->ignoreSpacing;
0058     }
0059     qreal extraScale = 1.0;
0060     if (spacingOption && spacingOption->isChecked()) {
0061         extraScale = spacingOption->apply(pi);
0062     }
0063 
0064     return KisPaintOpUtils::effectiveSpacing(dabWidth, dabHeight, extraScale,
0065                                              distanceSpacingEnabled, isotropicSpacing, rotation,
0066                                              axesFlipped, spacingVal, autoSpacingActive,
0067                                              autoSpacingCoeff, lodScale);
0068 }
0069 
0070 /**
0071  * Similar to KisPaintOpUtils::effectiveTiming, but some of the required parameters are obtained
0072  * from the provided configuration options. This function assumes a common configuration where
0073  * airbrush settings are configured through a KisAirbrushOptionData and KisRateOption. This type
0074  * of configuration is used by several different paintops.
0075  * @param airbrushOption - The airbrushing option. Can be null for paintops that don't support
0076  *                         airbrushing.
0077  * @param rateOption - The pressure-curve airbrush rate option. Can be null for paintops that don't
0078  *                     support a pressure-based airbrush rate.
0079  * @param pi - The paint information.
0080  * @see KisPaintInformation
0081  */
0082 KisTimingInformation effectiveTiming(const KisAirbrushOptionData *airbrushOption,
0083                                      const KisRateOption *rateOption,
0084                                      const KisPaintInformation &pi)
0085 {
0086     // Extract required parameters.
0087     bool timingEnabled = false;
0088     qreal timingInterval = LONG_TIME;
0089     if (airbrushOption) {
0090         timingEnabled = airbrushOption->isChecked;
0091         timingInterval = 1000.0 / airbrushOption->airbrushRate;
0092     }
0093     qreal rateExtraScale = 1.0;
0094     if (rateOption && rateOption->isChecked()) {
0095         rateExtraScale = rateOption->apply(pi);
0096     }
0097 
0098     return KisPaintOpUtils::effectiveTiming(timingEnabled, timingInterval, rateExtraScale);
0099 }
0100 
0101 }
0102 
0103 #endif /* __KIS_PAINTOP_PLUGIN_UTILS_H */