]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/ogl/mfutils.cpp
Needed to add #include "wx/statusbr.h" to know that wxStatusBar is derived
[wxWidgets.git] / contrib / src / ogl / mfutils.cpp
index 75fd4cdfd1e5e41c22d1e86e36191e70dab46004..6570eee42e294b15ce48dbb48bdc39a078f6cd97 100644 (file)
@@ -6,13 +6,9 @@
 // Created:     12/07/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
 // Created:     12/07/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "mfutils.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #include <wx/metafile.h>
 #include <wx/utils.h>
 
 #include <wx/metafile.h>
 #include <wx/utils.h>
 
-#include <wx/ogl/mfutils.h>
+#include "wx/ogl/ogl.h"
+
 #include <stdio.h>
 
 static char _buf[1024]; // a temp buffer to use inplace of wxBuffer, which is deprecated.
 
 #include <stdio.h>
 
 static char _buf[1024]; // a temp buffer to use inplace of wxBuffer, which is deprecated.
 
-static char hexArray[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
-  'C', 'D', 'E', 'F' };
-
-static void DecToHex(int dec, char *buf)
-{
-  int firstDigit = (int)(dec/16.0);
-  int secondDigit = (int)(dec - (firstDigit*16.0));
-  buf[0] = hexArray[firstDigit];
-  buf[1] = hexArray[secondDigit];
-  buf[2] = 0;
-}
-
 // 16-bit unsigned integer
 static unsigned int getshort(FILE *fp)
 {
 // 16-bit unsigned integer
 static unsigned int getshort(FILE *fp)
 {
@@ -58,9 +43,12 @@ static int getsignedshort(FILE *fp)
 {
   int c, c1;
   c = getc(fp);  c1 = getc(fp);
 {
   int c, c1;
   c = getc(fp);  c1 = getc(fp);
+#if 0
+   // this is not used value, no need to execute it
   int testRes = ((unsigned int) c) + (((unsigned int) c1) << 8);
   int testRes = ((unsigned int) c) + (((unsigned int) c1) << 8);
+#endif
   unsigned long res1 = ((unsigned int) c) + (((unsigned int) c1) << 8);
   unsigned long res1 = ((unsigned int) c) + (((unsigned int) c1) << 8);
-  int res = 0;
+  int res;
   if (res1 > 32767)
     res = (int)(res1 - 65536);
   else
   if (res1 > 32767)
     res = (int)(res1 - 65536);
   else
@@ -75,20 +63,20 @@ static long getint(FILE *fp)
   c = getc(fp);  c1 = getc(fp);  c2 = getc(fp);  c3 = getc(fp);
   long res = (long)((long) c) +
          (((long) c1) << 8) +
   c = getc(fp);  c1 = getc(fp);  c2 = getc(fp);  c3 = getc(fp);
   long res = (long)((long) c) +
          (((long) c1) << 8) +
-        (((long) c2) << 16) +
-        (((long) c3) << 24);
+         (((long) c2) << 16) +
+         (((long) c3) << 24);
   return res;
 }
 
 
 /* Placeable metafile header
 struct mfPLACEABLEHEADER {
   return res;
 }
 
 
 /* Placeable metafile header
 struct mfPLACEABLEHEADER {
-       DWORD   key;         // 32-bit
-       HANDLE  hmf;         // 16-bit
-       RECT    bbox;        // 4x16 bit
-       WORD    inch;        // 16-bit
-       DWORD   reserved;    // 32-bit
-       WORD    checksum;    // 16-bit
+    DWORD  key;         // 32-bit
+    HANDLE hmf;         // 16-bit
+    RECT   bbox;        // 4x16 bit
+    WORD   inch;        // 16-bit
+    DWORD  reserved;    // 32-bit
+    WORD   checksum;    // 16-bit
 };
 */
 
 };
 */
 
@@ -98,9 +86,9 @@ wxMetaRecord::~wxMetaRecord(void)
   if (stringParam) delete[] stringParam;
 }
 
   if (stringParam) delete[] stringParam;
 }
 
-wxXMetaFile::wxXMetaFile(char *file)
+wxXMetaFile::wxXMetaFile(const wxChar *file)
 {
 {
-  ok = FALSE;
+  ok = false;
   top = 0.0;
   bottom = 0.0;
   left = 0.0;
   top = 0.0;
   bottom = 0.0;
   left = 0.0;
@@ -119,7 +107,7 @@ wxXMetaFile::wxXMetaFile(char *file)
   [3]             | -> wxPen
 
  The handle table works as follows.
   [3]             | -> wxPen
 
  The handle table works as follows.
- When a GDI object is created whilst reading in the
+ When a GDI object is created while reading in the
  metafile, the (e.g.) createpen record is added to the
  first free entry in the handle table. The createpen
  record's param1 is a pointer to the actual wxPen, and
  metafile, the (e.g.) createpen record is added to the
  first free entry in the handle table. The createpen
  record's param1 is a pointer to the actual wxPen, and
@@ -162,19 +150,19 @@ int AddMetaRecordHandle(wxMetaRecord *record)
   return (HandleTableSize - 1);
 }
 
   return (HandleTableSize - 1);
 }
 
-bool wxXMetaFile::ReadFile(char *file)
+bool wxXMetaFile::ReadFile(const wxChar *file)
 {
   HandleTableSize = 0;
 
 {
   HandleTableSize = 0;
 
-  FILE *handle = fopen(file, "rb");
-  if (!handle) return FALSE;
+  FILE *handle = wxFopen(file, wxT("rb"));
+  if (!handle) return false;
 
   // Read placeable metafile header, if any
   long key = getint(handle);
 
   if (key == (long) 0x9AC6CDD7)
   {
 
   // Read placeable metafile header, if any
   long key = getint(handle);
 
   if (key == (long) 0x9AC6CDD7)
   {
-    long hmf = getshort(handle);
+    /* long hmf = */ getshort(handle);
     int iLeft, iTop, iRight, iBottom;
     iLeft = getsignedshort(handle);
     iTop = getsignedshort(handle);
     int iLeft, iTop, iRight, iBottom;
     iLeft = getsignedshort(handle);
     iTop = getsignedshort(handle);
@@ -186,9 +174,9 @@ bool wxXMetaFile::ReadFile(char *file)
     right = (double)iRight;
     bottom = (double)iBottom;
 
     right = (double)iRight;
     bottom = (double)iBottom;
 
-    int inch = getshort(handle);
-    long reserved = getint(handle);
-    int checksum = getshort(handle);
+    /* int inch = */ getshort(handle);
+    /* long reserved = */ getint(handle);
+    /* int checksum = */ getshort(handle);
 /*
       double widthInUnits = (double)right - left;
       double heightInUnits = (double)bottom - top;
 /*
       double widthInUnits = (double)right - left;
       double heightInUnits = (double)bottom - top;
@@ -204,22 +192,22 @@ bool wxXMetaFile::ReadFile(char *file)
   if (mtType != 1 && mtType != 2)
   {
     fclose(handle);
   if (mtType != 1 && mtType != 2)
   {
     fclose(handle);
-    return FALSE;
+    return false;
   }
 
   }
 
-  int mtHeaderSize = getshort(handle);
+  /* int mtHeaderSize = */ getshort(handle);
   int mtVersion = getshort(handle);
 
   if (mtVersion != 0x0300 && mtVersion != 0x0100)
   {
     fclose(handle);
   int mtVersion = getshort(handle);
 
   if (mtVersion != 0x0300 && mtVersion != 0x0100)
   {
     fclose(handle);
-    return FALSE;
+    return false;
   }
 
   }
 
-  long mtSize = getint(handle);
-  int mtNoObjects = getshort(handle);
-  long mtMaxRecord = getint(handle);
-  int mtNoParameters = getshort(handle);
+  /* long mtSize = */ getint(handle);
+  /* int mtNoObjects = */ getshort(handle);
+  /* long mtMaxRecord = */ getint(handle);
+  /* int mtNoParameters = */ getshort(handle);
 
   while (!feof(handle))
   {
 
   while (!feof(handle))
   {
@@ -381,8 +369,8 @@ bool wxXMetaFile::ReadFile(char *file)
       {
         wxMetaRecord *rec = new wxMetaRecord(META_TEXTOUT);
         int count = getshort(handle);
       {
         wxMetaRecord *rec = new wxMetaRecord(META_TEXTOUT);
         int count = getshort(handle);
-        rec->stringParam = new char[count+1];
-        fread((void *)rec->stringParam, sizeof(char), count, handle);
+        rec->stringParam = new wxChar[count+1];
+        fread((void *)rec->stringParam, sizeof(wxChar), count, handle);
         rec->stringParam[count] = 0;
         rec->param2 = getshort(handle); // Y
         rec->param1 = getshort(handle); // X
         rec->stringParam[count] = 0;
         rec->param2 = getshort(handle); // Y
         rec->param1 = getshort(handle); // X
@@ -479,7 +467,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
 //      case META_STRETCHDIB:
         break;
       }
 //      case META_STRETCHDIB:
@@ -504,7 +492,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEBRUSH:
         break;
       }
       case META_CREATEBRUSH:
@@ -514,7 +502,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEPATTERNBRUSH:
         break;
       }
       case META_CREATEPATTERNBRUSH:
@@ -524,7 +512,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEPENINDIRECT:
         break;
       }
       case META_CREATEPENINDIRECT:
@@ -532,7 +520,7 @@ bool wxXMetaFile::ReadFile(char *file)
         wxMetaRecord *rec = new wxMetaRecord(META_CREATEPENINDIRECT);
         int msStyle = getshort(handle); // Style: 2 bytes
         int x = getshort(handle); // X:     2 bytes
         wxMetaRecord *rec = new wxMetaRecord(META_CREATEPENINDIRECT);
         int msStyle = getshort(handle); // Style: 2 bytes
         int x = getshort(handle); // X:     2 bytes
-        int y = getshort(handle); // Y:     2 bytes
+        /* int y = */ getshort(handle); // Y:     2 bytes
         long colorref = getint(handle); // COLORREF 4 bytes
 
         int style;
         long colorref = getint(handle); // COLORREF 4 bytes
 
         int style;
@@ -550,7 +538,7 @@ bool wxXMetaFile::ReadFile(char *file)
         gdiObjects.Append(rec);
 
         AddMetaRecordHandle(rec);
         gdiObjects.Append(rec);
 
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
 
         // For some reason, the size of this record is sometimes 9 words!!!
         // instead of the usual 8. So read 2 characters extra.
 
         // For some reason, the size of this record is sometimes 9 words!!!
         // instead of the usual 8. So read 2 characters extra.
@@ -564,18 +552,18 @@ bool wxXMetaFile::ReadFile(char *file)
       {
         wxMetaRecord *rec = new wxMetaRecord(META_CREATEFONTINDIRECT);
         int lfHeight = getshort(handle);    // 2 bytes
       {
         wxMetaRecord *rec = new wxMetaRecord(META_CREATEFONTINDIRECT);
         int lfHeight = getshort(handle);    // 2 bytes
-        int lfWidth = getshort(handle);     // 2 bytes
-        int lfEsc = getshort(handle);       // 2 bytes
-        int lfOrient = getshort(handle);    // 2 bytes
+        /* int lfWidth = */ getshort(handle);     // 2 bytes
+        /* int lfEsc = */ getshort(handle);       // 2 bytes
+        /* int lfOrient = */ getshort(handle);    // 2 bytes
         int lfWeight = getshort(handle);    // 2 bytes
         int lfWeight = getshort(handle);    // 2 bytes
-        char lfItalic = getc(handle);       // 1 byte
-        char lfUnderline = getc(handle);    // 1 byte
-        char lfStrikeout = getc(handle);    // 1 byte
-        char lfCharSet = getc(handle);      // 1 byte
-        char lfOutPrecision = getc(handle); // 1 byte
-        char lfClipPrecision = getc(handle); // 1 byte
-        char lfQuality = getc(handle);      // 1 byte
-        char lfPitchAndFamily = getc(handle);   // 1 byte (18th)
+        char lfItalic = (char)getc(handle);       // 1 byte
+        char lfUnderline = (char)getc(handle);    // 1 byte
+        /* char lfStrikeout = */ getc(handle);    // 1 byte
+        /* char lfCharSet = */ getc(handle);      // 1 byte
+        /* char lfOutPrecision = */ getc(handle); // 1 byte
+        /* char lfClipPrecision = */ getc(handle); // 1 byte
+        /* char lfQuality = */ getc(handle);      // 1 byte
+        char lfPitchAndFamily = (char)getc(handle);   // 1 byte (18th)
         char lfFacename[32];
         // Read the rest of the record, which is total record size
         // minus the number of bytes already read (18 record, 6 metarecord
         char lfFacename[32];
         // Read the rest of the record, which is total record size
         // minus the number of bytes already read (18 record, 6 metarecord
@@ -622,7 +610,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEBRUSHINDIRECT:
         break;
       }
       case META_CREATEBRUSHINDIRECT:
@@ -661,25 +649,33 @@ bool wxXMetaFile::ReadFile(char *file)
             }
             break;
           }
             }
             break;
           }
+#if PS_DOT != BS_HATCHED
+          /* ABX 30.12.2003                                   */
+          /* in microsoft/include/wingdi.h  both are the same */
+          /* in fact I'm not sure  why pen related PS_XXX and */
+          /* BS_XXX constants are all mixed into single style */
+          case PS_DOT:
+            style = wxDOT;
+            break;
+#endif
+          case PS_DASH:
+            style = wxSHORT_DASH;
+            break;
+          case PS_NULL:
+            style = wxTRANSPARENT;
+            break;
           case BS_SOLID:
           default:
             style = wxSOLID;
             break;
         }
           case BS_SOLID:
           default:
             style = wxSOLID;
             break;
         }
-        if (msStyle == PS_DOT)
-          style = wxDOT;
-        else if (msStyle == PS_DASH)
-          style = wxSHORT_DASH;
-        else if (msStyle == PS_NULL)
-          style = wxTRANSPARENT;
-        else style = wxSOLID;
 
         wxColour colour(GetRValue(colorref), GetGValue(colorref), GetBValue(colorref));
         rec->param1 = (long)wxTheBrushList->FindOrCreateBrush(colour, style);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
 
         wxColour colour(GetRValue(colorref), GetGValue(colorref), GetBValue(colorref));
         rec->param1 = (long)wxTheBrushList->FindOrCreateBrush(colour, style);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEBITMAPINDIRECT:
         break;
       }
       case META_CREATEBITMAPINDIRECT:
@@ -690,7 +686,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEBITMAP:
         break;
       }
       case META_CREATEBITMAP:
@@ -701,7 +697,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       case META_CREATEREGION:
         break;
       }
       case META_CREATEREGION:
@@ -712,7 +708,7 @@ bool wxXMetaFile::ReadFile(char *file)
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
         metaRecords.Append(rec);
         gdiObjects.Append(rec);
         AddMetaRecordHandle(rec);
-        rec->param2 = (long)(gdiObjects.Number() - 1);
+        rec->param2 = (long)(gdiObjects.GetCount() - 1);
         break;
       }
       default:
         break;
       }
       default:
@@ -723,33 +719,33 @@ bool wxXMetaFile::ReadFile(char *file)
     }
   }
   fclose(handle);
     }
   }
   fclose(handle);
-  return TRUE;
+  return true;
 }
 
 wxXMetaFile::~wxXMetaFile(void)
 {
 }
 
 wxXMetaFile::~wxXMetaFile(void)
 {
-  wxNode *node = metaRecords.First();
+  wxObjectList::compatibility_iterator node = metaRecords.GetFirst();
   while (node)
   {
   while (node)
   {
-    wxMetaRecord *rec = (wxMetaRecord *)node->Data();
+    wxMetaRecord *rec = (wxMetaRecord *)node->GetData();
     delete rec;
     delete rec;
-    wxNode *next = node->Next();
-    delete node;
+    wxObjectList::compatibility_iterator next = node->GetNext();
+    metaRecords.Erase(node);
     node = next;
   }
 }
 
     node = next;
   }
 }
 
-bool wxXMetaFile::SetClipboard(int width, int height)
+bool wxXMetaFile::SetClipboard(int WXUNUSED(width), int WXUNUSED(height))
 {
 {
-  return FALSE;
+  return false;
 }
 
 bool wxXMetaFile::Play(wxDC *dc)
 {
 }
 
 bool wxXMetaFile::Play(wxDC *dc)
 {
-  wxNode *node = metaRecords.First();
+  wxObjectList::compatibility_iterator node = metaRecords.GetFirst();
   while (node)
   {
   while (node)
   {
-    wxMetaRecord *rec = (wxMetaRecord *)node->Data();
+    wxMetaRecord *rec = (wxMetaRecord *)node->GetData();
     int rdFunction = rec->metaFunction;
 
     switch (rdFunction)
     int rdFunction = rec->metaFunction;
 
     switch (rdFunction)
@@ -1080,8 +1076,8 @@ bool wxXMetaFile::Play(wxDC *dc)
         break;
       }
     }
         break;
       }
     }
-    node = node->Next();
+    node = node->GetNext();
   }
   }
-  return TRUE;
+  return true;
 }
 
 }