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
@@ -36,22 +36,15 @@
#include <qtooltip.h>
-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
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);
@@ -107,6 +100,4 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pRedoAction->addTo(navigationToolBar);
- updateUndoRedoToolButtons();
-
m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this);
connect(m_pFirstPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goFirstPage()));
@@ -125,6 +116,4 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pLastPageAction->addTo(navigationToolBar);
- updateNavigationToolButtons();
-
// init draw mode toolbar
@@ -218,4 +207,15 @@ 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();
+ }
}
@@ -380,2 +380,11 @@ void DrawPad::updateNavigationToolButtons()
m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled());
}
+
+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
@@ -32,5 +32,5 @@ 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();
@@ -55,4 +55,5 @@ private slots:
void updateUndoRedoToolButtons();
void updateNavigationToolButtons();
+ void updateCaption();
private:
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
@@ -10,6 +10,8 @@ HEADERS = colordialog.h \
filldrawmode.h \
linedrawmode.h \
+ newpagedialog.h \
pointdrawmode.h \
- rectangledrawmode.h
+ rectangledrawmode.h \
+ shapedrawmode.h
SOURCES = colordialog.cpp \
colorpanel.cpp \
@@ -22,6 +24,8 @@ SOURCES = colordialog.cpp \
linedrawmode.cpp \
main.cpp \
+ newpagedialog.cpp \
pointdrawmode.cpp \
- rectangledrawmode.cpp
+ rectangledrawmode.cpp \
+ shapedrawmode.cpp
INCLUDEPATH += $(OPIEDIR)/include \
$(QTDIR)/src/3rdparty/zlib
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
@@ -16,4 +16,5 @@
#include "drawmode.h"
#include "drawpad.h"
+#include "newpagedialog.h"
#include <qbuffer.h>
@@ -138,15 +139,10 @@ 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())));
}
@@ -170,5 +166,5 @@ 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);
}
@@ -177,5 +173,24 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- 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();
}
@@ -230,9 +245,19 @@ QPixmap* DrawPadCanvas::currentPage()
}
+uint DrawPadCanvas::pagePosition()
+{
+ return (m_pages.at() + 1);
+}
+
+uint DrawPadCanvas::pageCount()
+{
+ return m_pages.count();
+}
+
void DrawPadCanvas::clearAll()
{
m_pages.clear();
- m_pages.append(new QPixmap(width(), height()));
+ m_pages.append(new QPixmap(contentsRect().size()));
m_pages.current()->fill(Qt::white);
@@ -240,5 +265,6 @@ void DrawPadCanvas::clearAll()
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -248,12 +274,23 @@ void DrawPadCanvas::clearAll()
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();
+ }
}
@@ -261,5 +298,6 @@ void DrawPadCanvas::clearPage()
{
m_pages.current()->fill(Qt::white);
- repaint();
+
+ viewport()->update();
}
@@ -269,5 +307,5 @@ 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);
}
@@ -276,5 +314,6 @@ void DrawPadCanvas::deletePage()
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -305,5 +344,6 @@ void DrawPadCanvas::undo()
{
*(m_pages.current()) = *(m_pageBackups.prev());
- repaint();
+
+ viewport()->update();
emit pageBackupsChanged();
@@ -313,5 +353,6 @@ void DrawPadCanvas::redo()
{
*(m_pages.current()) = *(m_pageBackups.next());
- repaint();
+
+ viewport()->update();
emit pageBackupsChanged();
@@ -323,5 +364,7 @@ void DrawPadCanvas::goFirstPage()
m_pageBackups.clear();
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -334,5 +377,7 @@ void DrawPadCanvas::goPreviousPage()
m_pageBackups.clear();
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -345,5 +390,7 @@ void DrawPadCanvas::goNextPage()
m_pageBackups.clear();
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -356,5 +403,7 @@ void DrawPadCanvas::goLastPage()
m_pageBackups.clear();
m_pageBackups.append(new QPixmap(*(m_pages.current())));
- repaint();
+
+ resizeContents(m_pages.current()->width(), m_pages.current()->height());
+ viewport()->update();
emit pagesChanged();
@@ -362,10 +411,10 @@ void DrawPadCanvas::goLastPage()
}
-void DrawPadCanvas::mousePressEvent(QMouseEvent* e)
+void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e)
{
m_pDrawPad->drawMode()->mousePressEvent(e);
}
-void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e)
+void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e)
{
m_pDrawPad->drawMode()->mouseReleaseEvent(e);
@@ -385,36 +434,13 @@ void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e)
}
-void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e)
+void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e)
{
m_pDrawPad->drawMode()->mouseMoveEvent(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
@@ -15,5 +15,5 @@
#define DRAWPADCANVAS_H
-#include <qwidget.h>
+#include <qscrollview.h>
#include <qlist.h>
@@ -24,13 +24,14 @@ class DrawPad;
class QPixmap;
-class DrawPadCanvas : public QWidget
+class DrawPadCanvas : public QScrollView
{
Q_OBJECT
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();
void load(QIODevice* ioDevice);
+ void initialPage();
void save(QIODevice* ioDevice);
@@ -41,4 +42,6 @@ public:
QPixmap* currentPage();
+ uint pagePosition();
+ uint pageCount();
public slots:
@@ -61,9 +64,8 @@ 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);
private:
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
@@ -21,8 +21,6 @@
EllipseDrawMode::EllipseDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
- : DrawMode(drawPad, drawPadCanvas)
+ : ShapeDrawMode(drawPad, drawPadCanvas)
{
- m_mousePressed = false;
- m_polyline.resize(3);
}
@@ -31,56 +29,17 @@ 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
@@ -15,9 +15,7 @@
#define ELLIPSEDRAWMODE_H
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class EllipseDrawMode : public DrawMode
+class EllipseDrawMode : public ShapeDrawMode
{
public:
@@ -25,11 +23,7 @@ public:
~EllipseDrawMode();
- 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
@@ -64,5 +64,11 @@ void EraseDrawMode::mouseMoveEvent(QMouseEvent* e)
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());
+ 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
@@ -46,5 +46,5 @@ 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
@@ -17,12 +17,7 @@
#include "drawpadcanvas.h"
-#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);
}
@@ -31,53 +26,14 @@ 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
@@ -15,9 +15,7 @@
#define LINEDRAWMODE_H
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class LineDrawMode : public DrawMode
+class LineDrawMode : public ShapeDrawMode
{
public:
@@ -25,11 +23,7 @@ public:
~LineDrawMode();
- 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
@@ -63,5 +63,11 @@ void PointDrawMode::mouseMoveEvent(QMouseEvent* e)
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());
+ 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
@@ -17,12 +17,7 @@
#include "drawpadcanvas.h"
-#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);
}
@@ -31,53 +26,14 @@ 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
@@ -15,9 +15,7 @@
#define RECTANGLEDRAWMODE_H
-#include "drawmode.h"
+#include "shapedrawmode.h"
-#include <qpointarray.h>
-
-class RectangleDrawMode : public DrawMode
+class RectangleDrawMode : public ShapeDrawMode
{
public:
@@ -25,11 +23,7 @@ public:
~RectangleDrawMode();
- 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