[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/krita/tools
From:       Bart Coppens <kde () bartcoppens ! be>
Date:       2004-09-26 14:48:22
Message-ID: 20040926144822.92687126DD () office ! kde ! org
[Download RAW message or body]

CVS commit by coppens: 

Now the painting on a temporary layer 'works'. Ugly, hacky and slow, though...


  M +20 -7     kis_tool_freehand.cc   1.14


--- koffice/krita/tools/kis_tool_freehand.cc  #1.13:1.14
@@ -129,13 +129,17 @@ void KisToolFreehand::initPaint(KisEvent
                         delete m_painter;
                 if (m_useTempLayer) {
-                        m_target = new KisLayer(currentImage(), device->width(), \
device->height(), "temp", OPACITY_OPAQUE); +                        // XXX ugly! \
hacky! +                        m_target = \
dynamic_cast<KisDoc*>(m_subject->document())->layerAdd( +                             \
currentImage(), device->width(), device->height(), "temp", OPACITY_OPAQUE);  \
                KisFillPainter painter(m_target.data());
                         painter.eraseRect(0, 0, m_target -> width(), m_target -> \
height());  painter.end();
+                        m_target -> setCompositeOp(m_compositeOp);
                         dynamic_cast<KisLayer*>(m_target.data()) -> \
setVisible(true);  // XXX doesn't look very good I'm afraid
                         currentImage() -> \
                add(dynamic_cast<KisLayer*>(m_target.data()),
-                                              currentImage() -> \
index(dynamic_cast<KisLayer*>(device.data()) + 1)); +                                \
                currentImage() -> index(dynamic_cast<KisLayer*>(device.data())) + 1);
                         m_target = currentImage() -> \
activate(dynamic_cast<KisLayer*>(m_target.data())); +                        \
currentImage() -> notify();  } else {
                         m_target = device;
@@ -149,6 +153,11 @@ void KisToolFreehand::initPaint(KisEvent
         m_painter -> setBackgroundColor(m_subject -> bgColor());
         m_painter -> setBrush(m_subject -> currentBrush());
+        // if you're drawing on a temporary layer, the layer already sets this
         m_painter -> setOpacity(m_opacity);
+        if (m_useTempLayer) {
+                m_painter -> setCompositeOp(COMPOSITE_OVER);
+        } else {
         m_painter -> setCompositeOp(m_compositeOp);
+        }
 
         // Set the cursor -- ideally. this should be a mask created from the brush,
@@ -172,11 +181,15 @@ void KisToolFreehand::endPaint() 
                                 m_painter -> endTransaction();
                                 KisPainter painter( m_source );
+                                painter.setCompositeOp(m_compositeOp);
                                 painter.beginTransaction(m_transactionText);
-                                painter.bitBlt(0, 0,  m_painter -> compositeOp(), \
m_target, m_painter -> opacity(), +                                painter.bitBlt(0, \
                0,  m_compositeOp, m_target, OPACITY_OPAQUE,
                                                0, 0, m_source -> width() - 1, \
                m_source -> width() - 1);
                                 adapter -> addCommand(painter.endTransaction());
-                                currentImage() -> \
rm(dynamic_cast<KisLayer*>(m_target.data())); +                                \
//currentImage() -> rm(dynamic_cast<KisLayer*>(m_target.data())); +                   \
dynamic_cast<KisDoc*>(m_subject->document())->layerRemove( +                          \
                currentImage(), dynamic_cast<KisLayer*>(m_target.data()));
                                 currentImage() -> \
                activate(dynamic_cast<KisLayer*>(m_source.data()));
-                                delete m_target;
+                                // looks like deleting this isn't good for undo?
+                                //delete m_target;
                         } else {
                                 adapter -> addCommand(m_painter->endTransaction());


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic