]> git.saurik.com Git - wxWidgets.git/blame - utils/serialize/sergdi.cpp
wxFileConfig ctor now (again) uses the files in the correct locations if the
[wxWidgets.git] / utils / serialize / sergdi.cpp
CommitLineData
123a7fdd
GL
1/////////////////////////////////////////////////////////////////////////////
2// Name: sergdi.cpp
3// Purpose: Serialization: GDI classes
4// Author: Guilhem Lavaux
5// Modified by:
6// Created: July 1998
7// RCS-ID: $Id$
8// Copyright: (c) 1998 Guilhem Lavaux
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
9fdd8384
GL
12#ifdef __GNUG__
13#pragma implementation "sergdi.h"
14#endif
15#include <wx/objstrm.h>
16#include <wx/datstrm.h>
17#include <wx/gdicmn.h>
18#include <wx/bitmap.h>
19#include <wx/font.h>
20#include <wx/pen.h>
21#include <wx/brush.h>
22#include <wx/serbase.h>
c2dd8380 23#include <wx/imaglist.h>
1d44aaf8
GL
24#include <wx/region.h>
25#include <wx/colour.h>
26#include <wx/palette.h>
27#include <wx/dcmemory.h>
9fdd8384
GL
28#include "sergdi.h"
29
30IMPLEMENT_SERIAL_CLASS(wxBitmap, wxObject)
31IMPLEMENT_SERIAL_CLASS(wxGDIObject, wxObject)
1d44aaf8 32IMPLEMENT_SERIAL_CLASS(wxRegion, wxGDIObject)
9fdd8384
GL
33IMPLEMENT_SERIAL_CLASS(wxColour, wxGDIObject)
34IMPLEMENT_SERIAL_CLASS(wxFont, wxGDIObject)
35IMPLEMENT_SERIAL_CLASS(wxPen, wxGDIObject)
36IMPLEMENT_SERIAL_CLASS(wxBrush, wxGDIObject)
c2dd8380 37IMPLEMENT_SERIAL_CLASS(wxImageList, wxObject)
9fdd8384
GL
38
39IMPLEMENT_ALIAS_SERIAL_CLASS(wxPenList, wxList)
40IMPLEMENT_ALIAS_SERIAL_CLASS(wxBrushList, wxList)
41IMPLEMENT_ALIAS_SERIAL_CLASS(wxFontList, wxList)
42IMPLEMENT_ALIAS_SERIAL_CLASS(wxColourDatabase, wxList)
43IMPLEMENT_ALIAS_SERIAL_CLASS(wxBitmapList, wxList)
44
1d44aaf8
GL
45// ----------------------------------------------------------------------------
46
9fdd8384
GL
47void WXSERIAL(wxBitmap)::StoreObject(wxObjectOutputStream& s)
48{
49 // TODO
1d44aaf8
GL
50 // I implemented a basic image saving (maybe I'll need to improve wxWin API).
51
52 int x, y, w, h;
53 wxDataOutputStream data_s(s);
54 wxBitmap *bitmap = (wxBitmap *)Object();
55 wxColour col;
56 wxMemoryDC dc;
57
58 w = bitmap->GetWidth();
59 h = bitmap->GetHeight();
60
61 if (s.FirstStage()) {
62 s.AddChild(bitmap->GetMask());
63 }
64
65 dc.SelectObject(*bitmap);
66
67 data_s.Write16(w);
68 data_s.Write16(h);
69 for (y=0;y<h;y++)
70 for (x=0;x<w;x++) {
71 dc.GetPixel(x, y, &col);
72 data_s.Write8( col.Red() );
73 data_s.Write8( col.Green() );
74 data_s.Write8( col.Blue() );
75 }
9fdd8384
GL
76}
77
78void WXSERIAL(wxBitmap)::LoadObject(wxObjectInputStream& s)
79{
80 // TODO
1d44aaf8
GL
81 // I implemented a basic image loading (maybe I'll need to improve wxWin API).
82 wxDataInputStream data_s(s);
83 wxBitmap *bitmap = (wxBitmap *)Object();
84 wxMemoryDC dc;
85 wxPen pen;
86 int x, y, w, h;
87 int r, g, b;
88
89 w = data_s.Read16();
90 h = data_s.Read16();
91
92 bitmap->Resize(w, h);
93 dc.SelectObject(*bitmap);
94
95 for (y=0;y<h;y++)
96 for (x=0;x<w;x++) {
97 r = data_s.Read8();
98 g = data_s.Read8();
99 b = data_s.Read8();
100 pen.SetColour(r, g, b);
101 dc.SetPen(pen);
102 dc.DrawPoint(x,y);
103 }
9fdd8384
GL
104}
105
1d44aaf8
GL
106// ----------------------------------------------------------------------------
107
9fdd8384
GL
108void WXSERIAL(wxGDIObject)::StoreObject(wxObjectOutputStream& s)
109{
110 if (s.FirstStage())
111 return;
112
113 bool visible = ((wxGDIObject *)Object())->GetVisible();
114
115 wxDataOutputStream data_s(s);
116 data_s.Write8(visible);
117}
118
119void WXSERIAL(wxGDIObject)::LoadObject(wxObjectInputStream& s)
120{
121 wxDataInputStream data_s(s);
122
123 ((wxGDIObject *)Object())->SetVisible( data_s.Read8() );
124}
125
1d44aaf8
GL
126// ----------------------------------------------------------------------------
127
128void WXSERIAL(wxRegion)::StoreObject(wxObjectOutputStream& s)
129{
130 WXSERIAL(wxGDIObject)::StoreObject(s);
131
132 if (s.FirstStage())
133 return;
134
135 wxDataOutputStream data_s(s);
136 wxRect rect = ((wxRegion *)Object())->GetBox();
137
138 data_s.Write16( rect.GetX() );
139 data_s.Write16( rect.GetY() );
140 data_s.Write16( rect.GetWidth() );
141 data_s.Write16( rect.GetHeight() );
142}
143
144void WXSERIAL(wxRegion)::LoadObject(wxObjectInputStream& s)
145{
146 WXSERIAL(wxGDIObject)::LoadObject(s);
147
148 wxDataInputStream data_s(s);
149 wxRegion *region = (wxRegion *)Object();
150 wxRect rect;
151
152 rect.SetX( data_s.Read16() );
153 rect.SetY( data_s.Read16() );
154 rect.SetWidth( data_s.Read16() );
155 rect.SetHeight( data_s.Read16() );
156
157 *region = wxRegion(rect);
158}
159
160// ----------------------------------------------------------------------------
161
9fdd8384
GL
162void WXSERIAL(wxColour)::StoreObject(wxObjectOutputStream& s)
163{
164 WXSERIAL(wxGDIObject)::StoreObject(s);
165
166 if (s.FirstStage())
167 return;
168
169 wxDataOutputStream data_s(s);
170 wxColour *colour = (wxColour *)Object();
171
172 data_s.Write8(colour->Red());
173 data_s.Write8(colour->Green());
174 data_s.Write8(colour->Blue());
175}
176
177void WXSERIAL(wxColour)::LoadObject(wxObjectInputStream& s)
178{
179 WXSERIAL(wxGDIObject)::LoadObject(s);
180
181 wxDataInputStream data_s(s);
182 wxColour *colour = (wxColour *)Object();
183 int r, g, b;
184
185 r = data_s.Read8();
186 g = data_s.Read8();
187 b = data_s.Read8();
188
189 colour->Set(r, g, b);
190}
191
1d44aaf8
GL
192// ----------------------------------------------------------------------------
193
9fdd8384
GL
194void WXSERIAL(wxPen)::StoreObject(wxObjectOutputStream& s)
195{
196 wxPen *pen = (wxPen *)Object();
197 WXSERIAL(wxGDIObject)::StoreObject(s);
198
199 if (s.FirstStage()) {
200 s.AddChild(& (pen->GetColour()) );
201 return;
202 }
203
204 wxDataOutputStream data_s(s);
205
206 data_s.Write8( pen->GetCap() );
207 data_s.Write8( pen->GetJoin() );
208 data_s.Write8( pen->GetStyle() );
209 data_s.Write8( pen->GetWidth() );
210}
211
212void WXSERIAL(wxPen)::LoadObject(wxObjectInputStream& s)
213{
214 wxPen *pen = (wxPen *)Object();
8d43638d 215 wxColour *col = (wxColour *) s.GetChild();
9fdd8384
GL
216
217 WXSERIAL(wxGDIObject)::LoadObject(s);
218
219 wxDataInputStream data_s(s);
220
221 pen->SetColour(*col);
222 pen->SetCap( data_s.Read8() );
223 pen->SetJoin( data_s.Read8() );
224 pen->SetStyle( data_s.Read8() );
225 pen->SetWidth( data_s.Read8() );
226}
227
1d44aaf8 228// ----------------------------------------------------------------------------
9fdd8384
GL
229void WXSERIAL(wxBrush)::StoreObject(wxObjectOutputStream& s)
230{
231 wxBrush *brush = (wxBrush *)Object();
232 WXSERIAL(wxGDIObject)::StoreObject(s);
233
234 if (s.FirstStage()) {
235 s.AddChild( &(brush->GetColour()) );
236 s.AddChild( brush->GetStipple() );
237 return;
238 }
239
240 wxDataOutputStream data_s(s);
241 data_s.Write8( brush->GetStyle() );
242}
243
244void WXSERIAL(wxBrush)::LoadObject(wxObjectInputStream& s)
245{
246 wxBrush *brush = (wxBrush *)Object();
8d43638d
GL
247 wxColour *col = (wxColour *)s.GetChild();
248 wxBitmap *bmap = (wxBitmap *)s.GetChild();
9fdd8384
GL
249
250 WXSERIAL(wxGDIObject)::LoadObject(s);
251
252 wxDataInputStream data_s(s);
253 if (bmap)
254 *brush = wxBrush(*col, data_s.Read8());
255 else
256 *brush = wxBrush(bmap);
257}
258
1d44aaf8 259// ----------------------------------------------------------------------------
9fdd8384
GL
260void WXSERIAL(wxFont)::StoreObject(wxObjectOutputStream& s)
261{
262 wxFont *font = (wxFont *)Object();
263
264 WXSERIAL(wxGDIObject)::StoreObject(s);
265
266 if (s.FirstStage())
267 return;
268
269 wxDataOutputStream data_s(s);
270
271 data_s.Write8( font->GetPointSize() );
272 data_s.WriteString( font->GetFaceName() );
273 data_s.Write8( font->GetFamily() );
274 data_s.Write8( font->GetStyle() );
275 data_s.Write8( font->GetWeight() );
276 data_s.Write8( font->GetUnderlined() );
277}
278
279void WXSERIAL(wxFont)::LoadObject(wxObjectInputStream& s)
280{
281 wxFont *font = (wxFont *)Object();
282
283 WXSERIAL(wxGDIObject)::LoadObject(s);
284
285 wxDataInputStream data_s(s);
286 int psize, family, style, weight;
287 bool underlined;
288 wxString face_name;
289
290 psize = data_s.Read8();
291 face_name = data_s.ReadString();
292 family = data_s.Read8();
293 style = data_s.Read8();
294 weight = data_s.Read8();
295 underlined = data_s.Read8();
296
297 *font = wxFont(psize, face_name, family, style, weight, underlined);
298}
c2dd8380 299
1d44aaf8
GL
300// ----------------------------------------------------------------------------
301
c2dd8380
GL
302void WXSERIAL(wxImageList)::StoreObject(wxObjectOutputStream& s)
303{
304 wxImageList *list = (wxImageList *)Object();
305 int i;
306
307 if (s.FirstStage()) {
308 for (i=0;i<list->GetImageCount();i++)
309 s.AddChild(list->GetBitmap(i));
310 }
311
312 wxDataOutputStream data_s(s);
313
314 data_s.Write32(list->GetImageCount());
315}
316
317void WXSERIAL(wxImageList)::LoadObject(wxObjectInputStream& s)
318{
319 int i, count;
320 wxImageList *list = (wxImageList *)Object();
321 wxDataInputStream data_s(s);
322
323 count = data_s.Read32();
324 for (i=0;i<count;i++)
8d43638d 325 list->Add(*((wxBitmap *)s.GetChild()));
c2dd8380 326}