summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libflash/shape.h
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/libflash/shape.h') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libflash/shape.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/libflash/shape.h b/core/multimedia/opieplayer/libflash/shape.h
new file mode 100644
index 0000000..120ec94
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/shape.h
@@ -0,0 +1,181 @@
+/////////////////////////////////////////////////////////////
+// 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_ */