X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/graphlib.git/blobdiff_plain/34474d01f8930f74a173334a0a85403b50f0ef42..c46fc962afb82bad929bd6259e2a788f8b760eab:/test/hello.cpp diff --git a/test/hello.cpp b/test/hello.cpp index a388e00..8acf518 100644 --- a/test/hello.cpp +++ b/test/hello.cpp @@ -21,280 +21,45 @@ */ -#include -#include - -int main_thread(int, char **) -{ - // >>> insert main drawing code here <<< - return 0; -} - -//============================================================ - -//********************************************************************** -//********************************************************************** -//********************************************************************** -//********************************************************************** -//********************************************************************** -#if 0 - -//============================================================ -// WindowCore - -class WindowCore { -private: - static int instanceCount; - static int DEFAULT_ARGC; - static char *DEFAULT_ARGV[]; +#include -protected: - WindowCore(int &argc = DEFAULT_ARGC, char *argv[] = DEFAULT_ARGV); - ~WindowCore(); -}; +#include +#include +#include -int WindowCore::instanceCount = 0; -int WindowCore::DEFAULT_ARGC = 1; -char *WindowCore::DEFAULT_ARGV[] = { "class WindowCore", NULL }; +#include -WindowCore::WindowCore(int &argc, char *argv[]) +int main_drawing_thread(DrawingArea &a) { - if (!qApp) - new QApplication(argc, argv); - else - WindowCore::instanceCount++; -} - -WindowCore::~WindowCore() -{ - if (WindowCore::instanceCount == 0) - delete qApp; - else - WindowCore::instanceCount--; -} - -//============================================================ -// QtDrawingArea - -class QtDrawingArea: public DrawingAreaInterface, - public WindowCore, public QWidget { -private: - static int visibleCount; - - QImage *image; - QPainter *painter; - -private: - void init(int width, int height, const char *title); - -protected: - void paintEvent(QPaintEvent *) - { - QPainter painter(this); - painter.drawImage(0, 0, *image); - } - - void closeEvent(QCloseEvent *event) - { - QtDrawingArea::visibleCount--; - event->accept(); - } - - void keyPressEvent(QKeyEvent *event) - { - if (event->key() == Qt::Key_Escape) { - event->accept(); - close(); - } else - event->ignore(); - } - -public: - QtDrawingArea(int argc, char *argv[], - int width = DEFAULT_WIDTH, int height = DEFAULT_HEIGHT, - const char *title = NULL); - - QtDrawingArea(QWidget *parent, Qt::WindowFlags flags, - int width = DEFAULT_WIDTH, int height = DEFAULT_HEIGHT, - const char *title = NULL); - - QtDrawingArea(int width = DEFAULT_WIDTH, int height = DEFAULT_HEIGHT, - const char *title = NULL); - - ~QtDrawingArea(); - - int width() const - { - return image->width(); - } - - int height() const - { - return image->height(); - } - - void setColor(const QColor &color) - { - QPen pen(painter->pen()); - pen.setColor(color); - painter->setPen(pen); - } - void setColor(float red, float green, float blue) - { - QColor color; - color.setRgbF(red, green, blue); - this->setColor(color); - } - - void drawPoint(int x, int y) - { - painter->drawPoint(x, y); - this->update(); - } - - void drawLine(int x1, int y1, int x2, int y2) - { - painter->drawLine(x1, y1, x2, y2); - this->update(); - } - - void flush() - { - qApp->sendPostedEvents(this, 0); - qApp->processEvents(); - qApp->flush(); - } - - void wait() - { - if (QtDrawingArea::visibleCount > 1) - while (this->isVisible()) - qApp->processEvents(QEventLoop::WaitForMoreEvents); - else if (QtDrawingArea::visibleCount > 0) - qApp->exec(); - } - - void waitAll() - { - if (QtDrawingArea::visibleCount > 0) - qApp->exec(); + std::cout << "[ " << a.width() << " x " << a.height() << " ]\n"; + + int c = 0; + int y = 0; + while (1) { + std::cerr << "loooooooooooooooooooooop " + << y << " (" << c << ")\n"; + a.setColor(c, c, c); + for (int yy = y; yy < y + 10; yy++) + for (int x = 0; x < a.width(); x++) + a.drawPoint(x, yy); + if ((y += 10) >= a.height()) { + y = 0; + c = !c; + } + sleep(1); } -}; - -int QtDrawingArea::visibleCount = 0; - -QtDrawingArea::QtDrawingArea(int argc, char *argv[], - int width, int height, const char *title) - : WindowCore(argc, argv) - , QWidget() -{ - init(width, height, title); -} - -QtDrawingArea::QtDrawingArea(QWidget *parent, Qt::WindowFlags flags, - int width, int height, const char *title) - : WindowCore() - , QWidget(parent, flags) -{ - init(width, height, title); -} - -QtDrawingArea::QtDrawingArea(int width, int height, const char *title) - : WindowCore() - , QWidget() -{ - init(width, height, title); -} - -QtDrawingArea::~QtDrawingArea() -{ - delete painter; - delete image; + return 0; } -void QtDrawingArea::init(int width, int height, const char *title) +int main(int argc, char *argv[]) { - if (title) - this->setWindowTitle(title); - this->setFocusPolicy(Qt::StrongFocus); - image = new QImage(width, height, QImage::Format_RGB32); - image->fill(QColor(Qt::white).rgb()); - this->setFixedSize(image->size()); - QtDrawingArea::visibleCount++; - this->show(); - painter = new QPainter(image); -} - - -//============================================================ - -/* paramètres par défaut */ -int larg = 600; -int haut = 600; -float Rmin = -2.05; -float Rmax = 0.55; -float Imin = -1.3; -float Imax = 1.3; + QApplication application(argc, argv); + DrawingArea drawingArea(800, 600); + DrawingWindow drawingWindow(drawingArea); + DrawingThread drawingThread(drawingArea, main_drawing_thread); -int maxiter = 100; + drawingWindow.show(); + drawingThread.start(); -void DrawingThread::run() -{ - int x, y; /* le pixel considéré */ - float cr, ci; /* le complexe correspondant */ - float zr, zi; /* pour calculer la suite */ - float zr2, zi2; - float pr, pi; /* taille d'un pixel */ - float rouge, vert, bleu; - int i; - - // QtDrawingArea fen(argc, argv, larg, haut); - - pr = (Rmax - Rmin) / larg; - pi = (Imax - Imin) / larg; - - cr = Rmin; - for (x = 0; x < larg; x++) { - ci = Imin; - for (y = 0; y < larg; y++) { - /* z_1 = c */ - zr = cr; - zi = ci; - for (i = 1; i <= maxiter; i++) { - zr2 = zr * zr; - zi2 = zi * zi; - if (zr2 + zi2 >= 4) { - /* |z| >= 2 : on sort de la boucle */ - break; - } - /* on calcule le z suivant */ - zi = 2*zr*zi + ci; - zr = zr2 - zi2 + cr; - } - /* on est sorti trop t-bôt du for(...):-A - on affiche le pixel d'un couleur en fonction - de i */ - if (i <= maxiter / 2) { - /* entre rouge et vert */ - vert = (2.0 * i) / maxiter; - rouge = 1.0 - vert; - bleu = 0.0; - } else if (i <= maxiter) { - /* entre vert et bleu */ - rouge = 0.0; - bleu = (2.0 * i) / maxiter - 1.0; - vert = 1.0 - bleu; - } else /* (i > maxiter) */ - rouge = vert = bleu = 0.0; - fen.setColor(rouge, vert, bleu); - fen.drawPoint(x, y); - - ci += pi; - } - cr += pr; - // fen.flush(); - } - // fen.wait(); + return application.exec(); } - -#endif