File tree Expand file tree Collapse file tree 5 files changed +71
-2
lines changed Expand file tree Collapse file tree 5 files changed +71
-2
lines changed Original file line number Diff line number Diff line change @@ -528,4 +528,28 @@ bool GIFImageDecoderPlugin::sniff()
528
528
BufferStream stream (buffer);
529
529
return decode_gif_header (stream).has_value ();
530
530
}
531
+
532
+ bool GIFImageDecoderPlugin::is_animated ()
533
+ {
534
+ return false ;
535
+ }
536
+
537
+ size_t GIFImageDecoderPlugin::loop_count ()
538
+ {
539
+ return 0 ;
540
+ }
541
+
542
+ size_t GIFImageDecoderPlugin::frame_count ()
543
+ {
544
+ return 1 ;
545
+ }
546
+
547
+ ImageFrameDescriptor GIFImageDecoderPlugin::frame (size_t i)
548
+ {
549
+ if (i > 0 ) {
550
+ return { bitmap (), 0 };
551
+ }
552
+ return {};
553
+ }
554
+
531
555
}
Original file line number Diff line number Diff line change @@ -46,6 +46,10 @@ class GIFImageDecoderPlugin final : public ImageDecoderPlugin {
46
46
virtual void set_volatile () override ;
47
47
[[nodiscard]] virtual bool set_nonvolatile () override ;
48
48
virtual bool sniff () override ;
49
+ virtual bool is_animated () override ;
50
+ virtual size_t loop_count () override ;
51
+ virtual size_t frame_count () override ;
52
+ virtual ImageFrameDescriptor frame (size_t i) override ;
49
53
50
54
private:
51
55
OwnPtr<GIFLoadingContext> m_context;
Original file line number Diff line number Diff line change 26
26
27
27
#pragma once
28
28
29
- #include < AK/NonnullRefPtr.h>
30
29
#include < AK/OwnPtr.h>
31
30
#include < AK/RefCounted.h>
31
+ #include < AK/RefPtr.h>
32
32
#include < LibGfx/Size.h>
33
33
34
34
namespace Gfx {
35
35
36
36
class Bitmap ;
37
37
38
+ struct ImageFrameDescriptor {
39
+ RefPtr<Bitmap> image;
40
+ int duration { 0 };
41
+ };
42
+
38
43
class ImageDecoderPlugin {
39
44
public:
40
45
virtual ~ImageDecoderPlugin () {}
@@ -47,6 +52,11 @@ class ImageDecoderPlugin {
47
52
48
53
virtual bool sniff () = 0;
49
54
55
+ virtual bool is_animated () = 0;
56
+ virtual size_t loop_count () = 0;
57
+ virtual size_t frame_count () = 0;
58
+ virtual ImageFrameDescriptor frame (size_t i) = 0;
59
+
50
60
protected:
51
61
ImageDecoderPlugin () {}
52
62
};
@@ -62,7 +72,11 @@ class ImageDecoder : public RefCounted<ImageDecoder> {
62
72
RefPtr<Gfx::Bitmap> bitmap () const ;
63
73
void set_volatile () { m_plugin->set_volatile (); }
64
74
[[nodiscard]] bool set_nonvolatile () { return m_plugin->set_nonvolatile (); }
65
- bool sniff () { return m_plugin->sniff (); };
75
+ bool sniff () const { return m_plugin->sniff (); }
76
+ bool is_animated () const { return m_plugin->is_animated (); }
77
+ size_t loop_count () const { return m_plugin->loop_count (); }
78
+ size_t frame_count () const { return m_plugin->frame_count (); }
79
+ ImageFrameDescriptor frame (size_t i) const { return m_plugin->frame (i); }
66
80
67
81
private:
68
82
ImageDecoder (const u8 *, size_t );
Original file line number Diff line number Diff line change @@ -834,4 +834,27 @@ bool PNGImageDecoderPlugin::sniff()
834
834
return decode_png_header (*m_context);
835
835
}
836
836
837
+ bool PNGImageDecoderPlugin::is_animated ()
838
+ {
839
+ return false ;
840
+ }
841
+
842
+ size_t PNGImageDecoderPlugin::loop_count ()
843
+ {
844
+ return 0 ;
845
+ }
846
+
847
+ size_t PNGImageDecoderPlugin::frame_count ()
848
+ {
849
+ return 1 ;
850
+ }
851
+
852
+ ImageFrameDescriptor PNGImageDecoderPlugin::frame (size_t i)
853
+ {
854
+ if (i > 0 ) {
855
+ return { bitmap (), 0 };
856
+ }
857
+ return {};
858
+ }
859
+
837
860
}
Original file line number Diff line number Diff line change @@ -46,6 +46,10 @@ class PNGImageDecoderPlugin final : public ImageDecoderPlugin {
46
46
virtual void set_volatile () override ;
47
47
[[nodiscard]] virtual bool set_nonvolatile () override ;
48
48
virtual bool sniff () override ;
49
+ virtual bool is_animated () override ;
50
+ virtual size_t loop_count () override ;
51
+ virtual size_t frame_count () override ;
52
+ virtual ImageFrameDescriptor frame (size_t i) override ;
49
53
50
54
private:
51
55
OwnPtr<PNGLoadingContext> m_context;
You can’t perform that action at this time.
0 commit comments