X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9fdd83842f5ead4ef45852b9943df36c38b4d7d7..23e09f1115536813561fded9bd17ee197cf010c7:/utils/serialize/sergdi.cpp diff --git a/utils/serialize/sergdi.cpp b/utils/serialize/sergdi.cpp index a734234303..f53ef6acc9 100644 --- a/utils/serialize/sergdi.cpp +++ b/utils/serialize/sergdi.cpp @@ -1,3 +1,14 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: sergdi.cpp +// Purpose: Serialization: GDI classes +// Author: Guilhem Lavaux +// Modified by: +// Created: July 1998 +// RCS-ID: $Id$ +// Copyright: (c) 1998 Guilhem Lavaux +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + #ifdef __GNUG__ #pragma implementation "sergdi.h" #endif @@ -9,14 +20,22 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include "sergdi.h" IMPLEMENT_SERIAL_CLASS(wxBitmap, wxObject) IMPLEMENT_SERIAL_CLASS(wxGDIObject, wxObject) -IMPLEMENT_SERIAL_CLASS(wxColour, wxGDIObject) +IMPLEMENT_SERIAL_CLASS(wxRegion, wxGDIObject) +IMPLEMENT_SERIAL_CLASS(wxColour, wxObject) IMPLEMENT_SERIAL_CLASS(wxFont, wxGDIObject) IMPLEMENT_SERIAL_CLASS(wxPen, wxGDIObject) IMPLEMENT_SERIAL_CLASS(wxBrush, wxGDIObject) +IMPLEMENT_SERIAL_CLASS(wxImageList, wxObject) IMPLEMENT_ALIAS_SERIAL_CLASS(wxPenList, wxList) IMPLEMENT_ALIAS_SERIAL_CLASS(wxBrushList, wxList) @@ -24,16 +43,73 @@ IMPLEMENT_ALIAS_SERIAL_CLASS(wxFontList, wxList) IMPLEMENT_ALIAS_SERIAL_CLASS(wxColourDatabase, wxList) IMPLEMENT_ALIAS_SERIAL_CLASS(wxBitmapList, wxList) +// ---------------------------------------------------------------------------- + void WXSERIAL(wxBitmap)::StoreObject(wxObjectOutputStream& s) { // TODO + // I implemented a basic image saving (maybe I'll need to improve wxWin API). + + int x, y, w, h; + wxDataOutputStream data_s(s); + wxBitmap *bitmap = (wxBitmap *)Object(); + wxColour col; + wxMemoryDC dc; + + w = bitmap->GetWidth(); + h = bitmap->GetHeight(); + + if (s.FirstStage()) { + s.AddChild(bitmap->GetMask()); + } + + dc.SelectObject(*bitmap); + + data_s.Write16(w); + data_s.Write16(h); + for (y=0;yResize(w, h); +#else + bitmap->Create(w, h); +#endif + dc.SelectObject(*bitmap); + + for (y=0;ySetVisible( data_s.Read8() ); } -void WXSERIAL(wxColour)::StoreObject(wxObjectOutputStream& s) +// ---------------------------------------------------------------------------- + +void WXSERIAL(wxRegion)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxGDIObject)::StoreObject(s); + if (s.FirstStage()) + return; + + wxDataOutputStream data_s(s); + wxRect rect = ((wxRegion *)Object())->GetBox(); + + data_s.Write16( rect.GetX() ); + data_s.Write16( rect.GetY() ); + data_s.Write16( rect.GetWidth() ); + data_s.Write16( rect.GetHeight() ); +} + +void WXSERIAL(wxRegion)::LoadObject(wxObjectInputStream& s) +{ + WXSERIAL(wxGDIObject)::LoadObject(s); + + wxDataInputStream data_s(s); + wxRegion *region = (wxRegion *)Object(); + wxRect rect; + + rect.SetX( data_s.Read16() ); + rect.SetY( data_s.Read16() ); + rect.SetWidth( data_s.Read16() ); + rect.SetHeight( data_s.Read16() ); + + *region = wxRegion(rect); +} + +// ---------------------------------------------------------------------------- + +void WXSERIAL(wxColour)::StoreObject(wxObjectOutputStream& s) +{ if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxColour *colour = (wxColour *)Object(); + if (!colour->Ok()) { + data_s.Write8(0); + data_s.Write8(0); + data_s.Write8(0); + wxLogDebug("wxColour (0x%x) isn't ready.\n", colour); + return; + } + data_s.Write8(colour->Red()); data_s.Write8(colour->Green()); data_s.Write8(colour->Blue()); @@ -69,8 +187,6 @@ void WXSERIAL(wxColour)::StoreObject(wxObjectOutputStream& s) void WXSERIAL(wxColour)::LoadObject(wxObjectInputStream& s) { - WXSERIAL(wxGDIObject)::LoadObject(s); - wxDataInputStream data_s(s); wxColour *colour = (wxColour *)Object(); int r, g, b; @@ -82,6 +198,8 @@ void WXSERIAL(wxColour)::LoadObject(wxObjectInputStream& s) colour->Set(r, g, b); } +// ---------------------------------------------------------------------------- + void WXSERIAL(wxPen)::StoreObject(wxObjectOutputStream& s) { wxPen *pen = (wxPen *)Object(); @@ -103,9 +221,7 @@ void WXSERIAL(wxPen)::StoreObject(wxObjectOutputStream& s) void WXSERIAL(wxPen)::LoadObject(wxObjectInputStream& s) { wxPen *pen = (wxPen *)Object(); - wxColour *col = (wxColour *) s.GetChild(0); - - s.RemoveChildren(1); + wxColour *col = (wxColour *) s.GetChild(); WXSERIAL(wxGDIObject)::LoadObject(s); @@ -118,6 +234,7 @@ void WXSERIAL(wxPen)::LoadObject(wxObjectInputStream& s) pen->SetWidth( data_s.Read8() ); } +// ---------------------------------------------------------------------------- void WXSERIAL(wxBrush)::StoreObject(wxObjectOutputStream& s) { wxBrush *brush = (wxBrush *)Object(); @@ -136,10 +253,8 @@ void WXSERIAL(wxBrush)::StoreObject(wxObjectOutputStream& s) void WXSERIAL(wxBrush)::LoadObject(wxObjectInputStream& s) { wxBrush *brush = (wxBrush *)Object(); - wxColour *col = (wxColour *)s.GetChild(0); - wxBitmap *bmap = (wxBitmap *)s.GetChild(1); - - s.RemoveChildren(2); + wxColour *col = (wxColour *)s.GetChild(); + wxBitmap *bmap = (wxBitmap *)s.GetChild(); WXSERIAL(wxGDIObject)::LoadObject(s); @@ -150,6 +265,7 @@ void WXSERIAL(wxBrush)::LoadObject(wxObjectInputStream& s) *brush = wxBrush(bmap); } +// ---------------------------------------------------------------------------- void WXSERIAL(wxFont)::StoreObject(wxObjectOutputStream& s) { wxFont *font = (wxFont *)Object(); @@ -189,3 +305,33 @@ void WXSERIAL(wxFont)::LoadObject(wxObjectInputStream& s) *font = wxFont(psize, face_name, family, style, weight, underlined); } + +// ---------------------------------------------------------------------------- + +void WXSERIAL(wxImageList)::StoreObject(wxObjectOutputStream& s) +{ + wxImageList *list = (wxImageList *)Object(); + int i; + + if (s.FirstStage()) { +#ifdef __WXGTK__ + for (i=0;iGetImageCount();i++) + s.AddChild(list->GetBitmap(i)); +#endif + } + + wxDataOutputStream data_s(s); + + data_s.Write32(list->GetImageCount()); +} + +void WXSERIAL(wxImageList)::LoadObject(wxObjectInputStream& s) +{ + int i, count; + wxImageList *list = (wxImageList *)Object(); + wxDataInputStream data_s(s); + + count = data_s.Read32(); + for (i=0;iAdd(*((wxBitmap *)s.GetChild())); +}