aboutsummaryrefslogtreecommitdiffstats
path: root/gui/fpgaviewwidget.cc
diff options
context:
space:
mode:
authorMiodrag Milanović <mmicko@gmail.com>2018-11-10 23:00:34 -0800
committerGitHub <noreply@github.com>2018-11-10 23:00:34 -0800
commit6b197fde726a0fbbf657c9b972c94c21ec210689 (patch)
treec95192491d1badbd139e2ce216ef491e78a55c7e /gui/fpgaviewwidget.cc
parent15d9b3d3cc05656e58d01ba2f97ec92b6daaee1c (diff)
parent0a3ebfbb5b4f502e66861d3857c83b825ac34795 (diff)
downloadnextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.tar.gz
nextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.tar.bz2
nextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.zip
Merge pull request #93 from YosysHQ/gui_changes
Gui changes
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r--gui/fpgaviewwidget.cc42
1 files changed, 27 insertions, 15 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc
index 24fbc35d..55ed9315 100644
--- a/gui/fpgaviewwidget.cc
+++ b/gui/fpgaviewwidget.cc
@@ -56,6 +56,7 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent)
colors_.highlight[7] = QColor("#da70d6");
rendererArgs_->changed = false;
+ rendererArgs_->gridChanged = false;
rendererArgs_->flags.zoomOutbound = true;
auto fmt = format();
@@ -86,6 +87,11 @@ FPGAViewWidget::~FPGAViewWidget() {}
void FPGAViewWidget::newContext(Context *ctx)
{
ctx_ = ctx;
+ {
+ QMutexLocker lock(&rendererArgsLock_);
+
+ rendererArgs_->gridChanged = true;
+ }
onSelectedArchItem(std::vector<DecalXY>(), false);
for (int i = 0; i < 8; i++)
onHighlightGroupChanged(std::vector<DecalXY>(), i);
@@ -109,19 +115,6 @@ void FPGAViewWidget::initializeGL()
QtImGui::initialize(this);
glClearColor(colors_.background.red() / 255, colors_.background.green() / 255,
colors_.background.blue() / 255, 0.0);
-
-
- {
- QMutexLocker locker(&rendererDataLock_);
- // Render grid.
- auto grid = LineShaderData();
- for (float i = -100.0f; i < 100.0f; i += 1.0f) {
- PolyLine(-100.0f, i, 100.0f, i).build(grid);
- PolyLine(i, -100.0f, i, 100.0f).build(grid);
- }
- grid.last_render = 1;
- lineShader_.update_vbos(GraphicElement::STYLE_GRID, grid);
- }
}
float FPGAViewWidget::PickedElement::distance(Context *ctx, float wx, float wy) const
@@ -444,6 +437,7 @@ void FPGAViewWidget::renderLines(void)
DecalXY hoveredDecal;
std::vector<DecalXY> highlightedDecals[8];
bool highlightedOrSelectedChanged;
+ bool gridChanged;
PassthroughFlags flags;
{
// Take the renderer arguments lock, copy over all we need.
@@ -456,7 +450,9 @@ void FPGAViewWidget::renderLines(void)
highlightedDecals[i] = rendererArgs_->highlightedDecals[i];
highlightedOrSelectedChanged = rendererArgs_->changed;
+ gridChanged = rendererArgs_->gridChanged;
rendererArgs_->changed = false;
+ rendererArgs_->gridChanged = false;
flags = rendererArgs_->flags;
}
@@ -528,6 +524,7 @@ void FPGAViewWidget::renderLines(void)
// If we're not re-rendering any highlights/selections, let's
// copy them over from teh current object.
+ data->gfxGrid = rendererData_->gfxGrid;
if (!highlightedOrSelectedChanged) {
data->gfxSelected = rendererData_->gfxSelected;
data->gfxHovered = rendererData_->gfxHovered;
@@ -539,7 +536,19 @@ void FPGAViewWidget::renderLines(void)
rendererData_ = std::move(data);
}
}
-
+ if (gridChanged)
+ {
+ QMutexLocker locker(&rendererDataLock_);
+ rendererData_->gfxGrid.clear();
+ // Render grid.
+ for (float i = 0.0f; i < 1.0f * ctx_->getGridDimX() + 1; i += 1.0f) {
+ PolyLine(i, 0.0f, i, 1.0f * ctx_->getGridDimY()).build(rendererData_->gfxGrid);
+ }
+ for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) {
+ PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(rendererData_->gfxGrid);
+ }
+ rendererData_->gfxGrid.last_render++;
+ }
if (highlightedOrSelectedChanged) {
QMutexLocker locker(&rendererDataLock_);
@@ -851,7 +860,8 @@ void FPGAViewWidget::zoomSelected()
{
{
QMutexLocker lock(&rendererDataLock_);
- zoomToBB(rendererData_->bbSelected, 0.5f, true);
+ if (rendererData_->bbSelected.x0() != std::numeric_limits<float>::infinity())
+ zoomToBB(rendererData_->bbSelected, 0.5f, true);
}
update();
}
@@ -876,6 +886,8 @@ void FPGAViewWidget::leaveEvent(QEvent *event)
void FPGAViewWidget::update_vbos()
{
+ lineShader_.update_vbos(GraphicElement::STYLE_GRID, rendererData_->gfxGrid);
+
for (int style = GraphicElement::STYLE_FRAME; style
< GraphicElement::STYLE_HIGHLIGHTED0;
style++) {