mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:07:34 +00:00
LibGfx: Allow passing an ideal size to image decoders
The ideal size is the size the user will display the image. Raster formats should ignore this parameter, but vector formats can use it to generate a bitmap of the ideal size.
This commit is contained in:
parent
ff47223301
commit
e7cddda7e1
20 changed files with 22 additions and 22 deletions
|
@ -1548,7 +1548,7 @@ size_t BMPImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> BMPImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> BMPImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("BMPImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("BMPImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -36,7 +36,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -693,7 +693,7 @@ size_t DDSImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> DDSImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> DDSImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("DDSImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("DDSImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -248,7 +248,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -633,7 +633,7 @@ size_t GIFImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> GIFImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> GIFImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (m_context->error_state >= GIFLoadingContext::ErrorState::FailedToDecodeAnyFrame) {
|
if (m_context->error_state >= GIFLoadingContext::ErrorState::FailedToDecodeAnyFrame) {
|
||||||
return Error::from_string_literal("GIFImageDecoderPlugin: Decoding failed");
|
return Error::from_string_literal("GIFImageDecoderPlugin: Decoding failed");
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -255,7 +255,7 @@ size_t ICOImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> ICOImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> ICOImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("ICOImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("ICOImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -40,7 +40,7 @@ public:
|
||||||
virtual size_t loop_count() = 0;
|
virtual size_t loop_count() = 0;
|
||||||
virtual size_t frame_count() = 0;
|
virtual size_t frame_count() = 0;
|
||||||
virtual size_t first_animated_frame_index() = 0;
|
virtual size_t first_animated_frame_index() = 0;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) = 0;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) = 0;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() = 0;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -61,7 +61,7 @@ public:
|
||||||
size_t loop_count() const { return m_plugin->loop_count(); }
|
size_t loop_count() const { return m_plugin->loop_count(); }
|
||||||
size_t frame_count() const { return m_plugin->frame_count(); }
|
size_t frame_count() const { return m_plugin->frame_count(); }
|
||||||
size_t first_animated_frame_index() const { return m_plugin->first_animated_frame_index(); }
|
size_t first_animated_frame_index() const { return m_plugin->first_animated_frame_index(); }
|
||||||
ErrorOr<ImageFrameDescriptor> frame(size_t index) const { return m_plugin->frame(index); }
|
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(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1978,7 +1978,7 @@ size_t JPEGImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> JPEGImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> JPEGImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("JPEGImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("JPEGImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -30,7 +30,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1409,7 +1409,7 @@ static ErrorOr<RefPtr<Bitmap>> render_animation_frame(AnimationFrame const& prev
|
||||||
return rendered_bitmap;
|
return rendered_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> PNGImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> PNGImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (m_context->state == PNGLoadingContext::State::Error)
|
if (m_context->state == PNGLoadingContext::State::Error)
|
||||||
return Error::from_string_literal("PNGImageDecoderPlugin: Decoding failed");
|
return Error::from_string_literal("PNGImageDecoderPlugin: Decoding failed");
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -72,7 +72,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -168,7 +168,7 @@ size_t PortableImageDecoderPlugin<TContext>::first_animated_frame_index()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TContext>
|
template<typename TContext>
|
||||||
ErrorOr<ImageFrameDescriptor> PortableImageDecoderPlugin<TContext>::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> PortableImageDecoderPlugin<TContext>::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("PortableImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("PortableImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -212,7 +212,7 @@ ErrorOr<NonnullOwnPtr<ImageDecoderPlugin>> QOIImageDecoderPlugin::create(Readonl
|
||||||
return adopt_nonnull_own_or_enomem(new (nothrow) QOIImageDecoderPlugin(move(stream)));
|
return adopt_nonnull_own_or_enomem(new (nothrow) QOIImageDecoderPlugin(move(stream)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> QOIImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> QOIImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
return Error::from_string_literal("Invalid frame index");
|
return Error::from_string_literal("Invalid frame index");
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
virtual size_t loop_count() override { return 0; }
|
virtual size_t loop_count() override { return 0; }
|
||||||
virtual size_t frame_count() override { return 1; }
|
virtual size_t frame_count() override { return 1; }
|
||||||
virtual size_t first_animated_frame_index() override { return 0; }
|
virtual size_t first_animated_frame_index() override { return 0; }
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -264,7 +264,7 @@ size_t TGAImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> TGAImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> TGAImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
auto bits_per_pixel = m_context->header.bits_per_pixel;
|
auto bits_per_pixel = m_context->header.bits_per_pixel;
|
||||||
auto color_map = m_context->header.color_map_type;
|
auto color_map = m_context->header.color_map_type;
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -801,7 +801,7 @@ size_t WebPImageDecoderPlugin::first_animated_frame_index()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<ImageFrameDescriptor> WebPImageDecoderPlugin::frame(size_t index)
|
ErrorOr<ImageFrameDescriptor> WebPImageDecoderPlugin::frame(size_t index, Optional<IntSize>)
|
||||||
{
|
{
|
||||||
if (index >= frame_count())
|
if (index >= frame_count())
|
||||||
return Error::from_string_literal("WebPImageDecoderPlugin: Invalid frame index");
|
return Error::from_string_literal("WebPImageDecoderPlugin: Invalid frame index");
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
virtual size_t loop_count() override;
|
virtual size_t loop_count() override;
|
||||||
virtual size_t frame_count() override;
|
virtual size_t frame_count() override;
|
||||||
virtual size_t first_animated_frame_index() override;
|
virtual size_t first_animated_frame_index() override;
|
||||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index) override;
|
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue