porymap/include/ui/mappixmapitem.h

88 lines
3.4 KiB
C
Raw Normal View History

2018-09-27 00:30:05 +01:00
#ifndef MAPPIXMAPITEM_H
#define MAPPIXMAPITEM_H
#include "map.h"
#include "settings.h"
#include "metatileselector.h"
#include <QGraphicsPixmapItem>
class MapPixmapItem : public QObject, public QGraphicsPixmapItem {
Q_OBJECT
2019-08-07 04:35:02 +01:00
private:
using QGraphicsPixmapItem::paint;
2018-09-27 00:30:05 +01:00
public:
2021-02-18 00:20:14 +00:00
enum class PaintMode { Disabled, Metatiles, EventObjects };
MapPixmapItem(Map* map_, MetatileSelector* metatileSelector, Settings* settings) {
2018-09-27 00:30:05 +01:00
this->map = map_;
2020-07-29 20:51:04 +01:00
this->map->setMapItem(this);
2018-09-27 00:30:05 +01:00
this->metatileSelector = metatileSelector;
this->settings = settings;
this->paintingMode = PaintMode::Metatiles;
this->lockedAxis = MapPixmapItem::Axis::None;
this->prevStraightPathState = false;
2018-09-27 00:30:05 +01:00
setAcceptHoverEvents(true);
}
MapPixmapItem::PaintMode paintingMode;
2021-02-18 00:20:14 +00:00
Map* map;
MetatileSelector* metatileSelector;
Settings* settings;
2018-09-27 00:30:05 +01:00
bool active;
bool has_mouse = false;
2018-09-27 00:30:05 +01:00
bool right_click;
int paint_tile_initial_x;
int paint_tile_initial_y;
bool prevStraightPathState;
int straight_path_initial_x;
int straight_path_initial_y;
2021-02-18 00:20:14 +00:00
enum Axis { None = 0, X, Y };
MapPixmapItem::Axis lockedAxis;
2018-09-27 00:30:05 +01:00
QPoint selection_origin;
QList<QPoint> selection;
virtual void paint(QGraphicsSceneMouseEvent*);
virtual void floodFill(QGraphicsSceneMouseEvent*);
2019-01-04 23:06:27 +00:00
virtual void magicFill(QGraphicsSceneMouseEvent*);
2020-05-01 00:30:24 +01:00
void magicFill(int x, int y, uint16_t metatileId, bool fromScriptCall = false);
void magicFill(int x, int y, bool fromScriptCall = false);
2021-02-18 00:20:14 +00:00
void magicFill(int initialX, int initialY, QPoint selectionDimensions, QList<uint16_t>* selectedMetatiles,
QList<QPair<uint16_t, uint16_t>>* selectedCollisions, bool fromScriptCall = false);
2020-05-01 00:30:24 +01:00
void floodFill(int x, int y, bool fromScriptCall = false);
void floodFill(int x, int y, uint16_t metatileId, bool fromScriptCall = false);
2021-02-18 00:20:14 +00:00
void floodFill(int initialX, int initialY, QPoint selectionDimensions, QList<uint16_t>* selectedMetatiles,
QList<QPair<uint16_t, uint16_t>>* selectedCollisions, bool fromScriptCall = false);
2020-05-03 16:48:48 +01:00
void floodFillSmartPath(int initialX, int initialY, bool fromScriptCall = false);
2018-09-27 00:30:05 +01:00
virtual void pick(QGraphicsSceneMouseEvent*);
virtual void select(QGraphicsSceneMouseEvent*);
virtual void shift(QGraphicsSceneMouseEvent*);
void shift(int xDelta, int yDelta, bool fromScriptCall = false);
2018-09-27 00:30:05 +01:00
virtual void draw(bool ignoreCache = false);
2021-02-18 00:20:14 +00:00
void updateMetatileSelection(QGraphicsSceneMouseEvent* event);
2020-05-01 00:30:24 +01:00
void paintNormal(int x, int y, bool fromScriptCall = false);
2021-02-18 00:20:14 +00:00
void lockNondominantAxis(QGraphicsSceneMouseEvent* event);
QPoint adjustCoords(QPoint pos);
2018-09-27 00:30:05 +01:00
private:
2020-05-03 16:48:48 +01:00
void paintSmartPath(int x, int y, bool fromScriptCall = false);
2018-09-27 00:30:05 +01:00
static QList<int> smartPathTable;
unsigned actionId_ = 0;
2020-07-29 20:51:04 +01:00
2018-09-27 00:30:05 +01:00
signals:
2021-02-18 00:20:14 +00:00
void startPaint(QGraphicsSceneMouseEvent*, MapPixmapItem*);
void endPaint(QGraphicsSceneMouseEvent*, MapPixmapItem*);
void mouseEvent(QGraphicsSceneMouseEvent*, MapPixmapItem*);
void hoveredMapMetatileChanged(const QPoint& pos);
2018-09-27 00:30:05 +01:00
void hoveredMapMetatileCleared();
protected:
void hoverMoveEvent(QGraphicsSceneHoverEvent*);
void hoverEnterEvent(QGraphicsSceneHoverEvent*);
2018-09-27 00:30:05 +01:00
void hoverLeaveEvent(QGraphicsSceneHoverEvent*);
void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*);
void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
};
#endif // MAPPIXMAPITEM_H