#include "DrawingWindow.h"
#include <QApplication>
#include <QPaintEvent>
-#include <QPainter>
#include <QThread>
#include <QTimerEvent>
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)
+{
+ setColor(QColor::fromRgbF(red, green, blue));
+}
+
+void DrawingWindow::setBgColor(unsigned int color)
{
- bgColor.setRgbF(red, green, blue);
+ 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);
}
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);
}
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)
+void DrawingWindow::drawText(int x, int y, const char *text, int flags)
{
QRect r(image->rect());
- r.moveTo(x, y);
+ 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, 0, text, &r);
+ 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;
return synced;
}
+void DrawingWindow::closeGraph()
+{
+ qApp->postEvent(this, new QEvent(QEvent::Type(QEvent::User + 1)));
+}
+
void DrawingWindow::sleep(unsigned long secs)
{
DrawingThread::sleep(secs);
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)
}
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)
{