From 93ffd99b0c0f6f889cdf8f3b7604c3c3b6db54e4 Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 19 Nov 2021 20:19:58 +0300 Subject: [PATCH] Graphic patch - new UGLWidget creates only on first show or when visible --- libs/graphic/graphic.cpp | 37 ++++++++++++++++++++++++++++++------- libs/graphic/graphic.h | 3 ++- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/libs/graphic/graphic.cpp b/libs/graphic/graphic.cpp index 2eab36a..b8fa775 100644 --- a/libs/graphic/graphic.cpp +++ b/libs/graphic/graphic.cpp @@ -216,6 +216,21 @@ void Graphic::resizeEvent(QResizeEvent *) { } +void Graphic::showEvent(QShowEvent *) { + if (need_createGL && !canvas_gl) { + //qDebug() << "create GL on show"; + canvas_gl = new UGLWidget(); + ui->layoutCanvas->addWidget(canvas_gl); + connect(canvas_gl, SIGNAL(paintSignal()), this, SLOT(canvasPaintEvent())); + prepareCanvas(canvas_gl); + ui->canvas_raster->hide(); + canvas_gl->show(); + canvas = canvas_gl; + } + need_createGL = false; +} + + void Graphic::timerEvent(QTimerEvent * ) { pause_phase += 0.02; if (pause_phase > 1.) @@ -930,16 +945,24 @@ void Graphic::exportGraphics(QString filename) { void Graphic::setOpenGL(bool on) { #ifdef HAS_GL isOGL = on; + need_createGL = false; if (on && !m_fakeGL) { if (!canvas_gl) { - canvas_gl = new UGLWidget(); - ui->layoutCanvas->addWidget(canvas_gl); - connect(canvas_gl, SIGNAL(paintSignal()), this, SLOT(canvasPaintEvent())); - prepareCanvas(canvas_gl); + if (!isVisible()) + need_createGL = true; + else { + //qDebug() << "create GL on setter"; + canvas_gl = new UGLWidget(); + ui->layoutCanvas->addWidget(canvas_gl); + connect(canvas_gl, SIGNAL(paintSignal()), this, SLOT(canvasPaintEvent())); + prepareCanvas(canvas_gl); + } + } + if (canvas_gl) { + ui->canvas_raster->hide(); + canvas_gl->show(); + canvas = canvas_gl; } - ui->canvas_raster->hide(); - canvas_gl->show(); - canvas = canvas_gl; } else { if (canvas_gl) canvas_gl->hide(); diff --git a/libs/graphic/graphic.h b/libs/graphic/graphic.h index 009375a..f8b8e4a 100644 --- a/libs/graphic/graphic.h +++ b/libs/graphic/graphic.h @@ -346,6 +346,7 @@ public slots: protected: virtual void changeEvent(QEvent * e); virtual void resizeEvent(QResizeEvent * ); + virtual void showEvent(QShowEvent * ); virtual QSize sizeHint() const {return QSize(400, 300);} virtual void timerEvent(QTimerEvent * ); virtual bool eventFilter(QObject * o, QEvent * e); @@ -415,7 +416,7 @@ protected: double gridx, gridy, history, visible_time, inc_x, grid_numbers_x, grid_numbers_y, LN10; double eminx, eminy, emaxx, emaxy, pause_phase, gesture_angle; int lastw, lasth, min_repaint_int, timer_pause, thick; - bool aalias, aupdate, grid, guides, isFit, isOGL, isHover, bufferActive, cancel, pause_, gestures, m_LODOptimization, m_fakeGL; + bool aalias, aupdate, grid, guides, isFit, isOGL, isHover, bufferActive, cancel, pause_, gestures, m_LODOptimization, m_fakeGL, need_createGL; bool hasLblX, hasLblY, navigation, only_expand_y, only_expand_x, is_lines_update, leg_update, visible_update, fullscr, need_mouse_pan; protected slots: