diff --git a/ImpressionistDoc.cpp b/ImpressionistDoc.cpp index a3696af..c4ece37 100644 --- a/ImpressionistDoc.cpp +++ b/ImpressionistDoc.cpp @@ -254,6 +254,7 @@ int ImpressionistDoc::loadImageFromData(unsigned char* dataPtr, const int width, } delete[] m_ucPainting; delete[] m_ucEdge; + delete[] m_ucBackup; delete[] viewport.dataPtr; m_ucBitmap = dataPtr; @@ -265,9 +266,11 @@ int ImpressionistDoc::loadImageFromData(unsigned char* dataPtr, const int width, m_ucPainting = new unsigned char[width*height * 3]; m_ucHistory = new unsigned char[width*height * 3]; m_ucEdge = new unsigned char[width*height * 3]; + m_ucBackup = new unsigned char[width*height * 3]; memset(m_ucPainting, 0, width*height * 3); memset(m_ucHistory, 0, width*height * 3); memset(m_ucEdge, 0, width*height * 3); + memset(m_ucBackup, 0, width*height * 3); m_pUI->m_mainWindow->resize(m_pUI->m_mainWindow->x(), m_pUI->m_mainWindow->y(), diff --git a/PaintView.cpp b/PaintView.cpp index 0edec57..55ef163 100644 --- a/PaintView.cpp +++ b/PaintView.cpp @@ -60,8 +60,9 @@ void PaintView::updateViewport() }); m_pPaintBitstart = m_pDoc->viewport.dataPtr + 3 * ((m_pDoc->m_nPaintWidth * startrow) + scrollpos.x); - RestoreContent(); + m_pPaintBitstart = m_pDoc->m_ucPainting + + 3 * ((m_pDoc->m_nPaintWidth * startrow) + scrollpos.x); } void PaintView::updatePainting() @@ -117,10 +118,10 @@ void PaintView::draw() drawWidth = min( m_nWindowWidth, m_pDoc->m_nPaintWidth ); drawHeight = min( m_nWindowHeight, m_pDoc->m_nPaintHeight ); - // if (uc_backup) - // { - // memcpy(m_pDoc->m_ucPainting, uc_backup, drawWidth*drawHeight * 3); - // } + if (m_pDoc->m_ucBackup) + { + memcpy(m_pDoc->m_ucPainting, m_pDoc->m_ucBackup, drawWidth*drawHeight * 3); + } startrow = m_pDoc->m_nPaintHeight - (scrollpos.y + drawHeight); if ( startrow < 0 ) startrow = 0; @@ -139,7 +140,7 @@ void PaintView::draw() if ( m_pDoc->m_ucPainting && !isAnEvent) { RestoreContent(); - // updateViewport(); + updateViewport(); } bool willSave = false; @@ -202,15 +203,6 @@ void PaintView::draw() painterly(); willPainterly = false; willSave = true; - } else - { - // for debugging purpose - // Point source(coord.x + m_nStartCol, m_nEndRow - coord.y); - // Point target(coord.x, m_nWindowHeight - coord.y); - // if(source.x>=0 && source.y>=0 && source.x <= m_nWindowWidth-1 && source.y <= m_nWindowHeight) - // { - // m_pDoc->m_pCurrentBrush->BrushMove(source, target); - // } } @@ -226,11 +218,9 @@ void PaintView::draw() { SaveCurrentContent(); glFlush(); - delete[] uc_backup; - uc_backup = new unsigned char[drawWidth*drawHeight * 3]; - memcpy(uc_backup, m_pDoc->m_ucPainting, drawWidth*drawHeight * 3); - // updateViewport(); + memcpy(m_pDoc->m_ucBackup, m_pDoc->m_ucPainting, drawWidth*drawHeight * 3); } + updateViewport(); VideoProcessor::continueWriteStream(); diff --git a/PaintView.h b/PaintView.h index 24cc574..5244811 100644 --- a/PaintView.h +++ b/PaintView.h @@ -61,7 +61,6 @@ class PaintView : public Fl_Gl_Window std::default_random_engine rng = std::default_random_engine(std::chrono::system_clock::now().time_since_epoch().count()); Point scrollpos{0, 0}; int startrow = 0; - unsigned char *uc_backup = NULL; void updateViewport(); void updatePainting();