From: Vadim Zeitlin Date: Sat, 2 Aug 2008 20:13:41 +0000 (+0000) Subject: add wxImage::SetType() and use it in animation decoders (#9639) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9d1c7e8474ac6501f6ed39549b91c86eca9aae23 add wxImage::SetType() and use it in animation decoders (#9639) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54932 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/image.h b/include/wx/image.h index b2edab0779..3a6b0fdee1 100644 --- a/include/wx/image.h +++ b/include/wx/image.h @@ -361,6 +361,11 @@ public: // Gets the type of image found by LoadFile or specified with SaveFile wxBitmapType GetType() const; + // Set the image type, this is normally only called if the image is being + // created from data in the given format but not using LoadFile() (e.g. + // wxGIFDecoder uses this) + void SetType(wxBitmapType type); + // these functions provide fastest access to wxImage data but should be // used carefully as no checks are done unsigned char *GetData() const; diff --git a/interface/wx/image.h b/interface/wx/image.h index 9982ee2044..1c1b2d3088 100644 --- a/interface/wx/image.h +++ b/interface/wx/image.h @@ -1027,6 +1027,25 @@ public: unsigned char green, unsigned char blue); + /** + Set the type of image returned by GetType(). + + This method is mostly used internally by the library but can also be + called from the user code if the image was created from data in the + given bitmap format without using LoadFile() (which would set the type + correctly automatically). + + Notice that the image must be created before this function is called. + + @since 2.9.0 + + @param type + One of bitmap type constants, @c wxBITMAP_TYPE_INVALID is a valid + value for it and can be used to reset the bitmap type to default + but @c wxBITMAP_TYPE_MAX is not allowed here. + */ + void SetType(wxBitmapType type); + /** Returns a resized version of this image without scaling it by adding either a border diff --git a/src/common/anidecod.cpp b/src/common/anidecod.cpp index ee6f88ab0a..7c8dd53a99 100644 --- a/src/common/anidecod.cpp +++ b/src/common/anidecod.cpp @@ -304,6 +304,7 @@ bool wxANIDecoder::Load( wxInputStream& stream ) if (!sm_handler.DoLoadFile(&image, stream, false /* verbose */, -1)) return false; + image.SetType(wxBITMAP_TYPE_ANI); m_images.Add(image); } else diff --git a/src/common/gifdecod.cpp b/src/common/gifdecod.cpp index fda902a8f6..569b3e77ae 100644 --- a/src/common/gifdecod.cpp +++ b/src/common/gifdecod.cpp @@ -122,6 +122,7 @@ bool wxGIFDecoder::ConvertToImage(unsigned int frame, wxImage *image) const // create the image wxSize sz = GetFrameSize(frame); image->Create(sz.GetWidth(), sz.GetHeight()); + image->SetType(wxBITMAP_TYPE_GIF); if (!image->Ok()) return false; diff --git a/src/common/image.cpp b/src/common/image.cpp index b41fee58f6..c950cd6747 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -1468,6 +1468,16 @@ wxBitmapType wxImage::GetType() const return M_IMGDATA->m_type; } +void wxImage::SetType(wxBitmapType type) +{ + wxCHECK_RET( IsOk(), "must create the image before setting its type"); + + // type can be wxBITMAP_TYPE_INVALID to reset the image type to default + wxASSERT_MSG( type != wxBITMAP_TYPE_MAX, "invalid bitmap type" ); + + M_IMGDATA->m_type = type; +} + long wxImage::XYToIndex(int x, int y) const { if ( Ok() &&