mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 03:15:07 -04:00
more scripting work
This commit is contained in:
parent
4edcad8821
commit
e5cb25b7bd
@ -19,11 +19,13 @@
|
|||||||
nppanda3d_common.h \
|
nppanda3d_common.h \
|
||||||
ppDownloadRequest.h ppDownloadRequest.I \
|
ppDownloadRequest.h ppDownloadRequest.I \
|
||||||
ppInstance.h ppInstance.I \
|
ppInstance.h ppInstance.I \
|
||||||
|
ppObject.h \
|
||||||
startup.h
|
startup.h
|
||||||
|
|
||||||
#define INCLUDED_SOURCES \
|
#define INCLUDED_SOURCES \
|
||||||
ppDownloadRequest.cxx \
|
ppDownloadRequest.cxx \
|
||||||
ppInstance.cxx \
|
ppInstance.cxx \
|
||||||
|
ppObject.cxx \
|
||||||
startup.cxx
|
startup.cxx
|
||||||
|
|
||||||
// Windows-specific options.
|
// Windows-specific options.
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "ppDownloadRequest.cxx"
|
#include "ppDownloadRequest.cxx"
|
||||||
#include "ppInstance.cxx"
|
#include "ppInstance.cxx"
|
||||||
|
#include "ppObject.cxx"
|
||||||
#include "startup.cxx"
|
#include "startup.cxx"
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,3 +12,14 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPInstance::get_npp_instance
|
||||||
|
// Access: Public
|
||||||
|
// Description: Returns the NPP object corresponding to this
|
||||||
|
// particular instance.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
inline NPP PPInstance::
|
||||||
|
get_npp_instance() const {
|
||||||
|
return _npp_instance;
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "ppInstance.h"
|
#include "ppInstance.h"
|
||||||
|
#include "ppObject.h"
|
||||||
#include "startup.h"
|
#include "startup.h"
|
||||||
#include "p3d_plugin_config.h"
|
#include "p3d_plugin_config.h"
|
||||||
#include "find_root_dir.h"
|
#include "find_root_dir.h"
|
||||||
@ -37,6 +38,7 @@ PPInstance(NPMIMEType pluginType, NPP instance, uint16 mode,
|
|||||||
|
|
||||||
_npp_instance = instance;
|
_npp_instance = instance;
|
||||||
_npp_mode = mode;
|
_npp_mode = mode;
|
||||||
|
_script_object = NULL;
|
||||||
|
|
||||||
// Copy the tokens and save them within this object.
|
// Copy the tokens and save them within this object.
|
||||||
_tokens.reserve(argc);
|
_tokens.reserve(argc);
|
||||||
@ -393,6 +395,30 @@ handle_request(P3D_request *request) {
|
|||||||
P3D_request_finish(request, handled);
|
P3D_request_finish(request, handled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPInstance::get_script_object
|
||||||
|
// Access: Public
|
||||||
|
// Description: Returns a toplevel object that JavaScript or whatever
|
||||||
|
// can read and/or modify to control the instance.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
NPObject *PPInstance::
|
||||||
|
get_script_object() {
|
||||||
|
logfile << "get_script_object\n" << flush;
|
||||||
|
if (_script_object != NULL) {
|
||||||
|
return _script_object;
|
||||||
|
}
|
||||||
|
|
||||||
|
P3D_object *obj = NULL;
|
||||||
|
|
||||||
|
if (_p3d_inst != NULL) {
|
||||||
|
obj = P3D_instance_get_script_object(_p3d_inst);
|
||||||
|
logfile << "obj = " << obj << "\n" << flush;
|
||||||
|
}
|
||||||
|
|
||||||
|
_script_object = PPObject::make_new(this, obj);
|
||||||
|
logfile << "ppobj = " << _script_object << "\n" << flush;
|
||||||
|
return _script_object;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: PPInstance::read_contents_file
|
// Function: PPInstance::read_contents_file
|
||||||
@ -575,6 +601,14 @@ create_instance() {
|
|||||||
}
|
}
|
||||||
P3D_instance_start(_p3d_inst, _p3d_filename.c_str(), tokens, _tokens.size());
|
P3D_instance_start(_p3d_inst, _p3d_filename.c_str(), tokens, _tokens.size());
|
||||||
send_window();
|
send_window();
|
||||||
|
|
||||||
|
if (_script_object != NULL) {
|
||||||
|
// Now that we have an instance, initialize our script_object
|
||||||
|
// with the proper P3D object pointer.
|
||||||
|
P3D_object *obj = P3D_instance_get_script_object(_p3d_inst);
|
||||||
|
logfile << "late obj = " << obj << "\n" << flush;
|
||||||
|
_script_object->set_p3d_object(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
class PPObject;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Class : PPInstance
|
// Class : PPInstance
|
||||||
// Description : This represents a single instance of the Panda3D
|
// Description : This represents a single instance of the Panda3D
|
||||||
@ -34,6 +36,8 @@ public:
|
|||||||
int16 argc, char *argn[], char *argv[], NPSavedData *saved);
|
int16 argc, char *argn[], char *argv[], NPSavedData *saved);
|
||||||
~PPInstance();
|
~PPInstance();
|
||||||
|
|
||||||
|
inline NPP get_npp_instance() const;
|
||||||
|
|
||||||
void set_window(NPWindow *window);
|
void set_window(NPWindow *window);
|
||||||
NPError new_stream(NPMIMEType type, NPStream *stream,
|
NPError new_stream(NPMIMEType type, NPStream *stream,
|
||||||
bool seekable, uint16 *stype);
|
bool seekable, uint16 *stype);
|
||||||
@ -44,6 +48,8 @@ public:
|
|||||||
|
|
||||||
void handle_request(P3D_request *request);
|
void handle_request(P3D_request *request);
|
||||||
|
|
||||||
|
NPObject *get_script_object();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool read_contents_file(const string &filename);
|
bool read_contents_file(const string &filename);
|
||||||
void get_core_api(TiXmlElement *xpackage);
|
void get_core_api(TiXmlElement *xpackage);
|
||||||
@ -72,6 +78,8 @@ private:
|
|||||||
bool _got_window;
|
bool _got_window;
|
||||||
NPWindow _window;
|
NPWindow _window;
|
||||||
|
|
||||||
|
PPObject *_script_object;
|
||||||
|
|
||||||
P3D_instance *_p3d_inst;
|
P3D_instance *_p3d_inst;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
337
direct/src/plugin_npapi/ppObject.cxx
Normal file
337
direct/src/plugin_npapi/ppObject.cxx
Normal file
@ -0,0 +1,337 @@
|
|||||||
|
// Filename: ppObject.cxx
|
||||||
|
// Created by: drose (03Jul09)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the revised BSD
|
||||||
|
// license. You should have received a copy of this license along
|
||||||
|
// with this source code in a file named "LICENSE."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "ppObject.h"
|
||||||
|
|
||||||
|
NPClass PPObject::_object_class = {
|
||||||
|
NP_CLASS_STRUCT_VERSION,
|
||||||
|
&PPObject::NPAllocate,
|
||||||
|
&PPObject::NPDeallocate,
|
||||||
|
&PPObject::NPInvalidate,
|
||||||
|
&PPObject::NPHasMethod,
|
||||||
|
&PPObject::NPInvoke,
|
||||||
|
&PPObject::NPInvokeDefault,
|
||||||
|
&PPObject::NPHasProperty,
|
||||||
|
&PPObject::NPGetProperty,
|
||||||
|
&PPObject::NPSetProperty,
|
||||||
|
&PPObject::NPRemoveProperty,
|
||||||
|
#if NP_CLASS_STRUCT_VERSION >= NP_CLASS_STRUCT_VERSION_ENUM
|
||||||
|
&PPObject::NPEnumerate,
|
||||||
|
#endif
|
||||||
|
#if NP_CLASS_STRUCT_VERSION >= NP_CLASS_STRUCT_VERSION_CTOR
|
||||||
|
&PPObject::NPConstruct,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::make_new
|
||||||
|
// Access: Public, Static
|
||||||
|
// Description: Use this call to construct a new PPObject.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
PPObject *PPObject::
|
||||||
|
make_new(PPInstance *inst, P3D_object *p3d_object) {
|
||||||
|
NPObject *npobj =
|
||||||
|
browser->createobject(inst->get_npp_instance(), &_object_class);
|
||||||
|
PPObject *ppobj = (PPObject *)npobj;
|
||||||
|
ppobj->construct(p3d_object);
|
||||||
|
return ppobj;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::set_p3d_object
|
||||||
|
// Access: Public
|
||||||
|
// Description: Changes the p3d_object this PPObject maps to. The
|
||||||
|
// previous object, if any, is deleted.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PPObject::
|
||||||
|
set_p3d_object(P3D_object *p3d_object) {
|
||||||
|
if (_p3d_object != p3d_object) {
|
||||||
|
if (_p3d_object != NULL) {
|
||||||
|
P3D_OBJECT_FINISH(_p3d_object);
|
||||||
|
}
|
||||||
|
_p3d_object = p3d_object;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::construct
|
||||||
|
// Access: Private
|
||||||
|
// Description: Stands in for the C++ constructor. We can't have a
|
||||||
|
// true constructor because of the C-style interface in
|
||||||
|
// NPN_CreateObject(). This must be called explicitly
|
||||||
|
// following NPN_CreateObject().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PPObject::
|
||||||
|
construct(P3D_object *p3d_object) {
|
||||||
|
logfile << "construct: " << this << "\n" << flush;
|
||||||
|
_p3d_object = p3d_object;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::invalidate
|
||||||
|
// Access: Private
|
||||||
|
// Description: This "destructor" is called by NPInvalidate().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PPObject::
|
||||||
|
invalidate() {
|
||||||
|
logfile << "invalidate: " << this << "\n" << flush;
|
||||||
|
set_p3d_object(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::has_method
|
||||||
|
// Access: Private
|
||||||
|
// Description: Returns true if the object has the named method,
|
||||||
|
// false otherwise.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
has_method(NPIdentifier name) {
|
||||||
|
logfile << "has_method: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::invoke
|
||||||
|
// Access: Private
|
||||||
|
// Description: Calls the named method on the object, storing the
|
||||||
|
// return value into result. Returns true on success,
|
||||||
|
// false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
invoke(NPIdentifier name, const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result) {
|
||||||
|
logfile << "invoke: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::invoke_default
|
||||||
|
// Access: Private
|
||||||
|
// Description: Calls the default method on the object, storing the
|
||||||
|
// return value into result. Returns true on success,
|
||||||
|
// false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
invoke_default(const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result) {
|
||||||
|
logfile << "invoke_default: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::has_property
|
||||||
|
// Access: Private
|
||||||
|
// Description: Returns true if the object has the named property,
|
||||||
|
// false otherwise.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
has_property(NPIdentifier name) {
|
||||||
|
logfile << "has_property: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::get_property
|
||||||
|
// Access: Private
|
||||||
|
// Description: Retrieves the named property value from the object
|
||||||
|
// and stores it in result. Returns true on success,
|
||||||
|
// false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
get_property(NPIdentifier name, NPVariant *result) {
|
||||||
|
logfile << "get_property: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::set_property
|
||||||
|
// Access: Private
|
||||||
|
// Description: Replaces the named property value on the object.
|
||||||
|
// Returns true on success, false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
set_property(NPIdentifier name, const NPVariant *value) {
|
||||||
|
logfile << "set_property: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::remove_property
|
||||||
|
// Access: Private
|
||||||
|
// Description: Deletes the named property value from the object.
|
||||||
|
// Returns true on success, false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
remove_property(NPIdentifier name) {
|
||||||
|
logfile << "remove_property: " << this << "\n" << flush;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::enumerate
|
||||||
|
// Access: Private
|
||||||
|
// Description: Constructs a list of available properties on this
|
||||||
|
// object. Returns true on success, false on failure.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
enumerate(NPIdentifier **value, uint32_t *count) {
|
||||||
|
logfile << "enumerate: " << this << "\n" << flush;
|
||||||
|
// TODO: Not implemented yet.
|
||||||
|
|
||||||
|
// Note that the array of values must be allocated here with
|
||||||
|
// NPN_MemAlloc().
|
||||||
|
*value = NULL;
|
||||||
|
*count = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// The remaining function bodies are the C-style function wrappers
|
||||||
|
// that are called directly by NPAPI, and which redirect into the
|
||||||
|
// above C++-style methods.
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPAllocate
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description: Called by NPN_CreateObject() to allocate space for
|
||||||
|
// this object.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
NPObject *PPObject::
|
||||||
|
NPAllocate(NPP npp, NPClass *aClass) {
|
||||||
|
logfile << "NPAllocate\n";
|
||||||
|
assert(aClass == &_object_class);
|
||||||
|
return (PPObject *)malloc(sizeof(PPObject));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::Deallocate
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description: Called to delete the space allocated by NPAllocate,
|
||||||
|
// above.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PPObject::
|
||||||
|
NPDeallocate(NPObject *npobj) {
|
||||||
|
logfile << "NPDeallocate: " << npobj << "\n" << flush;
|
||||||
|
free(npobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::Deallocate
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description: Called to destruct the object.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PPObject::
|
||||||
|
NPInvalidate(NPObject *npobj) {
|
||||||
|
logfile << "NPInvalidate: " << npobj << "\n" << flush;
|
||||||
|
((PPObject *)npobj)->invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPHasMethod
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPHasMethod(NPObject *npobj, NPIdentifier name) {
|
||||||
|
return ((PPObject *)npobj)->has_method(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPInvoke
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPInvoke(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result) {
|
||||||
|
return ((PPObject *)npobj)->invoke(name, args, argCount, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPInvokeDefault
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPInvokeDefault(NPObject *npobj, const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result) {
|
||||||
|
return ((PPObject *)npobj)->invoke_default(args, argCount, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPHasProperty
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPHasProperty(NPObject *npobj, NPIdentifier name) {
|
||||||
|
return ((PPObject *)npobj)->has_property(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPGetProperty
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPGetProperty(NPObject *npobj, NPIdentifier name, NPVariant *result) {
|
||||||
|
return ((PPObject *)npobj)->get_property(name, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPSetProperty
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPSetProperty(NPObject *npobj, NPIdentifier name, const NPVariant *value) {
|
||||||
|
return ((PPObject *)npobj)->set_property(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPRemoveProperty
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPRemoveProperty(NPObject *npobj, NPIdentifier name) {
|
||||||
|
return ((PPObject *)npobj)->remove_property(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPEnumerate
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count) {
|
||||||
|
return ((PPObject *)npobj)->enumerate(value, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PPObject::NPConstruct
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool PPObject::
|
||||||
|
NPConstruct(NPObject *npobj, const NPVariant *args,
|
||||||
|
uint32_t argCount, NPVariant *result) {
|
||||||
|
// Not implemented. We don't use this constructor mechanism because
|
||||||
|
// it wasn't supported on earlier versions of Gecko. Instead, we
|
||||||
|
// use make_new() to construct PPObjects via an explicit call to
|
||||||
|
// construct().
|
||||||
|
return true;
|
||||||
|
}
|
86
direct/src/plugin_npapi/ppObject.h
Normal file
86
direct/src/plugin_npapi/ppObject.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// Filename: ppObject.h
|
||||||
|
// Created by: drose (03Jul09)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the revised BSD
|
||||||
|
// license. You should have received a copy of this license along
|
||||||
|
// with this source code in a file named "LICENSE."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef PPOBJECT_H
|
||||||
|
#define PPOBJECT_H
|
||||||
|
|
||||||
|
#include "nppanda3d_common.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Class : PPObject
|
||||||
|
// Description : This is the interface layer between an NPObject and a
|
||||||
|
// P3D_object. It maps calls from NPAPI into the
|
||||||
|
// P3D_object system.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
class PPObject : public NPObject {
|
||||||
|
public:
|
||||||
|
static PPObject *make_new(PPInstance *inst, P3D_object *p3d_object);
|
||||||
|
|
||||||
|
inline P3D_object *get_p3d_object() const;
|
||||||
|
void set_p3d_object(P3D_object *p3d_object);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void construct(P3D_object *p3d_object);
|
||||||
|
void invalidate();
|
||||||
|
|
||||||
|
bool has_method(NPIdentifier name);
|
||||||
|
bool invoke(NPIdentifier name,
|
||||||
|
const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
bool invoke_default(const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
bool has_property(NPIdentifier name);
|
||||||
|
bool get_property(NPIdentifier name,
|
||||||
|
NPVariant *result);
|
||||||
|
bool set_property(NPIdentifier name,
|
||||||
|
const NPVariant *value);
|
||||||
|
bool remove_property(NPIdentifier name);
|
||||||
|
bool enumerate(NPIdentifier **value, uint32_t *count);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static NPObject *NPAllocate(NPP npp, NPClass *aClass);
|
||||||
|
static void NPDeallocate(NPObject *npobj);
|
||||||
|
static void NPInvalidate(NPObject *npobj);
|
||||||
|
static bool NPHasMethod(NPObject *npobj, NPIdentifier name);
|
||||||
|
static bool NPInvoke(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
static bool NPInvokeDefault(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
static bool NPHasProperty(NPObject *npobj, NPIdentifier name);
|
||||||
|
static bool NPGetProperty(NPObject *npobj, NPIdentifier name,
|
||||||
|
NPVariant *result);
|
||||||
|
static bool NPSetProperty(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *value);
|
||||||
|
static bool NPRemoveProperty(NPObject *npobj,
|
||||||
|
NPIdentifier name);
|
||||||
|
static bool NPEnumerate(NPObject *npobj, NPIdentifier **value,
|
||||||
|
uint32_t *count);
|
||||||
|
static bool NPConstruct(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
|
||||||
|
private:
|
||||||
|
P3D_object *_p3d_object;
|
||||||
|
|
||||||
|
static NPClass _object_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "ppObject.I"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -396,28 +396,22 @@ NPP_URLNotify(NPP instance, const char *url,
|
|||||||
NPError
|
NPError
|
||||||
NPP_GetValue(NPP instance, NPPVariable variable, void *value) {
|
NPP_GetValue(NPP instance, NPPVariable variable, void *value) {
|
||||||
logfile << "GetValue " << variable << "\n";
|
logfile << "GetValue " << variable << "\n";
|
||||||
|
PPInstance *inst = (PPInstance *)(instance->pdata);
|
||||||
|
assert(inst != NULL);
|
||||||
|
|
||||||
/*
|
|
||||||
if (variable == NPPVpluginScriptableNPObject) {
|
if (variable == NPPVpluginScriptableNPObject) {
|
||||||
static NPObject *object = NULL;
|
NPObject *obj = inst->get_script_object();
|
||||||
if (object == NULL) {
|
if (obj != NULL) {
|
||||||
static NPClass npclass;
|
*(NPObject **)value = obj;
|
||||||
memset(&npclass, 0, sizeof(npclass));
|
|
||||||
npclass.structVersion = NP_CLASS_STRUCT_VERSION;
|
|
||||||
object = browser->createobject(instance, &npclass);
|
|
||||||
assert(object != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
*(NPObject **)value = object;
|
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
|
|
||||||
return NPERR_GENERIC_ERROR;
|
return NPERR_GENERIC_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: NPP_URLNotify
|
// Function: NPP_SetValue
|
||||||
// Description: Called by the browser to update a scriptable value.
|
// Description: Called by the browser to update a scriptable value.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
NPError
|
NPError
|
||||||
|
Loading…
x
Reference in New Issue
Block a user