/* * 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 "WarpItem.h" // Sigmod includes #include "../sigmod/MapWarp.h" #include "../sigmod/Sigmod.h" // KDE includes #include // Qt includes #include #include #include #include Sigmodr::WarpItem::WarpItem(Sigmod::MapWarp* warp, QObject* parent) : QObject(parent), m_warp(warp) { connect(m_warp, SIGNAL(changed()), this, SLOT(warpChanged())); warpChanged(); setZValue(INT_MAX); setAcceptHoverEvents(true); } QRectF Sigmodr::WarpItem::boundingRect() const { return m_warp->area(); } void Sigmodr::WarpItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(widget) if (m_warp->area().size().isValid()) return; if (!(flags() & QGraphicsItem::ItemIsSelectable)) { QPixmap temp(m_warp->area().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->setBrush(KStatefulBrush(KColorScheme::View, KColorScheme::ActiveBackground).brush(QPalette::Active)); painter->drawRect(m_warp->area()); 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_warp->area(), Qt::AlignHCenter | Qt::AlignVCenter, m_warp->name()); } if (option->state & QStyle::State_HasFocus) { painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::FocusColor).brush(QPalette::Active), 6)); painter->drawRect(m_warp->area()); } else if (option->state & QStyle::State_Selected) { painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::ActiveBackground).brush(QPalette::Active), 6)); painter->drawRect(m_warp->area()); } 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_warp->area()); } } void Sigmodr::WarpItem::mousePressEvent(QGraphicsSceneMouseEvent* event) { QGraphicsItem::mousePressEvent(event); update(); } void Sigmodr::WarpItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) { if (event->modifiers() & Qt::ShiftModifier) { QRect rect = m_warp->area(); QPointF diff = event->scenePos() - event->lastScenePos(); rect.setSize(rect.size() + QSize(diff.x(), diff.y())); m_warp->setArea(rect); } else { QGraphicsItem::mouseMoveEvent(event); QRect rect = m_warp->area(); rect.setTopLeft(scenePos().toPoint()); m_warp->setArea(rect); } } void Sigmodr::WarpItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) { QGraphicsItem::mouseReleaseEvent(event); update(); } void Sigmodr::WarpItem::warpChanged() { setPos(m_warp->area().topLeft()); update(); }