File indexing completed on 2024-06-16 04:12:12
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_LS_UTILS_H 0008 #define __KIS_LS_UTILS_H 0009 0010 #include "kis_types.h" 0011 #include "kritaimage_export.h" 0012 0013 #include "kis_lod_transform.h" 0014 #include <KoPattern.h> 0015 0016 struct psd_layer_effects_context; 0017 class psd_layer_effects_shadow_base; 0018 struct psd_layer_effects_overlay_base; 0019 class KisLayerStyleFilterEnvironment; 0020 0021 class KisMultipleProjection; 0022 class KisCachedSelection; 0023 0024 0025 namespace KisLsUtils 0026 { 0027 0028 QRect growSelectionUniform(KisPixelSelectionSP selection, int growSize, const QRect &applyRect); 0029 0030 KRITAIMAGE_EXPORT void selectionFromAlphaChannel(KisPaintDeviceSP srcDevice, 0031 KisSelectionSP dstSelection, 0032 const QRect &srcRect); 0033 0034 void findEdge(KisPixelSelectionSP selection, const QRect &applyRect, const bool edgeHidden); 0035 QRect growRectFromRadius(const QRect &rc, int radius); 0036 void applyGaussianWithTransaction(KisPixelSelectionSP selection, 0037 const QRect &applyRect, 0038 qreal radius); 0039 0040 static const int FULL_PERCENT_RANGE = 100; 0041 void adjustRange(KisPixelSelectionSP selection, const QRect &applyRect, const int range); 0042 0043 void applyContourCorrection(KisPixelSelectionSP selection, 0044 const QRect &applyRect, 0045 const quint8 *lookup_table, 0046 bool antiAliased, 0047 bool edgeHidden); 0048 0049 extern const int noiseNeedBorder; 0050 0051 void applyNoise(KisPixelSelectionSP selection, 0052 const QRect &applyRect, 0053 int noise, 0054 const psd_layer_effects_context *context, 0055 KisLayerStyleFilterEnvironment *env); 0056 0057 void knockOutSelection(KisPixelSelectionSP selection, 0058 KisPixelSelectionSP knockOutSelection, 0059 const QRect &srcRect, 0060 const QRect &dstRect, 0061 const QRect &totalNeedRect, 0062 const bool knockOutInverted); 0063 0064 void fillPattern(KisPaintDeviceSP fillDevice, 0065 const QRect &applyRect, 0066 KisLayerStyleFilterEnvironment *env, 0067 int scale, 0068 KoPatternSP pattern, 0069 int horizontalPhase, 0070 int verticalPhase, 0071 bool alignWithLayer); 0072 0073 void fillOverlayDevice(KisPaintDeviceSP fillDevice, 0074 const QRect &applyRect, 0075 const psd_layer_effects_overlay_base *config, 0076 KisResourcesInterfaceSP resourcesInterface, 0077 KisLayerStyleFilterEnvironment *env); 0078 0079 void applyFinalSelection(const QString &projectionId, 0080 KisSelectionSP baseSelection, 0081 KisPaintDeviceSP srcDevice, 0082 KisMultipleProjection *dst, 0083 const QRect &srcRect, 0084 const QRect &dstRect, 0085 const psd_layer_effects_context *context, 0086 const psd_layer_effects_shadow_base *config, KisResourcesInterfaceSP resourcesInterface, 0087 const KisLayerStyleFilterEnvironment *env); 0088 0089 bool checkEffectEnabled(const psd_layer_effects_shadow_base *config, KisMultipleProjection *dst); 0090 0091 template<class ConfigStruct> 0092 struct LodWrapper 0093 { 0094 LodWrapper(int lod, 0095 const ConfigStruct *srcStruct) 0096 0097 { 0098 if (lod > 0) { 0099 storage.reset(new ConfigStruct(*srcStruct)); 0100 0101 const qreal lodScale = KisLodTransform::lodToScale(lod); 0102 storage->scaleLinearSizes(lodScale); 0103 0104 config = storage.data(); 0105 } else { 0106 config = srcStruct; 0107 } 0108 } 0109 0110 const ConfigStruct *config; 0111 0112 private: 0113 QScopedPointer<ConfigStruct> storage; 0114 }; 0115 0116 } 0117 0118 #endif /* __KIS_LS_UTILS_H */