aboutsummaryrefslogtreecommitdiffstats
path: root/ice40
diff options
context:
space:
mode:
authorSergiusz Bazanski <q3k@q3k.org>2018-07-13 20:53:52 +0100
committerSergiusz Bazanski <q3k@q3k.org>2018-07-13 20:53:52 +0100
commita8c84e90a39c54174dd24b5b76bd17aed8311481 (patch)
tree2de94b976fd882e1ce3b83e8880e80f97d043775 /ice40
parenta71b576de6c404572439e30a56c4ff19497523a2 (diff)
downloadnextpnr-a8c84e90a39c54174dd24b5b76bd17aed8311481.tar.gz
nextpnr-a8c84e90a39c54174dd24b5b76bd17aed8311481.tar.bz2
nextpnr-a8c84e90a39c54174dd24b5b76bd17aed8311481.zip
Make GUI nice and smooth.
Diffstat (limited to 'ice40')
-rw-r--r--ice40/arch.cc10
-rw-r--r--ice40/arch.h8
-rw-r--r--ice40/main.cc3
3 files changed, 15 insertions, 6 deletions
diff --git a/ice40/arch.cc b/ice40/arch.cc
index af6e922c..547dbcd6 100644
--- a/ice40/arch.cc
+++ b/ice40/arch.cc
@@ -534,9 +534,8 @@ DecalXY Arch::getGroupDecal(GroupId group) const
return decalxy;
};
-std::vector<GraphicElement> Arch::getDecalGraphics(DecalId decal) const
+std::vector<GraphicElement> ArchRProxyMethods::getDecalGraphics(DecalId decal) const
{
- boost::shared_lock_guard<boost::shared_mutex> lock(mtx_);
std::vector<GraphicElement> ret;
if (decal.type == DecalId::TYPE_FRAME) {
@@ -568,7 +567,7 @@ std::vector<GraphicElement> Arch::getDecalGraphics(DecalId decal) const
BelId bel;
bel.index = decal.index;
- auto bel_type = getBelType(bel);
+ auto bel_type = parent_->getBelType(bel);
if (bel_type == TYPE_ICESTORM_LC) {
GraphicElement el;
@@ -954,4 +953,9 @@ CellInfo *ArchRWProxyMethods::getCell(IdString cell)
return parent_->cells.at(cell).get();
}
+UIUpdatesRequired ArchRWProxyMethods::getUIUpdatesRequired(void)
+{
+ return parent_->getUIUpdatesRequired();
+}
+
NEXTPNR_NAMESPACE_END
diff --git a/ice40/arch.h b/ice40/arch.h
index da1e583a..4311f4a5 100644
--- a/ice40/arch.h
+++ b/ice40/arch.h
@@ -604,8 +604,6 @@ public:
// -------------------------------------------------
- std::vector<GraphicElement> getDecalGraphics(DecalId decal) const;
-
DecalXY getFrameDecal() const;
DecalXY getBelDecal(BelId bel) const;
DecalXY getWireDecal(WireId wire) const;
@@ -691,6 +689,8 @@ public:
IdString getBoundBelCell(BelId bel) const;
BelId getBelByName(IdString name) const;
+
+ std::vector<GraphicElement> getDecalGraphics(DecalId decal) const;
};
// A proxy object that keeps an Arch shared/readonly lock until it goes out
@@ -750,6 +750,10 @@ public:
void bindBel(BelId bel, IdString cell, PlaceStrength strength);
// Returned pointer is valid as long as Proxy object exists.
CellInfo *getCell(IdString cell);
+
+
+ // Methods to be used by UI for detecting whether we need to redraw.
+ UIUpdatesRequired getUIUpdatesRequired(void);
};
// A proxy object that keeps an Arch readwrite lock until it goes out of scope.
diff --git a/ice40/main.cc b/ice40/main.cc
index e77bdd34..d38c786c 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -51,7 +51,8 @@ void svg_dump_decal(const Context *ctx, const DecalXY &decal)
const float scale = 10.0, offset = 10.0;
const std::string style = "stroke=\"black\" stroke-width=\"0.1\" fill=\"none\"";
- for (auto &el : ctx->getDecalGraphics(decal.decal)) {
+ auto &&proxy = ctx->rproxy();
+ for (auto &el : proxy.getDecalGraphics(decal.decal)) {
if (el.type == GraphicElement::G_BOX) {
std::cout << "<rect x=\"" << (offset + scale * (decal.x + el.x1)) << "\" y=\""
<< (offset + scale * (decal.y + el.y1)) << "\" height=\"" << (scale * (el.y2 - el.y1))