diff options
Diffstat (limited to 'sigmodr/widgets/mapeditor/EffectItem.cpp')
-rw-r--r-- | sigmodr/widgets/mapeditor/EffectItem.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/sigmodr/widgets/mapeditor/EffectItem.cpp b/sigmodr/widgets/mapeditor/EffectItem.cpp index ae35135b..3282352d 100644 --- a/sigmodr/widgets/mapeditor/EffectItem.cpp +++ b/sigmodr/widgets/mapeditor/EffectItem.cpp @@ -19,7 +19,9 @@ #include "EffectItem.h" // Sigmod includes +#include <sigmod/Game.h> #include <sigmod/MapEffect.h> +#include <sigmod/Skin.h> // Qt includes #include <QtGui/QPainter> @@ -44,21 +46,30 @@ EffectItem::EffectItem(Sigmod::Map* map, MapEffect* effect, QGraphicsScene* pare QRectF EffectItem::boundingRect() const { - QPainterPath path = m_effect->area(); - if (path.isEmpty()) - return QRect(0, 0, 32, 32); - return m_effect->area().boundingRect(); + if (m_size.isNull()) + { + QPainterPath path = m_effect->area(); + if (path.isEmpty()) + return QRect(0, 0, 32, 32); + return m_effect->area().boundingRect(); + } + return QRect(QPoint(), m_size); } void EffectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { painter->setBrush(QBrush(Qt::red)); painter->setPen(QPen(Qt::black, 2)); - QPainterPath path = m_effect->area(); - if (path.isEmpty()) - painter->drawRect(0, 0, 32, 32); + if (m_size.isNull()) + { + QPainterPath path = m_effect->area(); + if (path.isEmpty()) + painter->drawRect(boundingRect()); + else + painter->drawPath(path); + } else - painter->drawPath(path); + painter->drawRect(QRect(QPoint(), m_size)); MapItem::paint(painter, option, widget); } @@ -75,6 +86,11 @@ void EffectItem::moveTo(const QPoint& point) void EffectItem::effectChanged() { setPos(m_effect->position()); + const Skin* skin = m_effect->game()->skinById(m_effect->skin()); + if (skin) + m_size = skin->size(); + else + m_size = QSize(); resetLabel(); update(); } |