1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Serialization: GDI classes
4 // Author: Guilhem Lavaux
8 // Copyright: (c) 1998 Guilhem Lavaux
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "sergdi.h"
15 #include <wx/objstrm.h>
16 #include <wx/datstrm.h>
17 #include <wx/gdicmn.h>
18 #include <wx/bitmap.h>
22 #include <wx/serbase.h>
23 #include <wx/imaglist.h>
26 IMPLEMENT_SERIAL_CLASS(wxBitmap
, wxObject
)
27 IMPLEMENT_SERIAL_CLASS(wxGDIObject
, wxObject
)
28 IMPLEMENT_SERIAL_CLASS(wxColour
, wxGDIObject
)
29 IMPLEMENT_SERIAL_CLASS(wxFont
, wxGDIObject
)
30 IMPLEMENT_SERIAL_CLASS(wxPen
, wxGDIObject
)
31 IMPLEMENT_SERIAL_CLASS(wxBrush
, wxGDIObject
)
32 IMPLEMENT_SERIAL_CLASS(wxImageList
, wxObject
)
34 IMPLEMENT_ALIAS_SERIAL_CLASS(wxPenList
, wxList
)
35 IMPLEMENT_ALIAS_SERIAL_CLASS(wxBrushList
, wxList
)
36 IMPLEMENT_ALIAS_SERIAL_CLASS(wxFontList
, wxList
)
37 IMPLEMENT_ALIAS_SERIAL_CLASS(wxColourDatabase
, wxList
)
38 IMPLEMENT_ALIAS_SERIAL_CLASS(wxBitmapList
, wxList
)
40 void WXSERIAL(wxBitmap
)::StoreObject(wxObjectOutputStream
& s
)
45 void WXSERIAL(wxBitmap
)::LoadObject(wxObjectInputStream
& s
)
50 void WXSERIAL(wxGDIObject
)::StoreObject(wxObjectOutputStream
& s
)
55 bool visible
= ((wxGDIObject
*)Object())->GetVisible();
57 wxDataOutputStream
data_s(s
);
58 data_s
.Write8(visible
);
61 void WXSERIAL(wxGDIObject
)::LoadObject(wxObjectInputStream
& s
)
63 wxDataInputStream
data_s(s
);
65 ((wxGDIObject
*)Object())->SetVisible( data_s
.Read8() );
68 void WXSERIAL(wxColour
)::StoreObject(wxObjectOutputStream
& s
)
70 WXSERIAL(wxGDIObject
)::StoreObject(s
);
75 wxDataOutputStream
data_s(s
);
76 wxColour
*colour
= (wxColour
*)Object();
78 data_s
.Write8(colour
->Red());
79 data_s
.Write8(colour
->Green());
80 data_s
.Write8(colour
->Blue());
83 void WXSERIAL(wxColour
)::LoadObject(wxObjectInputStream
& s
)
85 WXSERIAL(wxGDIObject
)::LoadObject(s
);
87 wxDataInputStream
data_s(s
);
88 wxColour
*colour
= (wxColour
*)Object();
98 void WXSERIAL(wxPen
)::StoreObject(wxObjectOutputStream
& s
)
100 wxPen
*pen
= (wxPen
*)Object();
101 WXSERIAL(wxGDIObject
)::StoreObject(s
);
103 if (s
.FirstStage()) {
104 s
.AddChild(& (pen
->GetColour()) );
108 wxDataOutputStream
data_s(s
);
110 data_s
.Write8( pen
->GetCap() );
111 data_s
.Write8( pen
->GetJoin() );
112 data_s
.Write8( pen
->GetStyle() );
113 data_s
.Write8( pen
->GetWidth() );
116 void WXSERIAL(wxPen
)::LoadObject(wxObjectInputStream
& s
)
118 wxPen
*pen
= (wxPen
*)Object();
119 wxColour
*col
= (wxColour
*) s
.GetChild();
121 WXSERIAL(wxGDIObject
)::LoadObject(s
);
123 wxDataInputStream
data_s(s
);
125 pen
->SetColour(*col
);
126 pen
->SetCap( data_s
.Read8() );
127 pen
->SetJoin( data_s
.Read8() );
128 pen
->SetStyle( data_s
.Read8() );
129 pen
->SetWidth( data_s
.Read8() );
132 void WXSERIAL(wxBrush
)::StoreObject(wxObjectOutputStream
& s
)
134 wxBrush
*brush
= (wxBrush
*)Object();
135 WXSERIAL(wxGDIObject
)::StoreObject(s
);
137 if (s
.FirstStage()) {
138 s
.AddChild( &(brush
->GetColour()) );
139 s
.AddChild( brush
->GetStipple() );
143 wxDataOutputStream
data_s(s
);
144 data_s
.Write8( brush
->GetStyle() );
147 void WXSERIAL(wxBrush
)::LoadObject(wxObjectInputStream
& s
)
149 wxBrush
*brush
= (wxBrush
*)Object();
150 wxColour
*col
= (wxColour
*)s
.GetChild();
151 wxBitmap
*bmap
= (wxBitmap
*)s
.GetChild();
153 WXSERIAL(wxGDIObject
)::LoadObject(s
);
155 wxDataInputStream
data_s(s
);
157 *brush
= wxBrush(*col
, data_s
.Read8());
159 *brush
= wxBrush(bmap
);
162 void WXSERIAL(wxFont
)::StoreObject(wxObjectOutputStream
& s
)
164 wxFont
*font
= (wxFont
*)Object();
166 WXSERIAL(wxGDIObject
)::StoreObject(s
);
171 wxDataOutputStream
data_s(s
);
173 data_s
.Write8( font
->GetPointSize() );
174 data_s
.WriteString( font
->GetFaceName() );
175 data_s
.Write8( font
->GetFamily() );
176 data_s
.Write8( font
->GetStyle() );
177 data_s
.Write8( font
->GetWeight() );
178 data_s
.Write8( font
->GetUnderlined() );
181 void WXSERIAL(wxFont
)::LoadObject(wxObjectInputStream
& s
)
183 wxFont
*font
= (wxFont
*)Object();
185 WXSERIAL(wxGDIObject
)::LoadObject(s
);
187 wxDataInputStream
data_s(s
);
188 int psize
, family
, style
, weight
;
192 psize
= data_s
.Read8();
193 face_name
= data_s
.ReadString();
194 family
= data_s
.Read8();
195 style
= data_s
.Read8();
196 weight
= data_s
.Read8();
197 underlined
= data_s
.Read8();
199 *font
= wxFont(psize
, face_name
, family
, style
, weight
, underlined
);
202 void WXSERIAL(wxImageList
)::StoreObject(wxObjectOutputStream
& s
)
204 wxImageList
*list
= (wxImageList
*)Object();
207 if (s
.FirstStage()) {
208 for (i
=0;i
<list
->GetImageCount();i
++)
209 s
.AddChild(list
->GetBitmap(i
));
212 wxDataOutputStream
data_s(s
);
214 data_s
.Write32(list
->GetImageCount());
217 void WXSERIAL(wxImageList
)::LoadObject(wxObjectInputStream
& s
)
220 wxImageList
*list
= (wxImageList
*)Object();
221 wxDataInputStream
data_s(s
);
223 count
= data_s
.Read32();
224 for (i
=0;i
<count
;i
++)
225 list
->Add(*((wxBitmap
*)s
.GetChild()));