Skip to content

Commit

Permalink
video clips are working, need to test ozmartian#3
Browse files Browse the repository at this point in the history
  • Loading branch information
morzhakovanton committed Feb 7, 2024
1 parent f24dae3 commit d558ce6
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 34 deletions.
4 changes: 3 additions & 1 deletion vidcutter/video_labeling_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,13 +349,15 @@ def speedDown(self):
@pyqtSlot()
def toolbarMinus(self):
self.scalableTimeline.factor -= 1
self.scalableTimeline.repaint()
self.timelineFactorLabel.setText(str(self.scalableTimeline.factor))
if self.parent.isEnabled() and self.mediaAvailable:
self.renderSliderVideoClips()

@pyqtSlot()
def toolbarPlus(self):
self.scalableTimeline.factor += 1
self.scalableTimeline.repaint()
self.timelineFactorLabel.setText(str(self.scalableTimeline.factor))


Expand Down Expand Up @@ -754,9 +756,9 @@ def loadMedia(self, item) -> None:
self.videoService.setMedia(self.currentMedia)

self.scalableTimeline.setEnabled(True)
self.scalableTimeline.factor = 1
self.scalableTimeline.currentRectangleIndex = -1
self.scalableTimeline.setFocus()
self.scalableTimeline.factor = 1

self.mediaAvailable = True
self.timelineFactorLabel.setStyleSheet("font-weight: bold; color: light grey")
Expand Down
6 changes: 5 additions & 1 deletion vidcutter/widgets/scalable_timeline_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def factor(self, value: int) -> None:
self.factor_ = TimeLine.clip(value, 1, self.maximumFactor_)
self.timeline.setFixedWidth(self.factor_ * self.baseWidth_ - 2)
self.timeline.updateClips()
self.timeline.repaint()
# self.repaint()

@property
def maximumFactor(self) -> int:
Expand Down Expand Up @@ -99,6 +99,10 @@ def update(self) -> None:
self.timeline.update()
super().update()

def repaint(self):
self.timeline.repaint()
super().repaint()

def renderVideoClips(self, clips: list[VideoItemClip]) -> None:
self.timeline.clearRegions()
for videoClip in clips:
Expand Down
76 changes: 44 additions & 32 deletions vidcutter/widgets/timeline_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,32 @@ def addClip(self, start: float, end: float, visibility=2) -> None:
self.clipsVisibility_.append(visibility)
self.update()

def setClipVisibility(self, index: int, state):
if len(self.clipsVisibility_) > 0:
self.clipsVisibility_[index] = state
self.repaint()

def repaint(self):
self.pointerPixelPosition = self._secondsToPixelPosition(self.pointerSecondsPosition)
super().repaint()

def paintEvent(self, event):
opt = QStyleOptionSlider()
painter = QPainter()
painter.begin(self)
# painter.setRenderHint(QPainter.Antialiasing)
self._drawFrame(painter)
if self.isEnabled():
painter.setFont(self.font)
self._drawTicks(painter)
self._drawSlider(painter)
self._drawClips(painter, opt)
if not self.freeCursorOnSide:
return
self._drawCLipsEditMode_(painter)

painter.end()

def _drawTicks(self, painter: QStylePainter):
scale = self.getScale()
y = self.rect().top() + self.sliderAreaTopOffset + self.sliderAreaHeight + 8
Expand Down Expand Up @@ -245,32 +271,6 @@ def _drawCLipsEditMode_(self, painter: QStylePainter):
painter.setRenderHints(QPainter.HighQualityAntialiasing)
painter.drawRoundedRect(self.clipsRectangles_[self.currentRectangleIndex], 2, 2)

def repaint(self):
self.pointerPixelPosition = self._secondsToPixelPosition(self.pointerSecondsPosition)
super().repaint()

def paintEvent(self, event):
opt = QStyleOptionSlider()
painter = QPainter()
painter.begin(self)
# painter.setRenderHint(QPainter.Antialiasing)
self._drawFrame(painter)
if self.isEnabled():
painter.setFont(self.font)
self._drawTicks(painter)
self._drawSlider(painter)
self._drawClips(painter, opt)
if not self.freeCursorOnSide:
return
self._drawCLipsEditMode_(painter)

painter.end()

def setClipVisibility(self, index: int, state):
if len(self.clipsVisibility_) > 0:
self.clipsVisibility_[index] = state
self.repaint()

# Mouse movement
def _pixelPositionToSeconds(self, pixelPosition: int) -> float:
return (pixelPosition - self.sliderAreaHorizontalOffset) * self.getScale()
Expand Down Expand Up @@ -308,23 +308,35 @@ def mouseMoveEvent(self, event: QMouseEvent):
self.update()
# Mouse release

def _mousePressControlEvent(self):
pass
def _mousePressControlEvent(self, event: QMouseEvent):
self.dragPosition = event.pos()
self.dragRectPosition = self.clipsRectangles_[self.currentRectangleIndex].topLeft()
side = self.mouseCursorState(event.pos())
if side == self.CursorStates.cursorOnBeginSide:
self.state = self.RectangleEditState.beginSideEdit
elif side == self.CursorStates.cursorOnEndSide:
self.state = self.RectangleEditState.endSideEdit
elif side == self.CursorStates.cursorIsInside:
self.state = self.RectangleEditState.rectangleMove

def _mousePressAltEvent(self):
pass
self.clicking = False

def _mousePressLeftButtonEvent(self):
def _mousePressAltEvent(self, event: QMouseEvent):
pass

def _mousePressLeftButtonEvent(self, event: QMouseEvent):
new_position = self._pixelPositionToSeconds(event.x())
self.parent.parent.setPosition(new_position)
self.parent.parent.parent.mousePressEvent(event)

def mousePressEvent(self, event: QMouseEvent):
if not self.isIn:
super().mousePressEvent(event)
return

modifierPressed = QApplication.keyboardModifiers()
if (modifierPressed & Qt.ControlModifier) == Qt.ControlModifier and event.button() == Qt.LeftButton:
# event.accept()re
self._mousePressControlEvent(event)
self.clicking = False
elif (modifierPressed & Qt.AltModifier) == Qt.AltModifier and event.button() == Qt.LeftButton:
index = self.mouseCursorClipIndex(event.pos())
Expand Down

0 comments on commit d558ce6

Please sign in to comment.