1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:37:36 +00:00

LibWeb+LibWebView+WebContent: Add Web::Platform::ImageCodecPlugin

This replaces the previous Web::ImageDecoding::Decoder interface.
While we're doing this, also move the SerenityOS implementation of this
interface from LibWebView to WebContent. That means we no longer have to
link with LibImageDecoderClient in applications that use a web view.
This commit is contained in:
Andreas Kling 2022-09-16 15:01:47 +02:00
parent 412b2313f3
commit cd7262ee56
14 changed files with 95 additions and 113 deletions

View file

@ -1,6 +1,5 @@
set(SOURCES
DOMTreeModel.cpp
ImageDecoderClientAdapter.cpp
OutOfProcessWebView.cpp
RequestServerAdapter.cpp
StylePropertiesModel.cpp
@ -16,6 +15,6 @@ set(GENERATED_SOURCES
)
serenity_lib(LibWebView webview)
target_link_libraries(LibWebView LibFileSystemAccessClient LibGfx LibGUI LibImageDecoderClient LibIPC LibProtocol LibWeb)
target_link_libraries(LibWebView LibFileSystemAccessClient LibGfx LibGUI LibIPC LibProtocol LibWeb)
add_subdirectory(DumpLayoutTree)

View file

@ -1,41 +0,0 @@
/*
* Copyright (c) 2022, Dex <dexes.ttp@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibImageDecoderClient/Client.h>
#include <LibWebView/ImageDecoderClientAdapter.h>
namespace WebView {
NonnullRefPtr<ImageDecoderClientAdapter> ImageDecoderClientAdapter::create()
{
return adopt_ref(*new ImageDecoderClientAdapter());
}
Optional<Web::ImageDecoding::DecodedImage> ImageDecoderClientAdapter::decode_image(ReadonlyBytes bytes)
{
if (!m_client) {
m_client = ImageDecoderClient::Client::try_create().release_value_but_fixme_should_propagate_errors();
m_client->on_death = [&] {
m_client = nullptr;
};
}
auto result_or_empty = m_client->decode_image(bytes);
if (!result_or_empty.has_value())
return {};
auto result = result_or_empty.release_value();
Web::ImageDecoding::DecodedImage decoded_image;
decoded_image.is_animated = result.is_animated;
decoded_image.loop_count = result.loop_count;
for (auto const& frame : result.frames) {
decoded_image.frames.empend(move(frame.bitmap), frame.duration);
}
return decoded_image;
}
}

View file

@ -1,32 +0,0 @@
/*
* Copyright (c) 2022, Dex <dexes.ttp@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/NonnullRefPtr.h>
#include <LibWeb/ImageDecoding.h>
namespace ImageDecoderClient {
class Client;
}
namespace WebView {
class ImageDecoderClientAdapter : public Web::ImageDecoding::Decoder {
public:
static NonnullRefPtr<ImageDecoderClientAdapter> create();
virtual ~ImageDecoderClientAdapter() override = default;
virtual Optional<Web::ImageDecoding::DecodedImage> decode_image(ReadonlyBytes) override;
private:
explicit ImageDecoderClientAdapter() = default;
RefPtr<ImageDecoderClient::Client> m_client;
};
}