From 0d3df824e37e70ccd7420e1b1e9be3277706b132 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 12 May 2023 10:07:37 +0400 Subject: [PATCH] Apply stories fade in raster renderer. --- .../media/view/media_view_overlay_raster.cpp | 69 ++++++++++--------- .../media/view/media_view_overlay_raster.h | 5 +- .../media/view/media_view_overlay_widget.cpp | 10 +-- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_raster.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_raster.cpp index 9a345e3d7..d6d24e1e8 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_raster.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_raster.cpp @@ -16,14 +16,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Media::View { OverlayWidget::RendererSW::RendererSW(not_null owner) - : _owner(owner) - , _transparentBrush(style::TransparentPlaceholder()) { +: _owner(owner) +, _transparentBrush(style::TransparentPlaceholder()) { } void OverlayWidget::RendererSW::paintFallback( - Painter &&p, - const QRegion &clip, - Ui::GL::Backend backend) { + Painter &&p, + const QRegion &clip, + Ui::GL::Backend backend) { _p = &p; _clip = &clip; _clipOuter = clip.boundingRect(); @@ -49,8 +49,8 @@ void OverlayWidget::RendererSW::paintBackground() { } QRect OverlayWidget::RendererSW::TransformRect( - QRectF geometry, - int rotation) { + QRectF geometry, + int rotation) { const auto center = geometry.center(); const auto rect = ((rotation % 180) == 90) ? QRectF( @@ -67,7 +67,7 @@ QRect OverlayWidget::RendererSW::TransformRect( } void OverlayWidget::RendererSW::paintTransformedVideoFrame( - ContentGeometry geometry) { + ContentGeometry geometry) { Expects(_owner->_streamed != nullptr); const auto rotation = int(geometry.rotation); @@ -76,15 +76,15 @@ void OverlayWidget::RendererSW::paintTransformedVideoFrame( return; } paintTransformedImage(_owner->videoFrame(), rect, rotation); - paintControlsFade(rect, geometry.controlsOpacity); + paintControlsFade(rect, geometry.controlsOpacity, geometry.fade); } void OverlayWidget::RendererSW::paintTransformedStaticContent( - const QImage &image, - ContentGeometry geometry, - bool semiTransparent, - bool fillTransparentBackground, - int index) { + const QImage &image, + ContentGeometry geometry, + bool semiTransparent, + bool fillTransparentBackground, + int index) { const auto rotation = int(geometry.rotation); const auto rect = TransformRect(geometry.rect, rotation); if (!rect.intersects(_clipOuter)) { @@ -97,12 +97,19 @@ void OverlayWidget::RendererSW::paintTransformedStaticContent( if (!image.isNull()) { paintTransformedImage(image, rect, rotation); } - paintControlsFade(rect, geometry.controlsOpacity); + paintControlsFade(rect, geometry.controlsOpacity, geometry.fade); } void OverlayWidget::RendererSW::paintControlsFade( - QRect geometry, - float64 opacity) { + QRect geometry, + float64 opacity, + float64 fullFade) { + if (fullFade > 0.) { + _p->setOpacity(fullFade); + _p->fillRect(geometry, Qt::black); + opacity *= 1. - fullFade; + } + _p->setOpacity(opacity); _p->setClipRect(geometry); const auto width = _owner->width(); @@ -136,9 +143,9 @@ void OverlayWidget::RendererSW::paintControlsFade( } void OverlayWidget::RendererSW::paintTransformedImage( - const QImage &image, - QRect rect, - int rotation) { + const QImage &image, + QRect rect, + int rotation) { PainterHighQualityEnabler hq(*_p); if (UsePainterRotation(rotation)) { if (rotation) { @@ -155,9 +162,9 @@ void OverlayWidget::RendererSW::paintTransformedImage( } void OverlayWidget::RendererSW::paintRadialLoading( - QRect inner, - bool radial, - float64 radialOpacity) { + QRect inner, + bool radial, + float64 radialOpacity) { _owner->paintRadialLoadingContent(*_p, inner, radial, radialOpacity); } @@ -166,8 +173,8 @@ void OverlayWidget::RendererSW::paintThemePreview(QRect outer) { } void OverlayWidget::RendererSW::paintDocumentBubble( - QRect outer, - QRect icon) { + QRect outer, + QRect icon) { if (outer.intersects(_clipOuter)) { _owner->paintDocumentBubbleContent(*_p, outer, icon, _clipOuter); if (icon.intersects(_clipOuter)) { @@ -186,12 +193,12 @@ void OverlayWidget::RendererSW::paintControlsStart() { } void OverlayWidget::RendererSW::paintControl( - OverState control, - QRect over, - float64 overOpacity, - QRect inner, - float64 innerOpacity, - const style::icon &icon) { + OverState control, + QRect over, + float64 overOpacity, + QRect inner, + float64 innerOpacity, + const style::icon &icon) { if (!over.isEmpty() && !over.intersects(_clipOuter)) { return; } diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_raster.h b/Telegram/SourceFiles/media/view/media_view_overlay_raster.h index e1b6ca453..5c6a7880a 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_raster.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_raster.h @@ -33,7 +33,10 @@ private: const QImage &image, QRect rect, int rotation); - void paintControlsFade(QRect geometry, float64 opacity); + void paintControlsFade( + QRect geometry, + float64 opacity, + float64 fullFade); void paintRadialLoading( QRect inner, bool radial, diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index f154a93b8..33526046c 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -4011,10 +4011,12 @@ void OverlayWidget::storiesTogglePaused(bool paused) { || !_streamed->instance.player().active()) { return; } else if (_streamed->instance.player().paused()) { - _streamed->instance.resume(); - updatePlaybackState(); - playbackPauseMusic(); - } else { + if (!paused) { + _streamed->instance.resume(); + updatePlaybackState(); + playbackPauseMusic(); + } + } else if (paused) { _streamed->instance.pause(); updatePlaybackState(); }