示例#1
0
    def initThumbs(self) -> None:
        framesize = self.parent.videoService.framesize()
        thumbsize = QSize(
            VideoService.config.thumbnails['TIMELINE'].height() *
            (framesize.width() / framesize.height()),
            VideoService.config.thumbnails['TIMELINE'].height())
        positions, frametimes = [], []
        thumbs = int(
            math.ceil(
                (self.rect().width() - (self.offset * 2)) / thumbsize.width()))
        for pos in range(thumbs):
            val = QStyle.sliderValueFromPosition(
                self.minimum(), self.maximum(),
                (thumbsize.width() * pos) - self.offset,
                self.rect().width() - (self.offset * 2))
            positions.append(val)
        positions[0] = 1000
        [
            frametimes.append(
                self.parent.delta2QTime(msec).toString(self.parent.timeformat))
            for msec in positions
        ]

        class ThumbWorker(QObject):
            completed = pyqtSignal(list)

            def __init__(self, settings: QSettings, media: str, times: list,
                         size: QSize):
                super(ThumbWorker, self).__init__()
                self.settings = settings
                self.media = media
                self.times = times
                self.size = size

            @pyqtSlot()
            def generate(self):
                frames = list()
                [
                    frames.append(
                        VideoService.captureFrame(self.settings, self.media,
                                                  frame, self.size))
                    for frame in self.times
                ]
                self.completed.emit(frames)

        self.thumbsThread = QThread(self)
        self.thumbsWorker = ThumbWorker(self.parent.settings,
                                        self.parent.currentMedia, frametimes,
                                        thumbsize)
        self.thumbsWorker.moveToThread(self.thumbsThread)
        self.thumbsThread.started.connect(self.parent.sliderWidget.setLoader)
        self.thumbsThread.started.connect(self.thumbsWorker.generate)
        self.thumbsThread.finished.connect(self.thumbsThread.deleteLater,
                                           Qt.DirectConnection)
        self.thumbsWorker.completed.connect(self.buildTimeline)
        self.thumbsWorker.completed.connect(self.thumbsWorker.deleteLater,
                                            Qt.DirectConnection)
        self.thumbsWorker.completed.connect(self.thumbsThread.quit,
                                            Qt.DirectConnection)
        self.thumbsThread.start()
示例#2
0
 def eventFilter(self, obj: QObject, event: QEvent) -> bool:
     if event.type() == QEvent.MouseButtonRelease:
         if self.parentWidget().mediaAvailable:
             self.setValue(
                 QStyle.sliderValueFromPosition(self.minimum(),
                                                self.maximum(), event.x(),
                                                self.width()))
             self.parentWidget().setPosition(self.sliderPosition())
     return super(VideoSlider, self).eventFilter(obj, event)
示例#3
0
 def eventFilter(self, obj: QObject, event: QMouseEvent) -> bool:
     if event.type() == QEvent.MouseButtonRelease and event.button() == Qt.LeftButton:
         if self.parent.mediaAvailable and self.isEnabled():
             newpos = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), event.x() - self.offset,
                                                     self.width() - (self.offset * 2))
             self.setValue(newpos)
             self.parent.setPosition(newpos)
             self.parent.parent.mousePressEvent(event)
     return super(VideoSlider, self).eventFilter(obj, event)
示例#4
0
 def mouseReleaseEvent(self, event):
     if self.rect().contains(event.pos()):
         value = QStyle.sliderValueFromPosition(self.minimum(),
                                                self.maximum(), event.x(),
                                                self.width())
         self.setValue(value)
     else:
         self.close()
     event.accept()
示例#5
0
 def paintEvent(self, event: QPaintEvent) -> None:
     painter = QStylePainter(self)
     opt = QStyleOptionSlider()
     self.initStyleOption(opt)
     font = painter.font()
     font.setPixelSize(10)
     painter.setFont(font)
     if self.tickPosition() != QSlider.NoTicks:
         x = 8
         for i in range(self.minimum(), self.width(), 8):
             if i % 5 == 0:
                 h = 18
                 w = 1
                 z = 13
             else:
                 h = 8
                 w = 1
                 z = 23
             tickcolor = '#8F8F8F' if self.theme == 'dark' else '#444'
             pen = QPen(QColor(tickcolor))
             pen.setWidthF(w)
             painter.setPen(pen)
             if self.tickPosition() in (QSlider.TicksBothSides,
                                        QSlider.TicksAbove):
                 y = self.rect().top() + z
                 painter.drawLine(x, y, x, y + h)
             if self.tickPosition() in (QSlider.TicksBothSides,
                                        QSlider.TicksBelow):
                 y = self.rect().bottom() - z
                 painter.drawLine(x, y, x, y - h)
                 if self.parent.mediaAvailable and i % 15 == 0:
                     painter.setPen(Qt.white if self.theme ==
                                    'dark' else Qt.black)
                     timecode = QStyle.sliderValueFromPosition(
                         self.minimum(), self.maximum(), x - self.offset,
                         self.width() - (self.offset * 2))
                     timecode = self.parent.delta2QTime(timecode).toString(
                         self.parent.runtimeformat)
                     painter.drawText(x + 6, y + 6, timecode)
             if x + 30 > self.width():
                 break
             x += 15
     opt.subControls = QStyle.SC_SliderGroove
     painter.drawComplexControl(QStyle.CC_Slider, opt)
     for rect in self._regions:
         rect.setY(int((self.height() - self._regionHeight) / 2) - 8)
         rect.setHeight(self._regionHeight)
         if self._regions.index(rect) == self._regionSelected:
             brushcolor = QColor(150, 190, 78, 185)
         else:
             brushcolor = QColor(237, 242, 255, 185)
         painter.setBrush(brushcolor)
         painter.setPen(QColor(255, 255, 255, 170))
         painter.drawRect(rect)
     opt.subControls = QStyle.SC_SliderHandle
     painter.drawComplexControl(QStyle.CC_Slider, opt)
示例#6
0
 def eventFilter(self, obj: QObject, event: QEvent):
     if event.type() == QEvent.MouseButtonRelease:
         if self.parentWidget().mediaPlayer.isVideoAvailable(
         ) or self.parentWidget().mediaPlayer.isAudioAvailable():
             self.setValue(
                 QStyle.sliderValueFromPosition(self.minimum(),
                                                self.maximum(), event.x(),
                                                self.width()))
             self.parentWidget().mediaPlayer.setPosition(
                 self.sliderPosition())
     return QWidget.eventFilter(self, obj, event)
示例#7
0
 def eventFilter(self, obj: QObject, event: QEvent) -> bool:
     if event.type() == QEvent.MouseButtonRelease and isinstance(
             obj, VideoSlider):
         if obj.objectName() == 'VideoSlider' and (
                 self.mediaPlayer.isVideoAvailable()
                 or self.mediaPlayer.isAudioAvailable()):
             obj.setValue(
                 QStyle.sliderValueFromPosition(obj.minimum(),
                                                obj.maximum(), event.x(),
                                                obj.width()))
             self.mediaPlayer.setPosition(obj.sliderPosition())
     return QWidget.eventFilter(self, obj, event)
示例#8
0
 def mousePressEvent(self, event):
     self.setValue(
         QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                        event.x(), self.width()))
     # our code relies on `sliderMoved` in order to only trigger on user
     # input and not when we change the slider's value from the code (we
     # update the slider's value every frame as we progress along the
     # replay). Since the user *has* initiated this movement, emit
     # `sliderMoved` to let our code know.
     # TODO This should probably be done via a custom qsignal
     # (userChangedValue) instead of re-purposing an existing one that wasn't
     # meant for that purpose.
     self.sliderMoved.emit(self.value())
示例#9
0
文件: spanslider.py 项目: rhoef/afw
    def _pixelPos2Value(self, pos):

        opt = QtWidgets.QStyleOptionSlider()
        self.initStyleOption(opt)

        gr = self.style().subControlRect(QStyle.CC_Slider, opt, QStyle.SC_SliderGroove, self)

        if self.orientation() == QtCore.Qt.Horizontal:
            min, max = gr.x(), gr.right()
        else:
            min, max = gr.y(), gr.bottom()

        return QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), pos - min, max - min, opt.upsideDown)
示例#10
0
    def pixel_pos_to_range_value(self, pos):
        opt = QStyleOptionSlider()
        self.initStyleOption(opt)
        gr = self.style().subControlRect(QStyle.CC_Slider, opt, QStyle.SC_SliderGroove, self)
        sr = self.style().subControlRect(QStyle.CC_Slider, opt, QStyle.SC_SliderHandle, self)

        if self.orientation() == Qt.Horizontal:
            slider_length = sr.width()
            slider_min = gr.x()
            slider_max = gr.right() - slider_length + 1
        else:
            slider_length = sr.height()
            slider_min = gr.y()
            slider_max = gr.bottom() - slider_length + 1
        pr = pos - sr.center() + sr.topLeft()
        p = pr.x() if self.orientation() == Qt.Horizontal else pr.y()
        return QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), p - slider_min,
                                              slider_max - slider_min, opt.upsideDown)
示例#11
0
    def pixelPosToRangeValue(self, pos):
        opt = QStyleOptionSlider()
        self.initStyleOption(opt)

        gr = self.style().subControlRect(QStyle.CC_Slider, opt,
                                         QStyle.SC_SliderGroove, self)
        sr = self.style().subControlRect(QStyle.CC_Slider, opt,
                                         QStyle.SC_SliderHandle, self)
        if self.orientation() == QtCore.Qt.Horizontal:
            slider_length = sr.width()
            slider_min = gr.x()
            slider_max = gr.right() - slider_length + 1
        else:
            slider_length = sr.height()
            slider_min = gr.y()
            slider_max = gr.bottom() - slider_length + 1

        return QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), pos - slider_min,
                                              slider_max - slider_min, opt.upsideDown)
示例#12
0
 def pixelPosToRangeValue(self, pos):
     option = QStyleOptionSlider()
     self.initStyleOption(option)
     gr = self.style().subControlRect(QStyle.CC_Slider, option,
                                      QStyle.SC_SliderGroove, self)
     sr = self.style().subControlRect(QStyle.CC_Slider, option,
                                      QStyle.SC_SliderHandle, self)
     if self.orientation() == Qt.Horizontal:
         sliderLength = sr.width()
         sliderMin = gr.x()
         sliderMax = gr.right() - sliderLength + 1
     else:
         sliderLength = sr.height()
         sliderMin = gr.y()
         sliderMax = gr.bottom() - sliderLength + 1
     return QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                           pos - sliderMin,
                                           sliderMax - sliderMin,
                                           option.upsideDown)
示例#13
0
    def initThumbs(self) -> None:
        step = QStyle.sliderValueFromPosition(
            self.minimum(), self.maximum(),
            VideoService.ThumbSize.TIMELINE.value.width(),
            self.width() - self.offset)
        index = list(range(self.minimum(), self.maximum(), step))
        frametimes = list()
        for msec in index:
            frametimes.append(
                self.parent.delta2QTime(msec).toString(self.parent.timeformat))

        class ThumbWorker(QObject):
            completed = pyqtSignal(list)

            def __init__(self, media: str, frames: list):
                super(ThumbWorker, self).__init__()
                self.media = media
                self.frames = frames

            def generate(self):
                thumbs = list()
                for frame in self.frames:
                    thumbs.append(
                        VideoService.capture(self.media, frame,
                                             VideoService.ThumbSize.TIMELINE))
                self.completed.emit(thumbs)

        self.thumbsThread = QThread(self)
        self.thumbsWorker = ThumbWorker(self.parent.currentMedia, frametimes)
        self.thumbsWorker.moveToThread(self.thumbsThread)
        self.thumbsThread.started.connect(self.parent.sliderWidget.setLoader)
        self.thumbsThread.started.connect(self.thumbsWorker.generate)
        self.thumbsThread.finished.connect(self.thumbsThread.deleteLater,
                                           Qt.DirectConnection)
        self.thumbsWorker.completed.connect(self.buildTimeline)
        self.thumbsWorker.completed.connect(self.thumbsWorker.deleteLater,
                                            Qt.DirectConnection)
        self.thumbsWorker.completed.connect(self.thumbsThread.quit,
                                            Qt.DirectConnection)
        self.thumbsThread.start()
示例#14
0
    def pixel_post_to_range_value(self, pos):
        """Get value of MousePress coordinates"""
        opt = QStyleOptionSlider()  # parameters needed for drawing a slider
        self.initStyleOption(opt)  # Set Styling parameters from opt
        gr = self.style().subControlRect(QStyle.CC_Slider, opt,
                                         QStyle.SC_SliderGroove,
                                         self)  # groove
        sr = self.style().subControlRect(QStyle.CC_Slider, opt,
                                         QStyle.SC_SliderHandle,
                                         self)  # handle

        if self.orientation() == Qt.Horizontal:
            slider_length = sr.width()  # handle width
            slider_min = gr.x()  # groove start coor (x)
            slider_max = gr.right() - slider_length + 1  # groove max coor (x)
        else:
            slider_length = sr.height()  # handle height
            slider_min = gr.y()  # groove start coor (y)
            slider_max = gr.bottom() - slider_length + 1  # groove max coor (y)
        pr = (pos - sr.center()) + sr.topLeft()  # New Handle center coor
        p = pr.x() if self.orientation() == Qt.Horizontal else pr.y()
        return QStyle.sliderValueFromPosition(
            self.minimum(), self.maximum(), p - slider_min,
            slider_max - slider_min, opt.upsideDown)  # return new Handle pos
示例#15
0
文件: widgets.py 项目: dangmai/looper
 def mousePressEvent(self, ev):
     """ Jump to click position """
     self.setValue(
         QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                        ev.x(), self.width()))
示例#16
0
文件: widgets.py 项目: dangmai/looper
 def mouseMoveEvent(self, ev):
     """ Jump to pointer position while moving """
     self.setValue(
         QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                        ev.x(), self.width()))
示例#17
0
 def mouseMoveEvent(self, event):
     self.setValue(QStyle.sliderValueFromPosition(self.minimum(),
                   self.maximum(), event.x(), self.width()))
示例#18
0
文件: widgets.py 项目: dangmai/looper
 def mouseMoveEvent(self, ev):
     """ Jump to pointer position while moving """
     self.setValue(QStyle.sliderValueFromPosition(
         self.minimum(), self.maximum(), ev.x(), self.width())
     )
示例#19
0
 def mousePressEvent(self, event):
     if event.buttons() == Qt.LeftButton:
         ui.mediaPlayer.setPosition(
             QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                            event.x(), self.width()))
示例#20
0
 def mouseMoveEvent(self, event):
     if event.buttons() == Qt.LeftButton:
         self.setValue(
             QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                            event.x(), self.width()))
 def mousePressEvent(self, event):
     progress = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), event.x(), self.width())
     self.setValue(progress)
     self.should_change_video_position.emit(float(progress) / 1000.0)
示例#22
0
 def mouseMoveEvent(self, event):
     self.setValue(
         QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                        event.x(), self.width()))
     self.sliderMoved.emit((event.x() / self.width()) * self.maximum())
示例#23
0
 def mousePressEvent(self, ev):
     """ Jump to click position """
     value = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                            ev.y(), self.height(), True)
     self.setValue(value)
     self.change_volume(value)
示例#24
0
 def mousePressEvent(self, event):
     self.setValue(QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), event.x(), self.width()))
     self.sliderMoved.emit((event.x() / self.width()) * self.maximum())
 def mousePressEvent(self, event):
     progress = QStyle.sliderValueFromPosition(self.minimum(),
                                               self.maximum(), event.x(),
                                               self.width())
     self.setValue(progress)
     self.should_change_video_position.emit(float(progress) / 1000.0)
示例#26
0
 def mouseMoveEvent(self, ev):
     """ Jump to pointer position while moving """
     value = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                            ev.y(), self.height(), True)
     self.setValue(value)
     self.change_volume(value)
 def mousePressEvent(self, event):
     #Jump to click position
     pos = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                          event.x(), self.width())
     self.setValue(pos)
     self.mediaP.setPosition(pos)
 def mouseMoveEvent(self, event):
     #Jump to pointer position while moving
     pos = QStyle.sliderValueFromPosition(self.minimum(), self.maximum(),
                                          event.x(), self.width())
     self.setValue(pos)
     self.mediaP.setPosition(pos)
示例#29
0
文件: widgets.py 项目: dangmai/looper
 def mousePressEvent(self, ev):
     """ Jump to click position """
     self.setValue(QStyle.sliderValueFromPosition(
         self.minimum(), self.maximum(), ev.x(), self.width())
     )