1/*
2 * Copyright 2006-2007, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus <superstippi@gmx.de>
7 */
8#ifndef AFFINE_TRANSFORMER_H
9#define AFFINE_TRANSFORMER_H
10
11
12#include "IconBuild.h"
13#include "PathTransformer.h"
14#include "Transformer.h"
15
16#include <agg_conv_transform.h>
17#include <agg_trans_affine.h>
18
19
20_BEGIN_ICON_NAMESPACE
21
22
23typedef agg::conv_transform<VertexSource,
24							agg::trans_affine>	Affine;
25
26class AffineTransformer : public Transformer,
27						  public PathTransformer,
28						  public Affine,
29						  public agg::trans_affine {
30 public:
31	enum {
32		archive_code	= 'affn',
33	};
34
35								AffineTransformer(
36									VertexSource& source);
37								AffineTransformer(
38									VertexSource& source,
39									BMessage* archive);
40
41	virtual						~AffineTransformer();
42
43	// Transformer interface
44	virtual	Transformer*		Clone() const;
45
46	// PathTransformer interface
47	virtual	void				rewind(unsigned path_id);
48    virtual	unsigned			vertex(double* x, double* y);
49
50	virtual	void				SetSource(VertexSource& source);
51
52	virtual	double				ApproximationScale() const;
53
54#ifdef ICON_O_MATIC
55	// IconObject interface
56	virtual	status_t			Archive(BMessage* into,
57										bool deep = true) const;
58
59	virtual	PropertyObject*		MakePropertyObject() const;
60	virtual	bool				SetToPropertyObject(
61									const PropertyObject* object);
62#endif
63};
64
65
66_END_ICON_NAMESPACE
67
68
69#endif	// AFFINE_TRANSFORMER_H
70