plasma: drop Plasma::ItemBackground class

unused, tho the svg that it paints is used in multiple places as base.
perhaps the class was not flexible enough?

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-05-24 11:34:45 +03:00
parent 2a93f0b19b
commit 06654c0495
6 changed files with 2 additions and 473 deletions

View file

@ -430,7 +430,6 @@ install(
Plasma/FrameSvg Plasma/FrameSvg
Plasma/GroupBox Plasma/GroupBox
Plasma/IconWidget Plasma/IconWidget
Plasma/ItemBackground
Plasma/Label Plasma/Label
Plasma/LineEdit Plasma/LineEdit
Plasma/Meter Plasma/Meter

View file

@ -1 +0,0 @@
#include "../../plasma/widgets/itembackground.h"

View file

@ -69,7 +69,6 @@ set(plasma_LIB_SRCS
widgets/frame.cpp widgets/frame.cpp
widgets/groupbox.cpp widgets/groupbox.cpp
widgets/iconwidget.cpp widgets/iconwidget.cpp
widgets/itembackground.cpp
widgets/label.cpp widgets/label.cpp
widgets/lineedit.cpp widgets/lineedit.cpp
widgets/meter.cpp widgets/meter.cpp
@ -173,7 +172,6 @@ install(
widgets/frame.h widgets/frame.h
widgets/groupbox.h widgets/groupbox.h
widgets/iconwidget.h widgets/iconwidget.h
widgets/itembackground.h
widgets/label.h widgets/label.h
widgets/lineedit.h widgets/lineedit.h
widgets/meter.h widgets/meter.h

View file

@ -338,7 +338,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
if (option.direction == Qt::LeftToRight) { if (option.direction == Qt::LeftToRight) {
if (((titleRect.width() + decorationRect.width() + 10) > option.rect.width() || if (((titleRect.width() + decorationRect.width() + 10) > option.rect.width() ||
(subTitleRect.width() + decorationRect.width() + 15) > option.rect.width()) && (subTitleRect.width() + decorationRect.width() + 15) > option.rect.width()) &&
(titleRect.width() > 120 || subTitleRect.width() > 120)) { (titleRect.width() > 120 || subTitleRect.width() > 120)) {
QPainter p(&buffer); QPainter p(&buffer);
p.setCompositionMode(QPainter::CompositionMode_DestinationOut); p.setCompositionMode(QPainter::CompositionMode_DestinationOut);
p.setPen(Qt::NoPen); p.setPen(Qt::NoPen);
@ -359,7 +359,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
} else { } else {
if (((titleRect.width() + decorationRect.width() + 10) > option.rect.width() || if (((titleRect.width() + decorationRect.width() + 10) > option.rect.width() ||
(subTitleRect.width() + decorationRect.width() + 15 )> option.rect.width()) && (subTitleRect.width() + decorationRect.width() + 15 )> option.rect.width()) &&
(titleRect.width() > 120 || subTitleRect.width() > 120)) { (titleRect.width() > 120 || subTitleRect.width() > 120)) {
buffer.fill(Qt::transparent); buffer.fill(Qt::transparent);
QPainter p(&buffer); QPainter p(&buffer);
p.setCompositionMode(QPainter::CompositionMode_DestinationOut); p.setCompositionMode(QPainter::CompositionMode_DestinationOut);

View file

@ -1,345 +0,0 @@
/***************************************************************************
* Copyright 2009 by Alessandro Diaferia <alediaferia@gmail.com> *
* Copyright 2009 by Marco Martin <notmart@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License as *
* published by the Free Software Foundation; either version 2, 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, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#include "itembackground.h"
#include <QPainter>
#include <QTimer>
#include <QtGui/qstyleoption.h>
#include <QPropertyAnimation>
#include <kdebug.h>
#include <plasma/framesvg.h>
#include <plasma/animator.h>
#include <plasma/theme.h>
namespace Plasma
{
class ItemBackgroundPrivate
{
public:
ItemBackgroundPrivate(ItemBackground *parent)
: q(parent),
target(nullptr),
opacity(1.0),
fading(false),
fadeIn(false),
immediate(false)
{
}
void animationUpdate(qreal progress);
void targetDestroyed(QObject*);
void frameSvgChanged();
void refreshCurrentTarget();
ItemBackground * const q;
QGraphicsItem *target;
Plasma::FrameSvg *frameSvg;
QRectF oldGeometry;
QRectF newGeometry;
QPropertyAnimation *anim;
qreal opacity;
bool fading;
bool fadeIn;
bool immediate;
};
ItemBackground::ItemBackground(QGraphicsWidget *parent)
: QGraphicsWidget(parent),
d(new ItemBackgroundPrivate(this))
{
d->frameSvg = new Plasma::FrameSvg(this);
d->anim = new QPropertyAnimation(this, "animationUpdate", this);
d->anim->setStartValue(0);
d->anim->setEndValue(1);
d->frameSvg->setImagePath("widgets/viewitem");
d->frameSvg->setEnabledBorders(Plasma::FrameSvg::AllBorders);
d->frameSvg->setCacheAllRenderedFrames(true);
d->frameSvg->setElementPrefix("hover");
setCacheMode(DeviceCoordinateCache);
setFlag(ItemIsMovable, false);
setFlag(ItemIsSelectable, false);
setFlag(ItemIsFocusable, false);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
qreal l, t, r, b;
d->frameSvg->getMargins(l, t, r, b);
setContentsMargins(l, t, r, b);
connect(d->frameSvg, SIGNAL(repaintNeeded()), this, SLOT(frameSvgChanged()));
setAcceptedMouseButtons(0);
setZValue(-800);
}
ItemBackground::~ItemBackground()
{
delete d;
}
QRectF ItemBackground::target() const
{
return d->newGeometry;
}
void ItemBackground::setTarget(const QRectF &newGeometry)
{
d->oldGeometry = geometry();
d->newGeometry = newGeometry;
if (!isVisible() && (!d->target || !d->target->isVisible())) {
setGeometry(d->newGeometry);
targetReached(newGeometry);
if (d->target) {
emit targetItemReached(d->target);
}
return;
}
QGraphicsWidget *pw = parentWidget();
if (pw) {
d->newGeometry = d->newGeometry.intersected(QRectF(QPointF(0,0), pw->size()));
}
if (d->anim->state() != QAbstractAnimation::Stopped) {
d->anim->stop();
}
if (d->target && d->target->isVisible() && !isVisible()) {
setZValue(d->target->zValue()-1);
setGeometry(newGeometry);
d->oldGeometry = newGeometry;
show();
} else {
d->fading = false;
d->opacity = 1;
d->anim->start();
}
}
void ItemBackground::setTargetItem(QGraphicsItem *target)
{
if (d->target && d->target != target) {
QObject *obj = 0;
if (d->target->isWidget()) {
obj = static_cast<QGraphicsWidget*>(d->target);
obj->removeEventFilter(this);
} else {
d->target->removeSceneEventFilter(this);
obj = dynamic_cast<QObject *>(d->target);
}
if (obj) {
disconnect(obj, 0, this, 0);
}
}
if (!target) {
hide();
}
bool newTarget = (d->target != target);
d->target = target;
if (target) {
setZValue(target->zValue() - 1);
if (parentItem() != target->parentItem()) {
QTransform t = transform();
setTransform(QTransform());
QRectF geom = mapToScene(geometry()).boundingRect();
setGeometry(mapFromScene(geom).boundingRect());
setTransform(t);
}
QRectF rect = target->boundingRect();
rect.moveTopLeft(mapToParent(mapFromScene(target->mapToScene(QPointF(0, 0)))));
setTarget(rect);
if (newTarget) {
QObject *obj = 0;
if (target->isWidget()) {
obj = static_cast<QGraphicsWidget*>(target);
obj->installEventFilter(this);
} else {
d->target->installSceneEventFilter(this);
obj = dynamic_cast<QObject *>(target);
}
if (obj) {
connect(obj, SIGNAL(destroyed(QObject*)), this, SLOT(targetDestroyed(QObject*)));
}
}
}
}
QGraphicsItem *ItemBackground::targetItem() const
{
return d->target;
}
bool ItemBackground::eventFilter(QObject *watched, QEvent *event)
{
QGraphicsWidget *targetWidget = static_cast<QGraphicsWidget *>(d->target);
if (watched == targetWidget) {
if (event->type() == QEvent::GraphicsSceneResize ||
event->type() == QEvent::GraphicsSceneMove) {
// We need to wait for the parent widget to resize...
QTimer::singleShot(0, this, SLOT(refreshCurrentTarget()) );
} else if (event->type() == QEvent::Show) {
setTargetItem(targetWidget);
}
}
return false;
}
bool ItemBackground::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
{
if (watched == d->target) {
if (event->type() == QEvent::GraphicsSceneMove) {
QTimer::singleShot(0, this, SLOT(refreshCurrentTarget()) );
}
}
return false;
}
void ItemBackground::resizeEvent(QGraphicsSceneResizeEvent *)
{
d->frameSvg->resizeFrame(size());
}
QVariant ItemBackground::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (d->immediate) {
return value;
}
if (change == ItemVisibleChange) {
bool visible = value.toBool();
bool retVisible = visible;
if (visible == isVisible() || d->anim->state() == QAbstractAnimation::Stopped) {
retVisible = true;
}
d->fading = true;
d->fadeIn = visible;
if (d->anim->state() != QAbstractAnimation::Stopped) {
d->anim->stop();
}
d->anim->setDuration(250);
d->anim->start();
return retVisible;
}
return value;
}
void ItemBackground::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
if (qFuzzyCompare(d->opacity, (qreal)1.0)) {
d->frameSvg->paintFrame(painter, option->rect.topLeft());
} else if (qFuzzyCompare(d->opacity+1, (qreal)1.0)) {
return;
} else {
QPixmap framePix = d->frameSvg->framePixmap();
QPainter bufferPainter(&framePix);
bufferPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
bufferPainter.fillRect(framePix.rect(), QColor(0, 0, 0, 255 * d->opacity));
bufferPainter.end();
painter->drawPixmap(framePix.rect(), framePix, framePix.rect());
}
}
void ItemBackground::setAnimationUpdate(qreal progress)
{
d->animationUpdate(progress);
}
qreal ItemBackground::animationUpdate() const
{
return d->opacity;
}
void ItemBackgroundPrivate::animationUpdate(qreal progress)
{
if (progress == 1) {
if ((!fading) || (fadeIn)) {
emit q->targetReached(newGeometry);
if (target) {
emit q->targetItemReached(target);
}
}
}
if (fading) {
opacity = fadeIn?progress:1-progress;
if (!fadeIn && qFuzzyCompare(opacity+1, (qreal)1.0)) {
immediate = true;
q->hide();
immediate = false;
}
} else if (oldGeometry != newGeometry) {
q->setGeometry(oldGeometry.x() + (newGeometry.x() - oldGeometry.x()) * progress,
oldGeometry.y() + (newGeometry.y() - oldGeometry.y()) * progress,
oldGeometry.width() + (newGeometry.width() - oldGeometry.width()) * progress,
oldGeometry.height() + (newGeometry.height() - oldGeometry.height()) * progress);
}
q->update();
emit q->animationStep(progress);
}
void ItemBackgroundPrivate::targetDestroyed(QObject*)
{
target = 0;
q->setTargetItem(0);
}
void ItemBackgroundPrivate::frameSvgChanged()
{
qreal l, t, r, b;
frameSvg->getMargins(l, t, r, b);
q->setContentsMargins(l, t, r, b);
q->update();
emit q->appearanceChanged();
}
void ItemBackgroundPrivate::refreshCurrentTarget()
{
q->setTargetItem(target);
}
} // Plasma namespace
#include "moc_itembackground.cpp"

View file

@ -1,122 +0,0 @@
/***************************************************************************
* Copyright 2009 by Alessandro Diaferia <alediaferia@gmail.com> *
* Copyright 2009 by Marco Martin <notmart@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License as *
* published by the Free Software Foundation; either version 2, 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, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#ifndef ITEMBACKGROUND_H
#define ITEMBACKGROUND_H
#include <QtGui/QGraphicsWidget>
#include <plasma/plasma_export.h>
/**
* @class ItemBackground plasma/widgets/itembackground.h
*
* @short a background for QGraphicsWidget based item views with animation effects
*
* @since 4.4
*/
namespace Plasma {
class FrameSvg;
class ItemBackgroundPrivate;
class PLASMA_EXPORT ItemBackground : public QGraphicsWidget
{
Q_OBJECT
Q_PROPERTY(QRectF target READ target WRITE setTarget)
Q_PROPERTY(QGraphicsItem* targetItem READ targetItem WRITE setTargetItem)
Q_PROPERTY(qreal animationUpdate READ animationUpdate WRITE setAnimationUpdate)
public:
ItemBackground(QGraphicsWidget *parent = 0);
~ItemBackground();
/**
* Sets a new target geometry we want at the end of animation
*
* @param newGeometry the final geometry target
*/
void setTarget(const QRectF &newGeometry);
/**
* @return the current target rect; may be empty if there is no target currently set
*/
QRectF target() const;
/**
* set the ItemBackground geometry to be the target geometry, plus the ItemBackground margins
*/
void setTargetItem(QGraphicsItem *target);
/**
* @return the target item, if any
*/
QGraphicsItem *targetItem() const;
/**
* @reimp from QGraphicsWidget
*/
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
Q_SIGNALS:
/**
* Emitted when the visual layout and appearance changes. Useful for synchronizing
* content margins.
*/
void appearanceChanged();
/**
* Emitted at each animation frame. Useful for synchronizing item animations
*/
void animationStep(qreal progress);
/**
* Emitted when the target has been reached. Useful to consider this instead of
* the corresponding hoverEnterEvent;
*/
void targetReached(QRectF);
/**
* Emitted when the target has been reached. Useful to consider this instead of
* the corresponding hoverEnterEvent;
*/
void targetItemReached(QGraphicsItem *);
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
bool eventFilter(QObject *watched, QEvent *event);
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
void resizeEvent(QGraphicsSceneResizeEvent *);
private:
void setAnimationUpdate(qreal progress);
qreal animationUpdate() const;
private:
Q_PRIVATE_SLOT(d, void targetDestroyed(QObject*))
Q_PRIVATE_SLOT(d, void frameSvgChanged())
Q_PRIVATE_SLOT(d, void refreshCurrentTarget())
friend class ItemBackgroundPrivate;
ItemBackgroundPrivate * const d;
};
}
#endif