Use native hover events (#5722)

* Use native hover events

* Update cockatrice/src/game/cards/abstract_card_item.cpp

* Reorder

---------

Co-authored-by: Zach H <zahalpern+github@gmail.com>
This commit is contained in:
Basile Clement 2025-03-15 20:07:51 +01:00 committed by GitHub
parent b9900e67a6
commit e4f40a82a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 27 additions and 77 deletions

View file

@ -10,6 +10,7 @@
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QPainter>
#include <QStyleOption>
#include <algorithm>
AbstractCardItem::AbstractCardItem(QGraphicsItem *parent,
@ -18,7 +19,7 @@ AbstractCardItem::AbstractCardItem(QGraphicsItem *parent,
Player *_owner,
int _id)
: ArrowTarget(_owner, parent), id(_id), name(_name), providerId(_providerId), tapped(false), facedown(false),
tapAngle(0), bgColor(Qt::transparent), isHovered(false), realZValue(0)
tapAngle(0), bgColor(Qt::transparent), realZValue(0)
{
setCursor(Qt::OpenHandCursor);
setFlag(ItemIsSelectable);
@ -26,6 +27,8 @@ AbstractCardItem::AbstractCardItem(QGraphicsItem *parent,
connect(&SettingsCache::instance(), &SettingsCache::displayCardNamesChanged, this, [this] { update(); });
refreshCardInfo();
setAcceptHoverEvents(true);
}
AbstractCardItem::~AbstractCardItem()
@ -157,7 +160,7 @@ void AbstractCardItem::paintPicture(QPainter *painter, const QSizeF &translatedS
painter->restore();
}
void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * /*widget*/)
{
painter->save();
@ -166,6 +169,7 @@ void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *
painter->setRenderHint(QPainter::Antialiasing, false);
bool isHovered = option->state.testFlag(QStyle::State_MouseOver);
if (isSelected() || isHovered) {
QPen pen;
if (isHovered)
@ -208,17 +212,24 @@ void AbstractCardItem::setProviderId(const QString &_providerId)
refreshCardInfo();
}
void AbstractCardItem::setHovered(bool _hovered)
void AbstractCardItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
if (isHovered == _hovered)
return;
Q_UNUSED(event);
if (_hovered)
processHoverEvent();
isHovered = _hovered;
setZValue(_hovered ? 2000000004 : realZValue);
setScale(_hovered && SettingsCache::instance().getScaleCards() ? 1.1 : 1);
setTransformOriginPoint(_hovered ? CARD_WIDTH / 2 : 0, _hovered ? CARD_HEIGHT / 2 : 0);
emit hovered(this);
setZValue(2000000004);
setScale(SettingsCache::instance().getScaleCards() ? 1.1 : 1);
setTransformOriginPoint(CARD_WIDTH / 2, CARD_HEIGHT / 2);
update();
}
void AbstractCardItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
setZValue(realZValue);
setScale(1);
setTransformOriginPoint(0, 0);
update();
}
@ -314,11 +325,6 @@ void AbstractCardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
event->accept();
}
void AbstractCardItem::processHoverEvent()
{
emit hovered(this);
}
QVariant AbstractCardItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
if (change == ItemSelectedHasChanged) {