mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:52:44 +00:00 
			
		
		
		
	 cd7262ee56
			
		
	
	
		cd7262ee56
		
	
	
	
	
		
			
			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.
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * 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;
 | |
| }
 | |
| 
 | |
| }
 |