Refactor map zooming into the Editor
This commit is contained in:
parent
db20d01f3c
commit
5247dd18c0
4 changed files with 47 additions and 68 deletions
|
@ -148,6 +148,7 @@ public:
|
||||||
bool selectingEvent = false;
|
bool selectingEvent = false;
|
||||||
|
|
||||||
void shouldReselectEvents();
|
void shouldReselectEvents();
|
||||||
|
void scaleMapView(int);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setConnectionItemsVisible(bool);
|
void setConnectionItemsVisible(bool);
|
||||||
|
@ -198,6 +199,7 @@ private slots:
|
||||||
void onHoveredMapMovementPermissionChanged(int, int);
|
void onHoveredMapMovementPermissionChanged(int, int);
|
||||||
void onHoveredMapMovementPermissionCleared();
|
void onHoveredMapMovementPermissionCleared();
|
||||||
void onSelectedMetatilesChanged();
|
void onSelectedMetatilesChanged();
|
||||||
|
void onWheelZoom(int);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void objectsChanged();
|
void objectsChanged();
|
||||||
|
@ -206,7 +208,6 @@ signals:
|
||||||
void wildMonDataChanged();
|
void wildMonDataChanged();
|
||||||
void warpEventDoubleClicked(QString mapName, QString warpNum);
|
void warpEventDoubleClicked(QString mapName, QString warpNum);
|
||||||
void currentMetatilesSelectionChanged();
|
void currentMetatilesSelectionChanged();
|
||||||
void wheelZoom(int delta);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EDITOR_H
|
#endif // EDITOR_H
|
||||||
|
|
|
@ -109,11 +109,6 @@ public:
|
||||||
Q_INVOKABLE QList<float> getMetatileLayerOpacity();
|
Q_INVOKABLE QList<float> getMetatileLayerOpacity();
|
||||||
Q_INVOKABLE void setMetatileLayerOpacity(QList<float> order);
|
Q_INVOKABLE void setMetatileLayerOpacity(QList<float> order);
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void scaleMapView(int);
|
|
||||||
void onWheelZoom(int);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_action_Open_Project_triggered();
|
void on_action_Open_Project_triggered();
|
||||||
void on_action_Reload_Project_triggered();
|
void on_action_Reload_Project_triggered();
|
||||||
|
|
|
@ -887,6 +887,47 @@ void Editor::onSelectedMetatilesChanged() {
|
||||||
this->redrawCurrentMetatilesSelection();
|
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<int>(ceil((scene->width()) * pow(base, exp))) + 2;
|
||||||
|
int height = static_cast<int>(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) {
|
void Editor::onHoveredMapMetatileChanged(int x, int y) {
|
||||||
this->playerViewRect->updateLocation(x, y);
|
this->playerViewRect->updateLocation(x, y);
|
||||||
this->cursorMapTileRect->updateLocation(x, y);
|
this->cursorMapTileRect->updateLocation(x, y);
|
||||||
|
@ -1209,7 +1250,7 @@ bool Editor::displayMap() {
|
||||||
scene = new QGraphicsScene;
|
scene = new QGraphicsScene;
|
||||||
MapSceneEventFilter *filter = new MapSceneEventFilter();
|
MapSceneEventFilter *filter = new MapSceneEventFilter();
|
||||||
scene->installEventFilter(filter);
|
scene->installEventFilter(filter);
|
||||||
connect(filter, &MapSceneEventFilter::wheelZoom, this, &Editor::wheelZoom);
|
connect(filter, &MapSceneEventFilter::wheelZoom, this, &Editor::onWheelZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (map_item && scene) {
|
if (map_item && scene) {
|
||||||
|
|
|
@ -148,7 +148,6 @@ void MainWindow::initEditor() {
|
||||||
connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString)));
|
connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString)));
|
||||||
connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged()));
|
connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged()));
|
||||||
connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged()));
|
connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged()));
|
||||||
connect(this->editor, &Editor::wheelZoom, this, &MainWindow::onWheelZoom);
|
|
||||||
|
|
||||||
this->loadUserSettings();
|
this->loadUserSettings();
|
||||||
|
|
||||||
|
@ -1349,11 +1348,11 @@ void MainWindow::on_mainTabBar_tabBarClicked(int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionZoom_In_triggered() {
|
void MainWindow::on_actionZoom_In_triggered() {
|
||||||
scaleMapView(1);
|
editor->scaleMapView(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionZoom_Out_triggered() {
|
void MainWindow::on_actionZoom_Out_triggered() {
|
||||||
scaleMapView(-1);
|
editor->scaleMapView(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionBetter_Cursors_triggered() {
|
void MainWindow::on_actionBetter_Cursors_triggered() {
|
||||||
|
@ -1430,65 +1429,8 @@ void MainWindow::on_actionMap_Shift_triggered()
|
||||||
on_toolButton_Shift_clicked();
|
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<int>(ceil((editor->scene->width()) * pow(base,exp))) + 2;
|
|
||||||
int height = static_cast<int>(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() {
|
void MainWindow::resetMapViewScale() {
|
||||||
scaleMapView(0);
|
editor->scaleMapView(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::addNewEvent(QString event_type)
|
void MainWindow::addNewEvent(QString event_type)
|
||||||
|
|
Loading…
Reference in a new issue