Gnash  0.8.11dev
ShapeRecord.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 // Free Software Foundation, Inc
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 //
19 
20 #ifndef GNASH_SWF_SHAPERECORD_H
21 #define GNASH_SWF_SHAPERECORD_H
22 
23 #include "Geometry.h"
24 #include "LineStyle.h"
25 #include "FillStyle.h"
26 #include "SWFRect.h"
27 
28 #include <vector>
29 
30 
31 namespace gnash {
32  class movie_definition;
33  class RunResources;
34 }
35 
36 namespace gnash {
37 namespace SWF {
38 
39 
40 
41 class Subshape {
42 
43 public:
44  typedef std::vector<FillStyle> FillStyles;
45  typedef std::vector<LineStyle> LineStyles;
46  typedef std::vector<Path> Paths;
47 
48  const FillStyles& fillStyles() const {
49  return _fillStyles;
50  }
51 
52  FillStyles& fillStyles() {
53  return _fillStyles;
54  }
55 
56  const LineStyles& lineStyles() const {
57  return _lineStyles;
58  }
59 
60  LineStyles& lineStyles() {
61  return _lineStyles;
62  }
63 
64  const Paths& paths() const {
65  return _paths;
66  }
67 
68  Paths& paths() {
69  return _paths;
70  }
71 
73  //
77  return _paths.back();
78  }
79 
80  void addFillStyle(const FillStyle& fs);
81 
82  void addPath(const Path& path) {
83  _paths.push_back(path);
84  }
85 
86  void addLineStyle(const LineStyle& ls) {
87  _lineStyles.push_back(ls);
88  }
89 
90  void clear() {
91  _fillStyles.clear();
92  _lineStyles.clear();
93  _paths.clear();
94  }
95 
96  SWFRect computeBounds(int swfVersion) const;
97 
98 private:
99  FillStyles _fillStyles;
100  LineStyles _lineStyles;
101  Paths _paths;
102 };
103 
104 
105 
107 //
110 //
116 //
119 //
127 {
128 public:
132  typedef std::vector<Subshape> Subshapes;
133 
135  //
137  //
140  ShapeRecord();
141 
143  //
146  const RunResources& r);
147 
148 
149  ~ShapeRecord();
150 
152  //
155  void read(SWFStream& in, SWF::TagType tag, movie_definition& m,
156  const RunResources& r);
157 
158  const Subshapes& subshapes() const {
159  return _subshapes;
160  }
161 
162  void addSubshape(const Subshape& subshape) {
163  _subshapes.push_back(subshape);
164  }
165 
166  const SWFRect& getBounds() const {
167  return _bounds;
168  }
169 
171  //
173  void setLerp(const ShapeRecord& a, const ShapeRecord& b,
174  const double ratio);
175 
177  void clear();
178 
179  void setBounds(const SWFRect& bounds) {
180  _bounds = bounds;
181  }
182 
183  bool pointTest(std::int32_t x, std::int32_t y,
184  const SWFMatrix& wm) const {
185  for (const Subshape& subshape : _subshapes) {
186 
187  if (geometry::pointTest(subshape.paths(), subshape.lineStyles(), x, y, wm)) {
188  return true;
189  }
190  }
191  return false;
192  }
193 
194 private:
195 
196  unsigned readStyleChange(SWFStream& in, size_t num_fill_bits, size_t numStyles);
197 
199  enum ShapeRecordFlags {
200  SHAPE_END = 0x00,
201  SHAPE_MOVE = 0x01,
202  SHAPE_FILLSTYLE0_CHANGE = 0x02,
203  SHAPE_FILLSTYLE1_CHANGE = 0x04,
204  SHAPE_LINESTYLE_CHANGE = 0x08,
205  SHAPE_HAS_NEW_STYLES = 0x10
206  };
207 
208  SWFRect _bounds;
209  Subshapes _subshapes;
210 };
211 
212 std::ostream& operator<<(std::ostream& o, const ShapeRecord& sh);
213 
214 } // namespace SWF
215 } // namespace gnash
216 
217 #endif
Definition: GnashKey.h:147
void addFillStyle(const FillStyle &fs)
Definition: ShapeRecord.cpp:96
Client program&#39;s interface to the definition of a movie or sprite.
Definition: movie_definition.h:95
void addPath(const Path &path)
Definition: ShapeRecord.h:82
Path & currentPath()
For DynamicShape.
Definition: ShapeRecord.h:76
std::vector< FillStyle > FillStyles
Definition: ShapeRecord.h:44
TagType
SWF tag types. Symbolic names copied from Ming.
Definition: SWF.h:30
Definition: SWFMatrix.h:53
const FillStyles & fillStyles() const
Definition: ShapeRecord.h:48
VGPath path
Definition: testr_gtk.cpp:84
std::vector< Path > Paths
Definition: ShapeRecord.h:46
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:40
bool pointTest(const std::vector< Path > &paths, const std::vector< LineStyle > &lineStyles, std::int32_t x, std::int32_t y, const SWFMatrix &wm)
Definition: Geometry.cpp:125
Definition: ShapeRecord.h:41
Definition: GnashKey.h:161
Subshape::Paths Paths
Definition: ShapeRecord.h:131
Definition: GnashKey.h:164
LineStyles & lineStyles()
Definition: ShapeRecord.h:60
std::ostream & operator<<(std::ostream &o, const ShapeRecord &sh)
Definition: ShapeRecord.cpp:600
FillStyles & fillStyles()
Definition: ShapeRecord.h:52
Class to group together per-run and external resources for Gnash.
Definition: RunResources.h:53
FillStyle describes the various fill styles for shapes.
Definition: FillStyle.h:281
void clear()
Definition: ShapeRecord.h:90
A subset of a shape, a series of edges sharing a single set of styles.
Definition: Geometry.h:166
std::int32_t x
Definition: BitmapData_as.cpp:434
Definition: GnashKey.h:148
void addLineStyle(const LineStyle &ls)
Definition: ShapeRecord.h:86
std::vector< LineStyle > LineStyles
Definition: ShapeRecord.h:45
bool pointTest(std::int32_t x, std::int32_t y, const SWFMatrix &wm) const
Definition: ShapeRecord.h:183
void setBounds(const SWFRect &bounds)
Definition: ShapeRecord.h:179
For the outside of outline shapes, or just bare lines.
Definition: LineStyle.h:50
std::int32_t y
Definition: BitmapData_as.cpp:435
SWFRect computeBounds(int swfVersion) const
Find the bounds of this subhape, and return them in a rectangle.
Definition: ShapeRecord.cpp:104
Rectangle class, see swf defined rectangle record.
Definition: SWFRect.h:44
Paths & paths()
Definition: ShapeRecord.h:68
const SWFRect & getBounds() const
Definition: ShapeRecord.h:166
std::vector< Subshape > Subshapes
Definition: ShapeRecord.h:132
Definition: GnashKey.h:159
Holds information needed to draw a shape.
Definition: ShapeRecord.h:126
void setLerp(FillStyle &f, const FillStyle &a, const FillStyle &b, double t)
Set the FillStyle to a lerp of a and b.
Definition: FillStyle.cpp:221
Subshape::LineStyles LineStyles
Definition: ShapeRecord.h:130
Definition: GnashKey.h:331
const Paths & paths() const
Definition: ShapeRecord.h:64
const LineStyles & lineStyles() const
Definition: ShapeRecord.h:56
const Subshapes & subshapes() const
Definition: ShapeRecord.h:158
SWF stream wrapper class.
Definition: SWFStream.h:58
void addSubshape(const Subshape &subshape)
Definition: ShapeRecord.h:162
Subshape::FillStyles FillStyles
Definition: ShapeRecord.h:129