From db20d01f3c422143dfccb3cf210ea3091674ec69 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 11 Oct 2020 12:07:11 -0400 Subject: [PATCH 1/7] Focus map zoom on currently hovered metatile --- forms/mainwindow.ui | 46 +++++++++++++++++++------------ src/mainwindow.cpp | 66 +++++++++++++++++++++++++++++++-------------- 2 files changed, 75 insertions(+), 37 deletions(-) diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index 7fc0974c..3e7535e5 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -236,23 +236,23 @@ - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + @@ -357,6 +357,12 @@ 0 + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + true @@ -438,6 +444,12 @@ false + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAsNeeded + QAbstractScrollArea::AdjustIgnored diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d98ed68a..c06db464 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1451,13 +1451,39 @@ void MainWindow::scaleMapView(int s) { double exp = editor->scale_exp; double sfactor = pow(base,s); + ui->graphicsView_Map->setUpdatesEnabled(false); + + const auto mapAnchor = ui->graphicsView_Map->transformationAnchor(); + const auto connectionsAnchor = ui->graphicsView_Connections->transformationAnchor(); + ui->graphicsView_Map->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + ui->graphicsView_Connections->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + ui->graphicsView_Map->scale(sfactor,sfactor); ui->graphicsView_Connections->scale(sfactor,sfactor); int width = static_cast(ceil((editor->scene->width()) * pow(base,exp))) + 2; int height = static_cast(ceil((editor->scene->height()) * pow(base,exp))) + 2; - ui->graphicsView_Map->setFixedSize(width, height); - ui->graphicsView_Connections->setFixedSize(width, height); + QSize viewSize = ui->scrollAreaWidgetContents_5->size(); + + if (width < viewSize.width()) { + ui->graphicsView_Map->setFixedWidth(width); + ui->graphicsView_Connections->setFixedWidth(width); + } else { + ui->graphicsView_Map->setFixedWidth(viewSize.width()); + ui->graphicsView_Connections->setFixedWidth(viewSize.width()); + } + if (height < viewSize.height()) { + ui->graphicsView_Map->setFixedHeight(height); + ui->graphicsView_Connections->setFixedHeight(height); + } else { + ui->graphicsView_Map->setFixedHeight(viewSize.height()); + ui->graphicsView_Connections->setFixedHeight(viewSize.height()); + } + + ui->graphicsView_Map->setTransformationAnchor(mapAnchor); + ui->graphicsView_Connections->setTransformationAnchor(connectionsAnchor); + + ui->graphicsView_Map->setUpdatesEnabled(true); } } @@ -2139,9 +2165,9 @@ void MainWindow::on_toolButton_Paint_clicked() if (ui->tabWidget_2->currentIndex() == 0) editor->cursorMapTileRect->stopSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - QScroller::ungrabGesture(ui->scrollArea); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + QScroller::ungrabGesture(ui->graphicsView_Map); checkToolButtons(); } @@ -2156,9 +2182,9 @@ void MainWindow::on_toolButton_Select_clicked() editor->settings->mapCursor = QCursor(); editor->cursorMapTileRect->setSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - QScroller::ungrabGesture(ui->scrollArea); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + QScroller::ungrabGesture(ui->graphicsView_Map); checkToolButtons(); } @@ -2173,9 +2199,9 @@ void MainWindow::on_toolButton_Fill_clicked() editor->settings->mapCursor = QCursor(QPixmap(":/icons/fill_color_cursor.ico"), 10, 10); editor->cursorMapTileRect->setSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - QScroller::ungrabGesture(ui->scrollArea); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + QScroller::ungrabGesture(ui->graphicsView_Map); checkToolButtons(); } @@ -2190,9 +2216,9 @@ void MainWindow::on_toolButton_Dropper_clicked() editor->settings->mapCursor = QCursor(QPixmap(":/icons/pipette_cursor.ico"), 10, 10); editor->cursorMapTileRect->setSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - QScroller::ungrabGesture(ui->scrollArea); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + QScroller::ungrabGesture(ui->graphicsView_Map); checkToolButtons(); } @@ -2207,9 +2233,9 @@ void MainWindow::on_toolButton_Move_clicked() editor->settings->mapCursor = QCursor(QPixmap(":/icons/move.ico"), 7, 7); editor->cursorMapTileRect->setSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - QScroller::grabGesture(ui->scrollArea, QScroller::LeftMouseButtonGesture); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + QScroller::grabGesture(ui->graphicsView_Map, QScroller::LeftMouseButtonGesture); checkToolButtons(); } @@ -2224,9 +2250,9 @@ void MainWindow::on_toolButton_Shift_clicked() editor->settings->mapCursor = QCursor(QPixmap(":/icons/shift_cursor.ico"), 10, 10); editor->cursorMapTileRect->setSingleTileMode(); - ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - QScroller::ungrabGesture(ui->scrollArea); + ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + QScroller::ungrabGesture(ui->graphicsView_Map); checkToolButtons(); } From 5247dd18c0656cab740e6ed5cb4927b7a6330e72 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 13 Oct 2020 06:07:31 -0400 Subject: [PATCH 2/7] Refactor map zooming into the Editor --- include/editor.h | 3 ++- include/mainwindow.h | 5 ---- src/editor.cpp | 43 ++++++++++++++++++++++++++++- src/mainwindow.cpp | 64 +++----------------------------------------- 4 files changed, 47 insertions(+), 68 deletions(-) diff --git a/include/editor.h b/include/editor.h index c9f7bcea..fd773e68 100644 --- a/include/editor.h +++ b/include/editor.h @@ -148,6 +148,7 @@ public: bool selectingEvent = false; void shouldReselectEvents(); + void scaleMapView(int); private: void setConnectionItemsVisible(bool); @@ -198,6 +199,7 @@ private slots: void onHoveredMapMovementPermissionChanged(int, int); void onHoveredMapMovementPermissionCleared(); void onSelectedMetatilesChanged(); + void onWheelZoom(int); signals: void objectsChanged(); @@ -206,7 +208,6 @@ signals: void wildMonDataChanged(); void warpEventDoubleClicked(QString mapName, QString warpNum); void currentMetatilesSelectionChanged(); - void wheelZoom(int delta); }; #endif // EDITOR_H diff --git a/include/mainwindow.h b/include/mainwindow.h index f6b382c2..a9180402 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -109,11 +109,6 @@ public: Q_INVOKABLE QList getMetatileLayerOpacity(); Q_INVOKABLE void setMetatileLayerOpacity(QList order); - -public slots: - void scaleMapView(int); - void onWheelZoom(int); - private slots: void on_action_Open_Project_triggered(); void on_action_Reload_Project_triggered(); diff --git a/src/editor.cpp b/src/editor.cpp index 1345adb6..9b052982 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -887,6 +887,47 @@ void Editor::onSelectedMetatilesChanged() { this->redrawCurrentMetatilesSelection(); } +void Editor::onWheelZoom(int s) { + // Don't zoom the map when the user accidentally scrolls while performing a magic fill. (ctrl + middle button click) + if (!(QApplication::mouseButtons() & Qt::MiddleButton)) { + scaleMapView(s); + } +} + +void Editor::scaleMapView(int s) { + if ((scale_exp + s) <= 5 && (scale_exp + s) >= -2) // sane limits + { + if (s == 0) + s = -scale_exp; + + scale_exp += s; + + double base = scale_base; + double exp = scale_exp; + double sfactor = pow(base, s); + + const auto mapAnchor = ui->graphicsView_Map->transformationAnchor(); + const auto connectionsAnchor = ui->graphicsView_Connections->transformationAnchor(); + ui->graphicsView_Map->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + ui->graphicsView_Connections->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + + ui->graphicsView_Map->scale(sfactor, sfactor); + ui->graphicsView_Connections->scale(sfactor, sfactor); + + int width = static_cast(ceil((scene->width()) * pow(base, exp))) + 2; + int height = static_cast(ceil((scene->height()) * pow(base, exp))) + 2; + QSize viewSize = ui->scrollAreaWidgetContents_5->size(); + int minWidth = qMin(width, viewSize.width()); + int minHeight = qMin(height, viewSize.height()); + + ui->graphicsView_Map->setFixedSize(minWidth, minHeight); + ui->graphicsView_Connections->setFixedSize(minWidth, minHeight); + + ui->graphicsView_Map->setTransformationAnchor(mapAnchor); + ui->graphicsView_Connections->setTransformationAnchor(connectionsAnchor); + } +} + void Editor::onHoveredMapMetatileChanged(int x, int y) { this->playerViewRect->updateLocation(x, y); this->cursorMapTileRect->updateLocation(x, y); @@ -1209,7 +1250,7 @@ bool Editor::displayMap() { scene = new QGraphicsScene; MapSceneEventFilter *filter = new MapSceneEventFilter(); scene->installEventFilter(filter); - connect(filter, &MapSceneEventFilter::wheelZoom, this, &Editor::wheelZoom); + connect(filter, &MapSceneEventFilter::wheelZoom, this, &Editor::onWheelZoom); } if (map_item && scene) { diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c06db464..394e58d8 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -148,7 +148,6 @@ void MainWindow::initEditor() { connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString))); connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged())); connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged())); - connect(this->editor, &Editor::wheelZoom, this, &MainWindow::onWheelZoom); this->loadUserSettings(); @@ -1349,11 +1348,11 @@ void MainWindow::on_mainTabBar_tabBarClicked(int index) } void MainWindow::on_actionZoom_In_triggered() { - scaleMapView(1); + editor->scaleMapView(1); } void MainWindow::on_actionZoom_Out_triggered() { - scaleMapView(-1); + editor->scaleMapView(-1); } void MainWindow::on_actionBetter_Cursors_triggered() { @@ -1430,65 +1429,8 @@ void MainWindow::on_actionMap_Shift_triggered() on_toolButton_Shift_clicked(); } -void MainWindow::onWheelZoom(int s) { - // Don't zoom the map when the user accidentally scrolls while performing a magic fill. (ctrl + middle button click) - if (!(QApplication::mouseButtons() & Qt::MiddleButton)) { - scaleMapView(s); - } -} - -void MainWindow::scaleMapView(int s) { - if ((editor->scale_exp + s) <= 5 && (editor->scale_exp + s) >= -2) // sane limits - { - if (s == 0) - { - s = -editor->scale_exp; - } - - editor->scale_exp += s; - - double base = editor->scale_base; - double exp = editor->scale_exp; - double sfactor = pow(base,s); - - ui->graphicsView_Map->setUpdatesEnabled(false); - - const auto mapAnchor = ui->graphicsView_Map->transformationAnchor(); - const auto connectionsAnchor = ui->graphicsView_Connections->transformationAnchor(); - ui->graphicsView_Map->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - ui->graphicsView_Connections->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - - ui->graphicsView_Map->scale(sfactor,sfactor); - ui->graphicsView_Connections->scale(sfactor,sfactor); - - int width = static_cast(ceil((editor->scene->width()) * pow(base,exp))) + 2; - int height = static_cast(ceil((editor->scene->height()) * pow(base,exp))) + 2; - QSize viewSize = ui->scrollAreaWidgetContents_5->size(); - - if (width < viewSize.width()) { - ui->graphicsView_Map->setFixedWidth(width); - ui->graphicsView_Connections->setFixedWidth(width); - } else { - ui->graphicsView_Map->setFixedWidth(viewSize.width()); - ui->graphicsView_Connections->setFixedWidth(viewSize.width()); - } - if (height < viewSize.height()) { - ui->graphicsView_Map->setFixedHeight(height); - ui->graphicsView_Connections->setFixedHeight(height); - } else { - ui->graphicsView_Map->setFixedHeight(viewSize.height()); - ui->graphicsView_Connections->setFixedHeight(viewSize.height()); - } - - ui->graphicsView_Map->setTransformationAnchor(mapAnchor); - ui->graphicsView_Connections->setTransformationAnchor(connectionsAnchor); - - ui->graphicsView_Map->setUpdatesEnabled(true); - } -} - void MainWindow::resetMapViewScale() { - scaleMapView(0); + editor->scaleMapView(0); } void MainWindow::addNewEvent(QString event_type) From ef9c4c73c3ced82fc57deee6549995f55889abf3 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 13 Oct 2020 10:14:16 -0400 Subject: [PATCH 3/7] Remove scrollArea surrounding graphicsView_Map --- forms/mainwindow.ui | 134 +++++++------------------------------------- src/editor.cpp | 28 ++------- src/mainwindow.cpp | 1 - 3 files changed, 25 insertions(+), 138 deletions(-) diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index 3e7535e5..e79eebd8 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -350,129 +350,37 @@ 0 - + - 1 + 0 0 + + false + + + false + - Qt::ScrollBarAlwaysOff + Qt::ScrollBarAsNeeded - Qt::ScrollBarAlwaysOff + Qt::ScrollBarAsNeeded - - true + + QAbstractScrollArea::AdjustIgnored + + + QGraphicsView::NoDrag + + + QGraphicsView::AnchorUnderMouse + + + QGraphicsView::AnchorUnderMouse - - - - 0 - 0 - 543 - 600 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 166 - 16 - - - - - - - - Qt::Horizontal - - - - 166 - 16 - - - - - - - - Qt::Vertical - - - - 16 - 166 - - - - - - - - - 0 - 0 - - - - false - - - false - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAsNeeded - - - QAbstractScrollArea::AdjustIgnored - - - QGraphicsView::NoDrag - - - - - - - Qt::Vertical - - - - 16 - 166 - - - - - - diff --git a/src/editor.cpp b/src/editor.cpp index 9b052982..2652c4e6 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -898,33 +898,13 @@ void Editor::scaleMapView(int s) { if ((scale_exp + s) <= 5 && (scale_exp + s) >= -2) // sane limits { if (s == 0) - s = -scale_exp; - - scale_exp += s; - - double base = scale_base; - double exp = scale_exp; - double sfactor = pow(base, s); - - const auto mapAnchor = ui->graphicsView_Map->transformationAnchor(); - const auto connectionsAnchor = ui->graphicsView_Connections->transformationAnchor(); - ui->graphicsView_Map->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - ui->graphicsView_Connections->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + scale_exp = 0; + else + scale_exp += s; + double sfactor = pow(scale_base, s); ui->graphicsView_Map->scale(sfactor, sfactor); ui->graphicsView_Connections->scale(sfactor, sfactor); - - int width = static_cast(ceil((scene->width()) * pow(base, exp))) + 2; - int height = static_cast(ceil((scene->height()) * pow(base, exp))) + 2; - QSize viewSize = ui->scrollAreaWidgetContents_5->size(); - int minWidth = qMin(width, viewSize.width()); - int minHeight = qMin(height, viewSize.height()); - - ui->graphicsView_Map->setFixedSize(minWidth, minHeight); - ui->graphicsView_Connections->setFixedSize(minWidth, minHeight); - - ui->graphicsView_Map->setTransformationAnchor(mapAnchor); - ui->graphicsView_Connections->setTransformationAnchor(connectionsAnchor); } } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 394e58d8..38f51b9d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -563,7 +563,6 @@ void MainWindow::refreshMapScene() ui->graphicsView_Map->setScene(editor->scene); ui->graphicsView_Map->setSceneRect(editor->scene->sceneRect()); - ui->graphicsView_Map->setFixedSize(width, height); ui->graphicsView_Map->editor = editor; ui->graphicsView_Connections->setScene(editor->scene); From f404f8c11f49dd6c89e8924266f4c112440323a0 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 13 Oct 2020 12:23:13 -0400 Subject: [PATCH 4/7] Remove scrollArea surrounding graphicsView_Connections --- forms/mainwindow.ui | 267 +++++++++++++++----------------------------- src/mainwindow.cpp | 7 -- 2 files changed, 92 insertions(+), 182 deletions(-) diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index e79eebd8..d9d28960 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2071,7 +2071,7 @@ 0 - + @@ -2195,7 +2195,41 @@ - + + + + + 0 + 0 + + + + false + + + false + + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAsNeeded + + + QAbstractScrollArea::AdjustIgnored + + + QGraphicsView::NoDrag + + + QGraphicsView::AnchorUnderMouse + + + QGraphicsView::AnchorUnderMouse + + + + @@ -2311,200 +2345,83 @@ - - + + + + + 0 + 0 + + QFrame::StyledPanel QFrame::Raised - + + + 4 + - 0 + 4 - 0 + 4 - 0 + 4 - 0 + 4 - - 0 - - - - - - 1 - 0 - + + + + Dive Map - - true - - - - - 0 - 0 - 118 - 118 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - 0 - 0 - 0 - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - + + + + <html><head/><body><p>Destination map name when using <span style=" font-weight:600;">Dive</span>. If empty, no such connection will exist.</p></body></html> - - QFrame::StyledPanel + + true - - QFrame::Raised - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - Dive Map - - - - - - - <html><head/><body><p>Destination map name when using <span style=" font-weight:600;">Dive</span>. If empty, no such connection will exist.</p></body></html> - - - true - - - - - - - Emerge Map - - - - - - - <html><head/><body><p>Destination map name when emerging using <span style=" font-weight:600;">Dive</span>. If empty, no such connection will exist.</p></body></html> - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + + Emerge Map + + + + + + + <html><head/><body><p>Destination map name when emerging using <span style=" font-weight:600;">Dive</span>. If empty, no such connection will exist.</p></body></html> + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 38f51b9d..3d2edab6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -555,19 +555,12 @@ void MainWindow::refreshMapScene() { on_mainTabBar_tabBarClicked(ui->mainTabBar->currentIndex()); - double base = editor->scale_base; - double exp = editor->scale_exp; - - int width = static_cast(ceil((editor->scene->width()) * pow(base,exp))) + 2; - int height = static_cast(ceil((editor->scene->height()) * pow(base,exp))) + 2; - ui->graphicsView_Map->setScene(editor->scene); ui->graphicsView_Map->setSceneRect(editor->scene->sceneRect()); ui->graphicsView_Map->editor = editor; ui->graphicsView_Connections->setScene(editor->scene); ui->graphicsView_Connections->setSceneRect(editor->scene->sceneRect()); - ui->graphicsView_Connections->setFixedSize(width, height); ui->graphicsView_Metatiles->setScene(editor->scene_metatiles); //ui->graphicsView_Metatiles->setSceneRect(editor->scene_metatiles->sceneRect()); From 2f20a5d0b304b1ca3d6b3097fe624c871d2937da Mon Sep 17 00:00:00 2001 From: BigBahss Date: Wed, 14 Oct 2020 01:57:59 -0400 Subject: [PATCH 5/7] Hide connection tiles that cant be seen from current map --- include/editor.h | 2 ++ src/editor.cpp | 33 +++++++++++++++++++++++++++++++++ src/mainwindow.cpp | 1 + 3 files changed, 36 insertions(+) diff --git a/include/editor.h b/include/editor.h index fd773e68..b887d558 100644 --- a/include/editor.h +++ b/include/editor.h @@ -64,6 +64,7 @@ public: void displayMapBorder(); void displayMapGrid(); void displayWildMonTables(); + void maskNonVisibleConnectionTiles(); void updateMapBorder(); void updateMapConnections(); @@ -109,6 +110,7 @@ public: ConnectionPixmapItem* selected_connection_item = nullptr; QList connection_items; QList connection_edit_items; + QGraphicsPathItem *connection_mask = nullptr; CollisionPixmapItem *collision_item = nullptr; QGraphicsItemGroup *events_group = nullptr; QList borderItems; diff --git a/src/editor.cpp b/src/editor.cpp index 2652c4e6..020e925c 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -759,11 +759,13 @@ void Editor::updateCurrentConnectionDirection(QString curDirection) { QString originalDirection = selected_connection_item->connection->direction; setCurrentConnectionDirection(curDirection); updateMirroredConnectionDirection(selected_connection_item->connection, originalDirection); + maskNonVisibleConnectionTiles(); } void Editor::onConnectionMoved(MapConnection* connection) { updateMirroredConnectionOffset(connection); onConnectionOffsetChanged(connection->offset.toInt()); + maskNonVisibleConnectionTiles(); } void Editor::onConnectionOffsetChanged(int newOffset) { @@ -1458,6 +1460,8 @@ void Editor::displayMapConnections() { if (!connection_edit_items.empty()) { onConnectionItemSelected(connection_edit_items.first()); } + + maskNonVisibleConnectionTiles(); } void Editor::createConnectionItem(MapConnection* connection, bool hide) { @@ -1502,6 +1506,31 @@ void Editor::createConnectionItem(MapConnection* connection, bool hide) { connection_edit_items.append(connection_edit_item); } +// Hides connected map tiles that cannot be seen from the current map (beyond BORDER_DISTANCE). +void Editor::maskNonVisibleConnectionTiles() { + if (connection_mask) { + if (connection_mask->scene()) { + connection_mask->scene()->removeItem(connection_mask); + } + delete connection_mask; + } + + QPainterPath mask; + mask.addRect(scene->itemsBoundingRect().toRect()); + mask.addRect( + -BORDER_DISTANCE * 16, + -BORDER_DISTANCE * 16, + (map->getWidth() + BORDER_DISTANCE * 2) * 16, + (map->getHeight() + BORDER_DISTANCE * 2) * 16 + ); + + // Mask the tiles with the current theme's background color. + QPen pen(ui->graphicsView_Map->palette().color(QPalette::Base)); + QBrush brush(ui->graphicsView_Map->palette().color(QPalette::Base)); + + connection_mask = scene->addPath(mask, pen, brush); +} + void Editor::displayMapBorder() { for (QGraphicsPixmapItem* item : borderItems) { if (item->scene()) { @@ -1548,6 +1577,8 @@ void Editor::updateMapConnections() { connection_edit_items[i]->basePixmap = pixmap; connection_edit_items[i]->setPixmap(pixmap); } + + maskNonVisibleConnectionTiles(); } int Editor::getBorderDrawDistance(int dimension) { @@ -1604,6 +1635,7 @@ void Editor::updateConnectionOffset(int offset) { } selected_connection_item->blockSignals(false); updateMirroredConnectionOffset(selected_connection_item->connection); + maskNonVisibleConnectionTiles(); } void Editor::setConnectionMap(QString mapName) { @@ -1624,6 +1656,7 @@ void Editor::setConnectionMap(QString mapName) { selected_connection_item->connection->map_name = mapName; setCurrentConnectionDirection(selected_connection_item->connection->direction); updateMirroredConnectionMap(selected_connection_item->connection, originalMapName); + maskNonVisibleConnectionTiles(); } void Editor::addNewConnection() { diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3d2edab6..6814c2fc 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2536,6 +2536,7 @@ void MainWindow::on_actionThemes_triggered() QString theme = themeSelector->currentText(); porymapConfig.setTheme(theme); this->setTheme(theme); + editor->maskNonVisibleConnectionTiles(); } }); connect(&buttonBox, SIGNAL(rejected()), &themeSelectorWindow, SLOT(reject())); From f08d02a67f4682bb560474d730276547df66b7e6 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 20 Oct 2020 19:07:49 -0400 Subject: [PATCH 6/7] Update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0aaeeef7..245fcc7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,8 @@ The **"Breaking Changes"** listed below are changes that have been made in the d ### Fixed - Fix a bug with the current metatile selection zoom. - Fix bug preventing the status bar from updating the current position while dragging events. -- Fix porymap icon not showing on window or panel on Linux +- Fix porymap icon not showing on window or panel on Linux. +- Zooming the map in/out will now focus on the cursor. ## [4.3.1] - 2020-07-17 ### Added From 2a37c186127243cc0738a0de444e11427744158f Mon Sep 17 00:00:00 2001 From: BigBahss Date: Fri, 23 Oct 2020 00:43:25 -0400 Subject: [PATCH 7/7] Fix connection mask palette color --- src/editor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/editor.cpp b/src/editor.cpp index 020e925c..97a693e6 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -1525,8 +1525,8 @@ void Editor::maskNonVisibleConnectionTiles() { ); // Mask the tiles with the current theme's background color. - QPen pen(ui->graphicsView_Map->palette().color(QPalette::Base)); - QBrush brush(ui->graphicsView_Map->palette().color(QPalette::Base)); + QPen pen(ui->graphicsView_Map->palette().color(QPalette::Active, QPalette::Base)); + QBrush brush(ui->graphicsView_Map->palette().color(QPalette::Active, QPalette::Base)); connection_mask = scene->addPath(mask, pen, brush); }