]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagpnm.cpp
Added wxTE_NO_VSCROLL style; corrected joystick event class
[wxWidgets.git] / src / common / imagpnm.cpp
index ffbd4c1bd4ce898640705ab0754299f045278e74..d2200424336037cc4d162f5c83721cab5bdc7dbb 100644 (file)
@@ -23,6 +23,8 @@
 #include "wx/log.h"
 #include "wx/txtstrm.h"
 
+#if wxUSE_PNM
+
 #ifdef __WXMSW__
 #include <windows.h>
 #endif
@@ -37,7 +39,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxPNMHandler,wxImageHandler)
 
 #if wxUSE_STREAMS
 
-  //#include <stream.h> // for cout
+//#include <stream.h> // for cout
 
 void Skip_Comment(wxInputStream &stream)
 {
@@ -64,10 +66,11 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
      * Read the PNM header
      */
 
-    wxTextInputStream text_stream(stream);
+    wxBufferedInputStream buf_stream(stream);
+    wxTextInputStream text_stream(buf_stream);
 
-    Skip_Comment(stream);
-    if (stream.GetC()==_T('P')) c=stream.GetC();
+    Skip_Comment(buf_stream);
+    if (buf_stream.GetC()==_T('P')) c=buf_stream.GetC();
 
     switch (c)
       {
@@ -84,12 +87,12 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
       }
 
     text_stream >> line; // for the \n
-    Skip_Comment(stream);
+    Skip_Comment(buf_stream);
     text_stream >> width >> height ;
-    Skip_Comment(stream); 
+    Skip_Comment(buf_stream); 
     text_stream >> maxval;
 
-    //cout << width << " " << height << " " << maxval << endl;
+    //cout << line << " " << width << " " << height << " " << maxval << endl;
     image->Create( width, height );
     unsigned char *ptr = image->GetData();
     if (!ptr)
@@ -98,7 +101,7 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
        return FALSE;
     }
 
-    if (c=='3') // Ascii RBG
+   if (c=='3') // Ascii RBG
       { 
        wxUint32 value, size=3*width*height;
        for (wxUint32 i=0; i<size; ++i)
@@ -108,7 +111,7 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
            value=text_stream.Read32();
            *ptr++=(unsigned char)value;
 
-           if (stream.LastError()!=wxSTREAM_NOERROR)
+           if (buf_stream.LastError()!=wxSTREAM_NOERROR)
              {
                wxLogError(_T("Loading PNM image : file seems truncated."));
                return FALSE;
@@ -116,11 +119,11 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
          }
       }
     if (c=='6') // Raw RGB
-      stream.Read( ptr, 3*width*height );
+      buf_stream.Read( ptr, 3*width*height );
 
     image->SetMask( FALSE );
 
-    return (stream.LastError()==wxStream_NOERROR || stream.LastError()==wxStream_EOF);
+    return (buf_stream.LastError()==wxStream_NOERROR || buf_stream.LastError()==wxStream_EOF);
 }
 
 bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUSED(verbose) )
@@ -136,6 +139,26 @@ bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUS
     return (stream.LastError()==wxStream_NOERROR);
 }
 
+bool wxPNMHandler::CanRead( wxInputStream& stream )
+{
+    off_t pos=stream.TellI();
+
+    Skip_Comment(stream);
+
+    if (stream.GetC()==_T('P'))
+      switch (stream.GetC())
+       {
+       case _T('3'): case _T('6'):
+         stream.SeekI(pos);
+         return TRUE;
+       }
+
+    stream.SeekI(pos);
+    return FALSE;
+}
+
+
 #endif // wxUSE_STREAMS
 
+#endif // wxUSE_PNM