krita
kis_paintop.cc00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "qwidget.h"
00023 #include "kis_painter.h"
00024 #include "kis_layer.h"
00025 #include "kis_types.h"
00026 #include "kis_paintop.h"
00027 #include "kis_alpha_mask.h"
00028 #include "kis_point.h"
00029 #include "kis_colorspace.h"
00030 #include "kis_global.h"
00031 #include "kis_iterators_pixel.h"
00032 #include "kis_color.h"
00033
00034 KisPaintOp::KisPaintOp(KisPainter * painter)
00035 {
00036 m_painter = painter;
00037 setSource(painter->device());
00038 }
00039
00040 KisPaintOp::~KisPaintOp()
00041 {
00042 }
00043
00044 KisPaintDeviceSP KisPaintOp::computeDab(KisAlphaMaskSP mask) {
00045 return computeDab(mask, m_painter->device()->colorSpace());
00046 }
00047
00048 KisPaintDeviceSP KisPaintOp::computeDab(KisAlphaMaskSP mask, KisColorSpace *cs)
00049 {
00050
00051
00052
00053
00054
00055
00056
00057 KisPaintDeviceSP dab = new KisPaintDevice(cs, "dab");
00058 Q_CHECK_PTR(dab);
00059
00060 KisColor kc = m_painter->paintColor();
00061
00062 KisColorSpace * colorSpace = dab->colorSpace();
00063
00064 Q_INT32 pixelSize = colorSpace->pixelSize();
00065
00066 Q_INT32 maskWidth = mask->width();
00067 Q_INT32 maskHeight = mask->height();
00068
00069
00070 kc.convertTo(colorSpace);
00071
00072 for (int y = 0; y < maskHeight; y++)
00073 {
00074 KisHLineIteratorPixel hiter = dab->createHLineIterator(0, y, maskWidth, true);
00075 int x=0;
00076 while(! hiter.isDone())
00077 {
00078
00079 colorSpace->setAlpha(kc.data(), mask->alphaAt(x++, y), 1);
00080 memcpy(hiter.rawData(), kc.data(), pixelSize);
00081 ++hiter;
00082 }
00083 }
00084
00085 return dab;
00086 }
00087
00088 void KisPaintOp::splitCoordinate(double coordinate, Q_INT32 *whole, double *fraction)
00089 {
00090 Q_INT32 i = static_cast<Q_INT32>(coordinate);
00091
00092 if (coordinate < 0) {
00093
00094
00095 i--;
00096 }
00097
00098 double f = coordinate - i;
00099
00100 *whole = i;
00101 *fraction = f;
00102 }
00103
00104 void KisPaintOp::setSource(KisPaintDeviceSP p) {
00105 Q_ASSERT(p);
00106 m_source = p;
00107 }
00108
00109
00110 KisPaintOpSettings* KisPaintOpFactory::settings(QWidget* , const KisInputDevice& ) { return 0; }
00111
|