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) : m_dab(0)
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 if(!m_dab || m_dab->colorSpace() != cs)
00058 m_dab = new KisPaintDevice(cs, "dab");
00059 Q_CHECK_PTR(m_dab);
00060
00061 KisColor kc = m_painter->paintColor();
00062
00063 KisColorSpace * colorSpace = m_dab->colorSpace();
00064
00065 Q_INT32 pixelSize = colorSpace->pixelSize();
00066
00067 Q_INT32 maskWidth = mask->width();
00068 Q_INT32 maskHeight = mask->height();
00069
00070
00071 kc.convertTo(colorSpace);
00072
00073 KisHLineIteratorPixel hiter = m_dab->createHLineIterator(0, 0, maskWidth, true);
00074 for (int y = 0; y < maskHeight; y++)
00075 {
00076 int x=0;
00077 while(! hiter.isDone())
00078 {
00079
00080 colorSpace->setAlpha(kc.data(), mask->alphaAt(x++, y), 1);
00081 memcpy(hiter.rawData(), kc.data(), pixelSize);
00082 ++hiter;
00083 }
00084 hiter.nextRow();
00085 }
00086
00087 return m_dab;
00088 }
00089
00090 void KisPaintOp::splitCoordinate(double coordinate, Q_INT32 *whole, double *fraction)
00091 {
00092 Q_INT32 i = static_cast<Q_INT32>(coordinate);
00093
00094 if (coordinate < 0) {
00095
00096
00097 i--;
00098 }
00099
00100 double f = coordinate - i;
00101
00102 *whole = i;
00103 *fraction = f;
00104 }
00105
00106 void KisPaintOp::setSource(KisPaintDeviceSP p) {
00107 Q_ASSERT(p);
00108 m_source = p;
00109 }
00110
00111
00112 KisPaintOpSettings* KisPaintOpFactory::settings(QWidget* , const KisInputDevice& ) { return 0; }
|