mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Fix semi-transparent .webp in media viewer.
This commit is contained in:
parent
7059336ff0
commit
4e0355d09f
6 changed files with 11 additions and 3 deletions
|
@ -183,7 +183,7 @@ void OverlayWidget::RendererGL::paintTransformedVideoFrame(
|
||||||
}
|
}
|
||||||
if (data.format == Streaming::FrameFormat::ARGB32) {
|
if (data.format == Streaming::FrameFormat::ARGB32) {
|
||||||
Assert(!data.original.isNull());
|
Assert(!data.original.isNull());
|
||||||
paintTransformedStaticContent(data.original, geometry, false);
|
paintTransformedStaticContent(data.original, geometry, false, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Assert(data.format == Streaming::FrameFormat::YUV420);
|
Assert(data.format == Streaming::FrameFormat::YUV420);
|
||||||
|
@ -237,12 +237,14 @@ void OverlayWidget::RendererGL::paintTransformedVideoFrame(
|
||||||
_yuv420Program->setUniformValue("u_texture", GLint(1));
|
_yuv420Program->setUniformValue("u_texture", GLint(1));
|
||||||
_yuv420Program->setUniformValue("v_texture", GLint(2));
|
_yuv420Program->setUniformValue("v_texture", GLint(2));
|
||||||
|
|
||||||
|
toggleBlending(false);
|
||||||
paintTransformedContent(&*_yuv420Program, geometry);
|
paintTransformedContent(&*_yuv420Program, geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayWidget::RendererGL::paintTransformedStaticContent(
|
void OverlayWidget::RendererGL::paintTransformedStaticContent(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
ContentGeometry geometry,
|
ContentGeometry geometry,
|
||||||
|
bool semiTransparent,
|
||||||
bool fillTransparentBackground) {
|
bool fillTransparentBackground) {
|
||||||
Expects(image.isNull()
|
Expects(image.isNull()
|
||||||
|| image.format() == QImage::Format_RGB32
|
|| image.format() == QImage::Format_RGB32
|
||||||
|
@ -300,6 +302,7 @@ void OverlayWidget::RendererGL::paintTransformedStaticContent(
|
||||||
}
|
}
|
||||||
program->setUniformValue("s_texture", GLint(0));
|
program->setUniformValue("s_texture", GLint(0));
|
||||||
|
|
||||||
|
toggleBlending(semiTransparent && !fillTransparentBackground);
|
||||||
paintTransformedContent(&*program, geometry);
|
paintTransformedContent(&*program, geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +344,6 @@ void OverlayWidget::RendererGL::paintTransformedContent(
|
||||||
|
|
||||||
program->setUniformValue("viewport", _uniformViewport);
|
program->setUniformValue("viewport", _uniformViewport);
|
||||||
|
|
||||||
toggleBlending(false);
|
|
||||||
FillTexturedRectangle(*_f, &*program);
|
FillTexturedRectangle(*_f, &*program);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ private:
|
||||||
void paintTransformedStaticContent(
|
void paintTransformedStaticContent(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
ContentGeometry geometry,
|
ContentGeometry geometry,
|
||||||
|
bool semiTransparent,
|
||||||
bool fillTransparentBackground) override;
|
bool fillTransparentBackground) override;
|
||||||
void paintTransformedContent(
|
void paintTransformedContent(
|
||||||
not_null<QOpenGLShaderProgram*> program,
|
not_null<QOpenGLShaderProgram*> program,
|
||||||
|
|
|
@ -77,6 +77,7 @@ void OverlayWidget::RendererSW::paintTransformedVideoFrame(
|
||||||
void OverlayWidget::RendererSW::paintTransformedStaticContent(
|
void OverlayWidget::RendererSW::paintTransformedStaticContent(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
ContentGeometry geometry,
|
ContentGeometry geometry,
|
||||||
|
bool semiTransparent,
|
||||||
bool fillTransparentBackground) {
|
bool fillTransparentBackground) {
|
||||||
const auto rotation = int(geometry.rotation);
|
const auto rotation = int(geometry.rotation);
|
||||||
const auto rect = TransformRect(geometry.rect, rotation);
|
const auto rect = TransformRect(geometry.rect, rotation);
|
||||||
|
|
|
@ -26,6 +26,7 @@ private:
|
||||||
void paintTransformedStaticContent(
|
void paintTransformedStaticContent(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
ContentGeometry geometry,
|
ContentGeometry geometry,
|
||||||
|
bool semiTransparent,
|
||||||
bool fillTransparentBackground) override;
|
bool fillTransparentBackground) override;
|
||||||
void paintTransformedImage(
|
void paintTransformedImage(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
|
|
|
@ -18,6 +18,7 @@ public:
|
||||||
virtual void paintTransformedStaticContent(
|
virtual void paintTransformedStaticContent(
|
||||||
const QImage &image,
|
const QImage &image,
|
||||||
ContentGeometry geometry,
|
ContentGeometry geometry,
|
||||||
|
bool semiTransparent,
|
||||||
bool fillTransparentBackground) = 0;
|
bool fillTransparentBackground) = 0;
|
||||||
virtual void paintRadialLoading(
|
virtual void paintRadialLoading(
|
||||||
QRect inner,
|
QRect inner,
|
||||||
|
|
|
@ -627,7 +627,8 @@ bool OverlayWidget::contentShown() const {
|
||||||
|
|
||||||
bool OverlayWidget::opaqueContentShown() const {
|
bool OverlayWidget::opaqueContentShown() const {
|
||||||
return contentShown()
|
return contentShown()
|
||||||
&& (!_document
|
&& (!_staticContentTransparent
|
||||||
|
|| !_document
|
||||||
|| (!_document->isVideoMessage() && !_document->sticker()));
|
|| (!_document->isVideoMessage() && !_document->sticker()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3268,6 +3269,7 @@ void OverlayWidget::paint(not_null<Renderer*> renderer) {
|
||||||
renderer->paintTransformedStaticContent(
|
renderer->paintTransformedStaticContent(
|
||||||
_staticContent,
|
_staticContent,
|
||||||
contentGeometry(),
|
contentGeometry(),
|
||||||
|
_staticContentTransparent,
|
||||||
fillTransparentBackground);
|
fillTransparentBackground);
|
||||||
}
|
}
|
||||||
paintRadialLoading(renderer);
|
paintRadialLoading(renderer);
|
||||||
|
|
Loading…
Add table
Reference in a new issue