/* * Copyright 2008 Ben Boeckel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "EffectItem.h" // Sigmod includes #include "../sigmod/MapEffect.h" #include "../sigmod/Sigmod.h" #include "../sigmod/Sprite.h" // KDE includes #include // Qt includes #include #include #include Sigmodr::EffectItem::EffectItem(Sigmod::MapEffect* effect, QObject* parent) : QObject(parent), m_effect(effect) { connect(m_effect, SIGNAL(changed()), this, SLOT(effectChanged())); effectChanged(); setZValue(INT_MAX); setAcceptHoverEvents(true); } QRectF Sigmodr::EffectItem::boundingRect() const { return m_pixmap.rect(); } void Sigmodr::EffectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(widget) if (!(flags() & QGraphicsItem::ItemIsSelectable)) { QPixmap temp(m_pixmap.size()); temp.fill(Qt::transparent); QPainter p; p.begin(&temp); p.setCompositionMode(QPainter::CompositionMode_DestinationIn); p.fillRect(temp.rect(), QColor(0, 0, 0, 127)); p.end(); painter->drawPixmap(0, 0, temp); } painter->drawPixmap(0, 0, m_pixmap); if (option->state & QStyle::State_MouseOver) { painter->setPen(QPen(KStatefulBrush(KColorScheme::View, (flags() & QGraphicsItem::ItemIsSelectable) ? KColorScheme::ActiveText : KColorScheme::InactiveText).brush((flags() & QGraphicsItem::ItemIsSelectable) ? QPalette::Active : QPalette::Inactive), 1)); painter->drawText(m_pixmap.rect(), Qt::AlignHCenter | Qt::AlignVCenter, m_effect->name()); } if (option->state & QStyle::State_HasFocus) { painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::FocusColor).brush(QPalette::Active), 6)); painter->drawRect(m_pixmap.rect()); } else if (option->state & QStyle::State_Selected) { painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::ActiveBackground).brush(QPalette::Active), 6)); painter->drawRect(m_pixmap.rect()); } else if ((option->state & QStyle::State_MouseOver) && (flags() & QGraphicsItem::ItemIsSelectable)) { painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::HoverColor).brush(QPalette::Active), 6)); painter->drawRect(m_pixmap.rect()); } } void Sigmodr::EffectItem::changeSprite(const int spriteId) { const Sigmod::Sprite* sprite = m_effect->sigmod()->spriteById(spriteId); if (sprite) m_pixmap.loadFromData(sprite->sprite()); update(); } void Sigmodr::EffectItem::mousePressEvent(QGraphicsSceneMouseEvent* event) { QGraphicsItem::mousePressEvent(event); update(); } void Sigmodr::EffectItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) { QGraphicsItem::mouseMoveEvent(event); m_effect->setCoordinate(scenePos().toPoint()); } void Sigmodr::EffectItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) { QGraphicsItem::mouseReleaseEvent(event); update(); } void Sigmodr::EffectItem::effectChanged() { setPos(m_effect->coordinate()); update(); }