| 
									
										
										
										
											2016-03-06 09:06:59 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // Copyright (C) 2016 F4EXB                                                      //
 | 
					
						
							|  |  |  | // written by Edouard Griffiths                                                  //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // OpenGL interface modernization.                                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is free software; you can redistribute it and/or modify          //
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by          //
 | 
					
						
							|  |  |  | // the Free Software Foundation as version 3 of the License, or                  //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,               //
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | 
					
						
							|  |  |  | // GNU General Public License V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include <QPainter>
 | 
					
						
							|  |  |  | #include <QMouseEvent>
 | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | #include <QOpenGLContext>
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:00:13 +01:00
										 |  |  | #include <QOpenGLFunctions>
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:48:34 +01:00
										 |  |  | #include <QSurface>
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include "gui/glscope.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-14 11:47:03 +02:00
										 |  |  | #include <algorithm>
 | 
					
						
							| 
									
										
										
										
											2015-08-09 10:33:04 +02:00
										 |  |  | #include <QDebug>
 | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #ifdef _WIN32
 | 
					
						
							|  |  |  | static double log2f(double n) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return log(n) / log(2.0); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | #endif*/
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | GLScope::GLScope(QWidget* parent) : | 
					
						
							|  |  |  | 	QGLWidget(parent), | 
					
						
							|  |  |  | 	m_dataChanged(false), | 
					
						
							|  |  |  | 	m_configChanged(true), | 
					
						
							|  |  |  | 	m_mode(ModeIQ), | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	m_displays(DisplayBoth), | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	m_orientation(Qt::Horizontal), | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	m_memTraceIndex(0), | 
					
						
							|  |  |  | 	m_memTraceHistory(0), | 
					
						
							| 
									
										
										
										
											2015-11-06 08:56:33 +01:00
										 |  |  | 	m_memTraceIndexMax(0), | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	m_memTraceRecall(false), | 
					
						
							|  |  |  | 	m_displayTrace(&m_rawTrace[0]), | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	m_oldTraceSize(-1), | 
					
						
							|  |  |  | 	m_sampleRate(0), | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 	m_amp1(1.0), | 
					
						
							|  |  |  | 	m_amp2(1.0), | 
					
						
							|  |  |  | 	m_ofs1(0.0), | 
					
						
							|  |  |  | 	m_ofs2(0.0), | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 	//m_amp(1.0),
 | 
					
						
							|  |  |  | 	//m_ofs(0.0),
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	m_timeBase(1), | 
					
						
							|  |  |  | 	m_timeOfsProMill(0), | 
					
						
							| 
									
										
										
										
											2015-06-23 22:52:27 +02:00
										 |  |  | 	m_triggerChannel(ScopeVis::TriggerFreeRun), | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 	m_triggerLevel(0.0), | 
					
						
							| 
									
										
										
										
											2015-07-27 02:12:37 +02:00
										 |  |  | 	m_triggerPre(0.0), | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 	m_triggerLevelDis1(0.0), | 
					
						
							|  |  |  | 	m_triggerLevelDis2(0.0), | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 	m_prevArg(0), | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 	m_displayGridIntensity(5), | 
					
						
							| 
									
										
										
										
											2015-07-18 11:27:09 +02:00
										 |  |  | 	m_displayTraceIntensity(50), | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 	m_powerOverlayFont(font()) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							|  |  |  | 	setAttribute(Qt::WA_OpaquePaintEvent); | 
					
						
							|  |  |  | 	connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); | 
					
						
							|  |  |  | 	m_timer.start(50); | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 	m_y1Scale.setFont(font()); | 
					
						
							|  |  |  | 	m_y1Scale.setOrientation(Qt::Vertical); | 
					
						
							|  |  |  | 	m_y2Scale.setFont(font()); | 
					
						
							|  |  |  | 	m_y2Scale.setOrientation(Qt::Vertical); | 
					
						
							|  |  |  | 	m_x1Scale.setFont(font()); | 
					
						
							|  |  |  | 	m_x1Scale.setOrientation(Qt::Horizontal); | 
					
						
							|  |  |  | 	m_x2Scale.setFont(font()); | 
					
						
							|  |  |  | 	m_x2Scale.setOrientation(Qt::Horizontal); | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 	m_powerOverlayFont.setBold(true); | 
					
						
							|  |  |  | 	m_powerOverlayFont.setPointSize(font().pointSize()+1); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GLScope::~GLScope() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-03-06 09:40:07 +01:00
										 |  |  | 	cleanup(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-07 01:17:16 +02:00
										 |  |  | void GLScope::setSampleRate(int sampleRate) { | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	m_sampleRates[m_memTraceIndex-m_memTraceHistory] = sampleRate; | 
					
						
							| 
									
										
										
										
											2015-07-12 09:32:54 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	emit sampleRateChanged(m_sampleRates[m_memTraceIndex-m_memTraceHistory]); | 
					
						
							| 
									
										
										
										
											2015-07-07 01:17:16 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | void GLScope::setAmp1(Real amp) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 	qDebug("GLScope::setAmp1: %f", amp); | 
					
						
							|  |  |  | 	m_amp1 = amp; | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | void GLScope::setAmp1Ofs(Real ampOfs) | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 	qDebug("GLScope::setAmp1Ofs: %f", ampOfs); | 
					
						
							|  |  |  | 	m_ofs1 = ampOfs; | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | void GLScope::setAmp2(Real amp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	qDebug("GLScope::setAmp2: %f", amp); | 
					
						
							|  |  |  | 	m_amp2 = amp; | 
					
						
							|  |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setAmp2Ofs(Real ampOfs) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	qDebug("GLScope::setAmp2Ofs: %f", ampOfs); | 
					
						
							|  |  |  | 	m_ofs2 = ampOfs; | 
					
						
							|  |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | void GLScope::setTimeBase(int timeBase) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_timeBase = timeBase; | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setTimeOfsProMill(int timeOfsProMill) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_timeOfsProMill = timeOfsProMill; | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setMode(Mode mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_mode = mode; | 
					
						
							|  |  |  | 	m_dataChanged = true; | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | void GLScope::setDisplays(Displays displays) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_displays = displays; | 
					
						
							|  |  |  | 	m_dataChanged = true; | 
					
						
							|  |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | void GLScope::setOrientation(Qt::Orientation orientation) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_orientation = orientation; | 
					
						
							|  |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 22:52:27 +02:00
										 |  |  | void GLScope::setDisplayGridIntensity(int intensity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_displayGridIntensity = intensity; | 
					
						
							|  |  |  | 	if (m_displayGridIntensity > 100) { | 
					
						
							|  |  |  | 		m_displayGridIntensity = 100; | 
					
						
							| 
									
										
										
										
											2015-07-18 11:27:09 +02:00
										 |  |  | 	} else if (m_displayGridIntensity < 0) { | 
					
						
							|  |  |  | 		m_displayGridIntensity = 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setDisplayTraceIntensity(int intensity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_displayTraceIntensity = intensity; | 
					
						
							|  |  |  | 	if (m_displayTraceIntensity > 100) { | 
					
						
							|  |  |  | 		m_displayTraceIntensity = 100; | 
					
						
							|  |  |  | 	} else if (m_displayTraceIntensity < 0) { | 
					
						
							|  |  |  | 		m_displayTraceIntensity = 0; | 
					
						
							| 
									
										
										
										
											2015-06-23 22:52:27 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | void GLScope::newTrace(const std::vector<Complex>& trace, int sampleRate) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	if (!m_memTraceRecall) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(!m_mutex.tryLock(2)) | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		if(m_dataChanged) { | 
					
						
							|  |  |  | 			m_mutex.unlock(); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 		m_memTraceIndex++; | 
					
						
							|  |  |  | 		m_rawTrace[m_memTraceIndex] = trace; | 
					
						
							|  |  |  | 		m_sampleRates[m_memTraceIndex] = sampleRate; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 08:56:33 +01:00
										 |  |  | 		if(m_memTraceIndexMax < (1<<m_memHistorySizeLog2)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			m_memTraceIndexMax++; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 		//m_sampleRate = sampleRate; // sampleRate comes from scopeVis
 | 
					
						
							|  |  |  | 		m_dataChanged = true; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 		m_mutex.unlock(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::initializeGL() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | 	QOpenGLContext *glCurrentContext =  QOpenGLContext::currentContext(); | 
					
						
							| 
									
										
										
										
											2016-03-06 10:48:34 +01:00
										 |  |  | 	//QOpenGLContext *glCurrentContext =  context();
 | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (glCurrentContext) { | 
					
						
							|  |  |  | 		if (QOpenGLContext::currentContext()->isValid()) { | 
					
						
							|  |  |  | 			qDebug() << "GLScope::initializeGL: context:" | 
					
						
							|  |  |  | 				<< " major: " << (QOpenGLContext::currentContext()->format()).majorVersion() | 
					
						
							|  |  |  | 				<< " minor: " << (QOpenGLContext::currentContext()->format()).minorVersion() | 
					
						
							|  |  |  | 				<< " ES: " << (QOpenGLContext::currentContext()->isOpenGLES() ? "yes" : "no"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			qDebug() << "GLScope::initializeGL: current context is invalid"; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		qCritical() << "GLScope::initializeGL: no current context"; | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:48:34 +01:00
										 |  |  | 	QSurface *surface = glCurrentContext->surface(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (surface == 0) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		qCritical() << "GLScope::initializeGL: no surface attached"; | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (surface->surfaceType() != QSurface::OpenGLSurface) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			qCritical() << "GLScope::initializeGL: surface is not an OpenGLSurface: " << surface->surfaceType() | 
					
						
							|  |  |  | 				<< " cannot use an OpenGL context"; | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			qDebug() << "GLScope::initializeGL: OpenGL surface:" | 
					
						
							|  |  |  | 				<< " class: " << (surface->surfaceClass() == QSurface::Window ? "Window" : "Offscreen"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | 	connect(glCurrentContext, &QOpenGLContext::aboutToBeDestroyed, this, &GLScope::cleanup); // TODO: when migrating to QOpenGLWidget
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:00:13 +01:00
										 |  |  | 	QOpenGLFunctions *glFunctions = QOpenGLContext::currentContext()->functions(); | 
					
						
							|  |  |  | 	glFunctions->initializeOpenGLFunctions(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//glDisable(GL_DEPTH_TEST);
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 	m_glShaderSimple.initializeGL(); | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 	m_glShaderLeft1Scale.initializeGL(); | 
					
						
							|  |  |  | 	m_glShaderBottom1Scale.initializeGL(); | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 	m_glShaderLeft2Scale.initializeGL(); | 
					
						
							|  |  |  | 	m_glShaderBottom2Scale.initializeGL(); | 
					
						
							|  |  |  | 	m_glShaderPowerOverlay.initializeGL(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::resizeGL(int width, int height) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-03-06 10:00:13 +01:00
										 |  |  | 	QOpenGLFunctions *glFunctions = QOpenGLContext::currentContext()->functions(); | 
					
						
							|  |  |  | 	glFunctions->glViewport(0, 0, width, height); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::paintGL() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if(!m_mutex.tryLock(2)) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(m_configChanged) | 
					
						
							|  |  |  | 		applyConfig(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handleMode(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 15:41:58 +00:00
										 |  |  | 	if(m_displayTrace->size() - m_oldTraceSize != 0) { | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		m_oldTraceSize = m_displayTrace->size(); | 
					
						
							| 
									
										
										
										
											2016-03-06 09:06:59 +01:00
										 |  |  | 		emit traceSizeChanged((int) m_displayTrace->size()); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:00:13 +01:00
										 |  |  | 	QOpenGLFunctions *glFunctions = QOpenGLContext::currentContext()->functions(); | 
					
						
							|  |  |  | 	glFunctions->glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | 
					
						
							|  |  |  | 	glFunctions->glClear(GL_COLOR_BUFFER_BIT); | 
					
						
							| 
									
										
										
										
											2016-02-29 23:29:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	// I - primary display
 | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	if ((m_displays == DisplayBoth) || (m_displays == DisplayFirstOnly)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		// draw rect around
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat q3[] { | 
					
						
							|  |  |  | 				1, 1, | 
					
						
							|  |  |  | 				0, 1, | 
					
						
							|  |  |  | 				0, 0, | 
					
						
							|  |  |  | 				1, 0 | 
					
						
							|  |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 			QVector4D color(1.0f, 1.0f, 1.0f, 0.5f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawContour(m_glScopeMatrix1, color, q3, 4); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		// paint grid
 | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 		const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 		const ScaleEngine::Tick* tick; | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 		// Horizontal Y1
 | 
					
						
							|  |  |  | 		tickList = &m_y1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat q3[4*tickList->count()]; | 
					
						
							|  |  |  | 			int effectiveTicks = 0; | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for (int i= 0; i < tickList->count(); i++) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				tick = &(*tickList)[i]; | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (tick->major) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					if (tick->textSize > 0) | 
					
						
							|  |  |  | 					{ | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 						float y = 1 - (tick->pos / m_y1Scale.getSize()); | 
					
						
							|  |  |  | 						q3[4*effectiveTicks] = 0; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+1] = y; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+2] = 1; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+3] = y; | 
					
						
							|  |  |  | 						effectiveTicks++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 			float blue = (m_mode == ModeIQPolar ? 0.25f : 1.0f); | 
					
						
							|  |  |  | 			QVector4D color(1.0f, 1.0f, blue, (float) m_displayGridIntensity / 100.0f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawSegments(m_glScopeMatrix1, color, q3, 2*effectiveTicks); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 			// Vertical X1
 | 
					
						
							|  |  |  | 			tickList = &m_x1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			GLfloat q3[4*tickList->count()]; | 
					
						
							|  |  |  | 			int effectiveTicks = 0; | 
					
						
							|  |  |  | 			for(int i= 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						float x = tick->pos / m_x1Scale.getSize(); | 
					
						
							|  |  |  | 						q3[4*effectiveTicks] = x; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+1] = 0; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+2] = x; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+3] = 1; | 
					
						
							|  |  |  | 						effectiveTicks++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-05 23:18:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			QVector4D color(1.0f, 1.0f, 1.0f, (float) m_displayGridIntensity / 100.0f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawSegments(m_glScopeMatrix1, color, q3, 2*effectiveTicks); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		// paint left #1 scale
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat vtx1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							|  |  |  | 			GLfloat tex1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_glShaderLeft1Scale.drawSurface(m_glLeft1ScaleMatrix, tex1, vtx1, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// paint bottom #1 scale
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat vtx1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							|  |  |  | 			GLfloat tex1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_glShaderBottom1Scale.drawSurface(m_glBot1ScaleMatrix, tex1, vtx1, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		// paint trigger level #1
 | 
					
						
							| 
									
										
										
										
											2015-07-26 13:06:15 +02:00
										 |  |  | 		if ((m_triggerChannel == ScopeVis::TriggerChannelI) | 
					
						
							|  |  |  | 				|| (m_triggerChannel == ScopeVis::TriggerMagLin) | 
					
						
							|  |  |  | 				|| (m_triggerChannel == ScopeVis::TriggerMagDb) | 
					
						
							|  |  |  | 				) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-03-06 00:45:10 +01:00
										 |  |  | 			float posLimit = 1.0 / m_amp1; | 
					
						
							|  |  |  | 			float negLimit = -1.0 / m_amp1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if ((m_triggerLevelDis1 > negLimit) && (m_triggerLevelDis1 < posLimit)) | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-03-06 00:45:10 +01:00
										 |  |  | 				GLfloat q3[] { | 
					
						
							|  |  |  | 					0, m_triggerLevelDis1, | 
					
						
							|  |  |  | 					1, m_triggerLevelDis1 | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				float rectX = m_glScopeRect1.x(); | 
					
						
							|  |  |  | 				float rectY = m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0f; | 
					
						
							|  |  |  | 				float rectW = m_glScopeRect1.width(); | 
					
						
							|  |  |  | 				float rectH = -(m_glScopeRect1.height() / 2.0f) * m_amp1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				QVector4D color(0.0f, 1.0f, 0.0f, 0.4f); | 
					
						
							|  |  |  | 				QMatrix4x4 mat; | 
					
						
							|  |  |  | 				mat.setToIdentity(); | 
					
						
							|  |  |  | 				mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 				mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 				m_glShaderSimple.drawSegments(mat, color, q3, 2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //				glPushMatrix();
 | 
					
						
							|  |  |  | //				glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0);
 | 
					
						
							|  |  |  | //				glScalef(m_glScopeRect1.width(), -(m_glScopeRect1.height() / 2) * m_amp1, 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		// paint trace #1
 | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 		if(m_displayTrace->size() > 0) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-03-06 00:45:10 +01:00
										 |  |  | 				int start = (m_timeOfsProMill/1000.0) * m_displayTrace->size(); | 
					
						
							|  |  |  | 				int end = std::min(start + m_displayTrace->size()/m_timeBase, m_displayTrace->size()); | 
					
						
							|  |  |  | 				if(end - start < 2) | 
					
						
							|  |  |  | 					start--; | 
					
						
							|  |  |  | 				float posLimit = 1.0 / m_amp1; | 
					
						
							|  |  |  | 				float negLimit = -1.0 / m_amp1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				GLfloat q3[2*(end -start)]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for (int i = start; i < end; i++) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					float v = (*m_displayTrace)[i].real(); | 
					
						
							|  |  |  | 					if(v > posLimit) | 
					
						
							|  |  |  | 						v = posLimit; | 
					
						
							|  |  |  | 					else if(v < negLimit) | 
					
						
							|  |  |  | 						v = negLimit; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-09 13:47:44 +01:00
										 |  |  | 					q3[2*(i-start)] = i - start; | 
					
						
							|  |  |  | 					q3[2*(i-start) + 1] = v; | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					if ((m_mode == ModeMagdBPha) || (m_mode == ModeMagdBDPha)) | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						if (i == start) | 
					
						
							|  |  |  | 						{ | 
					
						
							|  |  |  | 							m_maxPow = m_powTrace[i]; | 
					
						
							|  |  |  | 							m_sumPow = m_powTrace[i]; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						else | 
					
						
							|  |  |  | 						{ | 
					
						
							|  |  |  | 							if (m_powTrace[i] > m_maxPow) | 
					
						
							|  |  |  | 							{ | 
					
						
							|  |  |  | 								m_maxPow = m_powTrace[i]; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							m_sumPow += m_powTrace[i]; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 00:45:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				float rectX = m_glScopeRect1.x(); | 
					
						
							|  |  |  | 				float rectY = m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0f; | 
					
						
							|  |  |  | 				float rectW = m_glScopeRect1.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1); | 
					
						
							|  |  |  | 				float rectH = -(m_glScopeRect1.height() / 2.0f) * m_amp1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				QVector4D color(1.0f, 1.0f, 0.25f, m_displayTraceIntensity / 100.0f); | 
					
						
							| 
									
										
										
										
											2016-03-06 00:45:10 +01:00
										 |  |  | 				QMatrix4x4 mat; | 
					
						
							|  |  |  | 				mat.setToIdentity(); | 
					
						
							|  |  |  | 				mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 				mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 				m_glShaderSimple.drawPolyline(mat, color, q3, end -start); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //				glPushMatrix();
 | 
					
						
							|  |  |  | //				glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0);
 | 
					
						
							|  |  |  | //				glScalef(m_glScopeRect1.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1), -(m_glScopeRect1.height() / 2) * m_amp1, 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				m_nbPow = end - start; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-27 02:12:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 		// Paint powers overlays
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 		if ((m_mode == ModeMagdBPha) || (m_mode == ModeMagdBDPha)) | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			if (m_nbPow > 0) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 				drawPowerOverlay(); | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Paint trace 2 (Q) over
 | 
					
						
							|  |  |  | 			if (m_displayTrace->size() > 0) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 					int start = (m_timeOfsProMill/1000.0) * m_displayTrace->size(); | 
					
						
							|  |  |  | 					int end = std::min(start + m_displayTrace->size()/m_timeBase, m_displayTrace->size()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if(end - start < 2) { | 
					
						
							|  |  |  | 						start--; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					float posLimit = 1.0 / m_amp2; | 
					
						
							|  |  |  | 					float negLimit = -1.0 / m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 					GLfloat q3[2*(end - start)]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					for(int i = start; i < end; i++) | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						float v = (*m_displayTrace)[i].imag(); | 
					
						
							|  |  |  | 						if(v > posLimit) | 
					
						
							|  |  |  | 							v = posLimit; | 
					
						
							|  |  |  | 						else if(v < negLimit) | 
					
						
							|  |  |  | 							v = negLimit; | 
					
						
							| 
									
										
										
										
											2016-03-09 13:47:44 +01:00
										 |  |  | 						q3[2*(i-start)] = i - start; | 
					
						
							|  |  |  | 						q3[2*(i-start) + 1] = v; | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					float rectX = m_glScopeRect1.x(); | 
					
						
							|  |  |  | 					float rectY = m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0f; | 
					
						
							|  |  |  | 					float rectW = m_glScopeRect1.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1); | 
					
						
							|  |  |  | 					float rectH = -(m_glScopeRect1.height() / 2.0f) * m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					QVector4D color(0.25f, 1.0f, 1.0f, m_displayTraceIntensity / 100.0); | 
					
						
							|  |  |  | 					QMatrix4x4 mat; | 
					
						
							|  |  |  | 					mat.setToIdentity(); | 
					
						
							|  |  |  | 					mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 					mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 					m_glShaderSimple.drawPolyline(mat, color, q3, end -start); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //					glPushMatrix();
 | 
					
						
							|  |  |  | //					glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0);
 | 
					
						
							|  |  |  | //					glScalef(m_glScopeRect1.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1), -(m_glScopeRect1.height() / 2) * m_amp2, 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Paint secondary grid
 | 
					
						
							|  |  |  | 			// draw rect around
 | 
					
						
							|  |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 			// Horizontal Y2
 | 
					
						
							|  |  |  | 			tickList = &m_y2Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				GLfloat q3[4*tickList->count()]; | 
					
						
							|  |  |  | 				int effectiveTicks = 0; | 
					
						
							|  |  |  | 				for(int i= 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							float y = 1 - (tick->pos / m_y2Scale.getSize()); | 
					
						
							|  |  |  | 							q3[4*effectiveTicks] = 0; | 
					
						
							|  |  |  | 							q3[4*effectiveTicks+1] = y; | 
					
						
							|  |  |  | 							q3[4*effectiveTicks+2] = 1; | 
					
						
							|  |  |  | 							q3[4*effectiveTicks+3] = y; | 
					
						
							|  |  |  | 							effectiveTicks++; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				QVector4D color(0.25f, 1.0f, 1.0f, (float) m_displayGridIntensity / 100.0f); | 
					
						
							|  |  |  | 				m_glShaderSimple.drawSegments(m_glScopeMatrix1, color, q3, 2*effectiveTicks); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			// Paint secondary scale
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				GLfloat vtx1[] = { | 
					
						
							|  |  |  | 						0, 1, | 
					
						
							|  |  |  | 			    		1, 1, | 
					
						
							|  |  |  | 			    		1, 0, | 
					
						
							|  |  |  | 			    		0, 0 | 
					
						
							|  |  |  | 			    }; | 
					
						
							|  |  |  | 				GLfloat tex1[] = { | 
					
						
							|  |  |  | 						0, 1, | 
					
						
							|  |  |  | 			    		1, 1, | 
					
						
							|  |  |  | 			    		1, 0, | 
					
						
							|  |  |  | 			    		0, 0 | 
					
						
							|  |  |  | 			    }; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				m_glShaderLeft2Scale.drawSurface(m_glRight1ScaleMatrix, tex1, vtx1, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	} // Both displays or primary only
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Q - secondary display
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	if ((m_displays == DisplayBoth) || (m_displays == DisplaySecondOnly)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		// draw rect around
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat q3[] { | 
					
						
							|  |  |  | 				1, 1, | 
					
						
							|  |  |  | 				0, 1, | 
					
						
							|  |  |  | 				0, 0, | 
					
						
							|  |  |  | 				1, 0 | 
					
						
							|  |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			QVector4D color(1.0f, 1.0f, 1.0f, 0.5f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawContour(m_glScopeMatrix2, color, q3, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		// paint grid
 | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 		const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 		const ScaleEngine::Tick* tick; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 		// Horizontal Y2
 | 
					
						
							|  |  |  | 		tickList = &m_y2Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat q3[4*tickList->count()]; | 
					
						
							|  |  |  | 			int effectiveTicks = 0; | 
					
						
							|  |  |  | 			for(int i= 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						float y = 1 - (tick->pos / m_y2Scale.getSize()); | 
					
						
							|  |  |  | 						q3[4*effectiveTicks] = 0; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+1] = y; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+2] = 1; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+3] = y; | 
					
						
							|  |  |  | 						effectiveTicks++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			QVector4D color(1.0f, 1.0f, 1.0f, (float) m_displayGridIntensity / 100.0f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawSegments(m_glScopeMatrix2, color, q3, 2*effectiveTicks); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-14 10:39:41 +02:00
										 |  |  | 		// Vertical X2
 | 
					
						
							|  |  |  | 		tickList = &m_x2Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat q3[4*tickList->count()]; | 
					
						
							|  |  |  | 			int effectiveTicks = 0; | 
					
						
							|  |  |  | 			for(int i= 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						float x = tick->pos / m_x2Scale.getSize(); | 
					
						
							|  |  |  | 						q3[4*effectiveTicks] = x; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+1] = 0; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+2] = x; | 
					
						
							|  |  |  | 						q3[4*effectiveTicks+3] = 1; | 
					
						
							|  |  |  | 						effectiveTicks++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			QVector4D color(1.0f, 1.0f, 1.0f, (float) m_displayGridIntensity / 100.0f); | 
					
						
							|  |  |  | 			m_glShaderSimple.drawSegments(m_glScopeMatrix2, color, q3, 2*effectiveTicks); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// paint left #2 scale
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat vtx1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							|  |  |  | 			GLfloat tex1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_glShaderLeft2Scale.drawSurface(m_glLeft2ScaleMatrix, tex1, vtx1, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// paint bottom #2 scale
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			GLfloat vtx1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							|  |  |  | 			GLfloat tex1[] = { | 
					
						
							|  |  |  | 					0, 1, | 
					
						
							|  |  |  | 		    		1, 1, | 
					
						
							|  |  |  | 		    		1, 0, | 
					
						
							|  |  |  | 		    		0, 0 | 
					
						
							|  |  |  | 		    }; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_glShaderBottom2Scale.drawSurface(m_glBot2ScaleMatrix, tex1, vtx1, 4); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		// paint trigger level #2
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 		if ((m_triggerChannel == ScopeVis::TriggerPhase) | 
					
						
							|  |  |  | 				|| (m_triggerChannel == ScopeVis::TriggerDPhase) | 
					
						
							|  |  |  | 				|| (m_triggerChannel == ScopeVis::TriggerChannelQ)) | 
					
						
							| 
									
										
										
										
											2015-07-26 13:06:15 +02:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 			float posLimit = 1.0 / m_amp2; | 
					
						
							|  |  |  | 			float negLimit = -1.0 / m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if ((m_triggerLevelDis2 > negLimit) && (m_triggerLevelDis2 < posLimit)) | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				GLfloat q3[] { | 
					
						
							|  |  |  | 					0, m_triggerLevelDis2, | 
					
						
							|  |  |  | 					1, m_triggerLevelDis2 | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				float rectX = m_glScopeRect2.x(); | 
					
						
							|  |  |  | 				float rectY = m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0f; | 
					
						
							|  |  |  | 				float rectW = m_glScopeRect2.width(); | 
					
						
							|  |  |  | 				float rectH = -(m_glScopeRect2.height() / 2.0f) * m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				QVector4D color(0.0f, 1.0f, 0.0f, 0.4f); | 
					
						
							|  |  |  | 				QMatrix4x4 mat; | 
					
						
							|  |  |  | 				mat.setToIdentity(); | 
					
						
							|  |  |  | 				mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 				mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 				m_glShaderSimple.drawSegments(mat, color, q3, 2); | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		// paint trace #2
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 		if(m_displayTrace->size() > 0) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-06 06:20:52 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				int start = (m_timeOfsProMill/1000.0) * m_displayTrace->size(); | 
					
						
							|  |  |  | 				int end = std::min(start + m_displayTrace->size()/m_timeBase, m_displayTrace->size()); | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (end - start < 2) { | 
					
						
							| 
									
										
										
										
											2015-11-06 06:20:52 +01:00
										 |  |  | 					start--; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					GLfloat q3[2*(end - start)]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					for(int i = start; i < end; i++) | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						float x = (*m_displayTrace)[i].real() * m_amp1; | 
					
						
							|  |  |  | 						float y = (*m_displayTrace)[i].imag() * m_amp2; | 
					
						
							|  |  |  | 						if(x > 1.0f) | 
					
						
							|  |  |  | 							x = 1.0f; | 
					
						
							|  |  |  | 						else if(x < -1.0f) | 
					
						
							|  |  |  | 							x = -1.0f; | 
					
						
							|  |  |  | 						if(y > 1.0f) | 
					
						
							|  |  |  | 							y = 1.0f; | 
					
						
							|  |  |  | 						else if(y < -1.0f) | 
					
						
							|  |  |  | 							y = -1.0f; | 
					
						
							| 
									
										
										
										
											2016-03-09 13:47:44 +01:00
										 |  |  | 						q3[2*(i-start)] = x; | 
					
						
							|  |  |  | 						q3[2*(i-start)+1] = y; | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					float rectX = m_glScopeRect2.x() + m_glScopeRect2.width() / 2.0f; | 
					
						
							|  |  |  | 					float rectY = m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0f; | 
					
						
							|  |  |  | 					float rectW = m_glScopeRect2.width() / 2.0f; | 
					
						
							|  |  |  | 					float rectH = -(m_glScopeRect2.height() / 2.0f); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					QVector4D color(1.0f, 1.0f, 0.25f, m_displayTraceIntensity / 100.0f); | 
					
						
							|  |  |  | 					QMatrix4x4 mat; | 
					
						
							|  |  |  | 					mat.setToIdentity(); | 
					
						
							|  |  |  | 					mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 					mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 					m_glShaderSimple.drawPolyline(mat, color, q3, end -start); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //					glPushMatrix();
 | 
					
						
							|  |  |  | //					glTranslatef(m_glScopeRect2.x() + m_glScopeRect2.width() / 2.0, m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0);
 | 
					
						
							|  |  |  | //					glScalef(m_glScopeRect2.width() / 2, -(m_glScopeRect2.height() / 2), 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-11-06 06:20:52 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 					int start = (m_timeOfsProMill/1000.0) * m_displayTrace->size(); | 
					
						
							|  |  |  | 					int end = std::min(start + m_displayTrace->size()/m_timeBase, m_displayTrace->size()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if (end - start < 2) { | 
					
						
							|  |  |  | 						start--; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					float posLimit = 1.0 / m_amp2; | 
					
						
							|  |  |  | 					float negLimit = -1.0 / m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 					GLfloat q3[2*(end - start)]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					for(int i = start; i < end; i++) { | 
					
						
							|  |  |  | 						float v = (*m_displayTrace)[i].imag(); | 
					
						
							|  |  |  | 						if(v > posLimit) | 
					
						
							|  |  |  | 							v = posLimit; | 
					
						
							|  |  |  | 						else if(v < negLimit) | 
					
						
							|  |  |  | 							v = negLimit; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-09 13:47:44 +01:00
										 |  |  | 						q3[2*(i-start)] = i - start; | 
					
						
							|  |  |  | 						q3[2*(i-start)+1] = v; | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					float rectX = m_glScopeRect2.x(); | 
					
						
							|  |  |  | 					float rectY = m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0f; | 
					
						
							|  |  |  | 					float rectW = m_glScopeRect2.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1); | 
					
						
							|  |  |  | 					float rectH = -(m_glScopeRect2.height() / 2.0f) * m_amp2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					QVector4D color(1.0f, 1.0f, 0.25f, m_displayTraceIntensity / 100.0f); | 
					
						
							|  |  |  | 					QMatrix4x4 mat; | 
					
						
							|  |  |  | 					mat.setToIdentity(); | 
					
						
							|  |  |  | 					mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 					mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 					m_glShaderSimple.drawPolyline(mat, color, q3, end -start); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //					glPushMatrix();
 | 
					
						
							|  |  |  | //					glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0);
 | 
					
						
							|  |  |  | //					glScalef(m_glScopeRect2.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1), -(m_glScopeRect2.height() / 2) * m_amp2, 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} // Both displays or secondary display only
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 10:00:13 +01:00
										 |  |  | //	glPopMatrix();
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	m_dataChanged = false; | 
					
						
							|  |  |  | 	m_mutex.unlock(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::mousePressEvent(QMouseEvent* event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #if 0
 | 
					
						
							|  |  |  | 	int x = event->x() - 10; | 
					
						
							|  |  |  | 	int y = event->y() - 10; | 
					
						
							|  |  |  | 	Real time; | 
					
						
							|  |  |  | 	Real amplitude; | 
					
						
							|  |  |  | 	ScopeVis::TriggerChannel channel; | 
					
						
							|  |  |  | 	if((x < 0) || (x >= width() - 20)) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	if((y < 0) || (y >= height() - 20)) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if((m_sampleRate != 0) && (m_timeBase != 0) && (width() > 20)) | 
					
						
							|  |  |  | 		time = ((Real)x * (Real)m_displayTrace->size()) / ((Real)m_sampleRate * (Real)m_timeBase * (Real)(width() - 20)); | 
					
						
							|  |  |  | 	else time = -1.0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(y < (height() - 30) / 2) { | 
					
						
							|  |  |  | 		channel = ScopeVis::TriggerChannelI; | 
					
						
							|  |  |  | 		if((m_amp != 0) && (height() > 30)) | 
					
						
							|  |  |  | 			amplitude = 2.0 * ((height() - 30) * 0.25 - (Real)y) / (m_amp * (height() - 30) / 2.0); | 
					
						
							|  |  |  | 		else amplitude = -1; | 
					
						
							|  |  |  | 	} else if(y > (height() - 30) / 2 + 10) { | 
					
						
							|  |  |  | 		y -= 10 + (height() - 30) / 2; | 
					
						
							|  |  |  | 		channel = ScopeVis::TriggerChannelQ; | 
					
						
							|  |  |  | 		if((m_amp != 0) && (height() > 30)) | 
					
						
							|  |  |  | 			amplitude = 2.0 * ((height() - 30) * 0.25 - (Real)y) / (m_amp * (height() - 30) / 2.0); | 
					
						
							|  |  |  | 		else amplitude = -1; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		channel = ScopeVis::TriggerFreeRun; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(m_dspEngine != NULL) { | 
					
						
							|  |  |  | 		qDebug("amp %f", amplitude); | 
					
						
							| 
									
										
										
										
											2015-07-14 01:24:59 +02:00
										 |  |  | 		m_triggerLevel = amplitude + 0.01 / m_amp; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		m_triggerLevelLow = amplitude - 0.01 / m_amp; | 
					
						
							| 
									
										
										
										
											2015-07-14 01:24:59 +02:00
										 |  |  | 		if(m_triggerLevel > 1.0) | 
					
						
							|  |  |  | 			m_triggerLevel = 1.0; | 
					
						
							|  |  |  | 		else if(m_triggerLevel < -1.0) | 
					
						
							|  |  |  | 			m_triggerLevel = -1.0; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		if(m_triggerLevelLow > 1.0) | 
					
						
							|  |  |  | 			m_triggerLevelLow = 1.0; | 
					
						
							|  |  |  | 		else if(m_triggerLevelLow < -1.0) | 
					
						
							|  |  |  | 			m_triggerLevelLow = -1.0; | 
					
						
							| 
									
										
										
										
											2015-07-14 01:24:59 +02:00
										 |  |  | 		m_scopeVis->configure(m_dspEngine->getMessageQueue(), channel, m_triggerLevel, m_triggerLevelLow); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		m_triggerChannel = channel; | 
					
						
							|  |  |  | 		m_changed = true; | 
					
						
							|  |  |  | 		update(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::handleMode() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 	BitfieldIndex<m_memHistorySizeLog2> memIndex = m_memTraceIndex - m_memTraceHistory; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	switch(m_mode) { | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		case ModeIQ: | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		case ModeIQPolar: | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_mathTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_displayTrace = &m_rawTrace[memIndex]; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			for(std::vector<Complex>::const_iterator src = m_rawTrace[memIndex].begin(); src != m_rawTrace[memIndex].end(); ++src) { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				*dst++ = Complex(src->real() - m_ofs1, src->imag() - m_ofs2); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_triggerLevelDis1 = m_triggerLevel - m_ofs1; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			m_triggerLevelDis2 = m_triggerLevel - m_ofs2; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			m_displayTrace = &m_mathTrace; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		case ModeMagLinPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_mathTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			for(std::vector<Complex>::const_iterator src = m_rawTrace[memIndex].begin(); src != m_rawTrace[memIndex].end(); ++src) | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				*dst++ = Complex(abs(*src) - m_ofs1/2.0 - 1.0/m_amp1, (arg(*src) / M_PI) - m_ofs2); | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_triggerLevelDis1 = (m_triggerLevel + 1) - m_ofs1/2.0 - 1.0/m_amp1; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			m_triggerLevelDis2 = m_triggerLevel - m_ofs2; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			m_displayTrace = &m_mathTrace; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		case ModeMagdBPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_mathTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							|  |  |  | 			m_powTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 			std::vector<Real>::iterator powDst = m_powTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			for(std::vector<Complex>::const_iterator src = m_rawTrace[memIndex].begin(); src != m_rawTrace[memIndex].end(); ++src) { | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				Real v = src->real() * src->real() + src->imag() * src->imag(); | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | 				*powDst++ = v; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				v = 1.0f + 2.0f*(((10.0f*log10f(v))/100.0f) - m_ofs1)  + 1.0f - 1.0f/m_amp1; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				*dst++ = Complex(v, (arg(*src) / M_PI) - m_ofs2); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			Real tdB = (m_triggerLevel - 1) * 100.0f; | 
					
						
							|  |  |  | 			m_triggerLevelDis1 = 1.0f + 2.0f*(((tdB)/100.0f) - m_ofs1)  + 1.0f - 1.0f/m_amp1; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			m_triggerLevelDis2 = m_triggerLevel - m_ofs2; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			m_displayTrace = &m_mathTrace; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		case ModeMagLinDPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_mathTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							|  |  |  | 			Real curArg; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			for(std::vector<Complex>::const_iterator src = m_rawTrace[memIndex].begin(); src != m_rawTrace[memIndex].end(); ++src) | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				curArg = arg(*src) - m_prevArg; | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				if (curArg < -M_PI) { | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 					curArg += 2.0 * M_PI; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				} else if (curArg > M_PI) { | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 					curArg -= 2.0 * M_PI; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				*dst++ = Complex(abs(*src) - m_ofs1/2.0 - 1.0/m_amp1, (curArg / M_PI) - m_ofs2); | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 				m_prevArg = arg(*src); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 			m_triggerLevelDis1 = (m_triggerLevel + 1) - m_ofs1/2.0 - 1.0/m_amp1; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			m_triggerLevelDis2 = m_triggerLevel - m_ofs2; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			m_displayTrace = &m_mathTrace; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 		case ModeMagdBDPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			m_mathTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							|  |  |  | 			m_powTrace.resize(m_rawTrace[memIndex].size()); | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							|  |  |  | 			std::vector<Real>::iterator powDst = m_powTrace.begin(); | 
					
						
							|  |  |  | 			Real curArg; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			for(std::vector<Complex>::const_iterator src = m_rawTrace[memIndex].begin(); src != m_rawTrace[memIndex].end(); ++src) | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				Real v = src->real() * src->real() + src->imag() * src->imag(); | 
					
						
							|  |  |  | 				*powDst++ = v; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				v = 1.0f + 2.0f*(((10.0f*log10f(v))/100.0f) - m_ofs1)  + 1.0f - 1.0f/m_amp1; | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 				curArg = arg(*src) - m_prevArg; | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				if (curArg < -M_PI) { | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 					curArg += 2.0 * M_PI; | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 				} else if (curArg > M_PI) { | 
					
						
							| 
									
										
										
										
											2015-10-29 20:46:52 +01:00
										 |  |  | 					curArg -= 2.0 * M_PI; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				*dst++ = Complex(v, (curArg / M_PI) - m_ofs2); | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 				m_prevArg = arg(*src); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			Real tdB = (m_triggerLevel - 1) * 100.0f; | 
					
						
							|  |  |  | 			m_triggerLevelDis1 = 1.0f + 2.0f*(((tdB)/100.0f) - m_ofs1)  + 1.0f - 1.0f/m_amp1; | 
					
						
							|  |  |  | 			m_triggerLevelDis2 = m_triggerLevel - m_ofs2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			m_displayTrace = &m_mathTrace; | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 		case ModeDerived12: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			if(m_rawTrace[memIndex].size() > 3) | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 				m_mathTrace.resize(m_rawTrace[memIndex].size() - 3); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 				for(uint i = 3; i < m_rawTrace[memIndex].size() ; i++) | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 					*dst++ = Complex( | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 						abs(m_rawTrace[memIndex][i] - m_rawTrace[memIndex][i - 1]), | 
					
						
							|  |  |  | 						abs(m_rawTrace[memIndex][i] - m_rawTrace[memIndex][i - 1]) - abs(m_rawTrace[memIndex][i - 2] - m_rawTrace[0][i - 3])); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				m_displayTrace = &m_mathTrace; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 		case ModeCyclostationary: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 			if(m_rawTrace[0].size() > 2) | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 				m_mathTrace.resize(m_rawTrace[memIndex].size() - 2); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				std::vector<Complex>::iterator dst = m_mathTrace.begin(); | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | 				for(uint i = 2; i < m_rawTrace[memIndex].size() ; i++) | 
					
						
							|  |  |  | 					*dst++ = Complex(abs(m_rawTrace[memIndex][i] - conj(m_rawTrace[memIndex][i - 1])), 0); | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 				m_displayTrace = &m_mathTrace; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | void GLScope::drawPowerOverlay() | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-10-28 09:27:51 +01:00
										 |  |  | 	double maxPow = 10.0f * log10f(m_maxPow); | 
					
						
							|  |  |  | 	double avgPow = 10.0f * log10f(m_sumPow / m_nbPow); | 
					
						
							|  |  |  | 	double peakToAvgPow = maxPow - avgPow; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 	QString text = QString("%1  %2  %3").arg(maxPow, 0, 'f', 1).arg(avgPow, 0, 'f', 1).arg(peakToAvgPow, 0, 'f', 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	QFontMetricsF metrics(m_powerOverlayFont); | 
					
						
							|  |  |  | 	QRectF rect = metrics.boundingRect(text); | 
					
						
							|  |  |  | 	m_powerOverlayPixmap1 = QPixmap(rect.width() + 4.0f, rect.height()); | 
					
						
							|  |  |  | 	m_powerOverlayPixmap1.fill(Qt::transparent); | 
					
						
							|  |  |  | 	QPainter painter(&m_powerOverlayPixmap1); | 
					
						
							|  |  |  | 	painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing, false); | 
					
						
							|  |  |  | 	painter.fillRect(rect, QColor(0, 0, 0, 0x80)); | 
					
						
							| 
									
										
										
										
											2015-11-01 22:49:08 +01:00
										 |  |  | 	painter.setPen(QColor(0xff, 0xff, 0xff, 0x80)); | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 	painter.setFont(m_powerOverlayFont); | 
					
						
							|  |  |  | 	painter.drawText(QPointF(0, rect.height() - 2.0f), text); | 
					
						
							|  |  |  | 	painter.end(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 	m_glShaderPowerOverlay.initTexture(m_powerOverlayPixmap1.toImage()); | 
					
						
							| 
									
										
										
										
											2015-10-29 02:35:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		GLfloat vtx1[] = { | 
					
						
							|  |  |  | 				0, 1, | 
					
						
							|  |  |  | 	    		1, 1, | 
					
						
							|  |  |  | 	    		1, 0, | 
					
						
							|  |  |  | 	    		0, 0 | 
					
						
							|  |  |  | 	    }; | 
					
						
							|  |  |  | 		GLfloat tex1[] = { | 
					
						
							|  |  |  | 				0, 1, | 
					
						
							|  |  |  | 	    		1, 1, | 
					
						
							|  |  |  | 	    		1, 0, | 
					
						
							|  |  |  | 	    		0, 0 | 
					
						
							|  |  |  | 	    }; | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		float shiftX = m_glScopeRect1.width() - ((rect.width() + 4.0f) / width()); | 
					
						
							|  |  |  | 		float rectX = m_glScopeRect1.x() + shiftX; | 
					
						
							|  |  |  | 		float rectY = 0; | 
					
						
							|  |  |  | 		float rectW = rect.width() / (float) width(); | 
					
						
							|  |  |  | 		float rectH = rect.height() / (float) height(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		QMatrix4x4 mat; | 
					
						
							|  |  |  | 		mat.setToIdentity(); | 
					
						
							|  |  |  | 		mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); | 
					
						
							|  |  |  | 		mat.scale(2.0f * rectW, -2.0f * rectH); | 
					
						
							|  |  |  | 		m_glShaderPowerOverlay.drawSurface(mat, tex1, vtx1, 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //		glPushMatrix();
 | 
					
						
							|  |  |  | //		glTranslatef(m_glScopeRect1.x() + shiftX, m_glScopeRect1.y(), 0);
 | 
					
						
							|  |  |  | //		glScalef(rect.width() / (float) width(), rect.height() / (float) height(), 1);
 | 
					
						
							| 
									
										
										
										
											2016-02-28 22:03:37 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-10-27 04:56:52 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | void GLScope::applyConfig() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_configChanged = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 	QFontMetrics fm(font()); | 
					
						
							|  |  |  | 	int M = fm.width("-"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-24 00:01:33 +02:00
										 |  |  | 	int topMargin = 5; | 
					
						
							|  |  |  | 	int botMargin = 20; | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 	int leftMargin = 35; | 
					
						
							| 
									
										
										
										
											2015-06-24 00:01:33 +02:00
										 |  |  | 	int rightMargin = 5; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  |     float pow_floor = -100.0 + m_ofs1 * 100.0; | 
					
						
							|  |  |  |     float pow_range = 100.0 / m_amp1; | 
					
						
							|  |  |  |     float amp1_range = 2.0 / m_amp1; | 
					
						
							|  |  |  |     float amp1_ofs = m_ofs1; | 
					
						
							|  |  |  |     float amp2_range = 2.0 / m_amp2; | 
					
						
							|  |  |  |     float amp2_ofs = m_ofs2; | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  |     float t_start = ((m_timeOfsProMill / 1000.0) - m_triggerPre) * ((float) m_displayTrace->size() / m_sampleRates[m_memTraceIndex-m_memTraceHistory]); | 
					
						
							|  |  |  |     float t_len = ((float) m_displayTrace->size() / m_sampleRates[m_memTraceIndex-m_memTraceHistory]) / (float) m_timeBase; | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  |     m_x1Scale.setRange(Unit::Time, t_start, t_start + t_len); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:37:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 		if (amp1_range < 2.0) { | 
					
						
							|  |  |  | 			m_x2Scale.setRange(Unit::None, - amp1_range * 500.0 + amp1_ofs * 1000.0, amp1_range * 500.0 + amp1_ofs * 1000.0); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			m_x2Scale.setRange(Unit::None, - amp1_range * 0.5 + amp1_ofs, amp1_range * 0.5 + amp1_ofs); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     	m_x2Scale.setRange(Unit::Time, t_start, t_start + t_len); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 	switch(m_mode) { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 		case ModeIQ: | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		case ModeIQPolar: | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			if (amp1_range < 2.0) { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, - amp1_range * 500.0 + amp1_ofs * 1000.0, amp1_range * 500.0 + amp1_ofs * 1000.0); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				m_y1Scale.setRange(Unit::None, - amp1_range * 0.5 + amp1_ofs, amp1_range * 0.5 + amp1_ofs); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-11-06 05:37:15 +01:00
										 |  |  | 			if (amp2_range < 2.0) { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 500.0 + amp2_ofs * 1000.0, amp2_range * 500.0 + amp2_ofs * 1000.0); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 0.5 + amp2_ofs, amp2_range * 0.5 + amp2_ofs); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 		case ModeMagLinPha: | 
					
						
							|  |  |  | 		case ModeMagLinDPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			if (amp1_range < 2.0) { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, amp1_ofs * 500.0, amp1_range * 1000.0 + amp1_ofs * 500.0); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				m_y1Scale.setRange(Unit::None, amp1_ofs/2.0, amp1_range + amp1_ofs/2.0); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_y2Scale.setRange(Unit::None, -1.0/m_amp2 + amp2_ofs, 1.0/m_amp2 + amp2_ofs); // Scale to Pi*A2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-29 09:24:08 +01:00
										 |  |  | 		case ModeMagdBPha: | 
					
						
							|  |  |  | 		case ModeMagdBDPha: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			m_y1Scale.setRange(Unit::Decibel, pow_floor, pow_floor + pow_range); | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			m_y2Scale.setRange(Unit::None, -1.0/m_amp2 + amp2_ofs, 1.0/m_amp2 + amp2_ofs); // Scale to Pi*A2
 | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		case ModeDerived12: { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			if (amp1_range < 2.0) { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, 0.0, amp1_range * 1000.0); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, 0.0, amp1_range); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if (amp2_range < 2.0) { | 
					
						
							|  |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 500.0, amp2_range * 500.0); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 0.5, amp2_range * 0.5); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		case ModeCyclostationary: { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 			if (amp1_range < 2.0) { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, 0.0, amp1_range * 1000.0); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				m_y1Scale.setRange(Unit::None, 0.0, amp1_range); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if (amp2_range < 2.0) { | 
					
						
							|  |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 500.0, amp2_range * 500.0); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2015-11-01 06:27:39 +01:00
										 |  |  | 				m_y2Scale.setRange(Unit::None, - amp2_range * 0.5, amp2_range * 0.5); | 
					
						
							| 
									
										
										
										
											2015-07-09 02:21:54 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  |     // QRectF(x, y, w, h); (x, y) = top left corner
 | 
					
						
							| 
									
										
										
										
											2015-06-24 00:01:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	if (m_displays == DisplayBoth) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(m_orientation == Qt::Vertical) { | 
					
						
							|  |  |  | 			int scopeHeight = (height() - topMargin) / 2 - botMargin; | 
					
						
							|  |  |  | 			int scopeWidth = width() - leftMargin - rightMargin; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 					(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 					(float) (width() - 2*leftMargin - rightMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 					(float) 2*(width() - 2*leftMargin - rightMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(width() - 2*leftMargin - rightMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glRight1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glRight1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float)(2*(width() - leftMargin)) / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glRight1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 					(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 					(float) scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glLeft1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glLeft1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f, | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glLeft1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			{ // Y1 scale
 | 
					
						
							|  |  |  | 				m_y1Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					leftMargin - 1, | 
					
						
							|  |  |  | 					scopeHeight | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_left1ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_y1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 				m_glShaderLeft1Scale.initTexture(m_left1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // Y1 scale
 | 
					
						
							|  |  |  | 			{ // X1 scale
 | 
					
						
							|  |  |  | 				m_x1Scale.setSize(scopeWidth); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					scopeWidth, | 
					
						
							|  |  |  | 					botMargin - 1 | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_bot1ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_x1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 				m_glShaderBottom1Scale.initTexture(m_bot1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // X1 scale
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float)width(), | 
					
						
							|  |  |  | 					(float) (botMargin + topMargin + scopeDim) / (float)height(), | 
					
						
							|  |  |  | 					(float) scopeDim / (float)width(), | 
					
						
							|  |  |  | 					(float) scopeDim / (float)height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(botMargin + topMargin + scopeDim) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeDim / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f, | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(topMargin + scopeDim + botMargin) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeDim / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeDim + topMargin + scopeDim + botMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float)width(), | 
					
						
							|  |  |  | 					(float) (botMargin + topMargin + scopeHeight) / (float)height(), | 
					
						
							|  |  |  | 					(float) scopeWidth / (float)width(), | 
					
						
							|  |  |  | 					(float) scopeHeight / (float)height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(botMargin + topMargin + scopeHeight) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f, | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(topMargin + scopeHeight + botMargin) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + scopeHeight + botMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			{ // Y2 scale
 | 
					
						
							|  |  |  | 				m_y2Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					leftMargin - 1, | 
					
						
							|  |  |  | 					scopeHeight | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_left2ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_y2Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				m_glShaderLeft2Scale.initTexture(m_left2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // Y2 scale
 | 
					
						
							|  |  |  | 			{ // X2 scale
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 				if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 					m_x2Scale.setSize(scopeDim); | 
					
						
							|  |  |  | 					m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 							scopeDim, | 
					
						
							|  |  |  | 						botMargin - 1 | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					m_x2Scale.setSize(scopeWidth); | 
					
						
							|  |  |  | 					m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 						scopeWidth, | 
					
						
							|  |  |  | 						botMargin - 1 | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_bot2ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_x2Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				m_glShaderBottom2Scale.initTexture(m_bot2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // X2 scale
 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else // Horizontal
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			int scopeHeight = height() - topMargin - botMargin; | 
					
						
							|  |  |  | 			int scopeWidth = (width() - rightMargin)/2 - leftMargin; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 					(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 					(float) (scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 					(float) 2*(scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glRight1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glRight1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*scopeWidth / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glRight1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 					(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 					(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 					(float) scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glLeft1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glLeft1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f, | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glLeft1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			{ // Y1 scale
 | 
					
						
							|  |  |  | 				m_y1Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					leftMargin - 1, | 
					
						
							|  |  |  | 					scopeHeight | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_left1ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_y1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 				m_glShaderLeft1Scale.initTexture(m_left1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // Y1 scale
 | 
					
						
							|  |  |  | 			{ // X1 scale
 | 
					
						
							|  |  |  | 				m_x1Scale.setSize(scopeWidth); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					scopeWidth, | 
					
						
							|  |  |  | 					botMargin - 1 | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_bot1ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_x1Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 				m_glShaderBottom1Scale.initTexture(m_bot1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // X1 scale
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 				m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 					(float)(leftMargin + scopeWidth + leftMargin) / (float)width(), | 
					
						
							|  |  |  | 					(float)topMargin / (float)height(), | 
					
						
							|  |  |  | 					(float) scopeDim / (float)width(), | 
					
						
							|  |  |  | 					(float)(height() - topMargin - botMargin) / (float)height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*(leftMargin + scopeWidth + leftMargin) / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(height() - topMargin - botMargin) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + (float) 2*(leftMargin + scopeWidth) / (float) width(), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*(leftMargin + leftMargin + scopeWidth) / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 					(float)(leftMargin + leftMargin + ((width() - leftMargin - leftMargin - rightMargin) / 2)) / (float)width(), | 
					
						
							|  |  |  | 					(float)topMargin / (float)height(), | 
					
						
							|  |  |  | 					(float)((width() - leftMargin - leftMargin - rightMargin) / 2) / (float)width(), | 
					
						
							|  |  |  | 					(float)(height() - topMargin - botMargin) / (float)height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*(leftMargin + leftMargin + ((width() - leftMargin - leftMargin - rightMargin) / 2)) / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 					(float) 2*((width() - leftMargin - leftMargin - rightMargin) / 2) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(height() - topMargin - botMargin) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + (float) 2*(leftMargin + scopeWidth) / (float) width(), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 					-1.0f + ((float) 2*(leftMargin + leftMargin + scopeWidth) / (float) width()), | 
					
						
							|  |  |  | 					 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 					(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 					(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			{ // Y2 scale
 | 
					
						
							|  |  |  | 				m_y2Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					leftMargin - 1, | 
					
						
							|  |  |  | 					scopeHeight | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_left2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_left2ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_y2Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				m_glShaderLeft2Scale.initTexture(m_left2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // Y2 scale
 | 
					
						
							|  |  |  | 			{ // X2 scale
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 				if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 					m_x2Scale.setSize(scopeDim); | 
					
						
							|  |  |  | 					m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 						scopeDim, | 
					
						
							|  |  |  | 						botMargin - 1 | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					m_x2Scale.setSize(scopeWidth); | 
					
						
							|  |  |  | 					m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 						scopeWidth, | 
					
						
							|  |  |  | 						botMargin - 1 | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 				const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				m_bot2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 				QPainter painter(&m_bot2ScalePixmap); | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 				painter.setFont(font()); | 
					
						
							|  |  |  | 				tickList = &m_x2Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 					tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 					if(tick->major) { | 
					
						
							|  |  |  | 						if(tick->textSize > 0) { | 
					
						
							|  |  |  | 							painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 				m_glShaderBottom2Scale.initTexture(m_bot2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			} // X2 scale
 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} // Both displays
 | 
					
						
							|  |  |  | 	else if (m_displays == DisplayFirstOnly) | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		int scopeHeight = height() - topMargin - botMargin; | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		int scopeWidth = width() - leftMargin - rightMargin; | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 				(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 				(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 				(float) (scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 				(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 			m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 				(float) 2*(scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(scopeWidth-leftMargin) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glRight1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glRight1ScaleMatrix.translate ( | 
					
						
							| 
									
										
										
										
											2016-03-06 16:51:07 +01:00
										 |  |  | 				-1.0f + ((float) 2*(width() - leftMargin) / (float) width()), | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glRight1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			m_glScopeRect1 = QRectF( | 
					
						
							|  |  |  | 				(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 				(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 				(float) scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glScopeMatrix1.setToIdentity(); | 
					
						
							|  |  |  | 			m_glScopeMatrix1.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glScopeMatrix1.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glBot1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glBot1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glBot1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 		m_glLeft1ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 		m_glLeft1ScaleMatrix.translate ( | 
					
						
							|  |  |  | 			-1.0f, | 
					
						
							|  |  |  | 			 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		m_glLeft1ScaleMatrix.scale ( | 
					
						
							|  |  |  | 			(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 			(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 		{ // Y1 scale
 | 
					
						
							|  |  |  | 			m_y1Scale.setSize(scopeHeight); | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			m_left1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 				leftMargin - 1, | 
					
						
							|  |  |  | 				scopeHeight | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 			m_left1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 			QPainter painter(&m_left1ScalePixmap); | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) { | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xff, 0xff, 0x80)); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-07 02:50:26 +02:00
										 |  |  | 			painter.setFont(font()); | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 			tickList = &m_y1Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 			m_glShaderLeft1Scale.initTexture(m_left1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 		} // Y1 scale
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		if (m_mode == ModeIQPolar) { // Y2 scale
 | 
					
						
							|  |  |  | 			m_y2Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_left2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 				leftMargin - 1, | 
					
						
							|  |  |  | 				scopeHeight | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_left2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 			QPainter painter(&m_left2ScalePixmap); | 
					
						
							|  |  |  | 			painter.setPen(QColor(0x80, 0xff, 0xff)); | 
					
						
							|  |  |  | 			painter.setFont(font()); | 
					
						
							|  |  |  | 			tickList = &m_y2Scale.getTickList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 			m_glShaderLeft2Scale.initTexture(m_left2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 04:40:59 +01:00
										 |  |  | 		} // Y2 scale
 | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 		{ // X1 scale
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			m_x1Scale.setSize(scopeWidth); | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			m_bot1ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 				scopeWidth, | 
					
						
							|  |  |  | 				botMargin - 1 | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_bot1ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 			QPainter painter(&m_bot1ScalePixmap); | 
					
						
							|  |  |  | 			painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 			painter.setFont(font()); | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			tickList = &m_x1Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 23:43:36 +01:00
										 |  |  | 			m_glShaderBottom1Scale.initTexture(m_bot1ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 02:05:32 +02:00
										 |  |  | 		} // X1 scale
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 	} // Primary display only
 | 
					
						
							|  |  |  | 	else if (m_displays == DisplaySecondOnly) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		int scopeHeight = height() - topMargin - botMargin; | 
					
						
							|  |  |  | 		int scopeWidth = width() - leftMargin - rightMargin; | 
					
						
							| 
									
										
										
										
											2015-07-06 09:17:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 		if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 				(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 				(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 				(float) scopeDim / (float) width(), | 
					
						
							|  |  |  | 				(float) scopeDim / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 			m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeDim / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f, | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeDim / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*(scopeDim + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeDim / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			m_glScopeRect2 = QRectF( | 
					
						
							|  |  |  | 				(float) leftMargin / (float) width(), | 
					
						
							|  |  |  | 				(float) topMargin / (float) height(), | 
					
						
							|  |  |  | 				(float) scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glScopeMatrix2.setToIdentity(); | 
					
						
							|  |  |  | 			m_glScopeMatrix2.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glScopeMatrix2.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glLeft2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glLeft2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f, | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*topMargin / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glLeft2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*(leftMargin-1) / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*scopeHeight / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 21:54:24 +01:00
										 |  |  | 			m_glBot2ScaleMatrix.setToIdentity(); | 
					
						
							|  |  |  | 			m_glBot2ScaleMatrix.translate ( | 
					
						
							|  |  |  | 				-1.0f + ((float) 2*leftMargin / (float) width()), | 
					
						
							|  |  |  | 				 1.0f - ((float) 2*(scopeHeight + topMargin + 1) / (float) height()) | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			m_glBot2ScaleMatrix.scale ( | 
					
						
							|  |  |  | 				(float) 2*scopeWidth / (float) width(), | 
					
						
							|  |  |  | 				(float) -2*(botMargin - 1) / (float) height() | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		{ // Y2 scale
 | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 			m_y2Scale.setSize(scopeHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_left2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 				leftMargin - 1, | 
					
						
							|  |  |  | 				scopeHeight | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							|  |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_left2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 			QPainter painter(&m_left2ScalePixmap); | 
					
						
							|  |  |  | 			painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 			painter.setFont(font()); | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			tickList = &m_y2Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 			m_glShaderLeft2Scale.initTexture(m_left2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		} // Y2 scale
 | 
					
						
							|  |  |  | 		{ // X2 scale
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 			if (m_mode == ModeIQPolar) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				int scopeDim = std::min(scopeWidth, scopeHeight); | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 05:19:55 +01:00
										 |  |  | 				m_x2Scale.setSize(scopeDim); | 
					
						
							|  |  |  | 				m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					scopeDim, | 
					
						
							|  |  |  | 					botMargin - 1 | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				m_x2Scale.setSize(scopeWidth); | 
					
						
							|  |  |  | 				m_bot2ScalePixmap = QPixmap( | 
					
						
							|  |  |  | 					scopeWidth, | 
					
						
							|  |  |  | 					botMargin - 1 | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			const ScaleEngine::TickList* tickList; | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 			const ScaleEngine::Tick* tick; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			m_bot2ScalePixmap.fill(Qt::black); | 
					
						
							|  |  |  | 			QPainter painter(&m_bot2ScalePixmap); | 
					
						
							|  |  |  | 			painter.setPen(QColor(0xf0, 0xf0, 0xff)); | 
					
						
							|  |  |  | 			painter.setFont(font()); | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 			tickList = &m_x2Scale.getTickList(); | 
					
						
							| 
									
										
										
										
											2015-07-08 08:53:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(int i = 0; i < tickList->count(); i++) { | 
					
						
							|  |  |  | 				tick = &(*tickList)[i]; | 
					
						
							|  |  |  | 				if(tick->major) { | 
					
						
							|  |  |  | 					if(tick->textSize > 0) { | 
					
						
							|  |  |  | 						painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-03-06 16:39:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 02:06:36 +01:00
										 |  |  | 			m_glShaderBottom2Scale.initTexture(m_bot2ScalePixmap.toImage()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-12 22:22:04 +02:00
										 |  |  | 		} // X2 scale
 | 
					
						
							|  |  |  | 	} // Secondary display only
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::tick() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if(m_dataChanged) | 
					
						
							|  |  |  | 		update(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-07-14 01:45:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setTriggerChannel(ScopeVis::TriggerChannel triggerChannel) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_triggerChannel = triggerChannel; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setTriggerLevel(Real triggerLevel) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-10-31 12:33:59 +01:00
										 |  |  | 	qDebug("GLScope::setTriggerLevel: %f", triggerLevel); | 
					
						
							| 
									
										
										
										
											2015-07-14 01:45:16 +02:00
										 |  |  | 	m_triggerLevel = triggerLevel; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-07-27 02:12:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | void GLScope::setTriggerPre(Real triggerPre) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_triggerPre = triggerPre; | 
					
						
							| 
									
										
										
										
											2015-10-11 05:11:38 +02:00
										 |  |  | 	m_configChanged = true; | 
					
						
							|  |  |  | 	update(); | 
					
						
							| 
									
										
										
										
											2015-07-27 02:12:37 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-08-01 04:07:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | void GLScope::setMemHistoryShift(int value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-11-06 08:56:33 +01:00
										 |  |  | 	if (value < m_memTraceIndexMax) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		m_memTraceHistory = value; | 
					
						
							|  |  |  | 		m_configChanged = true; | 
					
						
							|  |  |  | 		update(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-11-03 03:08:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-01 04:07:09 +02:00
										 |  |  | void GLScope::connectTimer(const QTimer& timer) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-09 10:33:04 +02:00
										 |  |  | 	qDebug() << "GLScope::connectTimer"; | 
					
						
							| 
									
										
										
										
											2015-08-01 04:07:09 +02:00
										 |  |  | 	disconnect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); | 
					
						
							|  |  |  | 	connect(&timer, SIGNAL(timeout()), this, SLOT(tick())); | 
					
						
							|  |  |  | 	m_timer.stop(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | void GLScope::cleanup() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-03-06 10:48:34 +01:00
										 |  |  | 	//makeCurrent();
 | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | 	m_glShaderSimple.cleanup(); | 
					
						
							|  |  |  | 	m_glShaderBottom1Scale.cleanup(); | 
					
						
							|  |  |  | 	m_glShaderBottom2Scale.cleanup(); | 
					
						
							|  |  |  | 	m_glShaderLeft1Scale.cleanup(); | 
					
						
							|  |  |  | 	m_glShaderPowerOverlay.cleanup(); | 
					
						
							| 
									
										
										
										
											2016-03-06 10:48:34 +01:00
										 |  |  |     //doneCurrent();
 | 
					
						
							| 
									
										
										
										
											2016-03-06 09:33:10 +01:00
										 |  |  | } |