Fix semi-transparent .webp in media viewer.

This commit is contained in:
John Preston 2021-06-14 15:28:39 +04:00
parent 7059336ff0
commit 4e0355d09f
6 changed files with 11 additions and 3 deletions

View file

@ -183,7 +183,7 @@ void OverlayWidget::RendererGL::paintTransformedVideoFrame(
}
if (data.format == Streaming::FrameFormat::ARGB32) {
Assert(!data.original.isNull());
paintTransformedStaticContent(data.original, geometry, false);
paintTransformedStaticContent(data.original, geometry, false, false);
return;
}
Assert(data.format == Streaming::FrameFormat::YUV420);
@ -237,12 +237,14 @@ void OverlayWidget::RendererGL::paintTransformedVideoFrame(
_yuv420Program->setUniformValue("u_texture", GLint(1));
_yuv420Program->setUniformValue("v_texture", GLint(2));
toggleBlending(false);
paintTransformedContent(&*_yuv420Program, geometry);
}
void OverlayWidget::RendererGL::paintTransformedStaticContent(
const QImage &image,
ContentGeometry geometry,
bool semiTransparent,
bool fillTransparentBackground) {
Expects(image.isNull()
|| image.format() == QImage::Format_RGB32
@ -300,6 +302,7 @@ void OverlayWidget::RendererGL::paintTransformedStaticContent(
}
program->setUniformValue("s_texture", GLint(0));
toggleBlending(semiTransparent && !fillTransparentBackground);
paintTransformedContent(&*program, geometry);
}
@ -341,7 +344,6 @@ void OverlayWidget::RendererGL::paintTransformedContent(
program->setUniformValue("viewport", _uniformViewport);
toggleBlending(false);
FillTexturedRectangle(*_f, &*program);
}

View file

@ -45,6 +45,7 @@ private:
void paintTransformedStaticContent(
const QImage &image,
ContentGeometry geometry,
bool semiTransparent,
bool fillTransparentBackground) override;
void paintTransformedContent(
not_null<QOpenGLShaderProgram*> program,

View file

@ -77,6 +77,7 @@ void OverlayWidget::RendererSW::paintTransformedVideoFrame(
void OverlayWidget::RendererSW::paintTransformedStaticContent(
const QImage &image,
ContentGeometry geometry,
bool semiTransparent,
bool fillTransparentBackground) {
const auto rotation = int(geometry.rotation);
const auto rect = TransformRect(geometry.rect, rotation);

View file

@ -26,6 +26,7 @@ private:
void paintTransformedStaticContent(
const QImage &image,
ContentGeometry geometry,
bool semiTransparent,
bool fillTransparentBackground) override;
void paintTransformedImage(
const QImage &image,

View file

@ -18,6 +18,7 @@ public:
virtual void paintTransformedStaticContent(
const QImage &image,
ContentGeometry geometry,
bool semiTransparent,
bool fillTransparentBackground) = 0;
virtual void paintRadialLoading(
QRect inner,

View file

@ -627,7 +627,8 @@ bool OverlayWidget::contentShown() const {
bool OverlayWidget::opaqueContentShown() const {
return contentShown()
&& (!_document
&& (!_staticContentTransparent
|| !_document
|| (!_document->isVideoMessage() && !_document->sticker()));
}
@ -3268,6 +3269,7 @@ void OverlayWidget::paint(not_null<Renderer*> renderer) {
renderer->paintTransformedStaticContent(
_staticContent,
contentGeometry(),
_staticContentTransparent,
fillTransparentBackground);
}
paintRadialLoading(renderer);