X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/graphlib.git/blobdiff_plain/dc22c2e9dfe646c4517e056f87459e34ab78ce2e..5cb6b0c2a5bd8569ba18bb274924b2e05598e851:/DrawingWindow.cpp diff --git a/DrawingWindow.cpp b/DrawingWindow.cpp index cf111e9..02df2eb 100644 --- a/DrawingWindow.cpp +++ b/DrawingWindow.cpp @@ -1,7 +1,6 @@ #include "DrawingWindow.h" #include #include -#include #include #include @@ -56,32 +55,40 @@ DrawingWindow::~DrawingWindow() delete image; } -void DrawingWindow::setColor(float red, float green, float blue) +void DrawingWindow::setColor(unsigned int color) { - fgColor.setRgbF(red, green, blue); - applyColor(); + setColor(QColor::fromRgb(color)); } void DrawingWindow::setColor(const char *name) { - fgColor.setNamedColor(name); - applyColor(); + setColor(QColor(name)); } -void DrawingWindow::setBgColor(float red, float green, float blue) +void DrawingWindow::setColor(float red, float green, float blue) { - bgColor.setRgbF(red, green, blue); + setColor(QColor::fromRgbF(red, green, blue)); +} + +void DrawingWindow::setBgColor(unsigned int color) +{ + setBgColor(QColor::fromRgb(color)); } void DrawingWindow::setBgColor(const char *name) { - bgColor.setNamedColor(name); + setBgColor(QColor(name)); +} + +void DrawingWindow::setBgColor(float red, float green, float blue) +{ + setBgColor(QColor::fromRgbF(red, green, blue)); } void DrawingWindow::clearGraph() { safeLock(imageMutex); - painter->fillRect(image->rect(), bgColor); + painter->fillRect(image->rect(), getBgColor()); dirty(); safeUnlock(imageMutex); } @@ -116,7 +123,7 @@ void DrawingWindow::drawRect(int x1, int y1, int x2, int y2) void DrawingWindow::fillRect(int x1, int y1, int x2, int y2) { - painter->setBrush(fgColor); + painter->setBrush(getColor()); drawRect(x1, y1, x2, y2); painter->setBrush(Qt::NoBrush); } @@ -134,11 +141,58 @@ void DrawingWindow::drawCircle(int x, int y, int r) void DrawingWindow::fillCircle(int x, int y, int r) { - painter->setBrush(fgColor); + painter->setBrush(getColor()); drawCircle(x, y, r); painter->setBrush(Qt::NoBrush); } +void DrawingWindow::drawText(int x, int y, const char *text, int flags) +{ + QRect r(image->rect()); + switch (flags & Qt::AlignHorizontal_Mask) { + case Qt::AlignRight: + r.setRight(x); + break; + case Qt::AlignHCenter: + if (x < width / 2) + r.setLeft(2 * x - width + 1); + else + r.setRight(2 * x); + break; + default: + r.setLeft(x); + } + switch (flags & Qt::AlignVertical_Mask) { + case Qt::AlignBottom: + r.setBottom(y); + break; + case Qt::AlignVCenter: + if (y < height / 2) + r.setTop(2 * y - height + 1); + else + r.setBottom(2 * y); + break; + default: + r.setTop(y); + } + safeLock(imageMutex); + painter->drawText(r, flags, text, &r); + dirty(r); + safeUnlock(imageMutex); +} + +void DrawingWindow::drawTextBg(int x, int y, const char *text, int flags) +{ + painter->setBackgroundMode(Qt::OpaqueMode); + drawText(x, y, text, flags); + painter->setBackgroundMode(Qt::TransparentMode); +} + +unsigned int DrawingWindow::getPointColor(int x, int y) +{ + return image->pixel(x, y); +} + bool DrawingWindow::sync(unsigned long time) { bool synced; @@ -153,6 +207,11 @@ bool DrawingWindow::sync(unsigned long time) return synced; } +void DrawingWindow::closeGraph() +{ + qApp->postEvent(this, new QEvent(QEvent::Type(QEvent::User + 1))); +} + void DrawingWindow::sleep(unsigned long secs) { DrawingThread::sleep(secs); @@ -185,21 +244,28 @@ void DrawingWindow::closeEvent(QCloseEvent *ev) thread->wait(); } -void DrawingWindow::customEvent(QEvent *) +void DrawingWindow::customEvent(QEvent *ev) { - mayUpdate(); - qApp->sendPostedEvents(this, QEvent::UpdateLater); - qApp->sendPostedEvents(this, QEvent::UpdateRequest); - qApp->sendPostedEvents(this, QEvent::Paint); - qApp->processEvents(QEventLoop::ExcludeUserInputEvents | - QEventLoop::ExcludeSocketNotifiers | - QEventLoop::DeferredDeletion | - QEventLoop::X11ExcludeTimers); - qApp->flush(); - qApp->syncX(); - syncMutex.lock(); - syncCondition.wakeAll(); - syncMutex.unlock(); + switch ((int )ev->type()) { + case QEvent::User: + mayUpdate(); + qApp->sendPostedEvents(this, QEvent::UpdateLater); + qApp->sendPostedEvents(this, QEvent::UpdateRequest); + qApp->sendPostedEvents(this, QEvent::Paint); + qApp->processEvents(QEventLoop::ExcludeUserInputEvents | + QEventLoop::ExcludeSocketNotifiers | + QEventLoop::DeferredDeletion | + QEventLoop::X11ExcludeTimers); + qApp->flush(); + qApp->syncX(); + syncMutex.lock(); + syncCondition.wakeAll(); + syncMutex.unlock(); + break; + case QEvent::User + 1: + close(); + break; + } } void DrawingWindow::keyPressEvent(QKeyEvent *ev) @@ -267,13 +333,31 @@ void DrawingWindow::initialize(DrawingWindow::ThreadFunction f) } inline -void DrawingWindow::applyColor() +void DrawingWindow::setColor(const QColor& color) { QPen pen(painter->pen()); - pen.setColor(fgColor); + pen.setColor(color); painter->setPen(pen); } +inline +void DrawingWindow::setBgColor(const QColor& color) +{ + painter->setBackground(color); +} + +inline +QColor DrawingWindow::getColor() +{ + return painter->pen().color(); +} + +inline +QColor DrawingWindow::getBgColor() +{ + return painter->background().color(); +} + inline void DrawingWindow::safeLock(QMutex &mutex) {