diff --git a/src/eventpropertiesframe.ui b/forms/eventpropertiesframe.ui similarity index 98% rename from src/eventpropertiesframe.ui rename to forms/eventpropertiesframe.ui index 2030aa09..5007d951 100644 --- a/src/eventpropertiesframe.ui +++ b/forms/eventpropertiesframe.ui @@ -1,7 +1,7 @@ - ObjectPropertiesFrame - + EventPropertiesFrame + 0 diff --git a/src/mainwindow.ui b/forms/mainwindow.ui similarity index 99% rename from src/mainwindow.ui rename to forms/mainwindow.ui index a01fb7c4..b42acbaf 100644 --- a/src/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2195,7 +2195,7 @@ Zoom In - + + Ctrl++ @@ -2203,7 +2203,7 @@ Zoom Out - - + Ctrl+- diff --git a/src/core/block.h b/include/core/block.h similarity index 100% rename from src/core/block.h rename to include/core/block.h diff --git a/src/core/blockdata.h b/include/core/blockdata.h similarity index 100% rename from src/core/blockdata.h rename to include/core/blockdata.h diff --git a/src/core/event.h b/include/core/event.h similarity index 100% rename from src/core/event.h rename to include/core/event.h diff --git a/src/core/heallocation.h b/include/core/heallocation.h similarity index 100% rename from src/core/heallocation.h rename to include/core/heallocation.h diff --git a/src/core/history.h b/include/core/history.h similarity index 100% rename from src/core/history.h rename to include/core/history.h diff --git a/src/core/historyitem.h b/include/core/historyitem.h similarity index 100% rename from src/core/historyitem.h rename to include/core/historyitem.h diff --git a/src/core/map.h b/include/core/map.h similarity index 96% rename from src/core/map.h rename to include/core/map.h index 851045e2..a77865e8 100644 --- a/src/core/map.h +++ b/include/core/map.h @@ -40,8 +40,6 @@ public: QString show_location; QString battle_scene; MapLayout *layout; - int scale_exp = 0; - double scale_base = sqrt(2); // adjust scale factor with this bool isPersistedToFile = true; QImage collision_image; QPixmap collision_pixmap; diff --git a/src/core/mapconnection.h b/include/core/mapconnection.h similarity index 100% rename from src/core/mapconnection.h rename to include/core/mapconnection.h diff --git a/src/core/maplayout.h b/include/core/maplayout.h similarity index 100% rename from src/core/maplayout.h rename to include/core/maplayout.h diff --git a/src/core/metatile.h b/include/core/metatile.h similarity index 100% rename from src/core/metatile.h rename to include/core/metatile.h diff --git a/src/core/parseutil.h b/include/core/parseutil.h similarity index 100% rename from src/core/parseutil.h rename to include/core/parseutil.h diff --git a/src/core/tile.h b/include/core/tile.h similarity index 100% rename from src/core/tile.h rename to include/core/tile.h diff --git a/src/core/tileset.h b/include/core/tileset.h similarity index 100% rename from src/core/tileset.h rename to include/core/tileset.h diff --git a/src/editor.h b/include/editor.h similarity index 98% rename from src/editor.h rename to include/editor.h index df2714d5..a9433e95 100644 --- a/src/editor.h +++ b/include/editor.h @@ -109,6 +109,9 @@ public: QString map_edit_mode; QString prev_edit_mode; + + int scale_exp = 0; + double scale_base = sqrt(2); // adjust scale factor with this void objectsView_onMousePress(QMouseEvent *event); void objectsView_onMouseMove(QMouseEvent *event); @@ -164,6 +167,7 @@ signals: void tilesetChanged(QString); void warpEventDoubleClicked(QString mapName, QString warpNum); void currentMetatilesSelectionChanged(); + void wheelZoom(int delta); }; diff --git a/src/mainwindow.h b/include/mainwindow.h similarity index 96% rename from src/mainwindow.h rename to include/mainwindow.h index 9b39debe..7dd7c773 100644 --- a/src/mainwindow.h +++ b/include/mainwindow.h @@ -25,6 +25,9 @@ public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); +public slots: + void scaleMapView(int); + private slots: void on_action_Open_Project_triggered(); void on_mapList_activated(const QModelIndex &index); @@ -118,13 +121,16 @@ private slots: void on_checkBox_ToggleBorder_stateChanged(int arg1); + void resetMapViewScale(); + private: Ui::MainWindow *ui; QStandardItemModel *mapListModel; QList *mapGroupsModel; + QMap mapListIndexes; Editor *editor = nullptr; QIcon* mapIcon; - void setMap(QString); + void setMap(QString, bool scrollTreeView = false); void redrawMapScene(); void loadDataStructures(); void populateMapList(); @@ -141,7 +147,6 @@ private: void displayMapProperties(); void checkToolButtons(); - void scaleMapView(int); void initExtraShortcuts(); void initExtraSignals(); void initEditor(); diff --git a/src/project.h b/include/project.h similarity index 100% rename from src/project.h rename to include/project.h diff --git a/src/settings.h b/include/settings.h similarity index 100% rename from src/settings.h rename to include/settings.h diff --git a/src/ui/bordermetatilespixmapitem.h b/include/ui/bordermetatilespixmapitem.h similarity index 100% rename from src/ui/bordermetatilespixmapitem.h rename to include/ui/bordermetatilespixmapitem.h diff --git a/src/ui/collisionpixmapitem.h b/include/ui/collisionpixmapitem.h similarity index 100% rename from src/ui/collisionpixmapitem.h rename to include/ui/collisionpixmapitem.h diff --git a/src/ui/connectionpixmapitem.h b/include/ui/connectionpixmapitem.h similarity index 100% rename from src/ui/connectionpixmapitem.h rename to include/ui/connectionpixmapitem.h diff --git a/src/ui/currentselectedmetatilespixmapitem.h b/include/ui/currentselectedmetatilespixmapitem.h similarity index 100% rename from src/ui/currentselectedmetatilespixmapitem.h rename to include/ui/currentselectedmetatilespixmapitem.h diff --git a/src/ui/eventpropertiesframe.h b/include/ui/eventpropertiesframe.h similarity index 56% rename from src/ui/eventpropertiesframe.h rename to include/ui/eventpropertiesframe.h index 13c4aee7..49add45b 100644 --- a/src/ui/eventpropertiesframe.h +++ b/include/ui/eventpropertiesframe.h @@ -1,10 +1,10 @@ -#ifndef OBJECTPROPERTIESFRAME_H -#define OBJECTPROPERTIESFRAME_H +#ifndef EVENTPROPERTIESFRAME_H +#define EVENTPROPERTIESFRAME_H #include namespace Ui { -class ObjectPropertiesFrame; +class EventPropertiesFrame; } class EventPropertiesFrame : public QFrame @@ -16,7 +16,7 @@ public: ~EventPropertiesFrame(); public: - Ui::ObjectPropertiesFrame *ui; + Ui::EventPropertiesFrame *ui; }; -#endif // OBJECTPROPERTIESFRAME_H +#endif // EVENTPROPERTIESFRAME_H diff --git a/src/ui/graphicsview.h b/include/ui/graphicsview.h similarity index 100% rename from src/ui/graphicsview.h rename to include/ui/graphicsview.h diff --git a/src/ui/imageproviders.h b/include/ui/imageproviders.h similarity index 100% rename from src/ui/imageproviders.h rename to include/ui/imageproviders.h diff --git a/src/ui/mappixmapitem.h b/include/ui/mappixmapitem.h similarity index 100% rename from src/ui/mappixmapitem.h rename to include/ui/mappixmapitem.h diff --git a/include/ui/mapsceneeventfilter.h b/include/ui/mapsceneeventfilter.h new file mode 100644 index 00000000..7de427e3 --- /dev/null +++ b/include/ui/mapsceneeventfilter.h @@ -0,0 +1,19 @@ +#ifndef MAPSCENEEVENTFILTER_H +#define MAPSCENEEVENTFILTER_H + +#include + +class MapSceneEventFilter : public QObject +{ + Q_OBJECT +protected: + bool eventFilter(QObject *obj, QEvent *event) override; +public: + explicit MapSceneEventFilter(QObject *parent = nullptr); + +signals: + void wheelZoom(int delta); +public slots: +}; + +#endif // MAPSCENEEVENTFILTER_H diff --git a/src/ui/metatileselector.h b/include/ui/metatileselector.h similarity index 100% rename from src/ui/metatileselector.h rename to include/ui/metatileselector.h diff --git a/src/ui/movementpermissionsselector.h b/include/ui/movementpermissionsselector.h similarity index 100% rename from src/ui/movementpermissionsselector.h rename to include/ui/movementpermissionsselector.h diff --git a/src/ui/neweventtoolbutton.h b/include/ui/neweventtoolbutton.h similarity index 100% rename from src/ui/neweventtoolbutton.h rename to include/ui/neweventtoolbutton.h diff --git a/src/ui/noscrollcombobox.h b/include/ui/noscrollcombobox.h similarity index 100% rename from src/ui/noscrollcombobox.h rename to include/ui/noscrollcombobox.h diff --git a/src/ui/noscrollspinbox.h b/include/ui/noscrollspinbox.h similarity index 100% rename from src/ui/noscrollspinbox.h rename to include/ui/noscrollspinbox.h diff --git a/src/ui/selectablepixmapitem.h b/include/ui/selectablepixmapitem.h similarity index 100% rename from src/ui/selectablepixmapitem.h rename to include/ui/selectablepixmapitem.h diff --git a/porymap.pro b/porymap.pro new file mode 100644 index 00000000..665b5c19 --- /dev/null +++ b/porymap.pro @@ -0,0 +1,90 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2016-08-31T15:19:13 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = porymap +TEMPLATE = app +RC_ICONS = resources/icons/porymap-icon-1.ico +ICON = resources/icons/porymap-icon-1.ico + + +SOURCES += src/core/block.cpp \ + src/core/blockdata.cpp \ + src/core/event.cpp \ + src/core/heallocation.cpp \ + src/core/historyitem.cpp \ + src/core/map.cpp \ + src/core/maplayout.cpp \ + src/core/metatile.cpp \ + src/core/parseutil.cpp \ + src/core/tile.cpp \ + src/core/tileset.cpp \ + src/ui/bordermetatilespixmapitem.cpp \ + src/ui/collisionpixmapitem.cpp \ + src/ui/connectionpixmapitem.cpp \ + src/ui/currentselectedmetatilespixmapitem.cpp \ + src/ui/eventpropertiesframe.cpp \ + src/ui/graphicsview.cpp \ + src/ui/imageproviders.cpp \ + src/ui/mappixmapitem.cpp \ + src/ui/mapsceneeventfilter.cpp \ + src/ui/metatileselector.cpp \ + src/ui/movementpermissionsselector.cpp \ + src/ui/neweventtoolbutton.cpp \ + src/ui/noscrollcombobox.cpp \ + src/ui/noscrollspinbox.cpp \ + src/ui/selectablepixmapitem.cpp \ + src/editor.cpp \ + src/main.cpp \ + src/mainwindow.cpp \ + src/project.cpp \ + src/settings.cpp + +HEADERS += include/core/block.h \ + include/core/blockdata.h \ + include/core/event.h \ + include/core/heallocation.h \ + include/core/history.h \ + include/core/historyitem.h \ + include/core/map.h \ + include/core/mapconnection.h \ + include/core/maplayout.h \ + include/core/metatile.h \ + include/core/parseutil.h \ + include/core/tile.h \ + include/core/tileset.h \ + include/ui/bordermetatilespixmapitem.h \ + include/ui/collisionpixmapitem.h \ + include/ui/connectionpixmapitem.h \ + include/ui/currentselectedmetatilespixmapitem.h \ + include/ui/eventpropertiesframe.h \ + include/ui/graphicsview.h \ + include/ui/imageproviders.h \ + include/ui/mappixmapitem.h \ + include/ui/mapsceneeventfilter.h \ + include/ui/metatileselector.h \ + include/ui/movementpermissionsselector.h \ + include/ui/neweventtoolbutton.h \ + include/ui/noscrollcombobox.h \ + include/ui/noscrollspinbox.h \ + include/ui/selectablepixmapitem.h \ + include/editor.h \ + include/mainwindow.h \ + include/project.h \ + include/settings.h + +FORMS += forms/mainwindow.ui \ + forms/eventpropertiesframe.ui + +RESOURCES += \ + resources/images.qrc + +INCLUDEPATH += include +INCLUDEPATH += include/core +INCLUDEPATH += include/ui diff --git a/src/resources/icons/add.ico b/resources/icons/add.ico similarity index 100% rename from src/resources/icons/add.ico rename to resources/icons/add.ico diff --git a/src/resources/icons/cursor.ico b/resources/icons/cursor.ico similarity index 100% rename from src/resources/icons/cursor.ico rename to resources/icons/cursor.ico diff --git a/src/resources/icons/delete.ico b/resources/icons/delete.ico similarity index 100% rename from src/resources/icons/delete.ico rename to resources/icons/delete.ico diff --git a/src/resources/icons/fill_color.ico b/resources/icons/fill_color.ico similarity index 100% rename from src/resources/icons/fill_color.ico rename to resources/icons/fill_color.ico diff --git a/src/resources/icons/fill_color_cursor.ico b/resources/icons/fill_color_cursor.ico similarity index 100% rename from src/resources/icons/fill_color_cursor.ico rename to resources/icons/fill_color_cursor.ico diff --git a/src/resources/icons/folder.ico b/resources/icons/folder.ico similarity index 100% rename from src/resources/icons/folder.ico rename to resources/icons/folder.ico diff --git a/src/resources/icons/folder_closed.ico b/resources/icons/folder_closed.ico similarity index 100% rename from src/resources/icons/folder_closed.ico rename to resources/icons/folder_closed.ico diff --git a/src/resources/icons/folder_closed_map.ico b/resources/icons/folder_closed_map.ico similarity index 100% rename from src/resources/icons/folder_closed_map.ico rename to resources/icons/folder_closed_map.ico diff --git a/src/resources/icons/folder_image.ico b/resources/icons/folder_image.ico similarity index 100% rename from src/resources/icons/folder_image.ico rename to resources/icons/folder_image.ico diff --git a/src/resources/icons/folder_map.ico b/resources/icons/folder_map.ico similarity index 100% rename from src/resources/icons/folder_map.ico rename to resources/icons/folder_map.ico diff --git a/src/resources/icons/image.ico b/resources/icons/image.ico similarity index 100% rename from src/resources/icons/image.ico rename to resources/icons/image.ico diff --git a/src/resources/icons/map.ico b/resources/icons/map.ico similarity index 100% rename from src/resources/icons/map.ico rename to resources/icons/map.ico diff --git a/src/resources/icons/move.ico b/resources/icons/move.ico similarity index 100% rename from src/resources/icons/move.ico rename to resources/icons/move.ico diff --git a/src/resources/icons/pencil.ico b/resources/icons/pencil.ico similarity index 100% rename from src/resources/icons/pencil.ico rename to resources/icons/pencil.ico diff --git a/src/resources/icons/pencil_cursor.ico b/resources/icons/pencil_cursor.ico similarity index 100% rename from src/resources/icons/pencil_cursor.ico rename to resources/icons/pencil_cursor.ico diff --git a/src/resources/icons/pipette.ico b/resources/icons/pipette.ico similarity index 100% rename from src/resources/icons/pipette.ico rename to resources/icons/pipette.ico diff --git a/src/resources/icons/pipette_cursor.ico b/resources/icons/pipette_cursor.ico similarity index 100% rename from src/resources/icons/pipette_cursor.ico rename to resources/icons/pipette_cursor.ico diff --git a/src/resources/icons/porymap-icon-1.ico b/resources/icons/porymap-icon-1.ico similarity index 100% rename from src/resources/icons/porymap-icon-1.ico rename to resources/icons/porymap-icon-1.ico diff --git a/src/resources/icons/shift.ico b/resources/icons/shift.ico similarity index 100% rename from src/resources/icons/shift.ico rename to resources/icons/shift.ico diff --git a/src/resources/icons/shift_cursor.ico b/resources/icons/shift_cursor.ico similarity index 100% rename from src/resources/icons/shift_cursor.ico rename to resources/icons/shift_cursor.ico diff --git a/src/resources/icons/viewsprites.ico b/resources/icons/viewsprites.ico similarity index 100% rename from src/resources/icons/viewsprites.ico rename to resources/icons/viewsprites.ico diff --git a/src/resources/images.qrc b/resources/images.qrc similarity index 100% rename from src/resources/images.qrc rename to resources/images.qrc diff --git a/src/resources/images/Entities_16x16.png b/resources/images/Entities_16x16.png similarity index 100% rename from src/resources/images/Entities_16x16.png rename to resources/images/Entities_16x16.png diff --git a/src/resources/images/collisions.png b/resources/images/collisions.png similarity index 100% rename from src/resources/images/collisions.png rename to resources/images/collisions.png diff --git a/src/editor.cpp b/src/editor.cpp index c9d5a5ea..23fce69d 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -3,6 +3,7 @@ #include "imageproviders.h" #include "mapconnection.h" #include "currentselectedmetatilespixmapitem.h" +#include "mapsceneeventfilter.h" #include #include #include @@ -348,7 +349,7 @@ void Editor::onHoveredMapMetatileChanged(int x, int y) { .arg(x) .arg(y) .arg(QString("%1").arg(tile, 3, 16, QChar('0')).toUpper()) - .arg(QString::number(pow(map->scale_base, map->scale_exp)))); + .arg(QString::number(pow(scale_base, scale_exp), 'g', 2))); } } @@ -461,8 +462,12 @@ void Editor::mouseEvent_collision(QGraphicsSceneMouseEvent *event, CollisionPixm } void Editor::displayMap() { - if (!scene) + if (!scene) { scene = new QGraphicsScene; + MapSceneEventFilter *filter = new MapSceneEventFilter(); + scene->installEventFilter(filter); + connect(filter, &MapSceneEventFilter::wheelZoom, this, &Editor::wheelZoom); + } if (map_item && scene) { scene->removeItem(map_item); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 53974d30..70d875f3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3,7 +3,7 @@ #include "project.h" #include "editor.h" #include "eventpropertiesframe.h" -#include "ui_objectpropertiesframe.h" +#include "ui_eventpropertiesframe.h" #include "bordermetatilespixmapitem.h" #include "currentselectedmetatilespixmapitem.h" @@ -32,6 +32,7 @@ MainWindow::MainWindow(QWidget *parent) : { QCoreApplication::setOrganizationName("pret"); QCoreApplication::setApplicationName("porymap"); + QApplication::setApplicationDisplayName("porymap"); QApplication::setWindowIcon(QIcon(":/icons/porymap-icon-1.ico")); ui->setupUi(this); @@ -50,6 +51,8 @@ MainWindow::~MainWindow() void MainWindow::initExtraShortcuts() { new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Z), this, SLOT(redo())); + new QShortcut(QKeySequence("Ctrl+0"), this, SLOT(resetMapViewScale())); + ui->actionZoom_In->setShortcuts({QKeySequence("Ctrl++"), QKeySequence("Ctrl+=")}); } void MainWindow::initExtraSignals() { @@ -64,6 +67,7 @@ void MainWindow::initEditor() { connect(this->editor, SIGNAL(tilesetChanged(QString)), this, SLOT(onTilesetChanged(QString))); connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString))); connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged())); + connect(this->editor, &Editor::wheelZoom, this, &MainWindow::scaleMapView); this->loadUserSettings(); } @@ -103,12 +107,12 @@ void MainWindow::openProject(QString dir) { if (!already_open) { editor->project = new Project; editor->project->root = dir; - setWindowTitle(editor->project->getProjectTitle() + " - porymap"); + setWindowTitle(editor->project->getProjectTitle()); loadDataStructures(); populateMapList(); - setMap(getDefaultMap()); + setMap(getDefaultMap(), true); } else { - setWindowTitle(editor->project->getProjectTitle() + " - porymap"); + setWindowTitle(editor->project->getProjectTitle()); loadDataStructures(); populateMapList(); } @@ -171,7 +175,7 @@ void MainWindow::on_action_Open_Project_triggered() } } -void MainWindow::setMap(QString map_name) { +void MainWindow::setMap(QString map_name, bool scrollTreeView) { qDebug() << QString("setMap(%1)").arg(map_name); if (map_name.isNull()) { return; @@ -180,7 +184,12 @@ void MainWindow::setMap(QString map_name) { redrawMapScene(); displayMapProperties(); - setWindowTitle(map_name + " - " + editor->project->getProjectTitle() + " - porymap"); + if (scrollTreeView) { + ui->mapList->setCurrentIndex(mapListIndexes.value(map_name)); + ui->mapList->scrollTo(ui->mapList->currentIndex(), QAbstractItemView::PositionAtCenter); + } + + setWindowTitle(map_name + " - " + editor->project->getProjectTitle()); connect(editor->map, SIGNAL(mapChanged(Map*)), this, SLOT(onMapChanged(Map *))); connect(editor->map, SIGNAL(mapNeedsRedrawing()), this, SLOT(onMapNeedsRedrawing())); @@ -194,18 +203,24 @@ void MainWindow::redrawMapScene() editor->displayMap(); on_tabWidget_currentChanged(ui->tabWidget->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->setFixedSize(static_cast(editor->scene->width()) + 2, static_cast(editor->scene->height()) + 2); + ui->graphicsView_Map->setFixedSize(width, height); ui->graphicsView_Objects_Map->setScene(editor->scene); ui->graphicsView_Objects_Map->setSceneRect(editor->scene->sceneRect()); - ui->graphicsView_Objects_Map->setFixedSize(static_cast(editor->scene->width()) + 2, static_cast(editor->scene->height()) + 2); + ui->graphicsView_Objects_Map->setFixedSize(width, height); ui->graphicsView_Objects_Map->editor = editor; ui->graphicsView_Connections->setScene(editor->scene); ui->graphicsView_Connections->setSceneRect(editor->scene->sceneRect()); - ui->graphicsView_Connections->setFixedSize(static_cast(editor->scene->width()) + 2, static_cast(editor->scene->height()) + 2); + ui->graphicsView_Connections->setFixedSize(width, height); ui->graphicsView_Metatiles->setScene(editor->scene_metatiles); //ui->graphicsView_Metatiles->setSceneRect(editor->scene_metatiles->sceneRect()); @@ -238,7 +253,7 @@ void MainWindow::openWarpMap(QString map_name, QString warp_num) { } // Open the destination map, and select the target warp event. - setMap(map_name); + setMap(map_name, true); QList warp_events = editor->map->events["warp_event_group"]; if (warp_events.length() > warpNum) { Event *warp_event = warp_events.at(warpNum); @@ -440,6 +455,7 @@ void MainWindow::populateMapList() { QString map_name = names.value(j); QStandardItem *map = createMapItem(map_name, i, j); group->appendRow(map); + mapListIndexes.insert(map_name, map->index()); } } @@ -502,6 +518,7 @@ void MainWindow::onAddNewMapToGroupClick(QAction* triggeredAction) int numMapsInGroup = groupItem->rowCount(); QStandardItem *newMapItem = createMapItem(newMapName, groupNum, numMapsInGroup); groupItem->appendRow(newMapItem); + mapListIndexes.insert(newMapName, newMapItem->index()); setMap(newMapName); } @@ -520,7 +537,7 @@ void MainWindow::currentMetatilesSelectionChanged() void MainWindow::on_mapList_activated(const QModelIndex &index) { QVariant data = index.data(Qt::UserRole); - if (!data.isNull()) { + if (index.data(MapListUserRoles::TypeRole) == "map_name" && !data.isNull()) { setMap(data.toString()); } } @@ -665,19 +682,33 @@ void MainWindow::on_actionMap_Shift_triggered() } void MainWindow::scaleMapView(int s) { - editor->map->scale_exp += s; + if ((editor->scale_exp + s) <= 5 && (editor->scale_exp + s) >= -2) // sane limits + { + if (s == 0) + { + s = -editor->scale_exp; + } - double base = editor->map->scale_base; - double exp = editor->map->scale_exp; - double sfactor = pow(base,s); + editor->scale_exp += s; - ui->graphicsView_Map->scale(sfactor,sfactor); - ui->graphicsView_Objects_Map->scale(sfactor,sfactor); + double base = editor->scale_base; + double exp = editor->scale_exp; + double sfactor = pow(base,s); - int width = static_cast((editor->scene->width() + 2) * pow(base,exp)); - int height = static_cast((editor->scene->height() + 2) * pow(base,exp)); - ui->graphicsView_Map->setFixedSize(width, height); - ui->graphicsView_Objects_Map->setFixedSize(width, height); + ui->graphicsView_Map->scale(sfactor,sfactor); + ui->graphicsView_Objects_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_Objects_Map->setFixedSize(width, height); + ui->graphicsView_Connections->setFixedSize(width, height); + } +} + +void MainWindow::resetMapViewScale() { + scaleMapView(0); } void MainWindow::addNewEvent(QString event_type) @@ -981,7 +1012,7 @@ void MainWindow::on_toolButton_Paint_clicked() { editor->map_edit_mode = "paint"; editor->settings->mapCursor = QCursor(QPixmap(":/icons/pencil_cursor.ico"), 10, 10); - + ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); QScroller::ungrabGesture(ui->scrollArea); @@ -993,7 +1024,7 @@ void MainWindow::on_toolButton_Select_clicked() { editor->map_edit_mode = "select"; editor->settings->mapCursor = QCursor(QPixmap(":/icons/cursor.ico"), 0, 0); - + ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); QScroller::ungrabGesture(ui->scrollArea); @@ -1005,7 +1036,7 @@ void MainWindow::on_toolButton_Fill_clicked() { editor->map_edit_mode = "fill"; editor->settings->mapCursor = QCursor(QPixmap(":/icons/fill_color_cursor.ico"), 10, 10); - + ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); QScroller::ungrabGesture(ui->scrollArea); @@ -1029,11 +1060,11 @@ void MainWindow::on_toolButton_Move_clicked() { editor->map_edit_mode = "move"; editor->settings->mapCursor = QCursor(QPixmap(":/icons/move.ico"), 7, 7); - + ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QScroller::grabGesture(ui->scrollArea, QScroller::LeftMouseButtonGesture); - + checkToolButtons(); } @@ -1059,7 +1090,7 @@ void MainWindow::checkToolButtons() { } void MainWindow::onLoadMapRequested(QString mapName, QString fromMapName) { - setMap(mapName); + setMap(mapName, true); editor->setSelectedConnectionFromMap(fromMapName); } diff --git a/src/porymap.pro b/src/porymap.pro deleted file mode 100644 index 7589cc75..00000000 --- a/src/porymap.pro +++ /dev/null @@ -1,87 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2016-08-31T15:19:13 -# -#------------------------------------------------- - -QT += core gui - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = porymap -TEMPLATE = app -RC_ICONS = resources/icons/porymap-icon-1.ico -ICON = resources/icons/porymap-icon-1.ico - - -SOURCES += core/block.cpp \ - core/blockdata.cpp \ - core/event.cpp \ - core/heallocation.cpp \ - core/historyitem.cpp \ - core/map.cpp \ - core/maplayout.cpp \ - core/metatile.cpp \ - core/parseutil.cpp \ - core/tile.cpp \ - core/tileset.cpp \ - ui/bordermetatilespixmapitem.cpp \ - ui/collisionpixmapitem.cpp \ - ui/connectionpixmapitem.cpp \ - ui/currentselectedmetatilespixmapitem.cpp \ - ui/eventpropertiesframe.cpp \ - ui/graphicsview.cpp \ - ui/imageproviders.cpp \ - ui/mappixmapitem.cpp \ - ui/metatileselector.cpp \ - ui/movementpermissionsselector.cpp \ - ui/neweventtoolbutton.cpp \ - ui/noscrollcombobox.cpp \ - ui/noscrollspinbox.cpp \ - ui/selectablepixmapitem.cpp \ - editor.cpp \ - main.cpp \ - mainwindow.cpp \ - project.cpp \ - settings.cpp - -HEADERS += core/block.h \ - core/blockdata.h \ - core/event.h \ - core/heallocation.h \ - core/history.h \ - core/historyitem.h \ - core/map.h \ - core/mapconnection.h \ - core/maplayout.h \ - core/metatile.h \ - core/parseutil.h \ - core/tile.h \ - core/tileset.h \ - ui/bordermetatilespixmapitem.h \ - ui/collisionpixmapitem.h \ - ui/connectionpixmapitem.h \ - ui/currentselectedmetatilespixmapitem.h \ - ui/eventpropertiesframe.h \ - ui/graphicsview.h \ - ui/imageproviders.h \ - ui/mappixmapitem.h \ - ui/metatileselector.h \ - ui/movementpermissionsselector.h \ - ui/neweventtoolbutton.h \ - ui/noscrollcombobox.h \ - ui/noscrollspinbox.h \ - ui/selectablepixmapitem.h \ - editor.h \ - mainwindow.h \ - project.h \ - settings.h - -FORMS += mainwindow.ui \ - eventpropertiesframe.ui - -RESOURCES += \ - resources/images.qrc - -INCLUDEPATH += core -INCLUDEPATH += ui diff --git a/src/ui/eventpropertiesframe.cpp b/src/ui/eventpropertiesframe.cpp index e4c0f097..f340be50 100644 --- a/src/ui/eventpropertiesframe.cpp +++ b/src/ui/eventpropertiesframe.cpp @@ -1,9 +1,9 @@ #include "eventpropertiesframe.h" -#include "ui_objectpropertiesframe.h" +#include "ui_eventpropertiesframe.h" EventPropertiesFrame::EventPropertiesFrame(QWidget *parent) : QFrame(parent), - ui(new Ui::ObjectPropertiesFrame) + ui(new Ui::EventPropertiesFrame) { ui->setupUi(this); } diff --git a/src/ui/imageproviders.cpp b/src/ui/imageproviders.cpp index f4d45ae8..d5873800 100644 --- a/src/ui/imageproviders.cpp +++ b/src/ui/imageproviders.cpp @@ -38,7 +38,11 @@ QImage getMetatileImage(int tile, Tileset *primaryTileset, Tileset *secondaryTil if (tile_image.isNull()) { // Some metatiles specify tiles that are outside the valid range. // These are treated as completely transparent, so they can be skipped without - // being drawn. + // being drawn unless they're on the bottom layer, in which case we need + // a placeholder because garbage will be drawn otherwise. + if (layer == 0) { + metatile_painter.fillRect(x * 8, y * 8, 8, 8, palettes.value(0).value(0)); + } continue; } diff --git a/src/ui/mapsceneeventfilter.cpp b/src/ui/mapsceneeventfilter.cpp new file mode 100644 index 00000000..f8ae14cb --- /dev/null +++ b/src/ui/mapsceneeventfilter.cpp @@ -0,0 +1,23 @@ +#include "mapsceneeventfilter.h" +#include +#include + +MapSceneEventFilter::MapSceneEventFilter(QObject *parent) : QObject(parent) +{ + +} + +bool MapSceneEventFilter::eventFilter(QObject*, QEvent *event) +{ + if (event->type() == QEvent::GraphicsSceneWheel) + { + QGraphicsSceneWheelEvent *wheelEvent = static_cast(event); + if (wheelEvent->modifiers() & Qt::ControlModifier) + { + emit wheelZoom(wheelEvent->delta() > 0 ? 1 : -1); + event->accept(); + return true; + } + } + return false; +}