Diffstat (limited to 'noncore/graphics/drawpad/drawpadcanvas.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.cpp | 138 |
1 files changed, 82 insertions, 56 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp index 08f7b66..49a8cf0 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.cpp +++ b/noncore/graphics/drawpad/drawpadcanvas.cpp @@ -17,2 +17,3 @@ #include "drawpad.h" +#include "newpagedialog.h" @@ -139,13 +140,8 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch) -DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name, WFlags f) - : QWidget(parent, name, f) +DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) + : QScrollView(parent, name) { - setBackgroundMode(QWidget::PaletteBase); - m_pDrawPad = drawPad; m_pages.setAutoDelete(true); - m_pages.append(new QPixmap(width(), height())); - m_pages.current()->fill(Qt::white); m_pageBackups.setAutoDelete(true); - m_pageBackups.append(new QPixmap(*(m_pages.current()))); } @@ -171,3 +167,3 @@ void DrawPadCanvas::load(QIODevice* ioDevice) if (m_pages.isEmpty()) { - m_pages.append(new QPixmap(width(), height())); + m_pages.append(new QPixmap(contentsRect().size())); m_pages.current()->fill(Qt::white); @@ -178,3 +174,22 @@ void DrawPadCanvas::load(QIODevice* ioDevice) - repaint(); + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); + + emit pagesChanged(); + emit pageBackupsChanged(); +} + +void DrawPadCanvas::initialPage() +{ + m_pages.append(new QPixmap(234, 252)); + m_pages.current()->fill(Qt::white); + + m_pageBackups.clear(); + m_pageBackups.append(new QPixmap(*(m_pages.current()))); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); + + emit pagesChanged(); + emit pageBackupsChanged(); } @@ -231,2 +246,12 @@ QPixmap* DrawPadCanvas::currentPage() +uint DrawPadCanvas::pagePosition() +{ + return (m_pages.at() + 1); +} + +uint DrawPadCanvas::pageCount() +{ + return m_pages.count(); +} + void DrawPadCanvas::clearAll() @@ -235,3 +260,3 @@ void DrawPadCanvas::clearAll() - m_pages.append(new QPixmap(width(), height())); + m_pages.append(new QPixmap(contentsRect().size())); m_pages.current()->fill(Qt::white); @@ -241,3 +266,4 @@ void DrawPadCanvas::clearAll() - repaint(); + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -249,10 +275,21 @@ void DrawPadCanvas::newPage() { - m_pages.insert(m_pages.at() + 1, new QPixmap(width(), height())); - m_pages.current()->fill(Qt::white); - m_pageBackups.clear(); - m_pageBackups.append(new QPixmap(*(m_pages.current()))); - repaint(); + QRect rect = contentsRect(); - emit pagesChanged(); - emit pageBackupsChanged(); + NewPageDialog newPageDialog(this); + newPageDialog.setWidth(rect.width()); + newPageDialog.setHeight(rect.height()); + + if (newPageDialog.exec() == QDialog::Accepted) { + m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.width(), newPageDialog.height())); + m_pages.current()->fill(Qt::white); + + m_pageBackups.clear(); + m_pageBackups.append(new QPixmap(*(m_pages.current()))); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); + + emit pagesChanged(); + emit pageBackupsChanged(); + } } @@ -262,3 +299,4 @@ void DrawPadCanvas::clearPage() m_pages.current()->fill(Qt::white); - repaint(); + + viewport()->update(); } @@ -270,3 +308,3 @@ void DrawPadCanvas::deletePage() if (m_pages.isEmpty()) { - m_pages.append(new QPixmap(width(), height())); + m_pages.append(new QPixmap(contentsRect().size())); m_pages.current()->fill(Qt::white); @@ -277,3 +315,4 @@ void DrawPadCanvas::deletePage() - repaint(); + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -306,3 +345,4 @@ void DrawPadCanvas::undo() *(m_pages.current()) = *(m_pageBackups.prev()); - repaint(); + + viewport()->update(); @@ -314,3 +354,4 @@ void DrawPadCanvas::redo() *(m_pages.current()) = *(m_pageBackups.next()); - repaint(); + + viewport()->update(); @@ -324,3 +365,5 @@ void DrawPadCanvas::goFirstPage() m_pageBackups.append(new QPixmap(*(m_pages.current()))); - repaint(); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -335,3 +378,5 @@ void DrawPadCanvas::goPreviousPage() m_pageBackups.append(new QPixmap(*(m_pages.current()))); - repaint(); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -346,3 +391,5 @@ void DrawPadCanvas::goNextPage() m_pageBackups.append(new QPixmap(*(m_pages.current()))); - repaint(); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -357,3 +404,5 @@ void DrawPadCanvas::goLastPage() m_pageBackups.append(new QPixmap(*(m_pages.current()))); - repaint(); + + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); @@ -363,3 +412,3 @@ void DrawPadCanvas::goLastPage() -void DrawPadCanvas::mousePressEvent(QMouseEvent* e) +void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) { @@ -368,3 +417,3 @@ void DrawPadCanvas::mousePressEvent(QMouseEvent* e) -void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) +void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) { @@ -386,3 +435,3 @@ void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) -void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e) +void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) { @@ -391,30 +440,7 @@ void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e) -void DrawPadCanvas::resizeEvent(QResizeEvent* e) +void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) { - QWidget::resizeEvent(e); - - QListIterator<QPixmap> bufferIterator(m_pages); + QRect clipRect(cx, cy, cw, ch); - for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { - int w = width() > bufferIterator.current()->width() ? width() : bufferIterator.current()->width(); - int h = height() > bufferIterator.current()->height() ? height() : bufferIterator.current()->height(); - - QPixmap tmpPixmap(*(bufferIterator.current())); - bufferIterator.current()->resize(w, h); - bufferIterator.current()->fill(Qt::white); - - bitBlt(bufferIterator.current(), 0, 0, &tmpPixmap, 0, 0, tmpPixmap.width(), tmpPixmap.height()); - } -} - -void DrawPadCanvas::paintEvent(QPaintEvent* e) -{ - QWidget::paintEvent(e); - - QArray<QRect> rects = e->region().rects(); - - for (uint i = 0; i < rects.count(); i++) { - QRect r = rects[i]; - bitBlt(this, r.x(), r.y(), m_pages.current(), r.x(), r.y(), r.width(), r.height()); - } + p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect); } |