File indexing completed on 2024-05-26 04:29:11
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KOALPHADARKENPARAMSWRAPPER_H 0008 #define KOALPHADARKENPARAMSWRAPPER_H 0009 0010 #include <KoCompositeOp.h> 0011 #include "KoColorSpaceMaths.h" 0012 0013 bool KRITAPIGMENT_EXPORT useCreamyAlphaDarken(); 0014 0015 struct KoAlphaDarkenParamsWrapperHard { 0016 KoAlphaDarkenParamsWrapperHard(const KoCompositeOp::ParameterInfo& params) 0017 : opacity(params.flow * params.opacity), 0018 flow(params.flow), 0019 averageOpacity(params.flow * (*params.lastOpacity)) 0020 { 0021 } 0022 float opacity; 0023 float flow; 0024 float averageOpacity; 0025 0026 template <typename T> 0027 static inline T calculateZeroFlowAlpha(T srcAlpha, T dstAlpha, T normCoeff) { 0028 return srcAlpha + dstAlpha - srcAlpha * dstAlpha * normCoeff; 0029 } 0030 0031 template <typename T> 0032 static inline T calculateZeroFlowAlpha(T srcAlpha, T dstAlpha) { 0033 return srcAlpha + dstAlpha - srcAlpha * dstAlpha; 0034 } 0035 0036 template<typename channels_type> 0037 static inline channels_type calculateZeroFlowAlphaLegacy(channels_type srcAlpha, channels_type dstAlpha) { 0038 return Arithmetic::unionShapeOpacity(srcAlpha, dstAlpha); 0039 } 0040 }; 0041 0042 0043 struct KoAlphaDarkenParamsWrapperCreamy { 0044 KoAlphaDarkenParamsWrapperCreamy(const KoCompositeOp::ParameterInfo& params) 0045 : opacity(params.opacity), 0046 flow(params.flow), 0047 averageOpacity(*params.lastOpacity) 0048 { 0049 } 0050 float opacity; 0051 float flow; 0052 float averageOpacity; 0053 0054 template <typename T> 0055 static inline T calculateZeroFlowAlpha(T srcAlpha, T dstAlpha, T normCoeff) { 0056 Q_UNUSED(srcAlpha); 0057 Q_UNUSED(normCoeff); 0058 0059 return dstAlpha; 0060 } 0061 0062 template <typename T> 0063 static inline T calculateZeroFlowAlpha(T srcAlpha, T dstAlpha) { 0064 Q_UNUSED(srcAlpha); 0065 0066 return dstAlpha; 0067 } 0068 0069 template<typename channels_type> 0070 static inline channels_type calculateZeroFlowAlphaLegacy(channels_type srcAlpha, channels_type dstAlpha) { 0071 Q_UNUSED(srcAlpha); 0072 return dstAlpha; 0073 } 0074 }; 0075 0076 #endif // KOALPHADARKENPARAMSWRAPPER_H