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 | |||
@@ -16,4 +16,5 @@ | |||
16 | #include "drawmode.h" | 16 | #include "drawmode.h" |
17 | #include "drawpad.h" | 17 | #include "drawpad.h" |
18 | #include "newpagedialog.h" | ||
18 | 19 | ||
19 | #include <qbuffer.h> | 20 | #include <qbuffer.h> |
@@ -138,15 +139,10 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch) | |||
138 | } | 139 | } |
139 | 140 | ||
140 | DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name, WFlags f) | 141 | DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) |
141 | : QWidget(parent, name, f) | 142 | : QScrollView(parent, name) |
142 | { | 143 | { |
143 | setBackgroundMode(QWidget::PaletteBase); | ||
144 | |||
145 | m_pDrawPad = drawPad; | 144 | m_pDrawPad = drawPad; |
146 | m_pages.setAutoDelete(true); | 145 | m_pages.setAutoDelete(true); |
147 | m_pages.append(new QPixmap(width(), height())); | ||
148 | m_pages.current()->fill(Qt::white); | ||
149 | m_pageBackups.setAutoDelete(true); | 146 | m_pageBackups.setAutoDelete(true); |
150 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
151 | } | 147 | } |
152 | 148 | ||
@@ -170,5 +166,5 @@ void DrawPadCanvas::load(QIODevice* ioDevice) | |||
170 | 166 | ||
171 | if (m_pages.isEmpty()) { | 167 | if (m_pages.isEmpty()) { |
172 | m_pages.append(new QPixmap(width(), height())); | 168 | m_pages.append(new QPixmap(contentsRect().size())); |
173 | m_pages.current()->fill(Qt::white); | 169 | m_pages.current()->fill(Qt::white); |
174 | } | 170 | } |
@@ -177,5 +173,24 @@ void DrawPadCanvas::load(QIODevice* ioDevice) | |||
177 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 173 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
178 | 174 | ||
179 | repaint(); | 175 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); |
176 | viewport()->update(); | ||
177 | |||
178 | emit pagesChanged(); | ||
179 | emit pageBackupsChanged(); | ||
180 | } | ||
181 | |||
182 | void DrawPadCanvas::initialPage() | ||
183 | { | ||
184 | m_pages.append(new QPixmap(234, 252)); | ||
185 | m_pages.current()->fill(Qt::white); | ||
186 | |||
187 | m_pageBackups.clear(); | ||
188 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
189 | |||
190 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
191 | viewport()->update(); | ||
192 | |||
193 | emit pagesChanged(); | ||
194 | emit pageBackupsChanged(); | ||
180 | } | 195 | } |
181 | 196 | ||
@@ -230,9 +245,19 @@ QPixmap* DrawPadCanvas::currentPage() | |||
230 | } | 245 | } |
231 | 246 | ||
247 | uint DrawPadCanvas::pagePosition() | ||
248 | { | ||
249 | return (m_pages.at() + 1); | ||
250 | } | ||
251 | |||
252 | uint DrawPadCanvas::pageCount() | ||
253 | { | ||
254 | return m_pages.count(); | ||
255 | } | ||
256 | |||
232 | void DrawPadCanvas::clearAll() | 257 | void DrawPadCanvas::clearAll() |
233 | { | 258 | { |
234 | m_pages.clear(); | 259 | m_pages.clear(); |
235 | 260 | ||
236 | m_pages.append(new QPixmap(width(), height())); | 261 | m_pages.append(new QPixmap(contentsRect().size())); |
237 | m_pages.current()->fill(Qt::white); | 262 | m_pages.current()->fill(Qt::white); |
238 | 263 | ||
@@ -240,5 +265,6 @@ void DrawPadCanvas::clearAll() | |||
240 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 265 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
241 | 266 | ||
242 | repaint(); | 267 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); |
268 | viewport()->update(); | ||
243 | 269 | ||
244 | emit pagesChanged(); | 270 | emit pagesChanged(); |
@@ -248,12 +274,23 @@ void DrawPadCanvas::clearAll() | |||
248 | void DrawPadCanvas::newPage() | 274 | void DrawPadCanvas::newPage() |
249 | { | 275 | { |
250 | m_pages.insert(m_pages.at() + 1, new QPixmap(width(), height())); | 276 | QRect rect = contentsRect(); |
251 | m_pages.current()->fill(Qt::white); | ||
252 | m_pageBackups.clear(); | ||
253 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
254 | repaint(); | ||
255 | 277 | ||
256 | emit pagesChanged(); | 278 | NewPageDialog newPageDialog(this); |
257 | emit pageBackupsChanged(); | 279 | newPageDialog.setWidth(rect.width()); |
280 | newPageDialog.setHeight(rect.height()); | ||
281 | |||
282 | if (newPageDialog.exec() == QDialog::Accepted) { | ||
283 | m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.width(), newPageDialog.height())); | ||
284 | m_pages.current()->fill(Qt::white); | ||
285 | |||
286 | m_pageBackups.clear(); | ||
287 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
288 | |||
289 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
290 | viewport()->update(); | ||
291 | |||
292 | emit pagesChanged(); | ||
293 | emit pageBackupsChanged(); | ||
294 | } | ||
258 | } | 295 | } |
259 | 296 | ||
@@ -261,5 +298,6 @@ void DrawPadCanvas::clearPage() | |||
261 | { | 298 | { |
262 | m_pages.current()->fill(Qt::white); | 299 | m_pages.current()->fill(Qt::white); |
263 | repaint(); | 300 | |
301 | viewport()->update(); | ||
264 | } | 302 | } |
265 | 303 | ||
@@ -269,5 +307,5 @@ void DrawPadCanvas::deletePage() | |||
269 | 307 | ||
270 | if (m_pages.isEmpty()) { | 308 | if (m_pages.isEmpty()) { |
271 | m_pages.append(new QPixmap(width(), height())); | 309 | m_pages.append(new QPixmap(contentsRect().size())); |
272 | m_pages.current()->fill(Qt::white); | 310 | m_pages.current()->fill(Qt::white); |
273 | } | 311 | } |
@@ -276,5 +314,6 @@ void DrawPadCanvas::deletePage() | |||
276 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 314 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
277 | 315 | ||
278 | repaint(); | 316 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); |
317 | viewport()->update(); | ||
279 | 318 | ||
280 | emit pagesChanged(); | 319 | emit pagesChanged(); |
@@ -305,5 +344,6 @@ void DrawPadCanvas::undo() | |||
305 | { | 344 | { |
306 | *(m_pages.current()) = *(m_pageBackups.prev()); | 345 | *(m_pages.current()) = *(m_pageBackups.prev()); |
307 | repaint(); | 346 | |
347 | viewport()->update(); | ||
308 | 348 | ||
309 | emit pageBackupsChanged(); | 349 | emit pageBackupsChanged(); |
@@ -313,5 +353,6 @@ void DrawPadCanvas::redo() | |||
313 | { | 353 | { |
314 | *(m_pages.current()) = *(m_pageBackups.next()); | 354 | *(m_pages.current()) = *(m_pageBackups.next()); |
315 | repaint(); | 355 | |
356 | viewport()->update(); | ||
316 | 357 | ||
317 | emit pageBackupsChanged(); | 358 | emit pageBackupsChanged(); |
@@ -323,5 +364,7 @@ void DrawPadCanvas::goFirstPage() | |||
323 | m_pageBackups.clear(); | 364 | m_pageBackups.clear(); |
324 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 365 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
325 | repaint(); | 366 | |
367 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
368 | viewport()->update(); | ||
326 | 369 | ||
327 | emit pagesChanged(); | 370 | emit pagesChanged(); |
@@ -334,5 +377,7 @@ void DrawPadCanvas::goPreviousPage() | |||
334 | m_pageBackups.clear(); | 377 | m_pageBackups.clear(); |
335 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 378 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
336 | repaint(); | 379 | |
380 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
381 | viewport()->update(); | ||
337 | 382 | ||
338 | emit pagesChanged(); | 383 | emit pagesChanged(); |
@@ -345,5 +390,7 @@ void DrawPadCanvas::goNextPage() | |||
345 | m_pageBackups.clear(); | 390 | m_pageBackups.clear(); |
346 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 391 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
347 | repaint(); | 392 | |
393 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
394 | viewport()->update(); | ||
348 | 395 | ||
349 | emit pagesChanged(); | 396 | emit pagesChanged(); |
@@ -356,5 +403,7 @@ void DrawPadCanvas::goLastPage() | |||
356 | m_pageBackups.clear(); | 403 | m_pageBackups.clear(); |
357 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | 404 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
358 | repaint(); | 405 | |
406 | resizeContents(m_pages.current()->width(), m_pages.current()->height()); | ||
407 | viewport()->update(); | ||
359 | 408 | ||
360 | emit pagesChanged(); | 409 | emit pagesChanged(); |
@@ -362,10 +411,10 @@ void DrawPadCanvas::goLastPage() | |||
362 | } | 411 | } |
363 | 412 | ||
364 | void DrawPadCanvas::mousePressEvent(QMouseEvent* e) | 413 | void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) |
365 | { | 414 | { |
366 | m_pDrawPad->drawMode()->mousePressEvent(e); | 415 | m_pDrawPad->drawMode()->mousePressEvent(e); |
367 | } | 416 | } |
368 | 417 | ||
369 | void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) | 418 | void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) |
370 | { | 419 | { |
371 | m_pDrawPad->drawMode()->mouseReleaseEvent(e); | 420 | m_pDrawPad->drawMode()->mouseReleaseEvent(e); |
@@ -385,36 +434,13 @@ void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) | |||
385 | } | 434 | } |
386 | 435 | ||
387 | void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e) | 436 | void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) |
388 | { | 437 | { |
389 | m_pDrawPad->drawMode()->mouseMoveEvent(e); | 438 | m_pDrawPad->drawMode()->mouseMoveEvent(e); |
390 | } | 439 | } |
391 | 440 | ||
392 | void DrawPadCanvas::resizeEvent(QResizeEvent* e) | 441 | void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) |
393 | { | 442 | { |
394 | QWidget::resizeEvent(e); | 443 | QRect clipRect(cx, cy, cw, ch); |
395 | |||
396 | QListIterator<QPixmap> bufferIterator(m_pages); | ||
397 | 444 | ||
398 | for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { | 445 | p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect); |
399 | int w = width() > bufferIterator.current()->width() ? width() : bufferIterator.current()->width(); | ||
400 | int h = height() > bufferIterator.current()->height() ? height() : bufferIterator.current()->height(); | ||
401 | |||
402 | QPixmap tmpPixmap(*(bufferIterator.current())); | ||
403 | bufferIterator.current()->resize(w, h); | ||
404 | bufferIterator.current()->fill(Qt::white); | ||
405 | |||
406 | bitBlt(bufferIterator.current(), 0, 0, &tmpPixmap, 0, 0, tmpPixmap.width(), tmpPixmap.height()); | ||
407 | } | ||
408 | } | ||
409 | |||
410 | void DrawPadCanvas::paintEvent(QPaintEvent* e) | ||
411 | { | ||
412 | QWidget::paintEvent(e); | ||
413 | |||
414 | QArray<QRect> rects = e->region().rects(); | ||
415 | |||
416 | for (uint i = 0; i < rects.count(); i++) { | ||
417 | QRect r = rects[i]; | ||
418 | bitBlt(this, r.x(), r.y(), m_pages.current(), r.x(), r.y(), r.width(), r.height()); | ||
419 | } | ||
420 | } | 446 | } |