home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / flash078.zip / flashsource-r0_7_8.zip / FShape.h < prev    next >
C/C++ Source or Header  |  2001-08-03  |  11KB  |  375 lines

  1. #ifndef FSHAPE_H_FILE
  2. #define FSHAPE_H_FILE
  3.  
  4. #include <vector>
  5. #include "FBase.h"
  6.  
  7. class FlashShapeCommon
  8. {
  9. public:
  10.         FlashShapeCommon() : NBitsFillStyle(0), NBitsLineStyle(0), DefineTagVersion(1), flags(0) {}
  11.  
  12.         int NBitsFillStyle;
  13.     int NBitsLineStyle;
  14.     int DefineTagVersion;
  15.         int flags;
  16. };
  17. class FlashFillStyle : public FlashVersionEnabled
  18. {
  19. public:    
  20.     FlashFillStyle() : type(0) {}
  21.     FlashFillStyle(UBYTE _type) : type(_type){}
  22.     
  23.         virtual ~FlashFillStyle() {}
  24.  
  25.     virtual void Write(std::ostream &out) {}
  26.     virtual void Read(std::istream &in) {}
  27.     
  28. protected:
  29.     UBYTE type;
  30.     
  31.     friend std::ostream &operator<< (std::ostream &out, FlashFillStyle &data);
  32.     friend std::istream &operator>> (std::istream &in,  FlashFillStyle &data);
  33.  
  34. };
  35.     /* FILL TYPES
  36.         0x00 - solid
  37.         0x10 - linear gradient
  38.         0x12 - radial gradient
  39.         0x40 - tiled bitmap
  40.         0x41 - clipped bitmap
  41.     */
  42. class FlashFillStyleArray;
  43. class FlashFillStyleSolid : public FlashFillStyle 
  44. {
  45. public:    
  46.     FlashFillStyleSolid(FlashRGB  &color) : FlashFillStyle(0), r1(color) { type = 0; }
  47.         virtual ~FlashFillStyleSolid() {}
  48.  
  49.     virtual void Write(std::ostream &out);
  50.     virtual void Read(std::istream &in);
  51.     
  52.     FlashRGB GetRGB() { return r1; }
  53.     void SetRGB(FlashRGB &r) { r1=r; }
  54. private:
  55.     friend std::istream &operator>> (std::istream &in,  FlashFillStyleArray &data);
  56.     FlashFillStyleSolid() {}
  57.  
  58.     FlashRGB r1;
  59. };
  60.  
  61. class FlashGradientRecord : public FlashVersionEnabled
  62. {
  63. public:    
  64.         FlashGradientRecord() {}
  65.         virtual ~FlashGradientRecord() {}
  66.     void AddGradient(UBYTE ratio, FlashRGB &r) { colors.push_back(r); ratios.push_back(ratio); }
  67.  
  68.     
  69. private:
  70.  
  71.     std::vector<UBYTE> ratios;
  72.     std::vector<FlashRGB> colors;
  73.     
  74.     friend std::ostream &operator<< (std::ostream &out, FlashGradientRecord &data);
  75.     friend std::istream &operator>> (std::istream &in,  FlashGradientRecord &data);
  76.  
  77. };
  78.  
  79. class FlashFillStyleGradient : public FlashFillStyle
  80. {
  81. public:    
  82.     FlashFillStyleGradient(FlashMatrix &m, FlashGradientRecord &g) : FlashFillStyle(0x10), matrix(m), gradient(g){    type = 0x10; }
  83.         virtual ~FlashFillStyleGradient() {}
  84.     void SetLinear() { type = 0x10; }
  85.     void SetRadial() { type = 0x12; }
  86.  
  87.  
  88.     virtual void Write(std::ostream &out);
  89.     virtual void Read(std::istream &in);
  90.  
  91. private:
  92.     friend std::istream &operator>> (std::istream &in,  FlashFillStyleArray &data);
  93.         FlashFillStyleGradient() {}
  94.  
  95.     FlashMatrix matrix;
  96.     FlashGradientRecord gradient;    
  97. };
  98.  
  99. class FlashFillStyleBitmap : public FlashFillStyle
  100. {
  101.  
  102. public:
  103.         FlashFillStyleBitmap(UWORD _bitmapID, FlashMatrix &m, bool _tiled=false) : bitmapID(_bitmapID), matrix(m), tiled(_tiled) { type = tiled ? 0x40 : 0x41;}
  104.         virtual ~FlashFillStyleBitmap() {}
  105.     virtual void Write(std::ostream &out);
  106.     virtual void Read(std::istream &in);
  107.  
  108. private:
  109.     friend std::istream &operator>> (std::istream &in,  FlashFillStyleArray &data);
  110.     FlashFillStyleBitmap() {}
  111.         
  112.         UWORD bitmapID;
  113.         FlashMatrix matrix;
  114.         bool tiled;
  115. };
  116. class FlashFillStyleArray : public FlashVersionEnabled
  117. {
  118. public:
  119.     FlashFillStyleArray() {}
  120.         virtual ~FlashFillStyleArray() {}
  121.     size_t AddFillStyle(FlashFillStyle *s)
  122.     {
  123.         styles.push_back(s);
  124.         return styles.size();
  125.     }
  126.     
  127.     int GetNBits();
  128.     
  129. private:
  130.     std::vector<FlashFillStyle*> styles;
  131.     gc_vector<FlashFillStyle*> gc;
  132.     friend std::ostream &operator<< (std::ostream &out, FlashFillStyleArray &data);
  133.     friend std::istream &operator>> (std::istream &in,  FlashFillStyleArray &data);
  134.     
  135. };
  136. class FlashLineStyleArray;
  137. class FlashLineStyle : public FlashVersionEnabled
  138. {
  139. public:
  140.         FlashLineStyle(UWORD _width, FlashRGB &_color) : width(_width), color(_color) {}
  141.     
  142.     friend std::ostream &operator<< (std::ostream &out, FlashLineStyle &data);
  143.     friend std::istream &operator>> (std::istream &in,  FlashLineStyle &data);
  144.  
  145. private:
  146.     friend std::istream &operator>> (std::istream &in,  FlashLineStyleArray &data);
  147.     FlashLineStyle() {}
  148.  
  149.         UWORD width;
  150.     FlashRGB color;    
  151.  
  152. };
  153.  
  154. class FlashLineStyleArray : public FlashVersionEnabled
  155. {
  156. public:
  157.     FlashLineStyleArray() {}
  158.         virtual ~FlashLineStyleArray() {}
  159.  
  160.     size_t AddLineStyle(FlashLineStyle *s)
  161.     {
  162.         styles.push_back(s);
  163.         return styles.size();
  164.     }
  165.     int GetNBits();
  166. private:
  167.     std::vector<FlashLineStyle*> styles;
  168.     gc_vector<FlashLineStyle*> gc;
  169.     friend std::ostream &operator<< (std::ostream &out, FlashLineStyleArray &data);
  170.     friend std::istream &operator>> (std::istream &in,  FlashLineStyleArray &data);
  171. };
  172.  
  173. class FlashShapeRecord : public FlashVersionEnabled
  174. {
  175. public:
  176.         FlashShapeRecord() {};
  177.         virtual ~FlashShapeRecord() {};
  178.     virtual void Write(BitBuffer &out, FlashShapeCommon &c)=0;
  179.     virtual void Read(BitStreamIn &in, FlashShapeCommon &data)=0;
  180. };
  181. class FlashShape;
  182. class FlashShapeWithStyle;
  183. class FlashShapeRecordStraight : public FlashShapeRecord
  184. {
  185. public:    
  186.         FlashShapeRecordStraight(SWORD _dx, SWORD _dy) : dx(_dx), dy(_dy) {}
  187.         virtual ~FlashShapeRecordStraight() {}
  188.     virtual void Write(BitBuffer &out, FlashShapeCommon &data);
  189.     virtual void Read(BitStreamIn &in, FlashShapeCommon &data);
  190. private:
  191.     FlashShapeRecordStraight() {}
  192.     SWORD dx;
  193.     SWORD dy;
  194.     friend class FlashShape;
  195.     friend std::istream &operator>> (std::istream &in,   FlashShape &data);
  196.     friend std::istream &operator>> (std::istream &in,   FlashShapeWithStyle &data);
  197.  
  198. };
  199. class FlashShapeRecordEnd : public FlashShapeRecord
  200. {
  201. public:
  202.         FlashShapeRecordEnd() {}
  203.         virtual ~FlashShapeRecordEnd() {}
  204.     virtual void Write(BitBuffer &out, FlashShapeCommon &data);
  205.     virtual void Read(BitStreamIn &in, FlashShapeCommon &data);
  206. };
  207.  
  208. class FlashShapeRecordCurved : public FlashShapeRecord
  209. {
  210. public:    
  211.         FlashShapeRecordCurved(SWORD _dxc, SWORD _dyc, SWORD _dxa, SWORD _dya) : 
  212.       dxa(_dxa), dya(_dya), dxc(_dxc), dyc(_dyc)  {}
  213.         virtual ~FlashShapeRecordCurved() {};
  214.     virtual void Write(BitBuffer &out, FlashShapeCommon &data);
  215.     virtual void Read(BitStreamIn &in, FlashShapeCommon &data);
  216. private:
  217.     FlashShapeRecordCurved() {}
  218.     SWORD dxa;
  219.     SWORD dya;
  220.     SWORD dxc;
  221.     SWORD dyc;
  222.     friend class FlashShape;
  223.     friend std::istream &operator>> (std::istream &in,   FlashShape &data);
  224.     friend std::istream &operator>> (std::istream &in,   FlashShapeWithStyle &data);
  225. };
  226.  
  227. class FlashShapeRecordChange : public FlashShapeRecord
  228. {
  229. public:
  230.     FlashShapeRecordChange();
  231.     FlashShapeRecordChange(SDWORD dx, SDWORD dy);
  232.     virtual ~FlashShapeRecordChange() {}
  233.     
  234.     void NewFillStyles(FlashFillStyleArray &a, FlashLineStyleArray &c);
  235.  
  236.     void ChangeMoveDelta(SDWORD _dx, SDWORD _dy)
  237.     {
  238.         moveto=true;
  239.         
  240.         dx=_dx;
  241.         dy=_dy;
  242.     }
  243.     void ChangeFillStyle0(UWORD style);
  244.     void ChangeFillStyle1(UWORD style);
  245.     void ChangeLineStyle(UWORD style);
  246.  
  247.     virtual void Write(BitBuffer &out, FlashShapeCommon &data);
  248.     virtual void Read(BitStreamIn &in, FlashShapeCommon &data);
  249. private:
  250.     bool newstyles;
  251.     bool linestyle;
  252.     bool fillstyle1;
  253.     bool fillstyle0;
  254.     bool moveto;
  255.  
  256.     UWORD stylefill0;
  257.     UWORD stylefill1;
  258.     UWORD styleline;
  259.     SDWORD dx;
  260.     SDWORD dy;
  261.  
  262.     FlashFillStyleArray fillstyles;
  263.     FlashLineStyleArray linestyles;
  264.     
  265.     friend class FlashShape;
  266.     friend std::istream &operator>> (std::istream &in,   FlashShape &data);
  267.     friend std::istream &operator>> (std::istream &in,   FlashShapeWithStyle &data);
  268. };
  269. class FlashShape
  270. {
  271. public:
  272.     FlashShape() {}
  273.     ~FlashShape() {}
  274.  
  275.     FlashRect GetBounds();
  276.     void AddRecord(const FlashShapeRecordChange &r)
  277.     {
  278.         record_change.push_back(r);
  279.         record_sequencer.push_back(flash_pair<int,long>(0,record_change.size()-1));
  280.     }
  281.     void AddRecord(const FlashShapeRecordStraight &r)
  282.     {
  283.         record_straight.push_back(r);
  284.         record_sequencer.push_back(flash_pair<int,long>(1,record_straight.size()-1));
  285.     }
  286.     void AddRecord(const FlashShapeRecordCurved &r)
  287.     {
  288.         record_curved.push_back(r);
  289.         record_sequencer.push_back(flash_pair<int,long>(2,record_curved.size()-1));
  290.     }
  291. protected:
  292.     std::vector<FlashShapeRecordChange> record_change;
  293.     std::vector<FlashShapeRecordStraight> record_straight;
  294.     std::vector<FlashShapeRecordCurved> record_curved;
  295.  
  296.     std::vector<flash_pair<int,long> > record_sequencer;
  297.  
  298.     friend std::ostream &operator<< (std::ostream &out,  FlashShape &data);
  299.     friend std::istream &operator>> (std::istream &in,   FlashShape &data);
  300.  
  301. };
  302. class FlashShapeWithStyle : public FlashVersionEnabled, public FlashShape
  303. {
  304. public:
  305.     FlashShapeWithStyle(){}
  306.         virtual ~FlashShapeWithStyle(){}
  307.     void SetFillStyleArray(FlashFillStyleArray &_fillstyles)
  308.     {
  309.         fillstyles=_fillstyles;
  310.     }
  311.     void SetLineStyleArray(FlashLineStyleArray &_linestyles)
  312.     {
  313.         linestyles=_linestyles;
  314.     }
  315. private:
  316.     FlashFillStyleArray fillstyles;
  317.     FlashLineStyleArray linestyles;
  318.  
  319.     friend std::ostream &operator<< (std::ostream &out,  FlashShapeWithStyle &data);
  320.     friend std::istream &operator>> (std::istream &in,   FlashShapeWithStyle &data);
  321. };
  322. class FlashTagDefineShapeBase : public FlashTag, public FlashIDEnabled
  323. {
  324. DEFINE_RW_INTERFACE
  325. public:
  326.     FlashTagDefineShapeBase(FlashShapeWithStyle &s) : shapes(s) { }
  327.     ~FlashTagDefineShapeBase() {}
  328.     
  329.     FlashShapeWithStyle &GetShapes() { return shapes; }
  330.     FlashRect rimport;
  331. private:
  332.     friend std::ostream &operator<< (std::ostream &out, FlashTagDefineShapeBase &data);
  333.     friend std::istream &operator>> (std::istream &in,  FlashTagDefineShapeBase &data);
  334.  
  335.     FlashShapeWithStyle shapes;
  336.     
  337.     
  338.     friend class FlashImporter;
  339.  
  340. protected:
  341.     FlashTagDefineShapeBase() {}
  342.     int version;
  343.     int header;
  344. };
  345. class FlashTagDefineShape1 : public FlashTagDefineShapeBase
  346. {
  347.     DEFINE_RW_INTERFACE
  348. public:
  349.     FlashTagDefineShape1(FlashShapeWithStyle &s) : FlashTagDefineShapeBase(s) { header=2;  version=1; }
  350.     friend class FlashImporter;
  351. private:
  352.     FlashTagDefineShape1() { header=2;  version=1; }
  353. };
  354.  
  355. class FlashTagDefineShape2 : public FlashTagDefineShapeBase
  356. {
  357.     DEFINE_RW_INTERFACE
  358. public:
  359.     FlashTagDefineShape2(FlashShapeWithStyle &s) : FlashTagDefineShapeBase(s) { header=22; version=2; }
  360.     friend class FlashImporter;
  361. private:
  362.     FlashTagDefineShape2() { header=22; version=2; }
  363. };
  364. class FlashTagDefineShape3 : public FlashTagDefineShapeBase
  365. {
  366.     DEFINE_RW_INTERFACE
  367. public:    
  368.     FlashTagDefineShape3(FlashShapeWithStyle &s) : FlashTagDefineShapeBase(s) { header=32; version=3; }
  369.     friend class FlashImporter;
  370. private:
  371.     FlashTagDefineShape3() { header=32; version=3; }
  372.  
  373. };
  374. #endif
  375.