]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagtiff.cpp
regenerated after version.bkl changes fixing -compatibility_version for Darwin
[wxWidgets.git] / src / common / imagtiff.cpp
index b03666fa1631ba2d30826ea2e302173fa00e8c15..07202e5c1cab2cacbdd1d1f14ca013cd4b40e8b1 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        imagtiff.cpp
+// Name:        src/common/imagtiff.cpp
 // Purpose:     wxImage TIFF handler
 // Author:      Robert Roebling
 // RCS-ID:      $Id$
@@ -45,6 +45,39 @@ IMPLEMENT_DYNAMIC_CLASS(wxTIFFHandler,wxImageHandler)
 
 #if wxUSE_STREAMS
 
+// helper to translate our, possibly 64 bit, wxFileOffset to TIFF, always 32
+// bit, toff_t
+static toff_t wxFileOffsetToTIFF(wxFileOffset ofs)
+{
+    if ( ofs == wxInvalidOffset )
+        return (toff_t)-1;
+
+    toff_t tofs = wx_truncate_cast(toff_t, ofs);
+    wxCHECK_MSG( (wxFileOffset)tofs == ofs, (toff_t)-1,
+                    _T("TIFF library doesn't support large files") );
+
+    return tofs;
+}
+
+// another helper to convert standard seek mode to our
+static wxSeekMode wxSeekModeFromTIFF(int whence)
+{
+    switch ( whence )
+    {
+        case SEEK_SET:
+            return wxFromStart;
+
+        case SEEK_CUR:
+            return wxFromCurrent;
+
+        case SEEK_END:
+            return wxFromEnd;
+
+        default:
+            return wxFromCurrent;
+    }
+}
+
 extern "C"
 {
 
@@ -76,32 +109,18 @@ toff_t TIFFLINKAGEMODE
 _tiffSeekIProc(thandle_t handle, toff_t off, int whence)
 {
     wxInputStream *stream = (wxInputStream*) handle;
-    wxSeekMode mode;
-    switch (whence)
-    {
-        case SEEK_SET: mode = wxFromStart; break;
-        case SEEK_CUR: mode = wxFromCurrent; break;
-        case SEEK_END: mode = wxFromEnd; break;
-        default:       mode = wxFromCurrent; break;
-    }
 
-    return (toff_t)stream->SeekI( (wxFileOffset)off, mode );
+    return wxFileOffsetToTIFF(stream->SeekI((wxFileOffset)off,
+                                            wxSeekModeFromTIFF(whence)));
 }
 
 toff_t TIFFLINKAGEMODE
 _tiffSeekOProc(thandle_t handle, toff_t off, int whence)
 {
     wxOutputStream *stream = (wxOutputStream*) handle;
-    wxSeekMode mode;
-    switch (whence)
-    {
-        case SEEK_SET: mode = wxFromStart; break;
-        case SEEK_CUR: mode = wxFromCurrent; break;
-        case SEEK_END: mode = wxFromEnd; break;
-        default:       mode = wxFromCurrent; break;
-    }
 
-    return (toff_t)stream->SeekO( (wxFileOffset)off, mode );
+    return wxFileOffsetToTIFF(stream->SeekO((wxFileOffset)off,
+                                            wxSeekModeFromTIFF(whence)));
 }
 
 int TIFFLINKAGEMODE
@@ -426,7 +445,7 @@ bool wxTIFFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo
                         if ( ptr[column*24 + bp*3] > 0 )
                         {
                             // check only red as this is sufficient
-                            reverse = reverse | 128 >> bp;
+                            reverse = (uint8)(reverse | 128 >> bp);
                         }
                     }
 
@@ -472,4 +491,3 @@ bool wxTIFFHandler::DoCanRead( wxInputStream& stream )
 #endif  // wxUSE_STREAMS
 
 #endif  // wxUSE_LIBTIFF
-