Merge branch 'master' into refactor

This commit is contained in:
Diegoisawesome
2018-09-27 13:27:57 -05:00
14 changed files with 967 additions and 32 deletions

View File

@@ -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;

View File

@@ -3,6 +3,7 @@
#include "imageproviders.h"
#include "mapconnection.h"
#include "currentselectedmetatilespixmapitem.h"
#include "mapsceneeventfilter.h"
#include <QCheckBox>
#include <QPainter>
#include <QMouseEvent>
@@ -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))));
}
}
@@ -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);

View File

@@ -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);
};

View File

@@ -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());
} else {
setWindowTitle(editor->project->getProjectTitle() + " - porymap");
setWindowTitle(editor->project->getProjectTitle());
loadDataStructures();
populateMapList();
}
@@ -180,7 +184,7 @@ void MainWindow::setMap(QString map_name) {
redrawMapScene();
displayMapProperties();
setWindowTitle(map_name + " - " + editor->project->getProjectTitle() + " - porymap");
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 +198,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<int>(ceil((editor->scene->width()) * pow(base,exp))) + 2;
int height = static_cast<int>(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<int>(editor->scene->width()) + 2, static_cast<int>(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<int>(editor->scene->width()) + 2, static_cast<int>(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<int>(editor->scene->width()) + 2, static_cast<int>(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());
@@ -520,7 +530,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 +675,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<int>((editor->scene->width() + 2) * pow(base,exp));
int height = static_cast<int>((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<int>(ceil((editor->scene->width()) * pow(base,exp))) + 2;
int height = static_cast<int>(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 +1005,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 +1017,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 +1029,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 +1053,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();
}

View File

@@ -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,6 +121,8 @@ private slots:
void on_checkBox_ToggleBorder_stateChanged(int arg1);
void resetMapViewScale();
private:
Ui::MainWindow *ui;
QStandardItemModel *mapListModel;
@@ -141,7 +146,6 @@ private:
void displayMapProperties();
void checkToolButtons();
void scaleMapView(int);
void initExtraShortcuts();
void initExtraSignals();
void initEditor();

View File

@@ -2195,7 +2195,7 @@
<string>Zoom In</string>
</property>
<property name="shortcut">
<string>+</string>
<string>Ctrl++</string>
</property>
</action>
<action name="actionZoom_Out">
@@ -2203,7 +2203,7 @@
<string>Zoom Out</string>
</property>
<property name="shortcut">
<string>-</string>
<string>Ctrl+-</string>
</property>
</action>
<action name="actionBetter_Cursors">

View File

@@ -43,7 +43,8 @@ SOURCES += core/block.cpp \
main.cpp \
mainwindow.cpp \
project.cpp \
settings.cpp
settings.cpp \
ui/mapsceneeventfilter.cpp
HEADERS += core/block.h \
core/blockdata.h \
@@ -75,7 +76,8 @@ HEADERS += core/block.h \
editor.h \
mainwindow.h \
project.h \
settings.h
settings.h \
ui/mapsceneeventfilter.h
FORMS += mainwindow.ui \
eventpropertiesframe.ui

View File

@@ -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;
}

View File

@@ -0,0 +1,23 @@
#include "mapsceneeventfilter.h"
#include <QEvent>
#include <QGraphicsSceneWheelEvent>
MapSceneEventFilter::MapSceneEventFilter(QObject *parent) : QObject(parent)
{
}
bool MapSceneEventFilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::GraphicsSceneWheel)
{
QGraphicsSceneWheelEvent *wheelEvent = static_cast<QGraphicsSceneWheelEvent *>(event);
if (wheelEvent->modifiers() & Qt::ControlModifier)
{
emit wheelZoom(wheelEvent->delta() > 0 ? 1 : -1);
event->accept();
return true;
}
}
return false;
}

View File

@@ -0,0 +1,19 @@
#ifndef MAPSCENEEVENTFILTER_H
#define MAPSCENEEVENTFILTER_H
#include <QObject>
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