mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 12:47:45 +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:
parent
412b2313f3
commit
cd7262ee56
14 changed files with 95 additions and 113 deletions
|
@ -12,6 +12,7 @@ set(SOURCES
|
|||
ConsoleGlobalObject.cpp
|
||||
EventLoopPluginSerenity.cpp
|
||||
FontPluginSerenity.cpp
|
||||
ImageCodecPluginSerenity.cpp
|
||||
PageHost.cpp
|
||||
TimerSerenity.cpp
|
||||
WebContentClientEndpoint.h
|
||||
|
@ -21,5 +22,5 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_bin(WebContent)
|
||||
target_link_libraries(WebContent LibCore LibIPC LibGfx LibWebView LibWeb LibMain)
|
||||
target_link_libraries(WebContent LibCore LibIPC LibGfx LibImageDecoderClient LibWebView LibWeb LibMain)
|
||||
link_with_locale_data(WebContent)
|
||||
|
|
40
Userland/Services/WebContent/ImageCodecPluginSerenity.cpp
Normal file
40
Userland/Services/WebContent/ImageCodecPluginSerenity.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Dex♪ <dexes.ttp@gmail.com>
|
||||
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "ImageCodecPluginSerenity.h"
|
||||
#include <LibImageDecoderClient/Client.h>
|
||||
|
||||
namespace WebContent {
|
||||
|
||||
ImageCodecPluginSerenity::ImageCodecPluginSerenity() = default;
|
||||
ImageCodecPluginSerenity::~ImageCodecPluginSerenity() = default;
|
||||
|
||||
Optional<Web::Platform::DecodedImage> ImageCodecPluginSerenity::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::Platform::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;
|
||||
}
|
||||
|
||||
}
|
30
Userland/Services/WebContent/ImageCodecPluginSerenity.h
Normal file
30
Userland/Services/WebContent/ImageCodecPluginSerenity.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Dex♪ <dexes.ttp@gmail.com>
|
||||
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/RefPtr.h>
|
||||
#include <LibWeb/Platform/ImageCodecPlugin.h>
|
||||
|
||||
namespace ImageDecoderClient {
|
||||
class Client;
|
||||
}
|
||||
|
||||
namespace WebContent {
|
||||
|
||||
class ImageCodecPluginSerenity final : public Web::Platform::ImageCodecPlugin {
|
||||
public:
|
||||
ImageCodecPluginSerenity();
|
||||
virtual ~ImageCodecPluginSerenity() override;
|
||||
|
||||
virtual Optional<Web::Platform::DecodedImage> decode_image(ReadonlyBytes) override;
|
||||
|
||||
private:
|
||||
RefPtr<ImageDecoderClient::Client> m_client;
|
||||
};
|
||||
|
||||
}
|
|
@ -6,16 +6,15 @@
|
|||
|
||||
#include "EventLoopPluginSerenity.h"
|
||||
#include "FontPluginSerenity.h"
|
||||
#include "ImageCodecPluginSerenity.h"
|
||||
#include <LibCore/EventLoop.h>
|
||||
#include <LibCore/LocalServer.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibIPC/SingleServer.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibWeb/ImageDecoding.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
#include <LibWeb/Platform/EventLoopPlugin.h>
|
||||
#include <LibWeb/WebSockets/WebSocket.h>
|
||||
#include <LibWebView/ImageDecoderClientAdapter.h>
|
||||
#include <LibWebView/RequestServerAdapter.h>
|
||||
#include <LibWebView/WebSocketClientAdapter.h>
|
||||
#include <WebContent/ConnectionFromClient.h>
|
||||
|
@ -32,9 +31,9 @@ ErrorOr<int> serenity_main(Main::Arguments)
|
|||
TRY(Core::System::unveil(nullptr, nullptr));
|
||||
|
||||
Web::Platform::EventLoopPlugin::install(*new WebContent::EventLoopPluginSerenity);
|
||||
Web::Platform::ImageCodecPlugin::install(*new WebContent::ImageCodecPluginSerenity);
|
||||
Web::Platform::FontPlugin::install(*new WebContent::FontPluginSerenity);
|
||||
|
||||
Web::ImageDecoding::Decoder::initialize(WebView::ImageDecoderClientAdapter::create());
|
||||
Web::WebSockets::WebSocketClientManager::initialize(TRY(WebView::WebSocketClientManagerAdapter::try_create()));
|
||||
Web::ResourceLoader::initialize(TRY(WebView::RequestServerAdapter::try_create()));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue