X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72a9034bd4feac3ac32ec16bcb751a37a8c699cf..a43a9e5521440dbb28037646ed4a07125c8823a9:/src/common/image.cpp?ds=sidebyside diff --git a/src/common/image.cpp b/src/common/image.cpp index cbe275bc19..d8cbaa2cfd 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -2658,19 +2658,27 @@ void wxImage::RotateHue(double angle) IMPLEMENT_ABSTRACT_CLASS(wxImageHandler,wxObject) #if wxUSE_STREAMS -bool wxImageHandler::LoadFile( wxImage *WXUNUSED(image), wxInputStream& WXUNUSED(stream), bool WXUNUSED(verbose), int WXUNUSED(index) ) +int wxImageHandler::GetImageCount( wxInputStream& stream ) { - return false; -} + // NOTE: this code is the same of wxAnimationDecoder::CanRead and + // wxImageHandler::CallDoCanRead -bool wxImageHandler::SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSED(stream), bool WXUNUSED(verbose) ) -{ - return false; -} + if ( !stream.IsSeekable() ) + return false; // can't test unseekable stream -int wxImageHandler::GetImageCount( wxInputStream& WXUNUSED(stream) ) -{ - return 1; + wxFileOffset posOld = stream.TellI(); + int n = DoGetImageCount(stream); + + // restore the old position to be able to test other formats and so on + if ( stream.SeekI(posOld) == wxInvalidOffset ) + { + wxLogDebug(_T("Failed to rewind the stream in wxImageHandler!")); + + // reading would fail anyhow as we're not at the right position + return false; + } + + return n; } bool wxImageHandler::CanRead( const wxString& name ) @@ -2688,13 +2696,13 @@ bool wxImageHandler::CanRead( const wxString& name ) bool wxImageHandler::CallDoCanRead(wxInputStream& stream) { - wxFileOffset posOld = stream.TellI(); - if ( posOld == wxInvalidOffset ) - { - // can't test unseekable stream - return false; - } + // NOTE: this code is the same of wxAnimationDecoder::CanRead and + // wxImageHandler::GetImageCount + + if ( !stream.IsSeekable() ) + return false; // can't test unseekable stream + wxFileOffset posOld = stream.TellI(); bool ok = DoCanRead(stream); // restore the old position to be able to test other formats and so on