diff options
author | ZipCPU <dgisselq@ieee.org> | 2018-06-06 07:55:18 -0400 |
---|---|---|
committer | ZipCPU <dgisselq@ieee.org> | 2018-06-06 07:55:18 -0400 |
commit | d0ee08aeb12a8fb7237b31083666d9b165f13f69 (patch) | |
tree | e09d84b0389462f2c1959ce59438d88a7b5f9ed2 /gui/fpgaviewwidget.cc | |
parent | 2e6d0b752ab2d269f822bfd3ea029b100ecf4233 (diff) | |
parent | d3f19cc27ea4634a64821688e9adec6046f4d7de (diff) | |
download | nextpnr-d0ee08aeb12a8fb7237b31083666d9b165f13f69.tar.gz nextpnr-d0ee08aeb12a8fb7237b31083666d9b165f13f69.tar.bz2 nextpnr-d0ee08aeb12a8fb7237b31083666d9b165f13f69.zip |
Merge branch 'master' into gqtech
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r-- | gui/fpgaviewwidget.cc | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc new file mode 100644 index 00000000..bd36b724 --- /dev/null +++ b/gui/fpgaviewwidget.cc @@ -0,0 +1,153 @@ +#include <QMouseEvent> +#include <QCoreApplication> +#include <math.h> +#include "fpgaviewwidget.h" + +FPGAViewWidget::FPGAViewWidget(QWidget *parent) + : QOpenGLWidget(parent), + m_xMove(0),m_yMove(0),m_zDistance(1.0) +{ + +} + +FPGAViewWidget::~FPGAViewWidget() +{ +} + +QSize FPGAViewWidget::minimumSizeHint() const +{ + return QSize(640, 480); +} + +QSize FPGAViewWidget::sizeHint() const +{ + return QSize(640, 480); +} + +void FPGAViewWidget::setXTranslation(float t_x) +{ + if(t_x != m_xMove) + { + m_xMove = t_x; + update(); + } +} + + +void FPGAViewWidget::setYTranslation(float t_y) +{ + if(t_y != m_yMove) + { + m_yMove = t_y; + update(); + } +} + + +void FPGAViewWidget::setZoom(float t_z) +{ + if(t_z != m_zDistance) + { + m_zDistance -= t_z; + if(m_zDistance < 0.1f) + m_zDistance = 0.1f; + if(m_zDistance > 10.0f) + m_zDistance = 10.0f; + + update(); + } +} + +void FPGAViewWidget::initializeGL() +{ + initializeOpenGLFunctions(); + glClearColor(1.0, 1.0, 1.0, 0.0); +} + +void FPGAViewWidget::paintGL() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity(); + + glTranslatef(m_xMove, m_yMove, -10.0); + glScalef(m_zDistance,m_zDistance, 0.0f); + + // Example grid + glColor3f(0.8, 0.8, 0.8); + glBegin(GL_LINES); + for(float i = -100; i <= 100; i += 0.1) + { + glVertex3f((float)i, -100.0f, 0.0f); + glVertex3f((float)i, 100.0f, 0.0f); + glVertex3f(-100.0f, (float)i, 0.0f); + glVertex3f(100.0f, (float)i, 0.0f); + } + glColor3f(0.5, 0.5, 0.5); + for(int i = -100; i <= 100; i += 1) + { + glVertex3f((float)i, -100.0f, 0.0f); + glVertex3f((float)i, 100.0f, 0.0f); + glVertex3f(-100.0f, (float)i, 0.0f); + glVertex3f(100.0f, (float)i, 0.0f); + } + glEnd(); + + // Example triangle + glBegin(GL_TRIANGLES); + glColor3f(1.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, 0); + glColor3f(0.0, 1.0, 0.0); + glVertex3f(0.5, -0.5, 0); + glColor3f(0.0, 0.0, 1.0); + glVertex3f(0, 0.5, 0); + glEnd(); + +} + +void FPGAViewWidget::resizeGL(int width, int height) +{ + m_windowWidth = width; + m_windowHeight = height; + glViewport(0, 0, m_windowWidth, m_windowHeight); + + float aspect = width * 1.0 / height; + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-1.0* aspect, +1.0* aspect, -1.0, +1.0, 1.0, 15.0); + glMatrixMode(GL_MODELVIEW); +} + +void FPGAViewWidget::mousePressEvent(QMouseEvent *event) +{ + m_lastPos = event->pos(); +} + +void FPGAViewWidget::mouseMoveEvent(QMouseEvent *event) +{ + int dx = event->x() - m_lastPos.x(); + int dy = event->y() - m_lastPos.y(); + float dx_scale = dx * (1 / (float)640); + float dy_scale = -dy * (1 / (float)480); + + if (event->buttons() & Qt::LeftButton) + { + float xpos = m_xMove + dx_scale; + float ypos = m_yMove + dy_scale; + if (m_xMove/m_zDistance <= 100.0 && m_xMove/m_zDistance>= -100.0) setXTranslation(xpos); + if (m_yMove/m_zDistance <= 100.0 && m_yMove/m_zDistance>= -100.0) setYTranslation(ypos); + + } + m_lastPos = event->pos(); +} + +void FPGAViewWidget::wheelEvent(QWheelEvent *event) +{ + QPoint degree = event->angleDelta() / 8; + + if(!degree.isNull()) + { + QPoint step = degree / 15; + setZoom(step.y() * -0.1f); + } +} |