1/*
2 * Copyright 2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan Aßmus <superstippi@gmx.de>
7 */
8
9#include "PathSource.h"
10
11#include "PathContainer.h"
12#include "VectorPath.h"
13
14// constructor
15PathSource::PathSource(PathContainer* paths)
16	: VertexSource()
17	, fPaths(paths)
18	, fAGGPath()
19	, fAGGCurvedPath(fAGGPath)
20
21	, fGlobalScale(1.0)
22	, fLastTransformerScale(1.0)
23{
24}
25
26// destructor
27PathSource::~PathSource()
28{
29}
30
31// rewind
32void
33PathSource::rewind(unsigned path_id)
34{
35	fAGGCurvedPath.rewind(path_id);
36}
37
38// vertex
39unsigned
40PathSource::vertex(double* x, double* y)
41{
42	return fAGGCurvedPath.vertex(x, y);
43}
44
45// WantsOpenPaths
46bool
47PathSource::WantsOpenPaths() const
48{
49	return false;
50}
51
52// ApproximationScale
53double
54PathSource::ApproximationScale() const
55{
56	return 1.0;
57}
58
59// #pragma mark -
60
61// Update
62void
63PathSource::Update(bool leavePathsOpen, double approximationScale)
64{
65	fAGGPath.remove_all();
66
67	int32 count = fPaths->CountPaths();
68	for (int32 i = 0; i < count; i++) {
69		fPaths->PathAtFast(i)->GetAGGPathStorage(fAGGPath);
70		if (!leavePathsOpen)
71			fAGGPath.close_polygon();
72	}
73
74	fLastTransformerScale = approximationScale;
75	fAGGCurvedPath.approximation_scale(fLastTransformerScale * fGlobalScale);
76}
77
78// SetGlobalScale
79void
80PathSource::SetGlobalScale(double scale)
81{
82	fGlobalScale = scale;
83	fAGGCurvedPath.approximation_scale(fLastTransformerScale * fGlobalScale);
84}
85
86