Gnash  0.8.11dev
OpenVGRenderer.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 
24 
25 #ifdef HAVE_CONFIG_H
26 #include "gnashconfig.h"
27 #endif
28 
29 #ifndef GNASH_RENDER_HANDLER_OVG_H
30 #define GNASH_RENDER_HANDLER_OVG_H
31 
32 #include <EGL/egl.h>
33 #include <vector>
34 #include <list>
35 #include <memory>
36 
37 #include "Geometry.h"
38 #include "Renderer.h"
39 //#include "directfb/DirectFBDevice.h"
40 #include "GnashDevice.h"
41 #include "CachedBitmap.h"
42 #include "FillStyle.h"
43 
44 #include <VG/vgu.h>
45 #ifdef HAVE_VG_EXT_H
46 # include <VG/ext.h>
47 #else
48 # ifdef HAVE_VG_VGEXT_H
49 # include <VG/vgext.h>
50 # endif
51 #endif
52 #include <VG/openvg.h>
53 #include "openvg/OpenVGBitmap.h"
54 #include "egl/eglDevice.h"
55 
56 namespace gnash {
57 
58 class SWFCxForm;
59 class GnashImage;
60 
61 namespace renderer {
62 
63 namespace openvg {
64 
65 typedef std::vector<const Path*> PathRefs;
66 typedef std::vector<Path> PathVec;
67 typedef std::vector<geometry::Range2d<int> > ClipBounds;
68 typedef std::vector<const Path*> PathPtrVec;
69 
70 // typedef std::map<const Path*, VGPath > PathPointMap;
71 
73 {
74 public:
75  std::string description() const { return "OpenVG"; }
76 
77  Renderer_ovg();
79 
80  ~Renderer_ovg();
81 
82  void init(float x, float y);
83  CachedBitmap *createCachedBitmap(std::unique_ptr<image::GnashImage> im);
84 
85  void drawVideoFrame(gnash::image::GnashImage*, const gnash::Transform&,
86  const gnash::SWFRect*, bool);
87 
88  void world_to_pixel(int& x, int& y, float world_x, float world_y) const;
89  gnash::geometry::Range2d<int> world_to_pixel(const gnash::SWFRect& wb) const;
90  gnash::geometry::Range2d<int> world_to_pixel(const geometry::Range2d<float>& wb) const;
91 
92  gnash::point pixel_to_world(int, int) const;
93 
94  // Called by movie_root::display()
95  void begin_display(const gnash::rgba&, int, int, float,
96  float, float, float);
97  void end_display();
98  void drawLine(const std::vector<point>& coords, const rgba& fill,
99  const SWFMatrix& mat);
100  void drawVideoFrame(image::GnashImage* frame, const SWFMatrix *m,
101  const SWFRect* bounds, bool smooth);
102  void draw_poly(const std::vector<point>& corners,
103  const rgba& fill, const rgba& outline,
104  const SWFMatrix& mat, bool masked);
105  // this is in master
106  void drawShape(const gnash::SWF::ShapeRecord&, const gnash::Transform&);
107  // This is from the patch
108  void drawGlyph(const SWF::ShapeRecord& rec, const rgba& c,
109  const SWFMatrix& mat);
110 
111  void set_antialiased(bool enable);
112  void begin_submit_mask();
113  void end_submit_mask();
114  void apply_mask();
115  void disable_mask();
116 
117  void set_scale(float xscale, float yscale);
118  void set_invalidated_regions(const InvalidatedRanges &ranges);
119 
120  // These weren't in the patch, and do nothing anyway
121  Renderer *startInternalRender(gnash::image::GnashImage&);
122  void endInternalRender();
123 
124  unsigned int getBitsPerPixel();
125 
126  void setFillPaint(const VGPaint paint) { _fillpaint = paint; }
127 
128  // These methods are only for debugging and development
129  void printVGParams();
131  static void printVGPath(VGPath path);
132  static void printVGMatrix(VGfloat *mat);
133  static void printVGMatrix(const SWFMatrix &mat);
134 
135  static const char *getErrorString(VGErrorCode error);
136 
137  // VGImage (CachedBitmap *x) { return _image_cache[x]; };
138  private:
139  void add_paths(const PathVec& path_vec);
140  Path reverse_path(const Path& cur_path);
141  const Path* find_connecting_path(const Path& to_connect,
142  std::list<const Path*> path_refs);
143  PathVec normalize_paths(const PathVec &paths);
144 
148  void analyze_paths(const PathVec &paths, bool& have_shape,
149  bool& have_outline);
150  void apply_fill_style(const FillStyle& style, const SWFMatrix& /* mat */,
151  const SWFCxForm& cx);
152  bool apply_line_style(const LineStyle& style, const SWFCxForm& cx,
153  const SWFMatrix& mat);
154  void draw_outlines(const PathVec& path_vec, const SWFMatrix& mat,
155  const SWFCxForm& cx, const std::vector<
156  LineStyle>& line_styles);
157  std::list<PathPtrVec> get_contours(const PathPtrVec &paths);
158  PathPtrVec paths_by_style(const PathVec& path_vec, unsigned int style);
159  std::vector<PathVec::const_iterator> find_subshapes(const PathVec& path_vec);
160  void apply_matrix_to_paths(std::vector<Path>& paths, const SWFMatrix& mat);
161 
162  void draw_subshape(const PathVec& path_vec, const SWFMatrix& mat,
163  const SWFCxForm& cx,
164  const std::vector<FillStyle>& fill_styles,
165  const std::vector<LineStyle>& line_styles);
166  void draw_mask(const PathVec& path_vec);
167  void draw_submask(const PathVec& path_vec, const SWFMatrix& mat,
168  const SWFCxForm& cx, const FillStyle& f_style);
169 
170  float _xscale;
171  float _yscale;
172  float _width; // Width of the movie, in world coordinates.
173  float _height;
174 
175  // Output size.
176  float _display_width;
177  float _display_height;
178 
179  std::vector<PathVec> _masks;
180  bool _drawing_mask;
181 #ifdef OPENVG_VERSION_1_1
182  VGMaskLayer _mask_layer;
183 #endif
184  gnash::SWFMatrix stage_matrix; // conversion from TWIPS to pixels
185 
187  VGPaint _fillpaint;
188 
190  VGPaint _strokepaint;
191 
200  double _aspect_ratio;
201 
202  // FIXME: A cache for the VGImages might make some sense assuming
203  // it takes more time to render the cached GnashImage to a
204  // VGImage. Right now every til a fill style is applied, the
205  // VGImage is rebuilt from the GnashImage. This appears to be
206  // relatively fast, and possibly faster than the lookup in a map
207  // as the size of the cache grows. The other issue would be when
208  // to clear the cache, as we have no knowledge from the VM when
209  // images are deleted, or unused.
210  // std::map<CachedBitmap *, VGImage > _image_cache;
211 };
212 
213 DSOEXPORT Renderer* create_handler(const char *pixelformat);
214 
215 } // namespace gnash::renderer::openvg
216 } // namespace gnash::renderer
217 } // namespace gnash
218 
219 #endif // __RENDER_HANDLER_OVG_H__
220 
221 // local Variables:
222 // mode: C++
223 // indent-tabs-mode: nil
224 // End:
gnash::geometry::SnappingRanges2d< std::int32_t >
path
VGPath path
Definition: testr_gtk.cpp:84
gnash::CAP_NONE
@ CAP_NONE
Definition: LineStyle.h:39
gnash::geometry::Range2d< int >
OpenVGRenderer.h
gnash::key::R
@ R
Definition: GnashKey.h:130
gnash::renderer::openvg::Renderer_ovg::Renderer_ovg
Renderer_ovg()
Definition: OpenVGRenderer.cpp:205
gnash::Path::ap
point ap
Start point of the path.
Definition: Geometry.h:179
gnash::Transform::colorTransform
SWFCxForm colorTransform
Definition: Transform.h:60
gnash::renderer::openvg::Renderer_ovg::init
void init(float x, float y)
Definition: OpenVGRenderer.cpp:248
gnash::SolidFill
A SolidFill containing one color.
Definition: FillStyle.h:247
height
@ height
Definition: klash_part.cpp:329
ShapeRecord.h
gnash::renderer::openvg::closepath
void closepath(VGPath path)
Definition: OpenVGRenderer.cpp:140
gnash::renderer::openvg::startpath
void startpath(VGPath path, const int x, const int y)
Definition: OpenVGRenderer.cpp:124
gnash::PathVec
std::vector< Path > PathVec
Definition: Renderer_cairo.h:35
gnash::renderer::openvg::Renderer_ovg::set_antialiased
void set_antialiased(bool enable)
Definition: OpenVGRenderer.cpp:568
gnash::renderer::openvg::Renderer_ovg::disable_mask
void disable_mask()
Definition: OpenVGRenderer.cpp:641
GNASH_RENDER_QUALITY
#define GNASH_RENDER_QUALITY
Definition: OpenVGRenderer.cpp:59
gnash::renderer::openvg::PathRefs
std::vector< const Path * > PathRefs
Definition: OpenVGRenderer.h:65
gnash::Edge::ap
point ap
Definition: Geometry.h:50
gnash::Transform::matrix
SWFMatrix matrix
Definition: Transform.h:59
gnash::key::T
@ T
Definition: GnashKey.h:132
gnash::geometry::Range2d::getMaxY
T getMaxY() const
Get max Y ordinate.
Definition: Range2d.h:633
gnash::SWFRect::get_x_max
std::int32_t get_x_max() const
Get the x coordinate of the right-down corner.
Definition: SWFRect.h:122
gnash::renderer::openvg::PathVec
std::vector< Path > PathVec
Definition: OpenVGRenderer.h:66
gnash::renderer::openvg::Renderer_ovg::drawLine
void drawLine(const std::vector< point > &coords, const rgba &fill, const SWFMatrix &mat)
Draw a line-strip directly, using a thin, solid line.
Definition: OpenVGRenderer.cpp:448
gnash::log_debug
void log_debug(StringType msg, Args... args)
Definition: log.h:301
gnash::renderer::openvg::Renderer_ovg::createCachedBitmap
CachedBitmap * createCachedBitmap(std::unique_ptr< image::GnashImage > im)
Given an image, returns a pointer to a CachedBitmap class that can later be passed to FillStyleX_bitm...
Definition: OpenVGRenderer.cpp:302
y
std::int32_t y
Definition: BitmapData_as.cpp:435
gnash::key::i
@ i
Definition: GnashKey.h:155
gnash::renderer::openvg::Renderer_ovg::setFillPaint
void setFillPaint(const VGPaint paint)
Definition: OpenVGRenderer.h:126
LOG_ONCE
#define LOG_ONCE(x)
Definition: log.h:49
gnash::rgba
A basic RGBA type.
Definition: RGBA.h:36
gnash::renderer::openvg::Renderer_ovg::~Renderer_ovg
~Renderer_ovg()
Definition: OpenVGRenderer.cpp:286
gnash::SWFMatrix::invert
SWFMatrix & invert()
Invert this SWFMatrix and return the result.
Definition: SWFMatrix.cpp:288
_
#define _(String)
Definition: log.h:44
Renderer.h
Geometry.h
gnash::FillStyle
FillStyle describes the various fill styles for shapes.
Definition: FillStyle.h:282
gnash::renderer::GnashDevice::dtype_t
dtype_t
The list of supported device types.
Definition: GnashDevice.h:48
gnash::Edge::straight
bool straight() const
Definition: Geometry.h:77
Transform.h
gnash
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:41
gnash::renderer::openvg::Renderer_ovg::drawGlyph
void drawGlyph(const SWF::ShapeRecord &rec, const rgba &c, const SWFMatrix &mat)
Draws a glyph (font character).
Definition: OpenVGRenderer.cpp:1216
gnash::geometry::Range2d::getMaxX
T getMaxX() const
Get max X ordinate.
Definition: Range2d.h:613
gnash::SWF::ShapeRecord::getBounds
const SWFRect & getBounds() const
Definition: ShapeRecord.h:166
gnash::SWFRect::is_null
bool is_null() const
returns true if this is a NULL rectangle
Definition: SWFRect.h:75
gnash::SWFRect::get_y_max
std::int32_t get_y_max() const
Get the y coordinate of the right-down corner.
Definition: SWFRect.h:136
gnash::renderer::openvg::Renderer_ovg::end_submit_mask
void end_submit_mask()
Definition: OpenVGRenderer.cpp:584
gnash::image::GnashImage
Base class for different types of bitmaps.
Definition: GnashImage.h:78
GNASH_REPORT_FUNCTION
#define GNASH_REPORT_FUNCTION
Definition: log.h:452
gnash::ClipBounds
std::vector< geometry::Range2d< int > > ClipBounds
Definition: OpenVGRenderer.cpp:72
gnash::Renderer
Base class for render handlers.
Definition: Renderer.h:189
gnash::key::m
@ m
Definition: GnashKey.h:159
utility.h
gnash::CAP_SQUARE
@ CAP_SQUARE
Definition: LineStyle.h:40
start
@ start
Definition: klash_part.cpp:330
gnash::geometry::worldRange
@ worldRange
A WORLD range2d is a range including all points on the plane.
Definition: Range2d.h:52
gnash::SWFCxForm
Color transformation record.
Definition: SWFCxForm.h:35
gnash::geometry::Range2d::getMinX
T getMinX() const
Get min X ordinate.
Definition: Range2d.h:603
gnash::renderer::openvg::Renderer_ovg::begin_display
void begin_display(const gnash::rgba &, int, int, float, float, float, float)
Definition: OpenVGRenderer.cpp:391
gnash::renderer::openvg::Renderer_ovg::printVGPath
static void printVGPath(VGPath path)
Definition: OpenVGRenderer.cpp:1525
gnash::SWFRect::is_world
bool is_world() const
TODO: deprecate this 'world' concept.
Definition: SWFRect.h:87
gnash::SWFMatrix::c
std::int32_t c() const
Definition: SWFMatrix.h:87
gnash::JOIN_BEVEL
@ JOIN_BEVEL
Definition: LineStyle.h:45
GnashImage.h
SWFCxForm.h
gnash::log_error
void log_error(StringType msg, Args... args)
Definition: log.h:283
gnash::geometry::Range2d::isNull
bool isNull() const
Returns true if this is the NULL Range2d.
Definition: Range2d.h:181
CachedBitmap.h
gnash::renderer::openvg::Renderer_ovg::description
std::string description() const
Return a description of this renderer.
Definition: OpenVGRenderer.h:75
OpenVGBitmap.h
gnash::SWFRect
Rectangle class, see swf defined rectangle record.
Definition: SWFRect.h:45
gnash::Path::m_line
unsigned m_line
Line style index (1-based)
Definition: Geometry.h:176
gnash::renderer::openvg::create_handler
DSOEXPORT Renderer * create_handler(const char *)
Definition: OpenVGRenderer.cpp:1265
color
const VGfloat color[4]
Definition: testr_gtk.cpp:82
gnash::renderer::openvg::PathPtrVec
std::vector< const Path * > PathPtrVec
Definition: OpenVGRenderer.cpp:895
gnash::geometry::Range2d::isWorld
bool isWorld() const
Returns true if this is the WORLD Range2d.
Definition: Range2d.h:200
fill
VGPaint fill
Definition: testr_gtk.cpp:86
gnash::renderer::openvg::Renderer_ovg::end_display
void end_display()
Definition: OpenVGRenderer.cpp:439
gnash::geometry::Point2d::x
std::int32_t x
The x coordinate.
Definition: Point2d.h:43
gnash::SWFRect::get_x_min
std::int32_t get_x_min() const
Get the x coordinate of the left-up corner.
Definition: SWFRect.h:115
gnash::CAP_ROUND
@ CAP_ROUND
Definition: LineStyle.h:38
gnash::renderer::openvg::Renderer_ovg::set_invalidated_regions
void set_invalidated_regions(const InvalidatedRanges &ranges)
Sets the update region (called prior to begin_display).
Definition: OpenVGRenderer.cpp:1256
gnash::renderer::openvg::Renderer_ovg::world_to_pixel
void world_to_pixel(int &x, int &y, float world_x, float world_y) const
Definition: OpenVGRenderer.cpp:324
gnash::renderer::openvg::Renderer_ovg::pixel_to_world
gnash::point pixel_to_world(int, int) const
Converts pixel coordinates to world coordinates (TWIPS)
Definition: OpenVGRenderer.cpp:371
gnash::Path::m_fill0
unsigned m_fill0
Left fill style index (1-based)
Definition: Geometry.h:170
gnash::SWFMatrix::a
std::int32_t a() const
Definition: SWFMatrix.h:79
gnash::SWFMatrix::transform
void transform(geometry::Point2d &p) const
Transform a given point by our SWFMatrix.
Definition: SWFMatrix.cpp:99
gnash::geometry::Range2d::getMinY
T getMinY() const
Get min Y ordinate.
Definition: Range2d.h:623
gnash::SWFMatrix::d
std::int32_t d() const
Definition: SWFMatrix.h:91
gnash::Path
A subset of a shape, a series of edges sharing a single set of styles.
Definition: Geometry.h:167
gnash::renderer::openvg::Renderer_ovg::getBitsPerPixel
unsigned int getBitsPerPixel()
Definition: OpenVGRenderer.cpp:1577
gnash::LineStyle
For the outside of outline shapes, or just bare lines.
Definition: LineStyle.h:51
gnash::SWFMatrix::b
std::int32_t b() const
Definition: SWFMatrix.h:83
RGBA.h
OpenVGStyle.h
gnash::key::p
@ p
Definition: GnashKey.h:162
gnash::key::C
@ C
Definition: GnashKey.h:115
gnash::renderer::openvg::Renderer_ovg
Definition: OpenVGRenderer.h:73
gnash::geometry::nullRange
@ nullRange
A NULL range is a range enclosing NO points.
Definition: Range2d.h:43
gnash::SWFMatrix::tx
std::int32_t tx() const
Definition: SWFMatrix.h:95
gnash::key::_1
@ _1
Definition: GnashKey.h:95
eglDevice.h
gnash::JOIN_ROUND
@ JOIN_ROUND
Definition: LineStyle.h:44
gnash::renderer::openvg::Renderer_ovg::printVGMatrix
static void printVGMatrix(VGfloat *mat)
Definition: OpenVGRenderer.cpp:1541
GnashNumeric.h
gnash::JOIN_MITER
@ JOIN_MITER
Definition: LineStyle.h:46
gnash::SWFMatrix
Definition: SWFMatrix.h:54
gnash::geometry::Point2d
2D Point class
Definition: Point2d.h:39
gnash::Path::m_fill1
unsigned m_fill1
Right fill style index (1-based)
Definition: Geometry.h:173
gnash::SWFMatrix::get_x_scale
double get_x_scale() const
return the magnitude scale of our x coord output
Definition: SWFMatrix.cpp:314
paint
VGPaint paint
Definition: testr_gtk.cpp:85
log.h
gnash::renderer::openvg::Renderer_ovg::begin_submit_mask
void begin_submit_mask()
Definition: OpenVGRenderer.cpp:574
gnash::renderer::openvg::Renderer_ovg::drawVideoFrame
void drawVideoFrame(gnash::image::GnashImage *, const gnash::Transform &, const gnash::SWFRect *, bool)
Draws a video frame.
Definition: OpenVGRenderer.cpp:1571
gnash::renderer::openvg::preparepath
void preparepath(VGPath path, const std::vector< Edge > &edges, const float &anchor_x, const float &anchor_y)
Definition: OpenVGRenderer.cpp:157
gnash::renderer::openvg::OpenVGBitmap
Definition: OpenVGBitmap.h:40
gnash::SWFMatrix::set_identity
void set_identity()
Set the SWFMatrix to identity.
Definition: SWFMatrix.cpp:141
gnash::renderer::openvg::Renderer_ovg::draw_poly
void draw_poly(const std::vector< point > &corners, const rgba &fill, const rgba &outline, const SWFMatrix &mat, bool masked)
Draw a simple, solid filled polygon with a thin (~1 pixel) outline.
Definition: OpenVGRenderer.cpp:510
gnash::key::f
@ f
Definition: GnashKey.h:152
gnashconfig.h
gnash::image::end
pixel_iterator< T > end(GnashImage &im)
Definition: ImageIterators.h:198
gnash::key::c
@ c
Definition: GnashKey.h:149
gnash::renderer::openvg::Renderer_ovg::printVGHardware
void printVGHardware()
LineStyle.h
gnash::renderer::openvg::Renderer_ovg::endInternalRender
void endInternalRender()
Finish internal rendering.
Definition: OpenVGRenderer.cpp:1565
gnash::Edge::cp
point cp
Definition: Geometry.h:49
DSOEXPORT
#define DSOEXPORT
Definition: dsodefs.h:55
gnash::renderer::openvg::for_each
void for_each(C &container, R(T::*pmf)(const A &), const A &arg)
Definition: OpenVGRenderer.cpp:199
gnash::SWFMatrix::ty
std::int32_t ty() const
Definition: SWFMatrix.h:99
gnash::geometry::Point2d::y
std::int32_t y
The y coordinate.
Definition: Point2d.h:46
gnash::SWFMatrix::get_y_scale
double get_y_scale() const
return the magnitude scale of our y coord output
Definition: SWFMatrix.cpp:322
GnashDevice.h
gnash::SWF::ShapeRecord
Holds information needed to draw a shape.
Definition: ShapeRecord.h:127
FillStyle.h
gnash::renderer::openvg::Renderer_ovg::printVGParams
void printVGParams()
Definition: OpenVGRenderer.cpp:1276
gnash::SWFMatrix::set_scale
void set_scale(double x_scale, double y_scale)
Set x and y scales, rotation is unchanged.
Definition: SWFMatrix.cpp:225
gnash::Transform
The Transform class expresses a stage in a cumulative transformation.
Definition: Transform.h:34
gnash::Edge
Defines an edge with a control point and an anchor point.
Definition: Geometry.h:45
gnash::Path::transform
void transform(const SWFMatrix &mat)
Transform all path coordinates according to the given SWFMatrix.
Definition: Geometry.h:443
width
@ width
Definition: klash_part.cpp:329
gnash::log_unimpl
void log_unimpl(StringType msg, Args... args)
Definition: log.h:289
gnash::Path::m_edges
std::vector< Edge > m_edges
Edges forming the path.
Definition: Geometry.h:182
gnash::renderer::openvg::Renderer_ovg::set_scale
void set_scale(float xscale, float yscale)
Sets the x/y scale for the movie
Definition: OpenVGRenderer.cpp:1245
gnash::CachedBitmap
A CachedBitmap is created by the renderer in a format of its choosing.
Definition: CachedBitmap.h:38
x
std::int32_t x
Definition: BitmapData_as.cpp:434
MAX_SEG
#define MAX_SEG
Definition: OpenVGRenderer.cpp:117
gnash::geometry
Definition: Point2d.h:32
gnash::renderer::openvg::Renderer_ovg::startInternalRender
Renderer * startInternalRender(gnash::image::GnashImage &)
Setup the renderer to draw to an internal buffer.
Definition: OpenVGRenderer.cpp:1557
gnash::renderer::openvg::Renderer_ovg::getErrorString
static const char * getErrorString(VGErrorCode error)
Definition: OpenVGRenderer.cpp:1583
Range2d.h
gnash::SWFRect::get_y_min
std::int32_t get_y_min() const
Get the y coordinate of the left-up corner.
Definition: SWFRect.h:129
gnash::renderer::openvg::Renderer_ovg::drawShape
void drawShape(const gnash::SWF::ShapeRecord &, const gnash::Transform &)
Definition: OpenVGRenderer.cpp:1168
gnash::PathPtrVec
std::vector< const Path * > PathPtrVec
Definition: Renderer_cairo.h:36
gnash::renderer::openvg::ClipBounds
std::vector< geometry::Range2d< int > > ClipBounds
Definition: OpenVGRenderer.h:67
SWFMatrix.h
gnash::renderer::openvg::Renderer_ovg::apply_mask
void apply_mask()
Definition: OpenVGRenderer.cpp:604
gnash::key::A
@ A
Definition: GnashKey.h:113