Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/opentimelineview/ruler_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ def set_time_space_callback(self, time_space):

def mouseMoveEvent(self, mouse_event):
pos = self.mapToScene(mouse_event.pos())
self.setPos(QtCore.QPointF(pos.x(),
self.setPos(QtCore.QPointF(max(pos.x() - track_widgets.CURRENT_ZOOM_LEVEL *
track_widgets.TRACK_NAME_WIDGET_WIDTH, 0),
track_widgets.TIME_SLIDER_HEIGHT -
track_widgets.MARKER_SIZE))
self.update_frame()
Expand Down Expand Up @@ -192,7 +193,9 @@ def map_to_time_space(self, item):
is_tail = False
f = "-?-"

ratio = (self.x() - item.x()) / float(item.rect().width())
ratio = (self.x() - item.x() +
track_widgets.CURRENT_ZOOM_LEVEL *
track_widgets.TRACK_NAME_WIDGET_WIDTH) / float(item.rect().width())

# The 'if' condition should be : ratio < 0 or ration >= 1
# However, we are cheating in order to display the last frame of
Expand Down
22 changes: 9 additions & 13 deletions src/opentimelineview/timeline_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,11 @@ def _add_tracks(self):
if isinstance(self.composition, otio.schema.Stack):
video_tracks = [
t for t in self.composition
if t.kind == otio.schema.TrackKind.Video and list(t)
if t.kind == otio.schema.TrackKind.Video
]
audio_tracks = [
t for t in self.composition
if t.kind == otio.schema.TrackKind.Audio and list(t)
if t.kind == otio.schema.TrackKind.Audio
]
video_tracks.reverse()

Expand All @@ -219,8 +219,7 @@ def _add_tracks(self):
t.kind not in (
otio.schema.TrackKind.Video,
otio.schema.TrackKind.Audio
) and
list(t)
)
)
]
else:
Expand Down Expand Up @@ -463,14 +462,14 @@ def wheelEvent(self, event):
scale_by = 1.0 + float(event.delta()) / 1000
self.scale(scale_by, 1)
zoom_level = 1.0 / self.matrix().m11()
track_widgets.CURRENT_ZOOM_LEVEL = zoom_level

# some items we do want to keep the same visual size. So we need to
# inverse the effect of the zoom
items_to_scale = [
i for i in self.scene().items()
if isinstance(i, track_widgets.BaseItem) or
isinstance(i, track_widgets.Marker) or
isinstance(i, ruler_widget.Ruler)
if (isinstance(i, (track_widgets.BaseItem, track_widgets.Marker,
ruler_widget.Ruler, track_widgets.TimeSlider)))
]

for item in items_to_scale:
Expand Down Expand Up @@ -712,14 +711,11 @@ def frame_all(self):
scaleFactor = self.size().width() / self.sceneRect().width()
self.scale(scaleFactor * zoom_level, 1)
zoom_level = 1.0 / self.matrix().m11()

track_widgets.CURRENT_ZOOM_LEVEL = zoom_level
items_to_scale = [
i for i in self.scene().items()
if (
isinstance(i, track_widgets.BaseItem) or
isinstance(i, track_widgets.Marker) or
isinstance(i, ruler_widget.Ruler)
)
if (isinstance(i, (track_widgets.BaseItem, track_widgets.Marker,
ruler_widget.Ruler, track_widgets.TimeSlider)))
]
# some items we do want to keep the same visual size. So we need to
# inverse the effect of the zoom
Expand Down
67 changes: 60 additions & 7 deletions src/opentimelineview/track_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from PySide2 import QtGui, QtCore, QtWidgets
import opentimelineio as otio


TIME_SLIDER_HEIGHT = 20
MEDIA_TYPE_SEPARATOR_HEIGHT = 5
TRACK_HEIGHT = 45
Expand All @@ -35,6 +34,8 @@
MARKER_SIZE = 10
EFFECT_HEIGHT = (1.0 / 3.0) * TRACK_HEIGHT
HIGHLIGHT_WIDTH = 5
TRACK_NAME_WIDGET_WIDTH = 100.0
CURRENT_ZOOM_LEVEL = 1.0


class BaseItem(QtWidgets.QGraphicsRectItem):
Expand Down Expand Up @@ -67,6 +68,8 @@ def __init__(self, item, timeline_range, *args, **kwargs):
self._set_labels()
self._set_tooltip()

self.x_value = 0.0

def paint(self, *args, **kwargs):
new_args = [args[0],
QtWidgets.QStyleOptionGraphicsItem()] + list(args[2:])
Expand Down Expand Up @@ -185,10 +188,11 @@ def _set_tooltip(self):
self.setToolTip(self.item.name)

def counteract_zoom(self, zoom_level=1.0):
self.setX(self.x_value + TRACK_NAME_WIDGET_WIDTH * zoom_level)
for label in (
self.source_name_label,
self.source_in_label,
self.source_out_label
self.source_name_label,
self.source_in_label,
self.source_out_label
):
label.setTransform(QtGui.QTransform.fromScale(zoom_level, 1.0))

Expand Down Expand Up @@ -230,6 +234,39 @@ def __init__(self, *args, **kwargs):
self.source_name_label.setText('GAP')


class TrackNameItem(BaseItem):

def __init__(self, track, rect, *args, **kwargs):
super(TrackNameItem, self).__init__(None, None, rect,
*args, **kwargs)
track_name = 'Track' if track.name == '' else track.name
if len(track_name) > 7:
track_name = track_name[:7] + '...'
self.source_name_label.setText(track_name + '\n({})'.format(track.kind))
self.source_name_label.setY(
(TRACK_HEIGHT -
self.source_name_label.boundingRect().height()) / 2.0
)
self.setToolTip('{} items'.format(len(track)))

def itemChange(self, change, value):
return super(BaseItem, self).itemChange(change, value)

def _add_markers(self):
return

def _set_labels(self):
return

def _set_tooltip(self):
return

def counteract_zoom(self, zoom_level=1.0):
name_width = self.source_name_label.boundingRect().width()
self.source_name_label.setX(0.5 * (self.boundingRect().width() - name_width))
self.setTransform(QtGui.QTransform.fromScale(zoom_level, 1.0))


class EffectItem(QtWidgets.QGraphicsRectItem):

def __init__(self, item, rect, *args, **kwargs):
Expand Down Expand Up @@ -370,6 +407,16 @@ def __init__(self, track, *args, **kwargs):

def _populate(self):
track_map = self.track.range_of_all_children()
track_name_rect = QtCore.QRectF(
0,
0,
TRACK_NAME_WIDGET_WIDTH,
TRACK_HEIGHT
)
track_name_item = TrackNameItem(self.track, track_name_rect)
track_name_item.setParentItem(self)
track_name_item.setX(0)
track_name_item.counteract_zoom()
for n, item in enumerate(self.track):
timeline_range = track_map[item]

Expand All @@ -396,6 +443,8 @@ def _populate(self):
continue

new_item.setParentItem(self)
new_item.x_value = otio.opentime.to_seconds(
timeline_range.start_time) * TIME_MULTIPLIER
new_item.setX(
otio.opentime.to_seconds(timeline_range.start_time) *
TIME_MULTIPLIER
Expand Down Expand Up @@ -450,12 +499,16 @@ def __init__(self, *args, **kwargs):

def mousePressEvent(self, mouse_event):
pos = self.mapToScene(mouse_event.pos())
self._ruler.setPos(QtCore.QPointF(pos.x(),
TIME_SLIDER_HEIGHT -
MARKER_SIZE))
self._ruler.setPos(QtCore.QPointF(
max(pos.x() - TRACK_NAME_WIDGET_WIDTH * CURRENT_ZOOM_LEVEL, 0),
TIME_SLIDER_HEIGHT -
MARKER_SIZE))
self._ruler.update_frame()

super(TimeSlider, self).mousePressEvent(mouse_event)

def add_ruler(self, ruler):
self._ruler = ruler

def counteract_zoom(self, zoom_level=1.0):
self.setX(zoom_level * TRACK_NAME_WIDGET_WIDTH)