00001 #ifndef FLASH_MORPH_H_FILE 00002 #define FLASH_MORPH_H_FILE 00003 #include "FShape.h" 00004 #include <vector> 00005 00006 class FlashMorphGradientRecord 00007 { 00008 public: 00009 FlashMorphGradientRecord(unsigned char _r1, FlashRGB _c1, unsigned char _r2, FlashRGB _c2) : r1(_r1), c1(_c1), r2(_r2), c2(_c2) {} 00010 void Write(std::ostream &out); 00011 private: 00012 unsigned char r1; 00013 FlashRGB c1; 00014 unsigned char r2; 00015 FlashRGB c2; 00016 }; 00017 00018 class FlashMorphGradient 00019 { 00020 public: 00021 FlashMorphGradient() {} 00022 00023 void AddRecord(const FlashMorphGradientRecord &r) { records.push_back(r); } 00024 void Write(std::ostream &out); 00025 private: 00026 std::vector<FlashMorphGradientRecord> records; 00027 }; 00028 00029 class FlashMorphFillStyle 00030 { 00031 public: 00032 FlashMorphFillStyle() {} 00033 virtual void Write(std::ostream &out) = 0; 00034 }; 00035 00036 class FlashMorphFillStyleSolid : public FlashMorphFillStyle 00037 { 00038 public: 00039 FlashMorphFillStyleSolid(FlashRGB &_c1, FlashRGB &_c2) : c1(_c1), c2(_c2) {} 00040 virtual void Write(std::ostream &out); 00041 private: 00042 FlashRGB c1; 00043 FlashRGB c2; 00044 }; 00045 00046 class FlashMorphFillStyleLinear : public FlashMorphFillStyle 00047 { 00048 public: 00049 FlashMorphFillStyleLinear(FlashMatrix &_fm1, FlashMatrix &_fm2, FlashMorphGradient& _fmg) : fm1(_fm1), fm2(_fm2), fmg(_fmg) {} 00050 virtual void Write(std::ostream &out); 00051 private: 00052 FlashMatrix fm1; 00053 FlashMatrix fm2; 00054 FlashMorphGradient fmg; 00055 00056 }; 00057 class FlashMorphFillStyleRadial : public FlashMorphFillStyle 00058 { 00059 public: 00060 FlashMorphFillStyleRadial(FlashMatrix &_fm1, FlashMatrix &_fm2, FlashMorphGradient& _fmg) : fm1(_fm1), fm2(_fm2), fmg(_fmg) {} 00061 virtual void Write(std::ostream &out); 00062 private: 00063 FlashMatrix fm1; 00064 FlashMatrix fm2; 00065 FlashMorphGradient fmg; 00066 }; 00067 class FlashMorphFillStyleBitmap : public FlashMorphFillStyle 00068 { 00069 public: 00070 FlashMorphFillStyleBitmap(UWORD _bitmapID, FlashMatrix &_mstart, FlashMatrix &_mend, bool _tiled=false) : 00071 bitmapID(_bitmapID), mstart(_mstart), mend(_mend), tiled(_tiled) {} 00072 virtual void Write(std::ostream &out); 00073 private: 00074 UWORD bitmapID; 00075 FlashMatrix mstart; 00076 FlashMatrix mend; 00077 bool tiled; 00078 00079 }; 00080 00081 class FlashMorphFillStyles 00082 { 00083 public: 00084 FlashMorphFillStyles() {} 00085 size_t AddFillStyle(FlashMorphFillStyle* s) { fillStyles.push_back(s); return fillStyles.size();} 00086 void Write(std::ostream &out); 00087 private: 00088 std::vector<FlashMorphFillStyle*> fillStyles; 00089 }; 00090 00091 class FlashMorphLineStyle 00092 { 00093 public: 00094 FlashMorphLineStyle(UWORD _w1, FlashRGB _c1, UWORD _w2, FlashRGB _c2) : w1(_w1), c1(_c1), w2(_w2), c2(_c2) {} 00095 void Write(std::ostream &out); 00096 private: 00097 UWORD w1; 00098 FlashRGB c1; 00099 UWORD w2; 00100 FlashRGB c2; 00101 00102 }; 00103 00104 class FlashMorphLineStyles 00105 { 00106 public: 00107 FlashMorphLineStyles() {} 00108 size_t AddFillStyle(FlashMorphLineStyle &s) { lineStyles.push_back(s); return lineStyles.size();} 00109 void Write(std::ostream &out); 00110 private: 00111 std::vector<FlashMorphLineStyle> lineStyles; 00112 }; 00113 00114 class FlashTagDefineMorphShape : public FlashTag, public FlashIDEnabled 00115 { 00116 DEFINE_RW_INTERFACE 00117 public: 00118 FlashTagDefineMorphShape(FlashShape &_s1, FlashShape &_s2) : s1(_s1), s2(_s2) {} 00119 00120 void SetMorphFillStyles(FlashMorphFillStyles &s) { fs1=s; } 00121 void SetMorphLineStyles(FlashMorphLineStyles &s) { fs2=s; } 00122 00123 friend std::ostream &operator<< (std::ostream &out, FlashTagDefineMorphShape &data); 00124 friend std::istream &operator>> (std::istream &in, FlashTagDefineMorphShape &data); 00125 00126 private: 00127 FlashShape s1; 00128 FlashShape s2; 00129 00130 FlashMorphFillStyles fs1; 00131 FlashMorphLineStyles fs2; 00132 00133 00134 }; 00135 00136 #endif