]> git.saurik.com Git - wxWidgets.git/blob - utils/serialize/sergdi.cpp
a73423430318ecf067a31d05879830698a47b31f
[wxWidgets.git] / utils / serialize / sergdi.cpp
1 #ifdef __GNUG__
2 #pragma implementation "sergdi.h"
3 #endif
4 #include <wx/objstrm.h>
5 #include <wx/datstrm.h>
6 #include <wx/gdicmn.h>
7 #include <wx/bitmap.h>
8 #include <wx/font.h>
9 #include <wx/pen.h>
10 #include <wx/brush.h>
11 #include <wx/serbase.h>
12 #include "sergdi.h"
13
14 IMPLEMENT_SERIAL_CLASS(wxBitmap, wxObject)
15 IMPLEMENT_SERIAL_CLASS(wxGDIObject, wxObject)
16 IMPLEMENT_SERIAL_CLASS(wxColour, wxGDIObject)
17 IMPLEMENT_SERIAL_CLASS(wxFont, wxGDIObject)
18 IMPLEMENT_SERIAL_CLASS(wxPen, wxGDIObject)
19 IMPLEMENT_SERIAL_CLASS(wxBrush, wxGDIObject)
20
21 IMPLEMENT_ALIAS_SERIAL_CLASS(wxPenList, wxList)
22 IMPLEMENT_ALIAS_SERIAL_CLASS(wxBrushList, wxList)
23 IMPLEMENT_ALIAS_SERIAL_CLASS(wxFontList, wxList)
24 IMPLEMENT_ALIAS_SERIAL_CLASS(wxColourDatabase, wxList)
25 IMPLEMENT_ALIAS_SERIAL_CLASS(wxBitmapList, wxList)
26
27 void WXSERIAL(wxBitmap)::StoreObject(wxObjectOutputStream& s)
28 {
29 // TODO
30 }
31
32 void WXSERIAL(wxBitmap)::LoadObject(wxObjectInputStream& s)
33 {
34 // TODO
35 }
36
37 void WXSERIAL(wxGDIObject)::StoreObject(wxObjectOutputStream& s)
38 {
39 if (s.FirstStage())
40 return;
41
42 bool visible = ((wxGDIObject *)Object())->GetVisible();
43
44 wxDataOutputStream data_s(s);
45 data_s.Write8(visible);
46 }
47
48 void WXSERIAL(wxGDIObject)::LoadObject(wxObjectInputStream& s)
49 {
50 wxDataInputStream data_s(s);
51
52 ((wxGDIObject *)Object())->SetVisible( data_s.Read8() );
53 }
54
55 void WXSERIAL(wxColour)::StoreObject(wxObjectOutputStream& s)
56 {
57 WXSERIAL(wxGDIObject)::StoreObject(s);
58
59 if (s.FirstStage())
60 return;
61
62 wxDataOutputStream data_s(s);
63 wxColour *colour = (wxColour *)Object();
64
65 data_s.Write8(colour->Red());
66 data_s.Write8(colour->Green());
67 data_s.Write8(colour->Blue());
68 }
69
70 void WXSERIAL(wxColour)::LoadObject(wxObjectInputStream& s)
71 {
72 WXSERIAL(wxGDIObject)::LoadObject(s);
73
74 wxDataInputStream data_s(s);
75 wxColour *colour = (wxColour *)Object();
76 int r, g, b;
77
78 r = data_s.Read8();
79 g = data_s.Read8();
80 b = data_s.Read8();
81
82 colour->Set(r, g, b);
83 }
84
85 void WXSERIAL(wxPen)::StoreObject(wxObjectOutputStream& s)
86 {
87 wxPen *pen = (wxPen *)Object();
88 WXSERIAL(wxGDIObject)::StoreObject(s);
89
90 if (s.FirstStage()) {
91 s.AddChild(& (pen->GetColour()) );
92 return;
93 }
94
95 wxDataOutputStream data_s(s);
96
97 data_s.Write8( pen->GetCap() );
98 data_s.Write8( pen->GetJoin() );
99 data_s.Write8( pen->GetStyle() );
100 data_s.Write8( pen->GetWidth() );
101 }
102
103 void WXSERIAL(wxPen)::LoadObject(wxObjectInputStream& s)
104 {
105 wxPen *pen = (wxPen *)Object();
106 wxColour *col = (wxColour *) s.GetChild(0);
107
108 s.RemoveChildren(1);
109
110 WXSERIAL(wxGDIObject)::LoadObject(s);
111
112 wxDataInputStream data_s(s);
113
114 pen->SetColour(*col);
115 pen->SetCap( data_s.Read8() );
116 pen->SetJoin( data_s.Read8() );
117 pen->SetStyle( data_s.Read8() );
118 pen->SetWidth( data_s.Read8() );
119 }
120
121 void WXSERIAL(wxBrush)::StoreObject(wxObjectOutputStream& s)
122 {
123 wxBrush *brush = (wxBrush *)Object();
124 WXSERIAL(wxGDIObject)::StoreObject(s);
125
126 if (s.FirstStage()) {
127 s.AddChild( &(brush->GetColour()) );
128 s.AddChild( brush->GetStipple() );
129 return;
130 }
131
132 wxDataOutputStream data_s(s);
133 data_s.Write8( brush->GetStyle() );
134 }
135
136 void WXSERIAL(wxBrush)::LoadObject(wxObjectInputStream& s)
137 {
138 wxBrush *brush = (wxBrush *)Object();
139 wxColour *col = (wxColour *)s.GetChild(0);
140 wxBitmap *bmap = (wxBitmap *)s.GetChild(1);
141
142 s.RemoveChildren(2);
143
144 WXSERIAL(wxGDIObject)::LoadObject(s);
145
146 wxDataInputStream data_s(s);
147 if (bmap)
148 *brush = wxBrush(*col, data_s.Read8());
149 else
150 *brush = wxBrush(bmap);
151 }
152
153 void WXSERIAL(wxFont)::StoreObject(wxObjectOutputStream& s)
154 {
155 wxFont *font = (wxFont *)Object();
156
157 WXSERIAL(wxGDIObject)::StoreObject(s);
158
159 if (s.FirstStage())
160 return;
161
162 wxDataOutputStream data_s(s);
163
164 data_s.Write8( font->GetPointSize() );
165 data_s.WriteString( font->GetFaceName() );
166 data_s.Write8( font->GetFamily() );
167 data_s.Write8( font->GetStyle() );
168 data_s.Write8( font->GetWeight() );
169 data_s.Write8( font->GetUnderlined() );
170 }
171
172 void WXSERIAL(wxFont)::LoadObject(wxObjectInputStream& s)
173 {
174 wxFont *font = (wxFont *)Object();
175
176 WXSERIAL(wxGDIObject)::LoadObject(s);
177
178 wxDataInputStream data_s(s);
179 int psize, family, style, weight;
180 bool underlined;
181 wxString face_name;
182
183 psize = data_s.Read8();
184 face_name = data_s.ReadString();
185 family = data_s.Read8();
186 style = data_s.Read8();
187 weight = data_s.Read8();
188 underlined = data_s.Read8();
189
190 *font = wxFont(psize, face_name, family, style, weight, underlined);
191 }