C++程序  |  174行  |  3.62 KB

/* libs/graphics/animator/SkPathParts.h
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/

#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();
    virtual bool add();
protected:
    SkScalar x;
    SkScalar y;
};

class SkRMoveTo : public SkMoveTo {
    DECLARE_MEMBER_INFO(RMoveTo);
    virtual bool add();
private:
    typedef SkMoveTo INHERITED;
};

class SkLineTo : public SkPathPart {
    DECLARE_MEMBER_INFO(LineTo);
    SkLineTo();
    virtual bool add();
protected:
    SkScalar x;
    SkScalar y;
};

class SkRLineTo : public SkLineTo {
    DECLARE_MEMBER_INFO(RLineTo);
    virtual bool add();
private:
    typedef SkLineTo INHERITED;
};

class SkQuadTo : public SkPathPart {
    DECLARE_MEMBER_INFO(QuadTo);
    SkQuadTo();
    virtual bool add();
protected:
    SkScalar x1;
    SkScalar y1;
    SkScalar x2;
    SkScalar y2;
};

class SkRQuadTo : public SkQuadTo {
    DECLARE_MEMBER_INFO(RQuadTo);
    virtual bool add();
private:
    typedef SkQuadTo INHERITED;
};

class SkCubicTo : public SkPathPart {
    DECLARE_MEMBER_INFO(CubicTo);
    SkCubicTo();
    virtual bool add();
protected:
    SkScalar x1;
    SkScalar y1;
    SkScalar x2;
    SkScalar y2;
    SkScalar x3;
    SkScalar y3;
};

class SkRCubicTo : public SkCubicTo {
    DECLARE_MEMBER_INFO(RCubicTo);
    virtual bool add();
private:
    typedef SkCubicTo INHERITED;
};

class SkClose : public SkPathPart {
    DECLARE_EMPTY_MEMBER_INFO(Close);
    virtual bool add();
};

class SkAddGeom : public SkPathPart {
    DECLARE_PRIVATE_MEMBER_INFO(AddGeom);
    SkAddGeom();
protected:
    int /*SkPath::Direction*/ direction;
};

class SkAddRect : public SkAddGeom {
    DECLARE_MEMBER_INFO(AddRect);
    SkAddRect();
    virtual bool add();
protected:
    SkRect fRect;
private:
    typedef SkAddGeom INHERITED;
};

class SkAddOval : public SkAddRect {
    DECLARE_MEMBER_INFO(AddOval);
    virtual bool add();
private:
    typedef SkAddRect INHERITED;
};

class SkAddCircle : public SkAddGeom {
    DECLARE_MEMBER_INFO(AddCircle);
    SkAddCircle();
    virtual bool add();
private:
    SkScalar radius;
    SkScalar x;
    SkScalar y;
    typedef SkAddGeom INHERITED;
};

class SkAddRoundRect : public SkAddRect {
    DECLARE_MEMBER_INFO(AddRoundRect);
    SkAddRoundRect();
    virtual bool add();
private:
    SkScalar rx;
    SkScalar ry;
    typedef SkAddRect INHERITED;
};

class SkAddPath : public SkPathPart {
    DECLARE_MEMBER_INFO(AddPath);
    SkAddPath();
    virtual bool add();
private:
    typedef SkPathPart INHERITED;
    SkDrawMatrix* matrix;
    SkDrawPath* path;
};

#endif // SkPathParts_DEFINED