kcms/decoration: Deduplicate event proxying code

remotes/origin/work/fuf/notsmooth
ivan tkachenko 3 years ago
parent 5bd748c674
commit 53591cdfb2
No known key found for this signature in database
GPG Key ID: AF72731B7C654CB3
  1. 96
      src/kcms/decoration/declarative-plugin/previewitem.cpp
  2. 2
      src/kcms/decoration/declarative-plugin/previewitem.h

@ -269,106 +269,70 @@ void PreviewItem::paintShadow(QPainter *painter, int &paddingLeft, int &paddingR
} }
} }
void PreviewItem::mouseDoubleClickEvent(QMouseEvent *event) static QMouseEvent cloneEventWithPadding(QMouseEvent *event, int paddingLeft, int paddingTop)
{ {
const auto &shadow = m_decoration->shadow(); return QMouseEvent(
if (shadow) { event->type(),
QMouseEvent e(event->type(), event->localPos() - QPointF(paddingLeft, paddingTop),
event->localPos() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->button(), event->button(),
event->buttons(), event->buttons(),
event->modifiers()); event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
} }
static QHoverEvent cloneEventWithPadding(QHoverEvent *event, int paddingLeft, int paddingTop)
{
return QHoverEvent(
event->type(),
event->posF() - QPointF(paddingLeft, paddingTop),
event->oldPosF() - QPointF(paddingLeft, paddingTop),
event->modifiers());
} }
void PreviewItem::mousePressEvent(QMouseEvent *event) template <typename E>
void PreviewItem::proxyPassEvent(E *event) const
{ {
const auto &shadow = m_decoration->shadow(); const auto &shadow = m_decoration->shadow();
if (shadow) { if (shadow) {
QMouseEvent e(event->type(), E e = cloneEventWithPadding(event, shadow->paddingLeft(), shadow->paddingTop());
event->localPos() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->button(),
event->buttons(),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e); QCoreApplication::instance()->sendEvent(decoration(), &e);
} else { } else {
QCoreApplication::instance()->sendEvent(decoration(), event); QCoreApplication::instance()->sendEvent(decoration(), event);
} }
} }
void PreviewItem::mouseReleaseEvent(QMouseEvent *event) void PreviewItem::mouseDoubleClickEvent(QMouseEvent *event)
{ {
const auto &shadow = m_decoration->shadow(); proxyPassEvent(event);
if (shadow) {
QMouseEvent e(event->type(),
event->localPos() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->button(),
event->buttons(),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
} }
void PreviewItem::mousePressEvent(QMouseEvent *event)
{
proxyPassEvent(event);
} }
void PreviewItem::mouseMoveEvent(QMouseEvent *event) void PreviewItem::mouseReleaseEvent(QMouseEvent *event)
{ {
const auto &shadow = m_decoration->shadow(); proxyPassEvent(event);
if (shadow) {
QMouseEvent e(event->type(),
event->localPos() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->button(),
event->buttons(),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
} }
void PreviewItem::mouseMoveEvent(QMouseEvent *event)
{
proxyPassEvent(event);
} }
void PreviewItem::hoverEnterEvent(QHoverEvent *event) void PreviewItem::hoverEnterEvent(QHoverEvent *event)
{ {
const auto &shadow = m_decoration->shadow(); proxyPassEvent(event);
if (shadow) {
QHoverEvent e(event->type(),
event->posF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->oldPosF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
}
} }
void PreviewItem::hoverLeaveEvent(QHoverEvent *event) void PreviewItem::hoverLeaveEvent(QHoverEvent *event)
{ {
const auto &shadow = m_decoration->shadow(); proxyPassEvent(event);
if (shadow) {
QHoverEvent e(event->type(),
event->posF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->oldPosF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
}
} }
void PreviewItem::hoverMoveEvent(QHoverEvent *event) void PreviewItem::hoverMoveEvent(QHoverEvent *event)
{ {
const auto &shadow = m_decoration->shadow(); proxyPassEvent(event);
if (shadow) {
QHoverEvent e(event->type(),
event->posF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->oldPosF() - QPointF(shadow->paddingLeft(), shadow->paddingTop()),
event->modifiers());
QCoreApplication::instance()->sendEvent(decoration(), &e);
} else {
QCoreApplication::instance()->sendEvent(decoration(), event);
}
} }
bool PreviewItem::isDrawingBackground() const bool PreviewItem::isDrawingBackground() const

@ -73,6 +73,8 @@ protected:
private: private:
void paintShadow(QPainter *painter, int &paddingLeft, int &paddingRight, int &paddingTop, int &paddingBottom); void paintShadow(QPainter *painter, int &paddingLeft, int &paddingRight, int &paddingTop, int &paddingBottom);
template <typename E>
void proxyPassEvent(E *event) const;
void syncSize(); void syncSize();
void createDecoration(); void createDecoration();
Decoration *m_decoration; Decoration *m_decoration;

Loading…
Cancel
Save