Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Multimedia
Kdenlive
Commits
5bd4e959
Commit
5bd4e959
authored
May 17, 2020
by
Jean-Baptiste Mardelle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix keyframe view imprecision on high zoom
parent
18e3e6d5
Pipeline
#20320
passed with stage
in 9 minutes and 25 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
16 additions
and
12 deletions
+16
-12
src/assets/keyframes/view/keyframeview.cpp
src/assets/keyframes/view/keyframeview.cpp
+13
-11
src/assets/keyframes/view/keyframeview.hpp
src/assets/keyframes/view/keyframeview.hpp
+2
-0
src/definitions.h
src/definitions.h
+1
-1
No files found.
src/assets/keyframes/view/keyframeview.cpp
View file @
5bd4e959
...
...
@@ -39,6 +39,8 @@ KeyframeView::KeyframeView(std::shared_ptr<KeyframeModelList> model, int duratio
,
m_currentKeyframeOriginal
(
-
1
)
,
m_hoverKeyframe
(
-
1
)
,
m_scale
(
1
)
,
m_zoomFactor
(
1
)
,
m_zoomStart
(
0
)
,
m_zoomHandle
(
0
,
1
)
,
m_hoverZoomIn
(
false
)
,
m_hoverZoomOut
(
false
)
...
...
@@ -187,7 +189,7 @@ void KeyframeView::mousePressEvent(QMouseEvent *event)
bool
ok
;
GenTime
position
(
pos
+
offset
,
pCore
->
getCurrentFps
());
auto
keyframe
=
m_model
->
getClosestKeyframe
(
position
,
&
ok
);
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
<
ceil
(
m_lineHeight
/
1.5
))
{
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
*
m_zoomFactor
<
QApplication
::
startDragDistance
(
))
{
m_currentKeyframeOriginal
=
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
offset
;
// Select and seek to keyframe
m_currentKeyframe
=
m_currentKeyframeOriginal
;
...
...
@@ -282,7 +284,7 @@ void KeyframeView::mouseMoveEvent(QMouseEvent *event)
if
(
event
->
y
()
<
m_lineHeight
)
{
bool
ok
;
auto
keyframe
=
m_model
->
getClosestKeyframe
(
position
,
&
ok
);
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
<
ceil
(
m_lineHeight
/
1.5
))
{
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
*
m_zoomFactor
<
QApplication
::
startDragDistance
(
))
{
m_hoverKeyframe
=
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
offset
;
setCursor
(
Qt
::
PointingHandCursor
);
m_hoverZoomIn
=
false
;
...
...
@@ -355,7 +357,7 @@ void KeyframeView::mouseDoubleClickEvent(QMouseEvent *event)
GenTime
position
(
pos
+
offset
,
pCore
->
getCurrentFps
());
bool
ok
;
auto
keyframe
=
m_model
->
getClosestKeyframe
(
position
,
&
ok
);
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
<
ceil
(
m_lineHeight
/
1.5
))
{
if
(
ok
&&
qAbs
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
-
pos
-
offset
)
*
m_scale
*
m_zoomFactor
<
QApplication
::
startDragDistance
(
))
{
if
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
!=
offset
)
{
m_model
->
removeKeyframe
(
keyframe
.
first
);
if
(
keyframe
.
first
.
frames
(
pCore
->
getCurrentFps
())
==
m_currentKeyframe
+
offset
)
{
...
...
@@ -399,9 +401,9 @@ void KeyframeView::paintEvent(QPaintEvent *event)
// p.translate(0, m_lineHeight);
int
headOffset
=
m_lineHeight
/
2
;
int
offset
=
pCore
->
getItemIn
(
m_model
->
getOwnerId
());
double
zoomStart
=
m_zoomHandle
.
x
()
*
(
width
()
-
2
*
m_offset
);
m_
zoomStart
=
m_zoomHandle
.
x
()
*
(
width
()
-
2
*
m_offset
);
double
zoomEnd
=
m_zoomHandle
.
y
()
*
(
width
()
-
2
*
m_offset
);
double
zoomFactor
=
(
width
()
-
2
*
m_offset
)
/
(
zoomEnd
-
zoomStart
);
m_
zoomFactor
=
(
width
()
-
2
*
m_offset
)
/
(
zoomEnd
-
m_
zoomStart
);
/*
* keyframes
...
...
@@ -415,11 +417,11 @@ void KeyframeView::paintEvent(QPaintEvent *event)
p
.
setBrush
(
m_colKeyframe
);
}
double
scaledPos
=
pos
*
m_scale
;
if
(
scaledPos
<
zoomStart
||
scaledPos
>
zoomEnd
)
{
if
(
scaledPos
<
m_
zoomStart
||
scaledPos
>
zoomEnd
)
{
continue
;
}
scaledPos
-=
zoomStart
;
scaledPos
*=
zoomFactor
;
scaledPos
-=
m_
zoomStart
;
scaledPos
*=
m_
zoomFactor
;
scaledPos
+=
m_offset
;
p
.
drawLine
(
QPointF
(
scaledPos
,
headOffset
),
QPointF
(
scaledPos
,
m_lineHeight
-
1
));
switch
(
keyframe
.
second
.
first
)
{
...
...
@@ -454,9 +456,9 @@ void KeyframeView::paintEvent(QPaintEvent *event)
*/
if
(
m_position
>=
0
&&
m_position
<
m_duration
)
{
double
scaledPos
=
m_position
*
m_scale
;
if
(
scaledPos
>=
zoomStart
&&
scaledPos
<=
zoomEnd
)
{
scaledPos
-=
zoomStart
;
scaledPos
*=
zoomFactor
;
if
(
scaledPos
>=
m_
zoomStart
&&
scaledPos
<=
zoomEnd
)
{
scaledPos
-=
m_
zoomStart
;
scaledPos
*=
m_
zoomFactor
;
scaledPos
+=
m_offset
;
QPolygon
pa
(
3
);
int
cursorwidth
=
(
m_zoomHeight
-
m_lineHeight
)
/
1.8
;
...
...
src/assets/keyframes/view/keyframeview.hpp
View file @
5bd4e959
...
...
@@ -76,6 +76,8 @@ private:
int
m_zoomHeight
;
int
m_offset
;
double
m_scale
;
double
m_zoomFactor
;
double
m_zoomStart
;
/** @brief The zoom factor (start, end - between 0 and 1) */
QPointF
m_zoomHandle
;
QPointF
m_lastZoomHandle
;
...
...
src/definitions.h
View file @
5bd4e959
...
...
@@ -140,7 +140,7 @@ enum MessageType { DefaultMessage, ProcessingJobMessage, OperationCompletedMessa
namespace
BinMessage
{
enum
BinCategory
{
NoMessage
=
0
,
ProfileMessage
,
StreamsMessage
,
InformationMessage
};
}
;
}
enum
TrackType
{
AudioTrack
=
0
,
VideoTrack
=
1
,
AnyTrack
=
2
};
...
...
Write
Preview
Markdown
is supported
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