From 7394f72f5121e1f402fbfc793b4234fe052f729d Mon Sep 17 00:00:00 2001 From: parker Date: Fri, 20 Jun 2025 03:23:07 +0100 Subject: [PATCH] feat: add background grid --- src/gui/network/Network.cpp | 2 ++ src/gui/network/NetworkGraphicsScene.cpp | 36 ++++++++++++++++++++++++ src/gui/network/NetworkGraphicsScene.h | 2 ++ src/gui/network/NetworkGraphicsView.cpp | 18 +++++++++++- src/gui/network/NetworkGraphicsView.h | 1 + 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/gui/network/Network.cpp b/src/gui/network/Network.cpp index ae34a66..843a2ec 100644 --- a/src/gui/network/Network.cpp +++ b/src/gui/network/Network.cpp @@ -8,9 +8,11 @@ Network::Network(QWidget* parent) { mainLayout_ = new QVBoxLayout(parent); + mainLayout_->setContentsMargins(0,0,0,0); this->setLayout(mainLayout_); + NetworkGraphicsScene* scene = new NetworkGraphicsScene(); NetworkGraphicsView* view = new NetworkGraphicsView(parent, scene); diff --git a/src/gui/network/NetworkGraphicsScene.cpp b/src/gui/network/NetworkGraphicsScene.cpp index 6517739..486d67f 100644 --- a/src/gui/network/NetworkGraphicsScene.cpp +++ b/src/gui/network/NetworkGraphicsScene.cpp @@ -9,8 +9,44 @@ NetworkGraphicsScene::NetworkGraphicsScene() { sceneWidth_ = 64000; sceneHeight_ = 64000; + gridSize_ = 20; setSceneRect(sceneWidth_/-2.0f, sceneHeight_/-2.0f, sceneWidth_, sceneHeight_); + setBackgroundBrush(QColor("#1b1b1b")); } +void NetworkGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect) +{ + QGraphicsScene::drawBackground(painter, rect); + + + int top = ceil(rect.top()); + int bottom = floor(rect.bottom()); + int left = floor(rect.left()); + int right = ceil(rect.right()); + + std::cout << "top: " << top << "\n"; + std::cout << "bottom: " << bottom << "\n"; + std::cout << "left: " << left << "\n"; + std::cout << "right: " << right << "\n"; + + QPen gridPen(QColor("#323232")); + + painter->setPen(gridPen); + + QList lines; + + for (int y = top - (top % gridSize_); y <= bottom; y += gridSize_) { + lines.append(QLine(left, y, right, y)); + } + + for (int x = left - (left % gridSize_); x <= right; x += gridSize_) { + lines.append(QLine(x, bottom, x, top)); + } + + painter->drawLines(lines); + +} + + diff --git a/src/gui/network/NetworkGraphicsScene.h b/src/gui/network/NetworkGraphicsScene.h index 7fa5101..9ba0e2d 100644 --- a/src/gui/network/NetworkGraphicsScene.h +++ b/src/gui/network/NetworkGraphicsScene.h @@ -10,5 +10,7 @@ public: private: uint sceneWidth_; uint sceneHeight_; + uint gridSize_; protected: + void drawBackground(QPainter *painter, const QRectF &rect) override; }; diff --git a/src/gui/network/NetworkGraphicsView.cpp b/src/gui/network/NetworkGraphicsView.cpp index b048aec..3bd4d3c 100644 --- a/src/gui/network/NetworkGraphicsView.cpp +++ b/src/gui/network/NetworkGraphicsView.cpp @@ -10,16 +10,32 @@ NetworkGraphicsView::NetworkGraphicsView(QWidget *parent, QGraphicsScene* scene) { setScene(scene); + initUI(); + QPen greenPen = QPen(Qt::green); greenPen.setWidth(6); - auto* rect1 = scene->addRect(50, 50, 100, 100, greenPen); rect1->setFlag(QGraphicsItem::ItemIsMovable); auto* rect2 = scene->addRect(80, 120, 100, 100, greenPen); rect2->setFlag(QGraphicsItem::ItemIsMovable); + auto* rect3 = scene->addRect(80, -120, 100, 100, greenPen); + rect3->setFlag(QGraphicsItem::ItemIsMovable); +} + +void NetworkGraphicsView::initUI() +{ + // zoom from mouse + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + // disable scroll bars + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing); + // + setViewportUpdateMode(ViewportUpdateMode::FullViewportUpdate); } diff --git a/src/gui/network/NetworkGraphicsView.h b/src/gui/network/NetworkGraphicsView.h index a7ce65c..119a066 100644 --- a/src/gui/network/NetworkGraphicsView.h +++ b/src/gui/network/NetworkGraphicsView.h @@ -10,6 +10,7 @@ public: NetworkGraphicsView(QWidget *parent = nullptr, QGraphicsScene* scene = nullptr); private: QPointF panStartPos; + void initUI(); protected: void mouseMoveEvent(QMouseEvent *mouseEvent) override;