]> git.saurik.com Git - wxWidgets.git/commitdiff
Removed LastError() from wxFilterStream
authorGuilhem Lavaux <lavaux@easynet.fr>
Sun, 29 Aug 1999 19:48:03 +0000 (19:48 +0000)
committerGuilhem Lavaux <lavaux@easynet.fr>
Sun, 29 Aug 1999 19:48:03 +0000 (19:48 +0000)
Added a better Peek() to wxBufferedInputStream
Fixed wxPNMHandler (it is a lot faster on text PNM now)
Image sample loads a PNM

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3525 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/stream.h
samples/image/image.cpp
src/common/imagpnm.cpp
src/common/stream.cpp

index 44660c9e90bd0e7a262dfe8b654110c02c41d1c6..efef1ec113bfa67380b93ba8659b10ef9af0e248 100644 (file)
@@ -170,7 +170,6 @@ class WXDLLEXPORT wxFilterInputStream: public wxInputStream {
 
   char Peek() { return m_parent_i_stream->Peek(); }
 
-  wxStreamError LastError() const { return m_parent_i_stream->LastError(); }
   size_t GetSize() const { return m_parent_i_stream->GetSize(); }
 
  protected:
@@ -183,7 +182,6 @@ class WXDLLEXPORT wxFilterOutputStream: public wxOutputStream {
   wxFilterOutputStream(wxOutputStream& stream);
   ~wxFilterOutputStream();
 
-  wxStreamError LastError() const { return m_parent_o_stream->LastError(); }
   size_t GetSize() const { return m_parent_o_stream->GetSize(); }
 
  protected:
@@ -216,6 +214,7 @@ class WXDLLEXPORT wxStreamBuffer {
   size_t Write(const void *buffer, size_t size);
   size_t Write(wxStreamBuffer *buf);
 
+  char Peek();
   char GetChar();
   void PutChar(char c);
   off_t Tell() const;
@@ -273,6 +272,7 @@ class wxBufferedInputStream: public wxFilterInputStream {
   wxBufferedInputStream(wxInputStream& stream);
   ~wxBufferedInputStream();
 
+  char Peek();
   wxInputStream& Read(void *buffer, size_t size);
   
   // Position functions
index d0d48d451d329ab023ac71db7e724e6503da9a28..fe40a70b0bcb638098ae004942edcca3f66c9c14 100644 (file)
@@ -43,6 +43,7 @@ public:
     wxBitmap  *my_horse_gif;
     wxBitmap  *my_horse_bmp;
     wxBitmap  *my_horse_pcx;
+    wxBitmap  *my_horse_pnm;
     wxBitmap  *my_square;
     wxBitmap  *my_anti;
 
@@ -147,6 +148,11 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
       wxLogError("Can't load BMP image");
   else
     my_horse_bmp = new wxBitmap( image.ConvertToBitmap() );
+
+  if ( !image.LoadFile( dir + wxString("horse.pnm"), wxBITMAP_TYPE_PNM ) )
+      wxLogError("Can't load PNM image");
+  else
+    my_horse_pnm = new wxBitmap( image.ConvertToBitmap() );
   
   image.LoadFile( dir + wxString("test.png") );
   my_square = new wxBitmap( image.ConvertToBitmap() );
@@ -156,6 +162,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
 
 MyCanvas::~MyCanvas()
 {
+  delete my_horse_pnm;
   delete my_horse_png;
   delete my_horse_jpeg;
   delete my_horse_gif;
@@ -194,6 +201,9 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
 
   dc.DrawText( "BMP handler", 30, 1055 );
   if (my_horse_bmp && my_horse_bmp->Ok()) dc.DrawBitmap( *my_horse_bmp, 30, 1070 );
+
+  dc.DrawText( "PNM handler", 30, 1285 );
+  if (my_horse_pnm && my_horse_pnm->Ok()) dc.DrawBitmap( *my_horse_pnm, 30, 1300 );
 }
 
 void MyCanvas::CreateAntiAliasedBitmap()
@@ -277,7 +287,7 @@ MyFrame::MyFrame()
   m_canvas = new MyCanvas( this, -1, wxPoint(0,0), wxSize(10,10) );
 
   // 500 width * 1300 height
-  m_canvas->SetScrollbars( 10, 10, 50, 130 );
+  m_canvas->SetScrollbars( 10, 10, 50, 152 );
 }
 
 void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
@@ -309,6 +319,7 @@ bool MyApp::OnInit()
 
   wxImage::AddHandler( new wxGIFHandler );
   wxImage::AddHandler( new wxPCXHandler );
+  wxImage::AddHandler( new wxPNMHandler );
 
   wxFrame *frame = new MyFrame();
   frame->Show( TRUE );
index e7de922c9cdf50ee2bd1694793188ac1fd2e7a1a..5352da9f4fdd23a931ccea5a6f7f3000c9233114 100644 (file)
@@ -64,10 +64,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,9 +85,9 @@ 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 << line << " " << width << " " << height << " " << maxval << endl;
@@ -98,8 +99,6 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
        return FALSE;
     }
 
-    wxBufferedInputStream buf_stream(stream);
-
    if (c=='3') // Ascii RBG
       { 
        wxUint32 value, size=3*width*height;
index fdfc9123339422458b9a29b0742c56b2db1124ef..5c7ba37d3f3d967e17b8c7c6eb4b69c2211b053d 100644 (file)
@@ -195,6 +195,23 @@ void wxStreamBuffer::PutChar(char c)
   m_stream->m_lastcount = 1;
 }
 
+char wxStreamBuffer::Peek()
+{
+  char c;
+
+  wxASSERT(m_stream != NULL && m_buffer_size != 0);
+
+  if (!GetDataLeft()) {
+    CHECK_ERROR(wxStream_READ_ERR);
+    return 0;
+  }
+
+  GetFromBuffer(&c, 1);
+  m_buffer_pos--;
+
+  return c;
+}
+
 char wxStreamBuffer::GetChar()
 {
   char c;
@@ -248,7 +265,7 @@ size_t wxStreamBuffer::Read(void *buffer, size_t size)
       buffer = (char *)buffer + buf_left; // ANSI C++ violation.
 
       if (!FillBuffer()) {
-        CHECK_ERROR(wxStream_READ_ERR);
+        CHECK_ERROR(wxStream_EOF);
         return (m_stream->m_lastcount = orig_size-size);
       }
     } else {
@@ -743,6 +760,11 @@ wxBufferedInputStream::~wxBufferedInputStream()
   delete m_i_streambuf;
 }
 
+char wxBufferedInputStream::Peek()
+{
+  return m_i_streambuf->Peek();
+}
+
 wxInputStream& wxBufferedInputStream::Read(void *buffer, size_t size)
 {
   size_t retsize;