summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpad.cpp39
-rw-r--r--noncore/graphics/drawpad/drawpad.h3
-rw-r--r--noncore/graphics/drawpad/drawpad.pro8
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp138
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.h18
-rw-r--r--noncore/graphics/drawpad/ellipsedrawmode.cpp63
-rw-r--r--noncore/graphics/drawpad/ellipsedrawmode.h16
-rw-r--r--noncore/graphics/drawpad/erasedrawmode.cpp8
-rw-r--r--noncore/graphics/drawpad/filldrawmode.cpp2
-rw-r--r--noncore/graphics/drawpad/linedrawmode.cpp60
-rw-r--r--noncore/graphics/drawpad/linedrawmode.h16
-rw-r--r--noncore/graphics/drawpad/newpagedialog.cpp61
-rw-r--r--noncore/graphics/drawpad/newpagedialog.h40
-rw-r--r--noncore/graphics/drawpad/pointdrawmode.cpp8
-rw-r--r--noncore/graphics/drawpad/rectangledrawmode.cpp60
-rw-r--r--noncore/graphics/drawpad/rectangledrawmode.h16
-rw-r--r--noncore/graphics/drawpad/shapedrawmode.cpp92
-rw-r--r--noncore/graphics/drawpad/shapedrawmode.h41
18 files changed, 415 insertions, 274 deletions
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp
index f67bef8..e94187f 100644
--- a/noncore/graphics/drawpad/drawpad.cpp
+++ b/noncore/graphics/drawpad/drawpad.cpp
@@ -37,7 +37,5 @@
-DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
- : QMainWindow(parent, name, f)
+DrawPad::DrawPad(QWidget* parent, const char* name)
+ : QMainWindow(parent, name)
{
- setCaption(tr("DrawPad"));
-
// init members
@@ -45,12 +43,7 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pDrawPadCanvas = new DrawPadCanvas(this, this);
+
connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateNavigationToolButtons()));
+ connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateCaption()));
connect(m_pDrawPadCanvas, SIGNAL(pageBackupsChanged()), this, SLOT(updateUndoRedoToolButtons()));
- QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
-
- if (file.open(IO_ReadOnly)) {
- m_pDrawPadCanvas->load(&file);
- file.close();
- }
-
setCentralWidget(m_pDrawPadCanvas);
@@ -108,4 +101,2 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
- updateUndoRedoToolButtons();
-
m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this);
@@ -126,4 +117,2 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
- updateNavigationToolButtons();
-
// init draw mode toolbar
@@ -219,2 +208,13 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
brushColorPopupMenu->activateItemAt(1);
+
+ // init pages
+
+ QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
+
+ if (file.open(IO_ReadOnly)) {
+ m_pDrawPadCanvas->load(&file);
+ file.close();
+ } else {
+ m_pDrawPadCanvas->initialPage();
+ }
}
@@ -381 +381,10 @@ void DrawPad::updateNavigationToolButtons()
}
+
+void DrawPad::updateCaption()
+{
+ uint pagePosition = m_pDrawPadCanvas->pagePosition();
+ uint pageCount = m_pDrawPadCanvas->pageCount();
+
+ setCaption(tr("DrawPad") + " - " + tr("Page") + " "
+ + QString::number(pagePosition) + "/" + QString::number(pageCount));
+}
diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h
index 35b3be4..c49a559 100644
--- a/noncore/graphics/drawpad/drawpad.h
+++ b/noncore/graphics/drawpad/drawpad.h
@@ -33,3 +33,3 @@ class DrawPad : public QMainWindow
public:
- DrawPad(QWidget* parent = 0, const char* name = 0, WFlags f = WType_TopLevel);
+ DrawPad(QWidget* parent = 0, const char* name = 0);
~DrawPad();
@@ -56,2 +56,3 @@ private slots:
void updateNavigationToolButtons();
+ void updateCaption();
diff --git a/noncore/graphics/drawpad/drawpad.pro b/noncore/graphics/drawpad/drawpad.pro
index 407a039..b0eb009 100644
--- a/noncore/graphics/drawpad/drawpad.pro
+++ b/noncore/graphics/drawpad/drawpad.pro
@@ -11,4 +11,6 @@ HEADERS = colordialog.h \
linedrawmode.h \
+ newpagedialog.h \
pointdrawmode.h \
- rectangledrawmode.h
+ rectangledrawmode.h \
+ shapedrawmode.h
SOURCES = colordialog.cpp \
@@ -23,4 +25,6 @@ SOURCES = colordialog.cpp \
main.cpp \
+ newpagedialog.cpp \
pointdrawmode.cpp \
- rectangledrawmode.cpp
+ rectangledrawmode.cpp \
+ shapedrawmode.cpp
INCLUDEPATH += $(OPIEDIR)/include \
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);
}
diff --git a/noncore/graphics/drawpad/drawpadcanvas.h b/noncore/graphics/drawpad/drawpadcanvas.h
index eddcb43..4836a3f 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.h
+++ b/noncore/graphics/drawpad/drawpadcanvas.h
@@ -16,3 +16,3 @@
-#include <qwidget.h>
+#include <qscrollview.h>
@@ -25,3 +25,3 @@ class QPixmap;
-class DrawPadCanvas : public QWidget
+class DrawPadCanvas : public QScrollView
{
@@ -30,3 +30,3 @@ class DrawPadCanvas : public QWidget
public:
- DrawPadCanvas(DrawPad* drawPad, QWidget* parent = 0, const char* name = 0, WFlags f = 0);
+ DrawPadCanvas(DrawPad* drawPad, QWidget* parent = 0, const char* name = 0);
~DrawPadCanvas();
@@ -34,2 +34,3 @@ public:
void load(QIODevice* ioDevice);
+ void initialPage();
void save(QIODevice* ioDevice);
@@ -42,2 +43,4 @@ public:
QPixmap* currentPage();
+ uint pagePosition();
+ uint pageCount();
@@ -62,7 +65,6 @@ signals:
protected:
- void mousePressEvent(QMouseEvent* e);
- void mouseReleaseEvent(QMouseEvent* e);
- void mouseMoveEvent(QMouseEvent* e);
- void resizeEvent(QResizeEvent* e);
- void paintEvent(QPaintEvent* e);
+ void contentsMousePressEvent(QMouseEvent* e);
+ void contentsMouseReleaseEvent(QMouseEvent* e);
+ void contentsMouseMoveEvent(QMouseEvent* e);
+ void drawContents(QPainter* p, int cx, int cy, int cw, int ch);
diff --git a/noncore/graphics/drawpad/ellipsedrawmode.cpp b/noncore/graphics/drawpad/ellipsedrawmode.cpp
index 12a1113..f9cfa73 100644
--- a/noncore/graphics/drawpad/ellipsedrawmode.cpp
+++ b/noncore/graphics/drawpad/ellipsedrawmode.cpp
@@ -22,6 +22,4 @@
EllipseDrawMode::EllipseDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
- : DrawMode(drawPad, drawPadCanvas)
+ : ShapeDrawMode(drawPad, drawPadCanvas)
{
- m_mousePressed = false;
- m_polyline.resize(3);
}
@@ -32,55 +30,16 @@ EllipseDrawMode::~EllipseDrawMode()
-void EllipseDrawMode::mousePressEvent(QMouseEvent* e)
+void EllipseDrawMode::drawFinalShape(QPainter& p)
{
- m_mousePressed = true;
- m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos();
+ p.setRasterOp(Qt::NotROP);
+ p.drawRect(QRect(m_polyline[2], m_polyline[0]));
+ p.setPen(m_pDrawPad->pen());
+ p.setRasterOp(Qt::CopyROP);
+ p.drawEllipse(QRect(m_polyline[2], m_polyline[0]));
}
-void EllipseDrawMode::mouseReleaseEvent(QMouseEvent* e)
+void EllipseDrawMode::drawTemporaryShape(QPainter& p)
{
- Q_UNUSED(e)
-
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setRasterOp(Qt::NotROP);
- painter.drawRect(QRect(m_polyline[2], m_polyline[0]));
- painter.setPen(m_pDrawPad->pen());
- painter.setRasterOp(Qt::CopyROP);
- painter.drawEllipse(QRect(m_polyline[2], m_polyline[0]));
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_mousePressed = false;
-}
-
-void EllipseDrawMode::mouseMoveEvent(QMouseEvent* e)
-{
- if (m_mousePressed) {
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setRasterOp(Qt::NotROP);
- m_polyline[0] = e->pos();
- painter.drawRect(QRect(m_polyline[2], m_polyline[1]));
- painter.drawRect(QRect(m_polyline[2], m_polyline[0]));
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_polyline[1] = m_polyline[0];
- }
+ p.setRasterOp(Qt::NotROP);
+ p.drawRect(QRect(m_polyline[2], m_polyline[1]));
+ p.drawRect(QRect(m_polyline[2], m_polyline[0]));
}
diff --git a/noncore/graphics/drawpad/ellipsedrawmode.h b/noncore/graphics/drawpad/ellipsedrawmode.h
index 4787518..0246caa 100644
--- a/noncore/graphics/drawpad/ellipsedrawmode.h
+++ b/noncore/graphics/drawpad/ellipsedrawmode.h
@@ -16,7 +16,5 @@
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class EllipseDrawMode : public DrawMode
+class EllipseDrawMode : public ShapeDrawMode
{
@@ -26,9 +24,5 @@ public:
- void mousePressEvent(QMouseEvent* e);
- void mouseReleaseEvent(QMouseEvent* e);
- void mouseMoveEvent(QMouseEvent* e);
-
-private:
- bool m_mousePressed;
- QPointArray m_polyline;
+protected:
+ void drawFinalShape(QPainter& p);
+ void drawTemporaryShape(QPainter& p);
};
diff --git a/noncore/graphics/drawpad/erasedrawmode.cpp b/noncore/graphics/drawpad/erasedrawmode.cpp
index 990cecb..0e585cc 100644
--- a/noncore/graphics/drawpad/erasedrawmode.cpp
+++ b/noncore/graphics/drawpad/erasedrawmode.cpp
@@ -65,3 +65,9 @@ void EraseDrawMode::mouseMoveEvent(QMouseEvent* e)
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+ QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
+ m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
+
+ bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
+ m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+
+ m_pDrawPadCanvas->viewport()->update(viewportRect);
}
diff --git a/noncore/graphics/drawpad/filldrawmode.cpp b/noncore/graphics/drawpad/filldrawmode.cpp
index 8f68550..1f81cd5 100644
--- a/noncore/graphics/drawpad/filldrawmode.cpp
+++ b/noncore/graphics/drawpad/filldrawmode.cpp
@@ -47,3 +47,3 @@ void FillDrawMode::mousePressEvent(QMouseEvent* e)
m_pDrawPadCanvas->currentPage()->convertFromImage(m_image);
- m_pDrawPadCanvas->repaint();
+ m_pDrawPadCanvas->viewport()->update();
}
diff --git a/noncore/graphics/drawpad/linedrawmode.cpp b/noncore/graphics/drawpad/linedrawmode.cpp
index 15445fc..d432fad 100644
--- a/noncore/graphics/drawpad/linedrawmode.cpp
+++ b/noncore/graphics/drawpad/linedrawmode.cpp
@@ -18,10 +18,5 @@
-#include <qpainter.h>
-#include <qpixmap.h>
-
LineDrawMode::LineDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
- : DrawMode(drawPad, drawPadCanvas)
+ : ShapeDrawMode(drawPad, drawPadCanvas)
{
- m_mousePressed = false;
- m_polyline.resize(3);
}
@@ -32,52 +27,13 @@ LineDrawMode::~LineDrawMode()
-void LineDrawMode::mousePressEvent(QMouseEvent* e)
+void LineDrawMode::drawFinalShape(QPainter& p)
{
- m_mousePressed = true;
- m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos();
+ p.setPen(m_pDrawPad->pen());
+ p.drawLine(m_polyline[2], m_polyline[0]);
}
-void LineDrawMode::mouseReleaseEvent(QMouseEvent* e)
+void LineDrawMode::drawTemporaryShape(QPainter& p)
{
- Q_UNUSED(e)
-
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setPen(m_pDrawPad->pen());
- painter.drawLine(m_polyline[2], m_polyline[0]);
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_mousePressed = false;
-}
-
-void LineDrawMode::mouseMoveEvent(QMouseEvent* e)
-{
- if (m_mousePressed) {
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setRasterOp(Qt::NotROP);
- m_polyline[0] = e->pos();
- painter.drawLine(m_polyline[2], m_polyline[1]);
- painter.drawLine(m_polyline[2], m_polyline[0]);
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_polyline[1] = m_polyline[0];
- }
+ p.setRasterOp(Qt::NotROP);
+ p.drawLine(m_polyline[2], m_polyline[1]);
+ p.drawLine(m_polyline[2], m_polyline[0]);
}
diff --git a/noncore/graphics/drawpad/linedrawmode.h b/noncore/graphics/drawpad/linedrawmode.h
index 25ae2cf..0ddd0ad 100644
--- a/noncore/graphics/drawpad/linedrawmode.h
+++ b/noncore/graphics/drawpad/linedrawmode.h
@@ -16,7 +16,5 @@
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class LineDrawMode : public DrawMode
+class LineDrawMode : public ShapeDrawMode
{
@@ -26,9 +24,5 @@ public:
- void mousePressEvent(QMouseEvent* e);
- void mouseReleaseEvent(QMouseEvent* e);
- void mouseMoveEvent(QMouseEvent* e);
-
-private:
- bool m_mousePressed;
- QPointArray m_polyline;
+protected:
+ void drawFinalShape(QPainter& p);
+ void drawTemporaryShape(QPainter& p);
};
diff --git a/noncore/graphics/drawpad/newpagedialog.cpp b/noncore/graphics/drawpad/newpagedialog.cpp
new file mode 100644
index 0000000..c11d977
--- a/dev/null
+++ b/noncore/graphics/drawpad/newpagedialog.cpp
@@ -0,0 +1,61 @@
+/***************************************************************************
+ * *
+ * DrawPad - a drawing program for Opie Environment *
+ * *
+ * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "newpagedialog.h"
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+
+NewPageDialog::NewPageDialog(QWidget* parent, const char* name)
+ : QDialog(parent, name, true)
+{
+ setCaption(tr("New Page"));
+
+ QLabel* widthLabel = new QLabel(tr("Width :"), this);
+ QLabel* heightLabel = new QLabel(tr("Height :"), this);
+
+ m_pWidthSpinBox = new QSpinBox(1, 1024, 1, this);
+ m_pHeightSpinBox = new QSpinBox(1, 1024, 1, this);
+
+ QGridLayout* gridLayout = new QGridLayout(this, 2, 2, 2, 2);
+
+ gridLayout->addWidget(widthLabel, 0, 0);
+ gridLayout->addWidget(heightLabel, 1, 0);
+ gridLayout->addWidget(m_pWidthSpinBox, 0, 1);
+ gridLayout->addWidget(m_pHeightSpinBox, 1, 1);
+}
+
+NewPageDialog::~NewPageDialog()
+{
+}
+
+void NewPageDialog::setWidth(int width)
+{
+ m_pWidthSpinBox->setValue(width);
+}
+
+void NewPageDialog::setHeight(int height)
+{
+ m_pHeightSpinBox->setValue(height);
+}
+
+int NewPageDialog::width()
+{
+ return m_pWidthSpinBox->value();
+}
+
+int NewPageDialog::height()
+{
+ return m_pHeightSpinBox->value();
+}
diff --git a/noncore/graphics/drawpad/newpagedialog.h b/noncore/graphics/drawpad/newpagedialog.h
new file mode 100644
index 0000000..a2b6b87
--- a/dev/null
+++ b/noncore/graphics/drawpad/newpagedialog.h
@@ -0,0 +1,40 @@
+/***************************************************************************
+ * *
+ * DrawPad - a drawing program for Opie Environment *
+ * *
+ * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef NEWPAGEDIALOG_H
+#define NEWPAGEDIALOG_H
+
+#include <qdialog.h>
+
+class QSpinBox;
+
+class NewPageDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ NewPageDialog(QWidget* parent = 0, const char* name = 0);
+ ~NewPageDialog();
+
+ void setWidth(int width);
+ void setHeight(int height);
+
+ int width();
+ int height();
+
+private:
+ QSpinBox* m_pWidthSpinBox;
+ QSpinBox* m_pHeightSpinBox;
+};
+
+#endif // NEWPAGEDIALOG_H
diff --git a/noncore/graphics/drawpad/pointdrawmode.cpp b/noncore/graphics/drawpad/pointdrawmode.cpp
index 30753d6..e251f1b 100644
--- a/noncore/graphics/drawpad/pointdrawmode.cpp
+++ b/noncore/graphics/drawpad/pointdrawmode.cpp
@@ -64,3 +64,9 @@ void PointDrawMode::mouseMoveEvent(QMouseEvent* e)
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+ QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
+ m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
+
+ bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
+ m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+
+ m_pDrawPadCanvas->viewport()->update(viewportRect);
}
diff --git a/noncore/graphics/drawpad/rectangledrawmode.cpp b/noncore/graphics/drawpad/rectangledrawmode.cpp
index 60d7cea..0226544 100644
--- a/noncore/graphics/drawpad/rectangledrawmode.cpp
+++ b/noncore/graphics/drawpad/rectangledrawmode.cpp
@@ -18,10 +18,5 @@
-#include <qpainter.h>
-#include <qpixmap.h>
-
RectangleDrawMode::RectangleDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
- : DrawMode(drawPad, drawPadCanvas)
+ : ShapeDrawMode(drawPad, drawPadCanvas)
{
- m_mousePressed = false;
- m_polyline.resize(3);
}
@@ -32,52 +27,13 @@ RectangleDrawMode::~RectangleDrawMode()
-void RectangleDrawMode::mousePressEvent(QMouseEvent* e)
+void RectangleDrawMode::drawFinalShape(QPainter& p)
{
- m_mousePressed = true;
- m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos();
+ p.setPen(m_pDrawPad->pen());
+ p.drawRect(QRect(m_polyline[2], m_polyline[0]));
}
-void RectangleDrawMode::mouseReleaseEvent(QMouseEvent* e)
+void RectangleDrawMode::drawTemporaryShape(QPainter& p)
{
- Q_UNUSED(e)
-
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setPen(m_pDrawPad->pen());
- painter.drawRect(QRect(m_polyline[2], m_polyline[0]));
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_mousePressed = false;
-}
-
-void RectangleDrawMode::mouseMoveEvent(QMouseEvent* e)
-{
- if (m_mousePressed) {
- QPainter painter;
- painter.begin(m_pDrawPadCanvas->currentPage());
- painter.setRasterOp(Qt::NotROP);
- m_polyline[0] = e->pos();
- painter.drawRect(QRect(m_polyline[2], m_polyline[1]));
- painter.drawRect(QRect(m_polyline[2], m_polyline[0]));
- painter.end();
-
- QRect r = m_polyline.boundingRect();
- r = r.normalize();
- r.setLeft(r.left() - m_pDrawPad->pen().width());
- r.setTop(r.top() - m_pDrawPad->pen().width());
- r.setRight(r.right() + m_pDrawPad->pen().width());
- r.setBottom(r.bottom() + m_pDrawPad->pen().width());
-
- bitBlt(m_pDrawPadCanvas, r.x(), r.y(), m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
-
- m_polyline[1] = m_polyline[0];
- }
+ p.setRasterOp(Qt::NotROP);
+ p.drawRect(QRect(m_polyline[2], m_polyline[1]));
+ p.drawRect(QRect(m_polyline[2], m_polyline[0]));
}
diff --git a/noncore/graphics/drawpad/rectangledrawmode.h b/noncore/graphics/drawpad/rectangledrawmode.h
index 62b85b1..186533d 100644
--- a/noncore/graphics/drawpad/rectangledrawmode.h
+++ b/noncore/graphics/drawpad/rectangledrawmode.h
@@ -16,7 +16,5 @@
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class RectangleDrawMode : public DrawMode
+class RectangleDrawMode : public ShapeDrawMode
{
@@ -26,9 +24,5 @@ public:
- void mousePressEvent(QMouseEvent* e);
- void mouseReleaseEvent(QMouseEvent* e);
- void mouseMoveEvent(QMouseEvent* e);
-
-private:
- bool m_mousePressed;
- QPointArray m_polyline;
+protected:
+ void drawFinalShape(QPainter& p);
+ void drawTemporaryShape(QPainter& p);
};
diff --git a/noncore/graphics/drawpad/shapedrawmode.cpp b/noncore/graphics/drawpad/shapedrawmode.cpp
new file mode 100644
index 0000000..8b9877d
--- a/dev/null
+++ b/noncore/graphics/drawpad/shapedrawmode.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+ * *
+ * DrawPad - a drawing program for Opie Environment *
+ * *
+ * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "shapedrawmode.h"
+
+#include "drawpad.h"
+#include "drawpadcanvas.h"
+
+#include <qpainter.h>
+#include <qpixmap.h>
+
+ShapeDrawMode::ShapeDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
+ : DrawMode(drawPad, drawPadCanvas)
+{
+ m_mousePressed = false;
+ m_polyline.resize(3);
+}
+
+ShapeDrawMode::~ShapeDrawMode()
+{
+}
+
+void ShapeDrawMode::mousePressEvent(QMouseEvent* e)
+{
+ m_mousePressed = true;
+ m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos();
+}
+
+void ShapeDrawMode::mouseReleaseEvent(QMouseEvent* e)
+{
+ Q_UNUSED(e)
+
+ QPainter painter;
+ painter.begin(m_pDrawPadCanvas->currentPage());
+ drawFinalShape(painter);
+ painter.end();
+
+ QRect r = m_polyline.boundingRect();
+ r = r.normalize();
+ r.setLeft(r.left() - m_pDrawPad->pen().width());
+ r.setTop(r.top() - m_pDrawPad->pen().width());
+ r.setRight(r.right() + m_pDrawPad->pen().width());
+ r.setBottom(r.bottom() + m_pDrawPad->pen().width());
+
+ QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
+ m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
+
+ bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
+ m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+
+ m_pDrawPadCanvas->viewport()->update(viewportRect);
+
+ m_mousePressed = false;
+}
+
+void ShapeDrawMode::mouseMoveEvent(QMouseEvent* e)
+{
+ if (m_mousePressed) {
+ m_polyline[0] = e->pos();
+ QPainter painter;
+ painter.begin(m_pDrawPadCanvas->currentPage());
+ drawTemporaryShape(painter);
+ painter.end();
+
+ QRect r = m_polyline.boundingRect();
+ r = r.normalize();
+ r.setLeft(r.left() - m_pDrawPad->pen().width());
+ r.setTop(r.top() - m_pDrawPad->pen().width());
+ r.setRight(r.right() + m_pDrawPad->pen().width());
+ r.setBottom(r.bottom() + m_pDrawPad->pen().width());
+
+ QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
+ m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
+
+ bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
+ m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
+
+ m_pDrawPadCanvas->viewport()->update(viewportRect);
+
+ m_polyline[1] = m_polyline[0];
+ }
+}
diff --git a/noncore/graphics/drawpad/shapedrawmode.h b/noncore/graphics/drawpad/shapedrawmode.h
new file mode 100644
index 0000000..292478f
--- a/dev/null
+++ b/noncore/graphics/drawpad/shapedrawmode.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * *
+ * DrawPad - a drawing program for Opie Environment *
+ * *
+ * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef SHAPEDRAWMODE_H
+#define SHAPEDRAWMODE_H
+
+#include "drawmode.h"
+
+#include <qpointarray.h>
+
+class ShapeDrawMode : public DrawMode
+{
+public:
+ ShapeDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas);
+ ~ShapeDrawMode();
+
+ void mousePressEvent(QMouseEvent* e);
+ void mouseReleaseEvent(QMouseEvent* e);
+ void mouseMoveEvent(QMouseEvent* e);
+
+protected:
+ virtual void drawFinalShape(QPainter& p) = 0;
+ virtual void drawTemporaryShape(QPainter& p) = 0;
+
+ QPointArray m_polyline;
+
+private:
+ bool m_mousePressed;
+};
+
+#endif // SHAPEDRAWMODE_H