Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
System
Dolphin
Commits
ad9c9558
Commit
ad9c9558
authored
Oct 20, 2020
by
Janet Blackquill
🌈
Committed by
Elvis Angelaccio
Nov 28, 2020
Browse files
[kitemlistview]: Animate rubberband fading out
parent
78c7429a
Pipeline
#42425
passed with stage
in 6 minutes and 51 seconds
Changes
2
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
src/kitemviews/kitemlistview.cpp
View file @
ad9c9558
...
...
@@ -27,6 +27,7 @@
#include <QPropertyAnimation>
#include <QStyleOptionRubberBand>
#include <QTimer>
#include <QVariantAnimation>
namespace
{
...
...
@@ -36,6 +37,11 @@ namespace {
// Delay in ms for triggering the next autoscroll
const
int
RepeatingAutoScrollDelay
=
1000
/
60
;
// Copied from the Kirigami.Units.shortDuration
const
int
RubberFadeSpeed
=
150
;
const
char
*
RubberPropertyName
=
"_kitemviews_rubberBandPosition"
;
}
#ifndef QT_NO_ACCESSIBILITY
...
...
@@ -660,6 +666,30 @@ void KItemListView::paint(QPainter* painter, const QStyleOptionGraphicsItem* opt
{
QGraphicsWidget
::
paint
(
painter
,
option
,
widget
);
for
(
auto
animation
:
qAsConst
(
m_rubberBandAnimations
))
{
QRectF
rubberBandRect
=
animation
->
property
(
RubberPropertyName
).
toRectF
();
const
QPointF
topLeft
=
rubberBandRect
.
topLeft
();
if
(
scrollOrientation
()
==
Qt
::
Vertical
)
{
rubberBandRect
.
moveTo
(
topLeft
.
x
(),
topLeft
.
y
()
-
scrollOffset
());
}
else
{
rubberBandRect
.
moveTo
(
topLeft
.
x
()
-
scrollOffset
(),
topLeft
.
y
());
}
QStyleOptionRubberBand
opt
;
initStyleOption
(
&
opt
);
opt
.
shape
=
QRubberBand
::
Rectangle
;
opt
.
opaque
=
false
;
opt
.
rect
=
rubberBandRect
.
toRect
();
painter
->
save
();
painter
->
setOpacity
(
animation
->
currentValue
().
toReal
());
style
()
->
drawControl
(
QStyle
::
CE_RubberBand
,
&
opt
,
painter
);
painter
->
restore
();
}
if
(
m_rubberBand
->
isActive
())
{
QRectF
rubberBandRect
=
QRectF
(
m_rubberBand
->
startPosition
(),
m_rubberBand
->
endPosition
()).
normalized
();
...
...
@@ -1455,6 +1485,30 @@ void KItemListView::slotRubberBandActivationChanged(bool active)
connect
(
m_rubberBand
,
&
KItemListRubberBand
::
endPositionChanged
,
this
,
&
KItemListView
::
slotRubberBandPosChanged
);
m_skipAutoScrollForRubberBand
=
true
;
}
else
{
QRectF
rubberBandRect
=
QRectF
(
m_rubberBand
->
startPosition
(),
m_rubberBand
->
endPosition
()).
normalized
();
auto
animation
=
new
QVariantAnimation
(
this
);
animation
->
setStartValue
(
1.0
);
animation
->
setEndValue
(
0.0
);
animation
->
setDuration
(
RubberFadeSpeed
);
animation
->
setProperty
(
RubberPropertyName
,
rubberBandRect
);
QEasingCurve
curve
;
curve
.
setType
(
QEasingCurve
::
BezierSpline
);
curve
.
addCubicBezierSegment
(
QPointF
(
0.4
,
0.0
),
QPointF
(
1.0
,
1.0
),
QPointF
(
1.0
,
1.0
));
animation
->
setEasingCurve
(
curve
);
connect
(
animation
,
&
QVariantAnimation
::
valueChanged
,
this
,
[
=
](
const
QVariant
&
)
{
update
();
});
connect
(
animation
,
&
QVariantAnimation
::
finished
,
this
,
[
=
]()
{
m_rubberBandAnimations
.
removeAll
(
animation
);
delete
animation
;
});
animation
->
start
();
m_rubberBandAnimations
<<
animation
;
disconnect
(
m_rubberBand
,
&
KItemListRubberBand
::
startPositionChanged
,
this
,
&
KItemListView
::
slotRubberBandPosChanged
);
disconnect
(
m_rubberBand
,
&
KItemListRubberBand
::
endPositionChanged
,
this
,
&
KItemListView
::
slotRubberBandPosChanged
);
m_skipAutoScrollForRubberBand
=
false
;
...
...
src/kitemviews/kitemlistview.h
View file @
ad9c9558
...
...
@@ -32,6 +32,7 @@ class KItemListWidgetInformant;
class
KItemListWidgetCreatorBase
;
class
QTimer
;
class
QPropertyAnimation
;
class
QVariantAnimation
;
/**
* @brief Represents the view of an item-list.
...
...
@@ -747,6 +748,8 @@ private:
// by KItemListView::showDropIndicator() and KItemListView::hideDropIndicator().
QRectF
m_dropIndicator
;
QList
<
QVariantAnimation
*>
m_rubberBandAnimations
;
friend
class
KItemListContainer
;
// Accesses scrollBarRequired()
friend
class
KItemListHeader
;
// Accesses m_headerWidget
friend
class
KItemListController
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment