mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:32:46 +00:00 
			
		
		
		
	LibGfx+ImageViewer: Replace ImageDecoder::is_vector() with an enum
That makes it easier to extend to other special frame formats.
This commit is contained in:
		
							parent
							
								
									a47edb4ed1
								
							
						
					
					
						commit
						c997ee7b9d
					
				
					 3 changed files with 11 additions and 4 deletions
				
			
		|  | @ -224,7 +224,7 @@ ErrorOr<void> ViewWidget::try_open_file(String const& path, Core::File& file) | ||||||
|     Vector<Animation::Frame> frames; |     Vector<Animation::Frame> frames; | ||||||
|     // Note: Doing this check only requires reading the header of images
 |     // Note: Doing this check only requires reading the header of images
 | ||||||
|     // (so if the image is not vector graphics it can be still be decoded OOP).
 |     // (so if the image is not vector graphics it can be still be decoded OOP).
 | ||||||
|     if (auto decoder = Gfx::ImageDecoder::try_create_for_raw_bytes(file_data); decoder && decoder->is_vector()) { |     if (auto decoder = Gfx::ImageDecoder::try_create_for_raw_bytes(file_data); decoder && decoder->natural_frame_format() == Gfx::NaturalFrameFormat::Vector) { | ||||||
|         // Use in-process decoding for vector graphics.
 |         // Use in-process decoding for vector graphics.
 | ||||||
|         is_animated = decoder->is_animated(); |         is_animated = decoder->is_animated(); | ||||||
|         loop_count = decoder->loop_count(); |         loop_count = decoder->loop_count(); | ||||||
|  |  | ||||||
|  | @ -28,6 +28,11 @@ struct VectorImageFrameDescriptor { | ||||||
|     int duration { 0 }; |     int duration { 0 }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | enum class NaturalFrameFormat { | ||||||
|  |     RGB, | ||||||
|  |     Vector, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| class ImageDecoderPlugin { | class ImageDecoderPlugin { | ||||||
| public: | public: | ||||||
|     virtual ~ImageDecoderPlugin() = default; |     virtual ~ImageDecoderPlugin() = default; | ||||||
|  | @ -53,7 +58,7 @@ public: | ||||||
|     virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) = 0; |     virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) = 0; | ||||||
|     virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() { return OptionalNone {}; } |     virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() { return OptionalNone {}; } | ||||||
| 
 | 
 | ||||||
|     virtual bool is_vector() { return false; } |     virtual NaturalFrameFormat natural_frame_format() const { return NaturalFrameFormat::RGB; } | ||||||
|     virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t) { VERIFY_NOT_REACHED(); } |     virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t) { VERIFY_NOT_REACHED(); } | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  | @ -75,7 +80,9 @@ public: | ||||||
|     ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) const { return m_plugin->frame(index, ideal_size); } |     ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) const { return m_plugin->frame(index, ideal_size); } | ||||||
|     ErrorOr<Optional<ReadonlyBytes>> icc_data() const { return m_plugin->icc_data(); } |     ErrorOr<Optional<ReadonlyBytes>> icc_data() const { return m_plugin->icc_data(); } | ||||||
| 
 | 
 | ||||||
|     bool is_vector() { return m_plugin->is_vector(); } |     NaturalFrameFormat natural_frame_format() { return m_plugin->natural_frame_format(); } | ||||||
|  | 
 | ||||||
|  |     // Call only if natural_frame_format() == NaturalFrameFormat::Vector.
 | ||||||
|     ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) { return m_plugin->vector_frame(index); } |     ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) { return m_plugin->vector_frame(index); } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  |  | ||||||
|  | @ -83,7 +83,7 @@ public: | ||||||
|     virtual IntSize size() override; |     virtual IntSize size() override; | ||||||
|     virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override; |     virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override; | ||||||
| 
 | 
 | ||||||
|     virtual bool is_vector() override { return true; } |     virtual NaturalFrameFormat natural_frame_format() const override { return NaturalFrameFormat::Vector; } | ||||||
|     virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) override; |     virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) override; | ||||||
| 
 | 
 | ||||||
|     virtual ~TinyVGImageDecoderPlugin() override = default; |     virtual ~TinyVGImageDecoderPlugin() override = default; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nico Weber
						Nico Weber