summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/drawpadcanvas.cpp
Side-by-side diff
Diffstat (limited to 'noncore/graphics/drawpad/drawpadcanvas.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp138
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);
}