/*
* Copyright 2006 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPathParts_DEFINED
#define SkPathParts_DEFINED
#include "SkDisplayable.h"
#include "SkMemberInfo.h"
#include "SkPath.h"
class SkDrawPath;
class SkDrawMatrix;
class SkPathPart : public SkDisplayable {
public:
SkPathPart();
virtual bool add() = 0;
virtual void dirty();
virtual SkDisplayable* getParent() const;
virtual bool setParent(SkDisplayable* parent);
#ifdef SK_DEBUG
virtual bool isPathPart() const { return true; }
#endif
protected:
SkDrawPath* fPath;
};
class SkMoveTo : public SkPathPart {
DECLARE_MEMBER_INFO(MoveTo);
SkMoveTo();
bool add() override;
protected:
SkScalar x;
SkScalar y;
};
class SkRMoveTo : public SkMoveTo {
DECLARE_MEMBER_INFO(RMoveTo);
bool add() override;
private:
typedef SkMoveTo INHERITED;
};
class SkLineTo : public SkPathPart {
DECLARE_MEMBER_INFO(LineTo);
SkLineTo();
bool add() override;
protected:
SkScalar x;
SkScalar y;
};
class SkRLineTo : public SkLineTo {
DECLARE_MEMBER_INFO(RLineTo);
bool add() override;
private:
typedef SkLineTo INHERITED;
};
class SkQuadTo : public SkPathPart {
DECLARE_MEMBER_INFO(QuadTo);
SkQuadTo();
bool add() override;
protected:
SkScalar x1;
SkScalar y1;
SkScalar x2;
SkScalar y2;
};
class SkRQuadTo : public SkQuadTo {
DECLARE_MEMBER_INFO(RQuadTo);
bool add() override;
private:
typedef SkQuadTo INHERITED;
};
class SkCubicTo : public SkPathPart {
DECLARE_MEMBER_INFO(CubicTo);
SkCubicTo();
bool add() override;
protected:
SkScalar x1;
SkScalar y1;
SkScalar x2;
SkScalar y2;
SkScalar x3;
SkScalar y3;
};
class SkRCubicTo : public SkCubicTo {
DECLARE_MEMBER_INFO(RCubicTo);
bool add() override;
private:
typedef SkCubicTo INHERITED;
};
class SkClose : public SkPathPart {
DECLARE_EMPTY_MEMBER_INFO(Close);
bool add() override;
};
class SkAddGeom : public SkPathPart {
DECLARE_PRIVATE_MEMBER_INFO(AddGeom);
SkAddGeom();
protected:
int /*SkPath::Direction*/ direction;
};
class SkAddRect : public SkAddGeom {
DECLARE_MEMBER_INFO(AddRect);
SkAddRect();
bool add() override;
protected:
SkRect fRect;
private:
typedef SkAddGeom INHERITED;
};
class SkAddOval : public SkAddRect {
DECLARE_MEMBER_INFO(AddOval);
bool add() override;
private:
typedef SkAddRect INHERITED;
};
class SkAddCircle : public SkAddGeom {
DECLARE_MEMBER_INFO(AddCircle);
SkAddCircle();
bool add() override;
private:
SkScalar radius;
SkScalar x;
SkScalar y;
typedef SkAddGeom INHERITED;
};
class SkAddRoundRect : public SkAddRect {
DECLARE_MEMBER_INFO(AddRoundRect);
SkAddRoundRect();
bool add() override;
private:
SkScalar rx;
SkScalar ry;
typedef SkAddRect INHERITED;
};
class SkAddPath : public SkPathPart {
DECLARE_MEMBER_INFO(AddPath);
SkAddPath();
bool add() override;
private:
typedef SkPathPart INHERITED;
SkDrawMatrix* matrix;
SkDrawPath* path;
};
#endif // SkPathParts_DEFINED