Gnash  0.8.10
LineStyle.h
Go to the documentation of this file.
00001 // LineStyle.h   Line style types.
00002 // 
00003 //   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
00004 //   Free Software Foundation, Inc
00005 // 
00006 // This program is free software; you can redistribute it and/or modify
00007 // it under the terms of the GNU General Public License as published by
00008 // the Free Software Foundation; either version 3 of the License, or
00009 // (at your option) any later version.
00010 // 
00011 // This program is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU General Public License for more details.
00015 // 
00016 // You should have received a copy of the GNU General Public License
00017 // along with this program; if not, write to the Free Software
00018 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00019 //
00020 // Based on public domain work by Thatcher Ulrich <tu@tulrich.com> 2003
00021 
00022 #ifndef GNASH_LINESTYLE_H
00023 #define GNASH_LINESTYLE_H
00024 
00025 #include "RGBA.h"
00026 #include "SWF.h"
00027 
00028 namespace gnash {
00029     class SWFStream;
00030     class movie_definition;
00031     class RunResources;
00032 }
00033 
00034 namespace gnash {
00035 
00036 enum CapStyle {
00037     CAP_ROUND = 0,
00038     CAP_NONE = 1,
00039     CAP_SQUARE = 2
00040 };
00041 
00042 enum JoinStyle {
00043     JOIN_ROUND = 0,
00044     JOIN_BEVEL = 1,
00045     JOIN_MITER = 2
00046 };
00047   
00049 class LineStyle 
00050 {
00051 public:
00052 
00054     LineStyle();
00055 
00069     LineStyle(boost::uint16_t width, const rgba& color,
00070             bool scaleThicknessVertically=true,
00071             bool scaleThicknessHorizontally=true,
00072             bool pixelHinting=false,
00073             bool noClose=false,
00074             CapStyle startCapStyle=CAP_ROUND,
00075             CapStyle endCapStyle=CAP_ROUND,
00076             JoinStyle joinStyle=JOIN_ROUND,
00077             float miterLimitFactor=1.0f
00078         )
00079         :
00080         m_width(width),
00081         m_color(color),
00082         _scaleVertically(scaleThicknessVertically),
00083         _scaleHorizontally(scaleThicknessHorizontally),
00084         _pixelHinting(pixelHinting),
00085         _noClose(noClose),
00086         _startCapStyle(startCapStyle),
00087         _endCapStyle(endCapStyle),
00088         _joinStyle(joinStyle),
00089         _miterLimitFactor(miterLimitFactor)
00090     {
00091     }
00092 
00094     //
00100     void read(SWFStream& in, SWF::TagType t, movie_definition& md,
00101             const RunResources& r);
00102     
00105     void read_morph(SWFStream& in, SWF::TagType t, movie_definition& md,
00106             const RunResources& r, LineStyle *pOther);
00107 
00109     boost::uint16_t getThickness() const {
00110         return m_width;
00111     }
00112 
00114     bool scaleThicknessVertically() const {
00115         return _scaleVertically;
00116     }
00117 
00119     bool scaleThicknessHorizontally() const {
00120         return _scaleHorizontally;
00121     }
00122     
00124     CapStyle startCapStyle() const {
00125         return _startCapStyle;
00126     }
00127     
00129     CapStyle endCapStyle() const {
00130         return _endCapStyle;
00131     }
00132     
00134     JoinStyle joinStyle() const {
00135         return _joinStyle;
00136     }
00137     
00139     float miterLimitFactor() const {
00140         return _miterLimitFactor;
00141     }
00142   
00145     bool noClose() const {
00146         return _noClose;
00147     }
00148 
00150     bool doPixelHinting() const {
00151         return _pixelHinting;
00152     }
00153 
00155     const rgba& get_color() const { return m_color; }
00156 
00158     //
00164     void set_lerp(const LineStyle& ls1, const LineStyle& ls2, float ratio);
00165     
00166 private:
00167     
00169     boost::uint16_t m_width;
00170 
00171     rgba m_color;
00172 
00173     bool _scaleVertically;
00174 
00175     bool _scaleHorizontally;
00176 
00177     bool _pixelHinting;
00178 
00179     bool _noClose;
00180 
00181     CapStyle _startCapStyle;
00182 
00183     CapStyle _endCapStyle;
00184 
00185     JoinStyle _joinStyle;
00186 
00187     float _miterLimitFactor;
00188 };
00189     
00190 inline void
00191 setLerp(LineStyle& s, const LineStyle& ls1, const LineStyle& ls2, double ratio) 
00192 {
00193     s.set_lerp(ls1, ls2, ratio);
00194 }
00195 
00196 } // namespace gnash
00197 
00198 #endif
00199 
00200 // Local Variables:
00201 // mode: C++
00202 // indent-tabs-mode: t
00203 // End: