aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2018-01-05 23:42:36 +0100
committerKarel Kočí <cynerd@email.cz>2018-01-05 23:42:36 +0100
commitca97f1bd709a154f73c9e28f8a50c5b409baab3e (patch)
tree1d399d75108e214871657086fc514f7896516871
parent09aca1674915d5e2bc4287336d7d52c83b51342d (diff)
downloadqtmips-ca97f1bd709a154f73c9e28f8a50c5b409baab3e.tar.gz
qtmips-ca97f1bd709a154f73c9e28f8a50c5b409baab3e.tar.bz2
qtmips-ca97f1bd709a154f73c9e28f8a50c5b409baab3e.zip
Fix how we handle scale of GraphicView
That widget is seriously buggy.. grr
-rw-r--r--qtmips_gui/coreview.cpp29
-rw-r--r--qtmips_gui/coreview.h5
2 files changed, 27 insertions, 7 deletions
diff --git a/qtmips_gui/coreview.cpp b/qtmips_gui/coreview.cpp
index 7210f1c..2546c2b 100644
--- a/qtmips_gui/coreview.cpp
+++ b/qtmips_gui/coreview.cpp
@@ -1,16 +1,33 @@
#include "coreview.h"
CoreView::CoreView(QWidget *parent) : QGraphicsView(parent) {
- setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
- // TODO fitInView doesn't work as I want so reimplement or do something with it
- //fitInView(0, 0, 201, 201, Qt::KeepAspectRatioByExpanding);
+ setSceneRect(0, 0, scene_width, scene_height);
+ update_scale();
}
-void CoreView::resizeEvent(QResizeEvent *event __attribute__((unused))) {
- // fitInView(0, 0, 201, 201, Qt::KeepAspectRatioByExpanding);
+void CoreView::resizeEvent(QResizeEvent *event) {
+ QGraphicsView::resizeEvent(event);
+ update_scale();
+}
+
+void CoreView::update_scale() {
+ // Note: there is somehow three pixels error when viewing so we have to always compensate
+ const int w = scene_width + 3;
+ const int h = scene_height + 3;
+
+ qreal scale = 1;
+ if (height() > h && width() > w) {
+ if (height() > width()) {
+ scale = (qreal)width() / w;
+ } else {
+ scale = (qreal)height() / h;
+ }
+ }
+ QTransform t;
+ t.scale(scale, scale);
+ setTransform(t, false);
}
CoreViewScene::CoreViewScene(CoreView *view, machine::QtMipsMachine *machine) : QGraphicsScene(view) {
diff --git a/qtmips_gui/coreview.h b/qtmips_gui/coreview.h
index fddcafe..52b98ee 100644
--- a/qtmips_gui/coreview.h
+++ b/qtmips_gui/coreview.h
@@ -14,8 +14,11 @@ class CoreView : public QGraphicsView {
public:
CoreView(QWidget *parent);
-private:
+protected:
void resizeEvent(QResizeEvent *event);
+private:
+ const int scene_width = 800, scene_height = 800;
+ void update_scale();
};
class CoreViewScene : public QGraphicsScene {