krita
kis_convolution_painter.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KIS_CONVOLUTION_PAINTER_H_
00019 #define KIS_CONVOLUTION_PAINTER_H_
00020
00021 #include <qimage.h>
00022
00023 #include "ksharedptr.h"
00024 #include "kis_types.h"
00025 #include "kis_painter.h"
00026
00027 #include "koffice_export.h"
00028
00029 enum KisConvolutionBorderOp {
00030 BORDER_DEFAULT_FILL = 0,
00031
00032 BORDER_WRAP = 1,
00033 BORDER_REPEAT = 2,
00034 BORDER_AVOID = 3
00035 };
00036
00037 class KisKernel;
00038 typedef KSharedPtr<KisKernel> KisKernelSP;
00039
00040 class KisKernel : public KShared
00041 {
00042
00043 public:
00044
00045 Q_UINT32 width;
00046 Q_UINT32 height;
00047 Q_INT32 offset;
00048 Q_INT32 factor;
00049 Q_INT32 * data;
00050
00051 KisKernel() : width(0), height(0), offset(0), factor(0), data(0) {};
00052
00053 virtual ~KisKernel() { delete [] data; };
00054
00055 static KisKernelSP fromQImage(const QImage& img);
00056
00057 };
00058
00059
00060 class KRITACORE_EXPORT KisConvolutionPainter : public KisPainter
00061 {
00062
00063 typedef KisPainter super;
00064
00065 public:
00066
00067 KisConvolutionPainter();
00068 KisConvolutionPainter(KisPaintDeviceSP device);
00069
00083 void applyMatrix(KisKernelSP kernel, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h,
00084 KisConvolutionBorderOp borderOp = BORDER_AVOID,
00085 KisChannelInfo::enumChannelFlags channelFlags = KisChannelInfo::FLAG_COLOR);
00086 private:
00090 void applyMatrixRepeat(KisKernelSP kernel, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h,
00091 KisChannelInfo::enumChannelFlags channelFlags);
00092
00093
00094 };
00095 #endif //KIS_CONVOLUTION_PAINTER_H_
|