CVSROOT: /sources/gnash Module name: gnash Changes by: Benjamin Wolsey <bwy> 08/01/09 20:06:02
Modified files: . : ChangeLog configure.ac Makefile.am Added files: pythonmodule : Makefile.am gnashPythonExample.py gnashpython.cpp gnashpython.h pyGnash.cpp Log message: * pythonmodule/gnashpython.{h,cpp}: new pythonwrapper::GnashPlayer class for providing Python bindings. * pythonmodule/pyGnash.cpp: the python module with interface to gnash core libs. * pythonmodule/gnashPythonExample.py: example script as a substitute for proper documentation. * configure.ac, Makefile.am, pythonmodule/Makefile.am: add new directories; it's not built by default, neither are there macros in configure.ac yet. To build, change ENABLE_GNASH_PYTHON_MODULE manually and specify the python headers/libs in pythonmodule/Makefile.am. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5357&r2=1.5358 http://cvs.savannah.gnu.org/viewcvs/gnash/configure.ac?cvsroot=gnash&r1=1.468&r2=1.469 http://cvs.savannah.gnu.org/viewcvs/gnash/Makefile.am?cvsroot=gnash&r1=1.99&r2=1.100 http://cvs.savannah.gnu.org/viewcvs/gnash/pythonmodule/Makefile.am?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/pythonmodule/gnashPythonExample.py?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/pythonmodule/gnashpython.cpp?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/pythonmodule/gnashpython.h?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/pythonmodule/pyGnash.cpp?cvsroot=gnash&rev=1.1 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.5357 retrieving revision 1.5358 diff -u -b -r1.5357 -r1.5358 --- ChangeLog 9 Jan 2008 17:52:16 -0000 1.5357 +++ ChangeLog 9 Jan 2008 20:06:01 -0000 1.5358 @@ -1,3 +1,16 @@ +2008-01-09 Benjamin Wolsey <[EMAIL PROTECTED]> + + * pythonmodule/gnashpython.{h,cpp}: new pythonwrapper::GnashPlayer + class for providing Python bindings. + * pythonmodule/pyGnash.cpp: the python module with interface to + gnash core libs. + * pythonmodule/gnashPythonExample.py: example script as a substitute + for proper documentation. + * configure.ac, Makefile.am, pythonmodule/Makefile.am: add new + directories; it's not built by default, neither are there macros + in configure.ac yet. To build, change ENABLE_GNASH_PYTHON_MODULE + manually and specify the python headers/libs in pythonmodule/Makefile.am. + 2008-01-09 Sandro Santilli <[EMAIL PROTECTED]> * server/movie_root.cpp (findCharacterByTarget): start from Index: configure.ac =================================================================== RCS file: /sources/gnash/gnash/configure.ac,v retrieving revision 1.468 retrieving revision 1.469 diff -u -b -r1.468 -r1.469 --- configure.ac 4 Jan 2008 13:35:11 -0000 1.468 +++ configure.ac 9 Jan 2008 20:06:01 -0000 1.469 @@ -15,7 +15,7 @@ dnl Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA dnl -dnl $Id: configure.ac,v 1.468 2008/01/04 13:35:11 strk Exp $ +dnl $Id: configure.ac,v 1.469 2008/01/09 20:06:01 bwy Exp $ AC_PREREQ(2.50) AC_INIT(gnash, cvs) @@ -881,6 +881,8 @@ PKG_PROG_PKG_CONFIG AC_PATH_PROG(PYTHON, python, ,[${pathlist}]) +AM_CONDITIONAL([ENABLE_GNASH_PYTHON_MODULE], 0) + dnl Look for scratchbox sbox=no @@ -1848,6 +1850,7 @@ doc/C/Makefile doc/C/asspec/Makefile doc/Doxyfile +pythonmodule/Makefile testsuite/Makefile testsuite/libbase/Makefile testsuite/libgeometry/Makefile Index: Makefile.am =================================================================== RCS file: /sources/gnash/gnash/Makefile.am,v retrieving revision 1.99 retrieving revision 1.100 diff -u -b -r1.99 -r1.100 --- Makefile.am 4 Jan 2008 23:57:10 -0000 1.99 +++ Makefile.am 9 Jan 2008 20:06:01 -0000 1.100 @@ -15,7 +15,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# $Id: Makefile.am,v 1.99 2008/01/04 23:57:10 strk Exp $ +# $Id: Makefile.am,v 1.100 2008/01/09 20:06:01 bwy Exp $ ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = 1.6.0 @@ -48,6 +48,7 @@ utilities \ gui \ plugin \ + pythonmodule \ testsuite \ po \ $(NULL) Index: pythonmodule/Makefile.am =================================================================== RCS file: pythonmodule/Makefile.am diff -N pythonmodule/Makefile.am --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pythonmodule/Makefile.am 9 Jan 2008 20:06:02 -0000 1.1 @@ -0,0 +1,116 @@ +## Process this file with automake to generate Makefile.in +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +if ENABLE_GNASH_PYTHON_MODULE + +AUTOMAKE_OPTIONS = + +pkglib_LTLIBRARIES = libgnashpython.la gnash.la + +EXTRA_DIST = gnashPythonExample.py + +BOOSTPYTHON_LIBS = -lboost_python +BOOSTPYTHON_CFLAGS = -I/usr/include/python2.5 + +libgnashpython_la_SOURCES = \ + gnashpython.cpp \ + $(NULL) + +libgnashpython_la_LDFLAGS = \ + $(GLIB_LIBS) \ + $(LIBLTDL) \ + $(FFMPEG_LIBS) \ + $(CURL_LIBS) \ + $(LIBXML_LIBS) \ + $(INCLTDL) \ + $(LIRC_LIBS) \ + $(MYSQL_LIBS) \ + $(BOOST_LIBS) \ + $(PTHREAD_LIBS) \ + $(BOOSTPYTHON_LIBS) \ + $(NULL) + +libgnashpython_la_CPPFLAGS = -I.. \ + -I$(top_srcdir) \ + -I$(top_srcdir)/server \ + -I$(top_srcdir)/server/parser \ + -I$(top_srcdir)/server/vm \ + -I$(top_srcdir)/libltdl \ + -I$(top_srcdir)/libbase \ + -I$(top_srcdir)/backend \ + -I$(top_srcdir)/libgeometry \ + -I$(top_srcdir)/libmedia \ + -I$(top_srcdir)/libmedia/sdl \ + -I$(top_srcdir)/libmedia/gst \ + -DLOCALEDIR=\"$(localedir)\" \ + $(BOOSTPYTHON_CFLAGS) \ + $(LIBXML_CFLAGS) \ + $(DMALLOC_CFLAGS) \ + $(LIRC_CFLAGS) \ + $(BOOST_CFLAGS) \ + $(PTHREAD_CFLAGS) \ + $(NULL) + +gnash_la_SOURCES = \ + pyGnash.cpp + $(NULL) + +gnash_la_LDFLAGS = \ + $(GLIB_LIBS) \ + $(LIBLTDL) \ + $(BOOSTPYTHON_LIBS) \ + $(NULL) + +gnash_la_LDFLAGS += -module -lgnashpython + +gnash_la_CPPFLAGS = -I.. \ + -I$(top_srcdir) \ + -I$(top_srcdir)/server \ + -I$(top_srcdir)/server/parser \ + -I$(top_srcdir)/server/vm \ + -I$(top_srcdir)/libltdl \ + -I$(top_srcdir)/libbase \ + -I$(top_srcdir)/backend \ + -I$(top_srcdir)/libgeometry \ + -I$(top_srcdir)/libmedia \ + -I$(top_srcdir)/libmedia/sdl \ + -I$(top_srcdir)/libmedia/gst \ + -DLOCALEDIR=\"$(localedir)\" \ + -DBOOST_PYTHON_DYNAMIC_LIB \ + $(BOOSTPYTHON_CFLAGS) \ + $(LIBXML_CFLAGS) \ + $(DMALLOC_CFLAGS) \ + $(LIRC_CFLAGS) \ + $(BOOST_CFLAGS) \ + $(NULL) + +libgnashpython_la_LIBADD = $(top_builddir)/server/libgnashserver.la \ + $(RENDERER_LIBS) \ + $(GNASH_LIBS) + +noinst_HEADERS = \ + gnashpython.h + +# Rebuild with GCC 4.x Mudflap support +mudflap: + @echo "Rebuilding with GCC Mudflap support" + $(MAKE) CXXFLAGS="$(CXXFLAGS) -fmudflap" LDFLAGS="$(LDFLAGS) -lmudflap" + +clean-hook: + -rm -f core.* $(CLEANFILES) + +endif Index: pythonmodule/gnashPythonExample.py =================================================================== RCS file: pythonmodule/gnashPythonExample.py diff -N pythonmodule/gnashPythonExample.py --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pythonmodule/gnashPythonExample.py 9 Jan 2008 20:06:02 -0000 1.1 @@ -0,0 +1,92 @@ +#!/usr/bin/python +# +# gnash.py: An example python script demonstrating Gnash python bindings. +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# +# +# The Gnash python bindings are loosely based on functions in +# testsuite/MovieTester.h +# +# They are designed to allow quick setup of the Gnash player while +# catering for different purposes. The module can be used to test +# Gnash from python, but also to extract information (and eventually +# thumbnails) from SWF files. +# +# The greatest limitation at present is the single movie: calling +# obj = gnash.Player() more than once results in an assertion +# failure as we try to initGnash() twice. + +# The lovely gnash module is named: +import gnash + +# Functions are accessed through the Player() class +player = gnash.Player() + +# The initialization of the player is split into three stages. First, +# set the base URL: +player.setBaseURL("/home/benjamin/Download/SWF/SWF6/u2_has.swf") + +# Then instruct Gnash to load the movie from the URL: +if player.createMovieDefinition(): + print "Movie successfully created." +else: + print "Load failed." + +# At this stage, you can query movie properties like so: +print "The frame rate of this movie is " + str(player.swfFrameRate()) + " FPS." +print "It has " + str(player.swfFrameCount()) + " frames altogether." +print "Loaded " + str(player.swfBytesLoaded()) + " of " + str(player.swfBytesTotal()) + "reported bytes." +print "It is version " + str(player.swfVersion()) +"." +print "It is " + str(player.swfWidth()) + "x" + str(player.swfWidth()) + " pixels." +print "URL: " + player.swfURL() + "." + + +# The third stage completes initialization. +if player.initVM(): + print "VM initialized." +#else: +# print "VM initialization failed." + +print "Loaded " + str(player.swfBytesLoaded()) + " of " + str(player.swfBytesTotal()) + " bytes reported." + +if player.addRenderer("AGG_RGB565"): + print "Renderer added."; + +# You are now able to advance the movie. +print "We start at frame " + str(player.currentFrame()) + "." + +for i in range(0,10): + player.advance() + +print "After 10 advances we are at frame " + str(player.currentFrame()) + " (You don't necessarily move to the next frame when you advance)." + +# Render like this (don't expect to see anything...) +player.render() + +# You can also make time pass in an instant: +player.advanceClock(199) + +# or press a key +player.pressKey(65) + + + + + + Index: pythonmodule/gnashpython.cpp =================================================================== RCS file: pythonmodule/gnashpython.cpp diff -N pythonmodule/gnashpython.cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pythonmodule/gnashpython.cpp 9 Jan 2008 20:06:02 -0000 1.1 @@ -0,0 +1,355 @@ +// gnashpython.cpp: python bindings to Gnash +// +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + + +#include "GnashException.h" +#include "URL.h" +#include "noseek_fd_adapter.h" +#include "movie_definition.h" +#include "movie_instance.h" +#include "movie_root.h" +#include "sprite_instance.h" +#include "as_environment.h" +#include "gnash.h" // for create_movie and create_library_movie and for gnash::key namespace +#include "VM.h" // for initialization +#include "sound_handler.h" // for creating the "test" sound handlers +#include "render.h" // for get_render_handler +#include "types.h" // for rgba class +#include "render.h" +#include "render_handler.h" +#include "render_handler_agg.h" +#include "SystemClock.h" +#include "impl.h" + +#include <cstdio> +#include <string> +#include <memory> // for auto_ptr +#include <boost/shared_ptr.hpp> + +#include "gnashpython.h" +#include "sound_handler.h" + +namespace gnash { + +namespace pythonwrapper { + + +GnashPlayer::GnashPlayer() +{ + init(); +} + +GnashPlayer::~GnashPlayer() +{ +} + +void +GnashPlayer::init() { + gnash::gnashInit(); +} + +void +GnashPlayer::setBaseURL(std::string url) +{ + if (url == "" || _url != "") return; + + _url = url; + + // Pass the base URL to the core libs. We can only do this + // once! Checking if it's been set when it hasn't trigger + // an assertion failure... + gnash::set_base_url( (gnash::URL)_url ); +} + +bool +GnashPlayer::createMovieDefinition() +{ + + // Fail if base URL not set + if (_url == "") return false; + + _fp = fopen(_url.c_str(), "rb"); + + if (!_fp) return false; + + std::auto_ptr<tu_file> in(noseek_fd_adapter::make_stream(fileno(_fp))); + + _movieDef = gnash::create_movie(in, _url, false); + + if (!_movieDef) { + // Something didn't work + fclose(_fp); + return false; + } + + return true; +} + +bool +GnashPlayer::initVM() +{ + + // If movie definition hasn't already been created, try to create it, + // fail if that doesn't work either. + if (!_movieDef && !createMovieDefinition()) return false; + + // Initialize the VM with a manual clock + _movieRoot = &(gnash::VM::init(*_movieDef, _manualClock).getRoot()); + + if (!_movieRoot) { + // Something didn't work + return false; + } + + _movieDef->completeLoad(); + _movieDef->ensure_frame_loaded(getSWFFrameCount()); + + fclose (_fp); + + auto_ptr<movie_instance> mi (_movieDef->create_movie_instance()); + + // Set _movie before calling ::render + _movieInstance = mi.get(); + + // Finally, place the root movie on the stage ... + _movieRoot->setRootMovie( mi.release() ); + + return true; +} + +void +GnashPlayer::allowRescale(bool allow) +{ + if (!_movieRoot || !_movieDef) return; + _movieRoot->allowRescaling(allow); +} + +void +GnashPlayer::advanceClock(unsigned long ms) +{ + if (!_movieRoot || !_movieDef) return; + _manualClock.advance(ms); +} + +void +GnashPlayer::advance() { + + if (!_movieRoot || !_movieDef) return; + + float fps = getSWFFrameRate(); + unsigned long clockAdvance = long(1000/fps); + advanceClock(clockAdvance); + + _movieRoot->advance(); +} + +void +GnashPlayer::pressKey(int code) +{ + if (!_movieRoot) return; + _movieRoot->notify_key_event((gnash::key::code)code, true); +} + +void +GnashPlayer::restart() +{ + if (!_movieDef || !_movieRoot) return; + _movieRoot->getRootMovie()->restart(); +} + + +int +GnashPlayer::getSWFBytesLoaded() const +{ + if (!_movieDef) return 0; + return _movieDef->get_bytes_loaded(); +} + +int +GnashPlayer::getSWFFrameCount() const +{ + if (!_movieDef) return 0; + return _movieDef->get_frame_count(); +} + +std::string +GnashPlayer::getSWFURL() const +{ + if (!_movieDef) return ""; + return _movieDef->get_url(); +} + +int +GnashPlayer::getSWFBytesTotal() const +{ + if (!_movieDef) return 0; + return _movieDef->get_bytes_total(); +} + +int +GnashPlayer::getSWFVersion() const +{ + if (!_movieDef) return 0; + return _movieDef->get_version(); +} + +float +GnashPlayer::getSWFWidth() const +{ + if (!_movieDef) return 0; + return _movieDef->get_width_pixels(); +} + +float +GnashPlayer::getSWFHeight() const +{ + if (!_movieDef) return 0; + return _movieDef->get_height_pixels(); +} + +float +GnashPlayer::getSWFFrameRate() const +{ + if (!_movieDef) return 0; + return _movieDef->get_frame_rate(); +} + +int +GnashPlayer::getCurrentFrame() const +{ + if (!_movieDef || !_movieRoot) return 0; + return _movieRoot->getRootMovie()->get_current_frame(); +} + +// Rendering stuff + +bool +GnashPlayer::initRenderer(const std::string& r) +{ + if (_handler) return false; + +#ifdef RENDERER_AGG + if (r.substr(0,4) == "AGG_") { + _handler = gnash::create_render_handler_agg(r.substr(4).c_str()); + } +#endif +#ifdef RENDERER_CAIRO + else if (r == "Cairo") { + _handler = (gnash::renderer::cairo::create_handler(); + } +#endif +#ifdef RENDERER_OPENGL + else if (r == "OpenGL") { + _handler = gnash::create_render_handler_ogl(false); + } +#endif + + if (_handler) { + return addRenderer(_handler); // False if it fails + } + else { + return false; + } + + return true; +} + +void +GnashPlayer::render() +{ + + if (!_handler) return; + + _invalidatedBounds.setNull(); + + _movieRoot->add_invalidated_bounds(_invalidatedBounds, false); + + // Force full redraw by using a WORLD invalidated ranges + gnash::InvalidatedRanges ranges = _invalidatedBounds; + if ( _forceRedraw ) { + ranges.setWorld(); // set to world if asked a full redraw + _forceRedraw = false; // reset to no forced redraw + } + + gnash::set_render_handler(_handler); + + _handler->set_invalidated_regions(ranges); + _movieRoot->display(); + +} + +bool +GnashPlayer::addRenderer(gnash::render_handler* handler) +{ + if (!handler->initTestBuffer(getSWFWidth(), getSWFHeight())) { + cout << "Failed to init renderer, but the renderer was okay" << "\n"; + return false; + } + + gnash::set_render_handler(handler); + + return true; +} + +// Gnash Character + +GnashCharacter* +GnashPlayer::getCharacterById(int id) +{ + if (!_movieDef || !_movieRoot) return NULL; + + gnash::character* c = _movieRoot->getRootMovie()->get_character(id); + + if (!c) return NULL; + + GnashCharacter* chr(new GnashCharacter(c)); + + return chr; +} + +GnashCharacter* +GnashPlayer::getTopmostMouseEntity() +{ + if (!_movieDef || !_movieRoot) return NULL; + + gnash::character* c = _movieRoot->getActiveEntityUnderPointer(); + + if (!c) return NULL; + + GnashCharacter* chr(new GnashCharacter(c)); + + return chr; +} + +GnashCharacter::GnashCharacter(gnash::character* c) + : + _character(c) +{ +} + +GnashCharacter::GnashCharacter() +{ +} + +GnashCharacter::~GnashCharacter() +{ +} + +} // end pythonwrapper +} // end gnash Index: pythonmodule/gnashpython.h =================================================================== RCS file: pythonmodule/gnashpython.h diff -N pythonmodule/gnashpython.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pythonmodule/gnashpython.h 9 Jan 2008 20:06:02 -0000 1.1 @@ -0,0 +1,132 @@ +// gnashpython.h: headers for the python bindings to Gnash +// +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +#ifndef GNASH_PYTHON_H +#define GNASH_PYTHON_H + +#include <string> +#include "gnash.h" +#include "ManualClock.h" +#include "movie_root.h" +#include "movie_definition.h" + +#include "Range2d.h" +#include "sound_handler.h" // for creating the "test" sound handlers +#include "types.h" // for rgba class +#include "render_handler.h" // for dtor visibility by auto_ptr +#include "movie_instance.h" +#include "character.h" + +#include <memory> // for auto_ptr +#include <string> + + +// Forward declarations +namespace gnash { +namespace pythonwrapper { + + class GnashCharacter; + class GnashPlayer; + +} +} + + +namespace gnash { + +namespace pythonwrapper { + +class GnashPlayer +{ + +public: + + GnashPlayer(); + ~GnashPlayer(); + + // Movie creation + bool createMovieDefinition(); + bool initVM(); + void setBaseURL(std::string url); + + bool initRenderer(const std::string& r); + bool addRenderer(gnash::render_handler* handler); + + // Movie information + float getSWFFrameRate() const; + int getSWFFrameCount() const; + int getSWFVersion() const; + float getSWFWidth() const; + float getSWFHeight() const; + int getSWFBytesTotal() const; + int getSWFBytesLoaded() const; + std::string getSWFURL() const; + + int getCurrentFrame() const; + + // Sprites + + GnashCharacter* getCharacterById(int id); + GnashCharacter* getTopmostMouseEntity(); + + // Interaction + void advanceClock(unsigned long ms); + void advance(); + void pressKey(int code); + void allowRescale(bool allow); + void render(); + void restart(); + +private: + void init(); + + gnash::movie_definition* _movieDef; + gnash::movie_root* _movieRoot; + gnash::movie_instance* _movieInstance; + gnash::ManualClock _manualClock; + + gnash::render_handler* _handler; + + // The base URL of the movie; + std::string _url; + bool _forceRedraw; + gnash::InvalidatedRanges _invalidatedBounds; + + // File to open (a bit primitive...) + FILE* _fp; +}; + +class GnashCharacter +{ +public: + GnashCharacter(); + GnashCharacter(gnash::character* c); + ~GnashCharacter(); + + const std::string name() { return _character->get_name(); } + const float ratio() { return _character->get_ratio(); } + +private: + gnash::character* _character; + +}; + +} +} +// end namespace pythonwrapper +#endif Index: pythonmodule/pyGnash.cpp =================================================================== RCS file: pythonmodule/pyGnash.cpp diff -N pythonmodule/pyGnash.cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pythonmodule/pyGnash.cpp 9 Jan 2008 20:06:02 -0000 1.1 @@ -0,0 +1,68 @@ +// pyGnash.cpp: The python module interface to Gnash +// +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +// +#include <boost/python.hpp> +#include "gnashpython.h" + +using namespace boost::python; + +namespace gnash { + +BOOST_PYTHON_MODULE(gnash) { + class_<pythonwrapper::GnashPlayer>("Player", "Allows direct control of a Gnash player.") + + .def("setBaseURL", &pythonwrapper::GnashPlayer::setBaseURL) + .def("createMovieDefinition", &pythonwrapper::GnashPlayer::createMovieDefinition) + .def("initVM", &pythonwrapper::GnashPlayer::initVM) + + .def("addRenderer", &pythonwrapper::GnashPlayer::initRenderer) + + .def("currentFrame", &pythonwrapper::GnashPlayer::getCurrentFrame) + + .def("advanceClock", &pythonwrapper::GnashPlayer::advanceClock) + .def("advance", &pythonwrapper::GnashPlayer::advance) + .def("restart", &pythonwrapper::GnashPlayer::restart) + .def("pressKey", &pythonwrapper::GnashPlayer::pressKey) + .def("allowRescale", &pythonwrapper::GnashPlayer::allowRescale) + .def("render", &pythonwrapper::GnashPlayer::render) + + .def("swfFrameRate", &pythonwrapper::GnashPlayer::getSWFFrameRate) + .def("swfFrameCount", &pythonwrapper::GnashPlayer::getSWFFrameCount) + .def("swfVersion", &pythonwrapper::GnashPlayer::getSWFVersion) + .def("swfWidth", &pythonwrapper::GnashPlayer::getSWFWidth) + .def("swfHeight", &pythonwrapper::GnashPlayer::getSWFHeight) + .def("swfURL", &pythonwrapper::GnashPlayer::getSWFURL) + .def("swfBytesTotal", &pythonwrapper::GnashPlayer::getSWFBytesTotal, + "Reported length of the movie in bytes. " + "There is no guarantee that this is accurate.") + .def("swfBytesLoaded", &pythonwrapper::GnashPlayer::getSWFBytesLoaded, + "The number of bytes of the movie that have been loaded") + + .def("getCharacterById", &pythonwrapper::GnashPlayer::getCharacterById, + return_value_policy<manage_new_object>()) + .def("getTopmostMouseEntity", &pythonwrapper::GnashPlayer::getTopmostMouseEntity, + return_value_policy<manage_new_object>()) + ; + + class_<pythonwrapper::GnashCharacter>("Character", "A character from the movie.") + ; + +} + +} // end namespace gnash _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit