PictureDataWriter.h revision ce27f961
1/*
2 * Copyright 2006-2007 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stefano Ceccherini, burton666@libero.it
7 */
8#ifndef _PICTURE_DATA_WRITER_H
9#define _PICTURE_DATA_WRITER_H
10
11
12#include <AffineTransform.h>
13#include <InterfaceDefs.h>
14#include <Font.h>
15#include <OS.h>
16
17#include <stack>
18
19
20class BPositionIO;
21class BRegion;
22
23class PictureDataWriter {
24public:
25								PictureDataWriter();
26								PictureDataWriter(BPositionIO* data);
27	virtual						~PictureDataWriter();
28
29			status_t			SetTo(BPositionIO* data);
30
31			status_t			WriteSetHighColor(const rgb_color& color);
32			status_t			WriteSetLowColor(const rgb_color& color);
33			status_t			WriteSetOrigin(const BPoint& point);
34			status_t			WriteSetDrawingMode(const drawing_mode& mode);
35			status_t			WriteSetPenLocation(const BPoint& point);
36			status_t			WriteSetPenSize(const float& penSize);
37			status_t			WriteSetLineMode(const cap_mode& cap,
38									const join_mode& join,
39									const float& miterLimit);
40			status_t			WriteSetScale(const float& scale);
41			status_t			WriteSetTransform(BAffineTransform transform);
42			status_t			WriteSetPattern(const ::pattern& pattern);
43			status_t			WriteClipToPicture(int32 pictureToken,
44									const BPoint& origin, bool inverse);
45			status_t			WriteSetClipping(const BRegion& region);
46			status_t			WriteClearClipping();
47
48			status_t			WritePushState();
49			status_t			WritePopState();
50
51			status_t			WriteSetFontFamily(const font_family family);
52			status_t			WriteSetFontStyle(const font_style style);
53			status_t			WriteSetFontSpacing(const int32& spacing);
54			status_t			WriteSetFontSize(const float& size);
55			status_t			WriteSetFontRotation(const float& rotation);
56			status_t			WriteSetFontEncoding(const int32& encoding);
57			status_t			WriteSetFontFlags(const int32& flags);
58			status_t			WriteSetFontShear(const float& shear);
59			status_t			WriteSetFontFace(const int32& face);
60
61			status_t			WriteStrokeLine(const BPoint& start,
62									const BPoint& end);
63			status_t			WriteInvertRect(const BRect& rect);
64			status_t			WriteDrawRect(const BRect& rect,
65									const bool& fill);
66			status_t			WriteDrawRoundRect(const BRect& rect,
67									const BPoint& radius, const bool& fill);
68			status_t			WriteDrawEllipse(const BRect& rect,
69									const bool& fill);
70			status_t			WriteDrawArc(const BPoint& center,
71									const BPoint& radius,
72									const float& startTheta,
73									const float& arcTheta, const bool& fill);
74			status_t			WriteDrawPolygon(const int32& numPoints,
75									BPoint* points, const bool& isClosed,
76									const bool& fill);
77			status_t			WriteDrawBezier(const BPoint points[4],
78									const bool& fill);
79			status_t			WriteDrawString(const BPoint& where,
80									const char* string, const int32& length,
81									const escapement_delta& delta);
82			status_t			WriteDrawShape(const int32& opCount,
83									const void* opList, const int32& ptCount,
84									const void* ptList, const bool& fill);
85			status_t			WriteDrawBitmap(const BRect& srcRect,
86									const BRect& dstRect, const int32& width,
87									const int32& height,
88									const int32& bytesPerRow,
89									const int32& colorSpace,
90									const int32& flags,
91									const void* data, const int32& length);
92
93			status_t			WriteDrawPicture(const BPoint& where,
94									const int32& token);
95
96protected:
97	// throw a status_t on error
98			void				BeginOp(const int16& op);
99			void				EndOp();
100			void				WriteData(const void* data, size_t size);
101	template <typename T> void	Write(const T& data)
102									{ WriteData(&data, sizeof(data)); }
103
104private:
105			BPositionIO*		fData;
106			std::stack<off_t>	fStack;
107};
108
109
110#endif // _PICTURE_DATA_WRITER_H
111