📄 shape.h
字号:
/////////////////////////////////////////////////////////////
// Flash Plugin and Player
// Copyright (C) 1998,1999 Olivier Debon
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
///////////////////////////////////////////////////////////////
#ifndef _SHAPE_H_
#define _SHAPE_H_
struct LineStyleDef {
long width;
Color color;
FillStyleDef fillstyle;
};
enum ShapeRecordType {
shapeNonEdge,
shapeCurve,
shapeLine
};
enum ShapeFlags {
flagsMoveTo = 0x01,
flagsFill0 = 0x02,
flagsFill1 = 0x04,
flagsLine = 0x08,
flagsNewStyles = 0x10,
flagsEndShape = 0x80
};
struct ShapeRecord {
ShapeRecordType type;
// Non Edge
ShapeFlags flags;
long x,y; // Moveto
long fillStyle0;
long fillStyle1;
long lineStyle;
FillStyleDef *newFillStyles; // Array
long nbNewFillStyles;
LineStyleDef *newLineStyles; // Array
long nbNewLineStyles;
// Curve Edge
long ctrlX, ctrlY;
long anchorX, anchorY;
// Straight Line
long dX,dY;
struct ShapeRecord *next;
ShapeRecord() {
shaperecord_size += sizeof(ShapeRecord);
shaperecord_nb++;
}
};
enum ShapeAction {
ShapeDraw,
ShapeGetRegion
};
struct LineSegment {
long x1,y1,x2,y2;
char first;
LineStyleDef *l;
struct LineSegment *next;
};
struct Path {
long lastX,lastY;
int nb_edges;
int nb_segments;
};
struct StyleList {
FillStyleDef *newFillStyles; // Array
long nbNewFillStyles;
LineStyleDef *newLineStyles; // Array
long nbNewLineStyles;
StyleList *next;
};
/* fast bit parser */
struct BitParser {
// Bit Handling
S32 m_bitPos;
U32 m_bitBuf;
U8 *ptr;
};
class Shape;
/* state of the shape parser */
struct ShapeParser {
Dict *dict; /* XXX: should be put elsewhere */
BitParser bit_parser;
S32 m_nFillBits;
S32 m_nLineBits;
StyleList *style_list;
Matrix *matrix;
Path curPath;
int reverse;
/* line rasteriser */
LineSegment *first_line,*last_line;
GraphicDevice *gd;
Cxform *cxform;
Shape *shape;
FillStyleDef *f0;
FillStyleDef *f1;
LineStyleDef *l;
};
class Shape : public Character {
public:
int defLevel; // 1,2 or 3
Rect boundary;
FillStyleDef defaultFillStyle;
LineStyleDef defaultLineStyle;
Matrix lastMat;
/* parsing for the rendering stage (saves a lot of memory &
may not reduce significantly the size). These variables
should be in another structure (no state need to be
maintained between two renderings) */
int getAlpha, getStyles;
unsigned char *file_ptr;
Dict *dict; /* XXX: should be put elsewhere */
protected:
void drawLines(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, long, long);
void buildSegmentList(Segment **segs, int height, long &n, Matrix *matrix, int update, int reverse);
Segment *progressSegments(Segment *, long);
Segment *newSegments(Segment *, Segment *);
public:
Shape(long id = 0 , int level = 1);
~Shape();
void setBoundingBox(Rect rect);
int execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform);
void getRegion(GraphicDevice *gd, Matrix *matrix,
void *id, ScanLineFunc scan_line_func);
void getBoundingBox(Rect *bb, DisplayListEntry *);
#ifdef DUMP
void dump(BitStream *bs);
void dumpShapeRecords(BitStream *bs, int alpha);
void dumpFillStyles(BitStream *bs, FillStyleDef *defs, long n, int alpha);
void dumpLineStyles(BitStream *bs, LineStyleDef *defs, long n, int alpha);
void checkBitmaps(BitStream *bs);
#endif
};
#endif /* _SHAPE_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -