update s3tc#8,resolve CCConfiguration conflict

This commit is contained in:
godyZ 2013-08-09 15:47:20 +08:00
commit 9dde196140
12 changed files with 598 additions and 337 deletions

View File

@ -65,7 +65,7 @@ void Camera::restore(void)
_upY = 1.0f;
_upZ = 0.0f;
kmMat4Identity( &_lookupMatrix );
kmMat4Identity(&_lookupMatrix);
_dirty = false;
}
@ -76,15 +76,15 @@ void Camera::locate(void)
{
kmVec3 eye, center, up;
kmVec3Fill( &eye, _eyeX, _eyeY , _eyeZ );
kmVec3Fill( &center, _centerX, _centerY, _centerZ );
kmVec3Fill(&eye, _eyeX, _eyeY , _eyeZ);
kmVec3Fill(&center, _centerX, _centerY, _centerZ);
kmVec3Fill( &up, _upX, _upY, _upZ);
kmMat4LookAt( &_lookupMatrix, &eye, &center, &up);
kmVec3Fill(&up, _upX, _upY, _upZ);
kmMat4LookAt(&_lookupMatrix, &eye, &center, &up);
_dirty = false;
}
kmGLMultMatrix( &_lookupMatrix );
kmGLMultMatrix(&_lookupMatrix);
}
float Camera::getZEye(void)

View File

@ -24,13 +24,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#ifndef __CCCAMERA_H__
#define __CCCAMERA_H__
#ifndef __COCOS2DX_CAMERA_H__
#define __COCOS2DX_CAMERA_H__
#include <string>
#include "cocoa/CCObject.h"
#include "ccMacros.h"
#include "kazmath/mat4.h"
#include <string>
NS_CC_BEGIN
@ -122,4 +124,4 @@ private:
NS_CC_END
#endif // __CCCAMERA_H__
#endif // __COCOS2DX_CAMERA_H__

View File

@ -24,9 +24,9 @@ THE SOFTWARE.
****************************************************************************/
#include "CCConfiguration.h"
#include <string.h>
#include "ccMacros.h"
#include "ccConfig.h"
#include <string.h>
#include "cocoa/CCDictionary.h"
#include "cocoa/CCInteger.h"
#include "cocoa/CCBool.h"
@ -38,9 +38,9 @@ using namespace std;
NS_CC_BEGIN
Configuration* Configuration::s_gSharedConfiguration = NULL;
Configuration* Configuration::s_sharedConfiguration = nullptr;
Configuration::Configuration(void)
Configuration::Configuration()
: _maxTextureSize(0)
, _maxModelviewStackDepth(0)
, _supportsPVRTC(false)
@ -52,40 +52,40 @@ Configuration::Configuration(void)
, _supportsShareableVAO(false)
, _maxSamplesAllowed(0)
, _maxTextureUnits(0)
, _glExtensions(NULL)
, _valueDict(NULL)
, _glExtensions(nullptr)
, _valueDict(nullptr)
{
}
bool Configuration::init(void)
bool Configuration::init()
{
_valueDict = Dictionary::create();
_valueDict->retain();
_valueDict->setObject( String::create( cocos2dVersion() ), "cocos2d.x.version");
_valueDict->setObject(String::create( cocos2dVersion() ), "cocos2d.x.version");
#if CC_ENABLE_PROFILERS
_valueDict->setObject( Bool::create(true), "cocos2d.x.compiled_with_profiler");
_valueDict->setObject(Bool::create(true), "cocos2d.x.compiled_with_profiler");
#else
_valueDict->setObject( Bool::create(false), "cocos2d.x.compiled_with_profiler");
_valueDict->setObject(Bool::create(false), "cocos2d.x.compiled_with_profiler");
#endif
#if CC_ENABLE_GL_STATE_CACHE == 0
_valueDict->setObject( Bool::create(false), "cocos2d.x.compiled_with_gl_state_cache");
_valueDict->setObject(Bool::create(false), "cocos2d.x.compiled_with_gl_state_cache");
#else
_valueDict->setObject( Bool::create(true), "cocos2d.x.compiled_with_gl_state_cache");
_valueDict->setObject(Bool::create(true), "cocos2d.x.compiled_with_gl_state_cache");
#endif
return true;
}
Configuration::~Configuration(void)
Configuration::~Configuration()
{
_valueDict->release();
}
void Configuration::dumpInfo(void) const
void Configuration::dumpInfo() const
{
// Dump
PrettyPrinter visitor(0);
@ -110,71 +110,71 @@ void Configuration::dumpInfo(void) const
void Configuration::gatherGPUInfo()
{
_valueDict->setObject( String::create( (const char*)glGetString(GL_VENDOR)), "gl.vendor");
_valueDict->setObject( String::create( (const char*)glGetString(GL_RENDERER)), "gl.renderer");
_valueDict->setObject( String::create( (const char*)glGetString(GL_VERSION)), "gl.version");
_valueDict->setObject(String::create((const char*)glGetString(GL_VENDOR)), "gl.vendor");
_valueDict->setObject(String::create((const char*)glGetString(GL_RENDERER)), "gl.renderer");
_valueDict->setObject(String::create((const char*)glGetString(GL_VERSION)), "gl.version");
_glExtensions = (char *)glGetString(GL_EXTENSIONS);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &_maxTextureSize);
_valueDict->setObject( Integer::create((int)_maxTextureSize), "gl.max_texture_size");
_valueDict->setObject(Integer::create((int)_maxTextureSize), "gl.max_texture_size");
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &_maxTextureUnits);
_valueDict->setObject( Integer::create((int)_maxTextureUnits), "gl.max_texture_units");
_valueDict->setObject(Integer::create((int)_maxTextureUnits), "gl.max_texture_units");
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
glGetIntegerv(GL_MAX_SAMPLES_APPLE, &_maxSamplesAllowed);
_valueDict->setObject( Integer::create((int)_maxSamplesAllowed), "gl.max_samples_allowed");
_valueDict->setObject(Integer::create((int)_maxSamplesAllowed), "gl.max_samples_allowed");
#endif
_supportsETC = checkForGLExtension("GL_OES_compressed_ETC1_RGB8_texture");
_valueDict->setObject( Bool::create(_supportsETC), "gl.supports_ETC");
_valueDict->setObject(Bool::create(_supportsETC), "gl.supports_ETC");
_supportsS3TC = checkForGLExtension("GL_EXT_texture_compression_s3tc");
_valueDict->setObject( Bool::create(_supportsS3TC), "gl.supports_S3TC");
_supportsPVRTC = checkForGLExtension("GL_IMG_texture_compression_pvrtc");
_valueDict->setObject( Bool::create(_supportsPVRTC), "gl.supports_PVRTC");
_valueDict->setObject(Bool::create(_supportsPVRTC), "gl.supports_PVRTC");
_supportsNPOT = true;
_valueDict->setObject( Bool::create(_supportsNPOT), "gl.supports_NPOT");
_valueDict->setObject(Bool::create(_supportsNPOT), "gl.supports_NPOT");
_supportsBGRA8888 = checkForGLExtension("GL_IMG_texture_format_BGRA888");
_valueDict->setObject( Bool::create(_supportsBGRA8888), "gl.supports_BGRA8888");
_valueDict->setObject(Bool::create(_supportsBGRA8888), "gl.supports_BGRA8888");
_supportsDiscardFramebuffer = checkForGLExtension("GL_EXT_discard_framebuffer");
_valueDict->setObject( Bool::create(_supportsDiscardFramebuffer), "gl.supports_discard_framebuffer");
_valueDict->setObject(Bool::create(_supportsDiscardFramebuffer), "gl.supports_discard_framebuffer");
_supportsShareableVAO = checkForGLExtension("vertex_array_object");
_valueDict->setObject( Bool::create(_supportsShareableVAO), "gl.supports_vertex_array_object");
_valueDict->setObject(Bool::create(_supportsShareableVAO), "gl.supports_vertex_array_object");
CHECK_GL_ERROR_DEBUG();
}
Configuration* Configuration::getInstance()
{
if (! s_gSharedConfiguration)
if (! s_sharedConfiguration)
{
s_gSharedConfiguration = new Configuration();
s_gSharedConfiguration->init();
s_sharedConfiguration = new Configuration();
s_sharedConfiguration->init();
}
return s_gSharedConfiguration;
return s_sharedConfiguration;
}
void Configuration::destroyInstance()
{
CC_SAFE_RELEASE_NULL(s_gSharedConfiguration);
CC_SAFE_RELEASE_NULL(s_sharedConfiguration);
}
// XXX: deprecated
Configuration* Configuration::sharedConfiguration(void)
Configuration* Configuration::sharedConfiguration()
{
return Configuration::getInstance();
}
// XXX: deprecated
void Configuration::purgeConfiguration(void)
void Configuration::purgeConfiguration()
{
Configuration::destroyInstance();
}
@ -182,43 +182,43 @@ void Configuration::purgeConfiguration(void)
bool Configuration::checkForGLExtension(const string &searchName) const
{
bool bRet = false;
bool ret = false;
const char *kSearchName = searchName.c_str();
if (_glExtensions &&
strstr(_glExtensions, kSearchName))
{
bRet = true;
ret = true;
}
return bRet;
return ret;
}
//
// getters for specific variables.
// Mantained for backward compatiblity reasons only.
//
int Configuration::getMaxTextureSize(void) const
int Configuration::getMaxTextureSize() const
{
return _maxTextureSize;
}
int Configuration::getMaxModelviewStackDepth(void) const
int Configuration::getMaxModelviewStackDepth() const
{
return _maxModelviewStackDepth;
}
int Configuration::getMaxTextureUnits(void) const
int Configuration::getMaxTextureUnits() const
{
return _maxTextureUnits;
}
bool Configuration::supportsNPOT(void) const
bool Configuration::supportsNPOT() const
{
return _supportsNPOT;
}
bool Configuration::supportsPVRTC(void) const
bool Configuration::supportsPVRTC() const
{
return _supportsPVRTC;
}
@ -238,17 +238,17 @@ bool Configuration::supportsS3TC() const
return _supportsS3TC;
}
bool Configuration::supportsBGRA8888(void) const
bool Configuration::supportsBGRA8888() const
{
return _supportsBGRA8888;
}
bool Configuration::supportsDiscardFramebuffer(void) const
bool Configuration::supportsDiscardFramebuffer() const
{
return _supportsDiscardFramebuffer;
}
bool Configuration::supportsShareableVAO(void) const
bool Configuration::supportsShareableVAO() const
{
return _supportsShareableVAO;
}
@ -256,63 +256,66 @@ bool Configuration::supportsShareableVAO(void) const
//
// generic getters for properties
//
const char *Configuration::getCString( const char *key, const char *default_value ) const
const char *Configuration::getCString(const char *key, const char *defaultValue) const
{
Object *ret = _valueDict->objectForKey(key);
if( ret ) {
if( String *str=dynamic_cast<String*>(ret) )
if (ret)
{
if (String *str=dynamic_cast<String*>(ret))
return str->getCString();
CCASSERT(false, "Key found, but from different type");
}
// XXX: Should it throw an exception ?
return default_value;
return defaultValue;
}
/** returns the value of a given key as a boolean */
bool Configuration::getBool( const char *key, bool default_value ) const
bool Configuration::getBool(const char *key, bool defaultValue) const
{
Object *ret = _valueDict->objectForKey(key);
if( ret ) {
if( Bool *boolobj=dynamic_cast<Bool*>(ret) )
if (ret)
{
if (Bool *boolobj=dynamic_cast<Bool*>(ret))
return boolobj->getValue();
if( String *strobj=dynamic_cast<String*>(ret) )
if (String *strobj=dynamic_cast<String*>(ret))
return strobj->boolValue();
CCASSERT(false, "Key found, but from different type");
}
// XXX: Should it throw an exception ?
return default_value;
return defaultValue;
}
/** returns the value of a given key as a double */
double Configuration::getNumber( const char *key, double default_value ) const
double Configuration::getNumber( const char *key, double defaultValue ) const
{
Object *ret = _valueDict->objectForKey(key);
if( ret ) {
if( Double *obj=dynamic_cast<Double*>(ret) )
if( ret )
{
if (Double *obj=dynamic_cast<Double*>(ret))
return obj->getValue();
if( Integer *obj=dynamic_cast<Integer*>(ret) )
if (Integer *obj=dynamic_cast<Integer*>(ret))
return obj->getValue();
if( String *strobj=dynamic_cast<String*>(ret) )
if (String *strobj=dynamic_cast<String*>(ret))
return strobj->doubleValue();
CCASSERT(false, "Key found, but from different type");
}
// XXX: Should it throw an exception ?
return default_value;
return defaultValue;
}
Object * Configuration::getObject( const char *key ) const
Object * Configuration::getObject(const char *key) const
{
return _valueDict->objectForKey(key);
}
void Configuration::setObject( const char *key, Object *value )
void Configuration::setObject(const char *key, Object *value)
{
_valueDict->setObject(value, key);
}
@ -321,35 +324,40 @@ void Configuration::setObject( const char *key, Object *value )
//
// load file
//
void Configuration::loadConfigFile( const char *filename )
void Configuration::loadConfigFile(const char *filename)
{
Dictionary *dict = Dictionary::createWithContentsOfFile(filename);
CCASSERT(dict, "cannot create dictionary");
// search for metadata
bool metadata_ok = false;
bool validMetadata = false;
Object *metadata = dict->objectForKey("metadata");
if( metadata && dynamic_cast<Dictionary*>(metadata) ) {
if (metadata && dynamic_cast<Dictionary*>(metadata))
{
Object *format_o = static_cast<Dictionary*>(metadata)->objectForKey("format");
// XXX: cocos2d-x returns Strings when importing from .plist. This bug will be addressed in cocos2d-x v3.x
if( format_o && dynamic_cast<String*>(format_o) ) {
if (format_o && dynamic_cast<String*>(format_o))
{
int format = static_cast<String*>(format_o)->intValue();
// Support format: 1
if( format == 1 ) {
metadata_ok = true;
if (format == 1)
{
validMetadata = true;
}
}
}
if( ! metadata_ok ) {
if (! validMetadata)
{
CCLOG("Invalid config format for file: %s", filename);
return;
}
Object *data = dict->objectForKey("data");
if( !data || !dynamic_cast<Dictionary*>(data) ) {
if (!data || !dynamic_cast<Dictionary*>(data))
{
CCLOG("Expected 'data' dict, but not found. Config file: %s", filename);
return;
}
@ -359,10 +367,10 @@ void Configuration::loadConfigFile( const char *filename )
DictElement* element;
CCDICT_FOREACH(data_dict, element)
{
if( ! _valueDict->objectForKey( element->getStrKey() ) )
_valueDict->setObject(element->getObject(), element->getStrKey() );
if(! _valueDict->objectForKey( element->getStrKey() ))
_valueDict->setObject(element->getObject(), element->getStrKey());
else
CCLOG("Key already present. Ignoring '%s'", element->getStrKey() );
CCLOG("Key already present. Ignoring '%s'", element->getStrKey());
}
}

View File

@ -54,38 +54,38 @@ public:
static void destroyInstance();
/** @deprecated Use getInstance() instead */
CC_DEPRECATED_ATTRIBUTE static Configuration *sharedConfiguration(void);
CC_DEPRECATED_ATTRIBUTE static Configuration *sharedConfiguration();
/** @deprecated Use destroyInstance() instead */
CC_DEPRECATED_ATTRIBUTE static void purgeConfiguration(void);
CC_DEPRECATED_ATTRIBUTE static void purgeConfiguration();
public:
virtual ~Configuration(void);
virtual ~Configuration();
/** OpenGL Max texture size. */
int getMaxTextureSize(void) const;
int getMaxTextureSize() const;
/** OpenGL Max Modelview Stack Depth. */
int getMaxModelviewStackDepth(void) const;
int getMaxModelviewStackDepth() const;
/** returns the maximum texture units
@since v2.0.0
*/
int getMaxTextureUnits(void) const;
int getMaxTextureUnits() const;
/** Whether or not the GPU supports NPOT (Non Power Of Two) textures.
OpenGL ES 2.0 already supports NPOT (iOS).
@since v0.99.2
*/
bool supportsNPOT(void) const;
bool supportsNPOT() const;
/** Whether or not PVR Texture Compressed is supported */
bool supportsPVRTC(void) const;
bool supportsPVRTC() const;
/** Whether or not ETC Texture Compressed is supported */
bool supportsETC(void) const;
bool supportsETC() const;
/** Whether or not S3TC Texture Compressed is supported */
bool supportsS3TC(void ) const;
@ -93,54 +93,54 @@ public:
/** Whether or not BGRA8888 textures are supported.
@since v0.99.2
*/
bool supportsBGRA8888(void) const;
bool supportsBGRA8888() const;
/** Whether or not glDiscardFramebufferEXT is supported
@since v0.99.2
*/
bool supportsDiscardFramebuffer(void) const;
bool supportsDiscardFramebuffer() const;
/** Whether or not shareable VAOs are supported.
@since v2.0.0
*/
bool supportsShareableVAO(void) const;
bool supportsShareableVAO() const;
/** returns whether or not an OpenGL is supported */
bool checkForGLExtension(const std::string &searchName) const;
bool init(void);
bool init();
/** returns the value of a given key as a string.
If the key is not found, it will return the default value */
const char* getCString( const char *key, const char *default_value=NULL ) const;
const char* getCString(const char *key, const char *defaultValue = nullptr) const;
/** returns the value of a given key as a boolean.
If the key is not found, it will return the default value */
bool getBool( const char *key, bool default_value=false ) const;
bool getBool(const char *key, bool defaultValue = false) const;
/** returns the value of a given key as a double.
If the key is not found, it will return the default value */
double getNumber( const char *key, double default_value=0.0 ) const;
double getNumber(const char *key, double defaultValue = 0.0) const;
/** returns the value of a given key as a double */
Object * getObject( const char *key ) const;
Object * getObject(const char *key) const;
/** sets a new key/value pair in the configuration dictionary */
void setObject( const char *key, Object *value );
void setObject(const char *key, Object *value);
/** dumps the current configuration on the console */
void dumpInfo(void) const;
void dumpInfo() const;
/** gathers OpenGL / GPU information */
void gatherGPUInfo( void );
void gatherGPUInfo();
/** Loads a config file. If the keys are already present, then they are going to be replaced. Otherwise the new keys are added. */
void loadConfigFile( const char *filename );
void loadConfigFile(const char *filename);
private:
Configuration(void);
static Configuration *s_gSharedConfiguration;
static std::string s_sConfigfile;
static Configuration *s_sharedConfiguration;
static std::string s_configfile;
protected:
GLint _maxTextureSize;

View File

@ -83,7 +83,7 @@ NS_CC_BEGIN
// XXX it should be a Director ivar. Move it there once support for multiple directors is added
// singleton stuff
static DisplayLinkDirector *s_SharedDirector = NULL;
static DisplayLinkDirector *s_SharedDirector = nullptr;
#define kDefaultFPS 60 // 60 frames per second
extern const char* cocos2dVersion(void);
@ -109,23 +109,23 @@ bool Director::init(void)
setDefaultValues();
// scenes
_runningScene = NULL;
_nextScene = NULL;
_runningScene = nullptr;
_nextScene = nullptr;
_notificationNode = NULL;
_notificationNode = nullptr;
_scenesStack = new Array();
_scenesStack->init();
// projection delegate if "Custom" projection is used
_projectionDelegate = NULL;
_projectionDelegate = nullptr;
// FPS
_accumDt = 0.0f;
_frameRate = 0.0f;
_FPSLabel = NULL;
_SPFLabel = NULL;
_drawsLabel = NULL;
_FPSLabel = nullptr;
_SPFLabel = nullptr;
_drawsLabel = nullptr;
_totalFrames = _frames = 0;
_FPS = new char[10];
_lastUpdate = new struct timeval;
@ -138,7 +138,7 @@ bool Director::init(void)
_winSizeInPoints = Size::ZERO;
_openGLView = NULL;
_openGLView = nullptr;
_contentScaleFactor = 1.0f;
@ -193,7 +193,7 @@ Director::~Director(void)
// delete fps string
delete []_FPS;
s_SharedDirector = NULL;
s_SharedDirector = nullptr;
}
void Director::setDefaultValues(void)
@ -209,7 +209,7 @@ void Director::setDefaultValues(void)
// GL projection
const char *projection = conf->getCString("cocos2d.x.gl.projection", "2d");
if( strcmp(projection, "3d") == 0 )
if (strcmp(projection, "3d") == 0)
_projection = Projection::_3D;
else if (strcmp(projection, "2d") == 0)
_projection = Projection::_2D;
@ -220,11 +220,11 @@ void Director::setDefaultValues(void)
// Default pixel format for PNG images with alpha
const char *pixel_format = conf->getCString("cocos2d.x.texture.pixel_format_for_png", "rgba8888");
if( strcmp(pixel_format, "rgba8888") == 0 )
if (strcmp(pixel_format, "rgba8888") == 0)
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA8888);
else if( strcmp(pixel_format, "rgba4444") == 0 )
else if(strcmp(pixel_format, "rgba4444") == 0)
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA4444);
else if( strcmp(pixel_format, "rgba5551") == 0 )
else if(strcmp(pixel_format, "rgba5551") == 0)
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGB5A1);
// PVR v2 has alpha premultiplied ?
@ -232,7 +232,7 @@ void Director::setDefaultValues(void)
Texture2D::PVRImagesHavePremultipliedAlpha(pvr_alpha_premultipled);
}
void Director::setGLDefaultValues(void)
void Director::setGLDefaultValues()
{
// This method SHOULD be called only after openGLView_ was initialized
CCASSERT(_openGLView, "opengl view should not be null");
@ -248,7 +248,7 @@ void Director::setGLDefaultValues(void)
}
// Draw the Scene
void Director::drawScene(void)
void Director::drawScene()
{
// calculate "global" dt
calculateDeltaTime();
@ -308,11 +308,11 @@ void Director::drawScene(void)
}
}
void Director::calculateDeltaTime(void)
void Director::calculateDeltaTime()
{
struct timeval now;
if (gettimeofday(&now, NULL) != 0)
if (gettimeofday(&now, nullptr) != 0)
{
CCLOG("error in gettimeofday");
_deltaTime = 0;
@ -333,7 +333,7 @@ void Director::calculateDeltaTime(void)
#ifdef DEBUG
// If we are debugging our code, prevent big delta time
if(_deltaTime > 0.2f)
if (_deltaTime > 0.2f)
{
_deltaTime = 1 / 60.0f;
}
@ -402,7 +402,7 @@ void Director::setProjection(Projection projection)
kmGLMatrixMode(KM_GL_PROJECTION);
kmGLLoadIdentity();
kmMat4 orthoMatrix;
kmMat4OrthographicProjection(&orthoMatrix, 0, size.width, 0, size.height, -1024, 1024 );
kmMat4OrthographicProjection(&orthoMatrix, 0, size.width, 0, size.height, -1024, 1024);
kmGLMultMatrix(&orthoMatrix);
kmGLMatrixMode(KM_GL_MODELVIEW);
kmGLLoadIdentity();
@ -418,7 +418,7 @@ void Director::setProjection(Projection projection)
kmGLLoadIdentity();
// issue #1334
kmMat4PerspectiveProjection( &matrixPerspective, 60, (GLfloat)size.width/size.height, 0.1f, zeye*2);
kmMat4PerspectiveProjection(&matrixPerspective, 60, (GLfloat)size.width/size.height, 0.1f, zeye*2);
// kmMat4PerspectiveProjection( &matrixPerspective, 60, (GLfloat)size.width/size.height, 0.1f, 1500);
kmGLMultMatrix(&matrixPerspective);
@ -426,9 +426,9 @@ void Director::setProjection(Projection projection)
kmGLMatrixMode(KM_GL_MODELVIEW);
kmGLLoadIdentity();
kmVec3 eye, center, up;
kmVec3Fill( &eye, size.width/2, size.height/2, zeye );
kmVec3Fill( &center, size.width/2, size.height/2, 0.0f );
kmVec3Fill( &up, 0.0f, 1.0f, 0.0f);
kmVec3Fill(&eye, size.width/2, size.height/2, zeye);
kmVec3Fill(&center, size.width/2, size.height/2, 0.0f);
kmVec3Fill(&up, 0.0f, 1.0f, 0.0f);
kmMat4LookAt(&matrixLookup, &eye, &center, &up);
kmGLMultMatrix(&matrixLookup);
break;
@ -437,6 +437,7 @@ void Director::setProjection(Projection projection)
case Projection::CUSTOM:
if (_projectionDelegate)
_projectionDelegate->updateProjection();
break;
default:
@ -464,9 +465,9 @@ float Director::getZEye(void) const
return (_winSizeInPoints.height / 1.1566f);
}
void Director::setAlphaBlending(bool bOn)
void Director::setAlphaBlending(bool on)
{
if (bOn)
if (on)
{
GL::blendFunc(CC_BLEND_SRC, CC_BLEND_DST);
}
@ -478,9 +479,9 @@ void Director::setAlphaBlending(bool bOn)
CHECK_GL_ERROR_DEBUG();
}
void Director::setDepthTest(bool bOn)
void Director::setDepthTest(bool on)
{
if (bOn)
if (on)
{
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
@ -494,8 +495,7 @@ void Director::setDepthTest(bool bOn)
CHECK_GL_ERROR_DEBUG();
}
static void
GLToClipTransform(kmMat4 *transformOut)
static void GLToClipTransform(kmMat4 *transformOut)
{
kmMat4 projection;
kmGLGetMatrix(KM_GL_PROJECTION, &projection);
@ -576,41 +576,41 @@ Point Director::getVisibleOrigin() const
// scene management
void Director::runWithScene(Scene *pScene)
void Director::runWithScene(Scene *scene)
{
CCASSERT(pScene != NULL, "This command can only be used to start the Director. There is already a scene present.");
CCASSERT(_runningScene == NULL, "_runningScene should be null");
CCASSERT(scene != nullptr, "This command can only be used to start the Director. There is already a scene present.");
CCASSERT(_runningScene == nullptr, "_runningScene should be null");
pushScene(pScene);
pushScene(scene);
startAnimation();
}
void Director::replaceScene(Scene *pScene)
void Director::replaceScene(Scene *scene)
{
CCASSERT(_runningScene, "Use runWithScene: instead to start the director");
CCASSERT(pScene != NULL, "the scene should not be null");
CCASSERT(scene != nullptr, "the scene should not be null");
unsigned int index = _scenesStack->count();
_sendCleanupToScene = true;
_scenesStack->replaceObjectAtIndex(index - 1, pScene);
_scenesStack->replaceObjectAtIndex(index - 1, scene);
_nextScene = pScene;
_nextScene = scene;
}
void Director::pushScene(Scene *pScene)
void Director::pushScene(Scene *scene)
{
CCASSERT(pScene, "the scene should not null");
CCASSERT(scene, "the scene should not null");
_sendCleanupToScene = false;
_scenesStack->addObject(pScene);
_nextScene = pScene;
_scenesStack->addObject(scene);
_nextScene = scene;
}
void Director::popScene(void)
{
CCASSERT(_runningScene != NULL, "running scene should not null");
CCASSERT(_runningScene != nullptr, "running scene should not null");
_scenesStack->removeLastObject();
unsigned int c = _scenesStack->count();
@ -633,8 +633,8 @@ void Director::popToRootScene(void)
void Director::popToSceneStackLevel(int level)
{
CCASSERT(_runningScene != NULL, "A running Scene is needed");
int c = (int)_scenesStack->count();
CCASSERT(_runningScene != nullptr, "A running Scene is needed");
int c = static_cast<int>(_scenesStack->count());
// level 0? -> end
if (level == 0)
@ -660,7 +660,7 @@ void Director::popToSceneStackLevel(int level)
current->cleanup();
_scenesStack->removeLastObject();
c--;
--c;
}
_nextScene = (Scene*)_scenesStack->lastObject();
@ -689,8 +689,8 @@ void Director::purgeDirector()
_runningScene->release();
}
_runningScene = NULL;
_nextScene = NULL;
_runningScene = nullptr;
_nextScene = nullptr;
// remove all objects, but don't release it.
// runWithScene might be executed after 'end'.
@ -724,16 +724,16 @@ void Director::purgeDirector()
// OpenGL view
_openGLView->end();
_openGLView = NULL;
_openGLView = nullptr;
// delete Director
release();
}
void Director::setNextScene(void)
void Director::setNextScene()
{
bool runningIsTransition = dynamic_cast<TransitionScene*>(_runningScene) != NULL;
bool newIsTransition = dynamic_cast<TransitionScene*>(_nextScene) != NULL;
bool runningIsTransition = dynamic_cast<TransitionScene*>(_runningScene) != nullptr;
bool newIsTransition = dynamic_cast<TransitionScene*>(_nextScene) != nullptr;
// If it is not a transition, call onExit/cleanup
if (! newIsTransition)
@ -758,7 +758,7 @@ void Director::setNextScene(void)
}
_runningScene = _nextScene;
_nextScene->retain();
_nextScene = NULL;
_nextScene = nullptr;
if ((! runningIsTransition) && _runningScene)
{
@ -767,7 +767,7 @@ void Director::setNextScene(void)
}
}
void Director::pause(void)
void Director::pause()
{
if (_paused)
{
@ -781,7 +781,7 @@ void Director::pause(void)
_paused = true;
}
void Director::resume(void)
void Director::resume()
{
if (! _paused)
{
@ -790,7 +790,7 @@ void Director::resume(void)
setAnimationInterval(_oldAnimationInterval);
if (gettimeofday(_lastUpdate, NULL) != 0)
if (gettimeofday(_lastUpdate, nullptr) != 0)
{
CCLOG("cocos2d: Director: Error in gettimeofday");
}
@ -801,9 +801,9 @@ void Director::resume(void)
// display the FPS using a LabelAtlas
// updates the FPS every frame
void Director::showStats(void)
void Director::showStats()
{
_frames++;
++_frames;
_accumDt += _deltaTime;
if (_displayStats)
@ -838,7 +838,7 @@ void Director::showStats(void)
void Director::calculateMPF()
{
struct timeval now;
gettimeofday(&now, NULL);
gettimeofday(&now, nullptr);
_secondsPerFrame = (now.tv_sec - _lastUpdate->tv_sec) + (now.tv_usec - _lastUpdate->tv_usec) / 1000000.0f;
}
@ -853,10 +853,10 @@ void Director::getFPSImageData(unsigned char** datapointer, unsigned int* length
void Director::createStatsLabel()
{
Texture2D *texture = NULL;
Texture2D *texture = nullptr;
TextureCache *textureCache = TextureCache::getInstance();
if( _FPSLabel && _SPFLabel )
if (_FPSLabel && _SPFLabel)
{
CC_SAFE_RELEASE_NULL(_FPSLabel);
CC_SAFE_RELEASE_NULL(_SPFLabel);
@ -867,13 +867,13 @@ void Director::createStatsLabel()
Texture2D::PixelFormat currentFormat = Texture2D::getDefaultAlphaPixelFormat();
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA4444);
unsigned char *data = NULL;
unsigned int data_len = 0;
getFPSImageData(&data, &data_len);
unsigned char *data = nullptr;
unsigned int dataLength = 0;
getFPSImageData(&data, &dataLength);
Image* image = new Image();
bool isOK = image->initWithImageData(data, data_len);
if (!isOK) {
bool isOK = image->initWithImageData(data, dataLength);
if (! isOK) {
CCLOGERROR("%s", "Fails: init fps_images");
return;
}
@ -918,7 +918,7 @@ void Director::createStatsLabel()
_FPSLabel->setPosition(CC_DIRECTOR_STATS_POSITION);
}
float Director::getContentScaleFactor(void) const
float Director::getContentScaleFactor() const
{
return _contentScaleFactor;
}
@ -949,18 +949,18 @@ DirectorDelegate* Director::getDelegate() const
return _projectionDelegate;
}
void Director::setDelegate(DirectorDelegate* pDelegate)
void Director::setDelegate(DirectorDelegate* delegate)
{
_projectionDelegate = pDelegate;
_projectionDelegate = delegate;
}
void Director::setScheduler(Scheduler* pScheduler)
void Director::setScheduler(Scheduler* scheduler)
{
if (_scheduler != pScheduler)
if (_scheduler != scheduler)
{
CC_SAFE_RETAIN(pScheduler);
CC_SAFE_RETAIN(scheduler);
CC_SAFE_RELEASE(_scheduler);
_scheduler = pScheduler;
_scheduler = scheduler;
}
}
@ -969,13 +969,13 @@ Scheduler* Director::getScheduler() const
return _scheduler;
}
void Director::setActionManager(ActionManager* pActionManager)
void Director::setActionManager(ActionManager* actionManager)
{
if (_actionManager != pActionManager)
if (_actionManager != actionManager)
{
CC_SAFE_RETAIN(pActionManager);
CC_SAFE_RETAIN(actionManager);
CC_SAFE_RELEASE(_actionManager);
_actionManager = pActionManager;
_actionManager = actionManager;
}
}
@ -984,13 +984,13 @@ ActionManager* Director::getActionManager() const
return _actionManager;
}
void Director::setTouchDispatcher(TouchDispatcher* pTouchDispatcher)
void Director::setTouchDispatcher(TouchDispatcher* touchDispatcher)
{
if (_touchDispatcher != pTouchDispatcher)
if (_touchDispatcher != touchDispatcher)
{
CC_SAFE_RETAIN(pTouchDispatcher);
CC_SAFE_RETAIN(touchDispatcher);
CC_SAFE_RELEASE(_touchDispatcher);
_touchDispatcher = pTouchDispatcher;
_touchDispatcher = touchDispatcher;
}
}
@ -999,11 +999,11 @@ TouchDispatcher* Director::getTouchDispatcher() const
return _touchDispatcher;
}
void Director::setKeyboardDispatcher(KeyboardDispatcher* pKeyboardDispatcher)
void Director::setKeyboardDispatcher(KeyboardDispatcher* keyboardDispatcher)
{
CC_SAFE_RETAIN(pKeyboardDispatcher);
CC_SAFE_RETAIN(keyboardDispatcher);
CC_SAFE_RELEASE(_keyboardDispatcher);
_keyboardDispatcher = pKeyboardDispatcher;
_keyboardDispatcher = keyboardDispatcher;
}
KeyboardDispatcher* Director::getKeyboardDispatcher() const
@ -1011,11 +1011,11 @@ KeyboardDispatcher* Director::getKeyboardDispatcher() const
return _keyboardDispatcher;
}
void Director::setKeypadDispatcher(KeypadDispatcher* pKeypadDispatcher)
void Director::setKeypadDispatcher(KeypadDispatcher* keyboardDispatcher)
{
CC_SAFE_RETAIN(pKeypadDispatcher);
CC_SAFE_RETAIN(keyboardDispatcher);
CC_SAFE_RELEASE(_keypadDispatcher);
_keypadDispatcher = pKeypadDispatcher;
_keypadDispatcher = keyboardDispatcher;
}
KeypadDispatcher* Director::getKeypadDispatcher() const
@ -1023,12 +1023,12 @@ KeypadDispatcher* Director::getKeypadDispatcher() const
return _keypadDispatcher;
}
void Director::setAccelerometer(Accelerometer* pAccelerometer)
void Director::setAccelerometer(Accelerometer* accelerometer)
{
if (_accelerometer != pAccelerometer)
if (_accelerometer != accelerometer)
{
CC_SAFE_DELETE(_accelerometer);
_accelerometer = pAccelerometer;
_accelerometer = accelerometer;
}
}
@ -1044,9 +1044,9 @@ Accelerometer* Director::getAccelerometer() const
// should we implement 4 types of director ??
// I think DisplayLinkDirector is enough
// so we now only support DisplayLinkDirector
void DisplayLinkDirector::startAnimation(void)
void DisplayLinkDirector::startAnimation()
{
if (gettimeofday(_lastUpdate, NULL) != 0)
if (gettimeofday(_lastUpdate, nullptr) != 0)
{
CCLOG("cocos2d: DisplayLinkDirector: Error on gettimeofday");
}
@ -1057,7 +1057,7 @@ void DisplayLinkDirector::startAnimation(void)
#endif // EMSCRIPTEN
}
void DisplayLinkDirector::mainLoop(void)
void DisplayLinkDirector::mainLoop()
{
if (_purgeDirecotorInNextLoop)
{
@ -1065,22 +1065,22 @@ void DisplayLinkDirector::mainLoop(void)
purgeDirector();
}
else if (! _invalid)
{
drawScene();
{
drawScene();
// release the objects
PoolManager::sharedPoolManager()->pop();
}
// release the objects
PoolManager::sharedPoolManager()->pop();
}
}
void DisplayLinkDirector::stopAnimation(void)
void DisplayLinkDirector::stopAnimation()
{
_invalid = true;
}
void DisplayLinkDirector::setAnimationInterval(double dValue)
void DisplayLinkDirector::setAnimationInterval(double value)
{
_animationInterval = dValue;
_animationInterval = value;
if (! _invalid)
{
stopAnimation();

View File

@ -117,15 +117,15 @@ public:
// attribute
/** Get current running Scene. Director can only run one Scene at the time */
inline Scene* getRunningScene(void) { return _runningScene; }
inline Scene* getRunningScene() { return _runningScene; }
/** Get the FPS value */
inline double getAnimationInterval(void) { return _animationInterval; }
inline double getAnimationInterval() { return _animationInterval; }
/** Set the FPS value. */
virtual void setAnimationInterval(double dValue) = 0;
/** Whether or not to display the FPS on the bottom-left corner */
inline bool isDisplayStats(void) { return _displayStats; }
inline bool isDisplayStats() { return _displayStats; }
/** Display the FPS on the bottom-left corner */
inline void setDisplayStats(bool displayStats) { _displayStats = displayStats; }
@ -133,22 +133,22 @@ public:
inline float getSecondsPerFrame() { return _secondsPerFrame; }
/** Get the EGLView, where everything is rendered */
inline EGLView* getOpenGLView(void) { return _openGLView; }
inline EGLView* getOpenGLView() { return _openGLView; }
void setOpenGLView(EGLView *pobOpenGLView);
inline bool isNextDeltaTimeZero(void) { return _nextDeltaTimeZero; }
inline bool isNextDeltaTimeZero() { return _nextDeltaTimeZero; }
void setNextDeltaTimeZero(bool nextDeltaTimeZero);
/** Whether or not the Director is paused */
inline bool isPaused(void) { return _paused; }
inline bool isPaused() { return _paused; }
/** How many frames were called since the director started */
inline unsigned int getTotalFrames(void) { return _totalFrames; }
inline unsigned int getTotalFrames() { return _totalFrames; }
/** Sets an OpenGL projection
@since v0.8.2
*/
inline Projection getProjection(void) { return _projection; }
inline Projection getProjection() { return _projection; }
void setProjection(Projection projection);
/** Sets the glViewport*/
@ -162,7 +162,7 @@ public:
If the new scene replaces the old one, the it will receive the "cleanup" message.
@since v0.99.0
*/
inline bool isSendCleanupToScene(void) { return _sendCleanupToScene; }
inline bool isSendCleanupToScene() { return _sendCleanupToScene; }
/** This object will be visited after the main scene is visited.
This object MUST implement the "visit" selector.
@ -176,17 +176,17 @@ public:
@since v0.99.5
*/
DirectorDelegate* getDelegate() const;
void setDelegate(DirectorDelegate* pDelegate);
void setDelegate(DirectorDelegate* delegate);
// window size
/** returns the size of the OpenGL view in points.
*/
const Size& getWinSize(void) const;
const Size& getWinSize() const;
/** returns the size of the OpenGL view in pixels.
*/
Size getWinSizeInPixels(void) const;
Size getWinSizeInPixels() const;
/** returns visible size of the OpenGL view in points.
* the value is equal to getWinSize if don't invoke
@ -209,7 +209,7 @@ public:
Point convertToUI(const Point& point);
/// XXX: missing description
float getZEye(void) const;
float getZEye() const;
// Scene Management
@ -233,13 +233,13 @@ public:
* The running scene will be deleted. If there are no more scenes in the stack the execution is terminated.
* ONLY call it if there is a running scene.
*/
void popScene(void);
void popScene();
/** Pops out all scenes from the queue until the root scene in the queue.
* This scene will replace the running one.
* Internally it will call `popToSceneStackLevel(1)`
*/
void popToRootScene(void);
void popToRootScene();
/** Pops out all scenes from the queue until it reaches `level`.
If level is 0, it will end the director.
@ -256,35 +256,35 @@ public:
/** Ends the execution, releases the running scene.
It doesn't remove the OpenGL view from its parent. You have to do it manually.
*/
void end(void);
void end();
/** Pauses the running scene.
The running scene will be _drawed_ but all scheduled timers will be paused
While paused, the draw rate will be 4 FPS to reduce CPU consumption
*/
void pause(void);
void pause();
/** Resumes the paused scene
The scheduled timers will be activated again.
The "delta time" will be 0 (as if the game wasn't paused)
*/
void resume(void);
void resume();
/** Stops the animation. Nothing will be drawn. The main loop won't be triggered anymore.
If you don't want to pause your animation call [pause] instead.
*/
virtual void stopAnimation(void) = 0;
virtual void stopAnimation() = 0;
/** The main loop is triggered again.
Call this function only if [stopAnimation] was called earlier
@warning Don't call this function to start the main loop. To run the main loop call runWithScene
*/
virtual void startAnimation(void) = 0;
virtual void startAnimation() = 0;
/** Draw the scene.
This method is called every frame. Don't call it manually.
*/
void drawScene(void);
void drawScene();
// Memory Helper
@ -292,23 +292,23 @@ public:
It will purge the TextureCache, SpriteFrameCache, LabelBMFont cache
@since v0.99.3
*/
void purgeCachedData(void);
void purgeCachedData();
/** sets the default values based on the Configuration info */
void setDefaultValues(void);
void setDefaultValues();
// OpenGL Helper
/** sets the OpenGL default values */
void setGLDefaultValues(void);
void setGLDefaultValues();
/** enables/disables OpenGL alpha blending */
void setAlphaBlending(bool bOn);
void setAlphaBlending(bool on);
/** enables/disables OpenGL depth test */
void setDepthTest(bool bOn);
void setDepthTest(bool on);
virtual void mainLoop(void) = 0;
virtual void mainLoop() = 0;
/** The size in pixels of the surface. It could be different than the screen size.
High-res devices might have a higher surface size than the screen size.
@ -316,7 +316,7 @@ public:
@since v0.99.4
*/
void setContentScaleFactor(float scaleFactor);
float getContentScaleFactor(void) const;
float getContentScaleFactor() const;
public:
/** Gets the Scheduler associated with this director
@ -388,7 +388,7 @@ protected:
void purgeDirector();
bool _purgeDirecotorInNextLoop; // this flag will be set to true in end()
void setNextScene(void);
void setNextScene();
void showStats();
void createStatsLabel();
@ -511,16 +511,16 @@ protected:
class DisplayLinkDirector : public Director
{
public:
DisplayLinkDirector(void)
DisplayLinkDirector()
: _invalid(false)
{}
//
// Overrides
//
virtual void mainLoop(void) override;
virtual void setAnimationInterval(double dValue) override;
virtual void startAnimation(void) override;
virtual void mainLoop() override;
virtual void setAnimationInterval(double value) override;
virtual void startAnimation() override;
virtual void stopAnimation() override;
protected:

View File

@ -267,7 +267,7 @@ bool Control::isTouchInside(Touch* touch)
Array* Control::dispatchListforControlEvent(EventType controlEvent)
{
Array* invocationList = (Array*)_dispatchTable->objectForKey((int)controlEvent);
Array* invocationList = static_cast<Array*>(_dispatchTable->objectForKey((int)controlEvent));
// If the invocation list does not exist for the dispatch table, we create it
if (invocationList == NULL)

View File

@ -95,10 +95,10 @@ static void executeJSFunctionFromReservedSpot(JSContext *cx, JSObject *obj,
jsval func = JS_GetReservedSlot(obj, 0);
if(func == JSVAL_VOID) { return; }
if (func == JSVAL_VOID) { return; }
jsval thisObj = JS_GetReservedSlot(obj, 1);
JSAutoCompartment ac(cx, obj);
if(thisObj == JSVAL_VOID) {
if (thisObj == JSVAL_VOID) {
JS_CallFunctionValue(cx, obj, func, 1, &dataVal, &retval);
} else {
assert(!JSVAL_IS_PRIMITIVE(thisObj));
@ -168,11 +168,26 @@ static void removeJSTouchObject(JSContext *cx, Touch *x, jsval &jsret) {
}
}
void ScriptingCore::executeJSFunctionWithThisObj(jsval thisObj, jsval callback,
jsval *data) {
jsval retval;
if(callback != JSVAL_VOID || thisObj != JSVAL_VOID) {
JS_CallFunctionValue(cx_, JSVAL_TO_OBJECT(thisObj), callback, 1, data, &retval);
void ScriptingCore::executeJSFunctionWithThisObj(jsval thisObj,
jsval callback,
uint32_t argc/* = 0*/,
jsval* vp/* = NULL*/,
jsval* retVal/* = NULL*/)
{
if (callback != JSVAL_VOID || thisObj != JSVAL_VOID)
{
// Very important: The last parameter 'retVal' passed to 'JS_CallFunctionValue' should not be a NULL pointer.
// If it's a NULL pointer, crash will be triggered in 'JS_CallFunctionValue'. To find out the reason of this crash is very difficult.
// So we have to check the availability of 'retVal'.
if (retVal)
{
JS_CallFunctionValue(cx_, JSVAL_TO_OBJECT(thisObj), callback, argc, vp, retVal);
}
else
{
jsval jsRet;
JS_CallFunctionValue(cx_, JSVAL_TO_OBJECT(thisObj), callback, argc, vp, &jsRet);
}
}
}
@ -703,11 +718,11 @@ JSBool ScriptingCore::removeRootJS(JSContext *cx, uint32_t argc, jsval *vp)
void ScriptingCore::pauseSchedulesAndActions(js_proxy_t* p)
{
Array * arr = JSScheduleWrapper::getTargetForJSObject(p->obj);
if(! arr) return;
if (! arr) return;
Node* node = (Node*)p->ptr;
for(unsigned int i = 0; i < arr->count(); ++i) {
if(arr->objectAtIndex(i)) {
if (arr->objectAtIndex(i)) {
node->getScheduler()->pauseTarget(arr->objectAtIndex(i));
}
}
@ -717,11 +732,11 @@ void ScriptingCore::pauseSchedulesAndActions(js_proxy_t* p)
void ScriptingCore::resumeSchedulesAndActions(js_proxy_t* p)
{
Array * arr = JSScheduleWrapper::getTargetForJSObject(p->obj);
if(!arr) return;
if (!arr) return;
Node* node = (Node*)p->ptr;
for(unsigned int i = 0; i < arr->count(); ++i) {
if(!arr->objectAtIndex(i)) continue;
if (!arr->objectAtIndex(i)) continue;
node->getScheduler()->resumeTarget(arr->objectAtIndex(i));
}
}
@ -729,12 +744,12 @@ void ScriptingCore::resumeSchedulesAndActions(js_proxy_t* p)
void ScriptingCore::cleanupSchedulesAndActions(js_proxy_t* p)
{
Array * arr = JSCallFuncWrapper::getTargetForNativeNode((Node*)p->ptr);
if(arr) {
if (arr) {
arr->removeAllObjects();
}
arr = JSScheduleWrapper::getTargetForJSObject(p->obj);
if(arr) {
if (arr) {
Scheduler* pScheduler = Director::getInstance()->getScheduler();
Object* pObj = NULL;
CCARRAY_FOREACH(arr, pObj)
@ -764,25 +779,25 @@ int ScriptingCore::handleNodeEvent(void* data)
jsval retval;
jsval dataVal = INT_TO_JSVAL(1);
if(action == kNodeOnEnter)
if (action == kNodeOnEnter)
{
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onEnter", 1, &dataVal, &retval);
resumeSchedulesAndActions(p);
}
else if(action == kNodeOnExit)
else if (action == kNodeOnExit)
{
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onExit", 1, &dataVal, &retval);
pauseSchedulesAndActions(p);
}
else if(action == kNodeOnEnterTransitionDidFinish)
else if (action == kNodeOnEnterTransitionDidFinish)
{
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onEnterTransitionDidFinish", 1, &dataVal, &retval);
}
else if(action == kNodeOnExitTransitionDidStart)
else if (action == kNodeOnExitTransitionDidStart)
{
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onExitTransitionDidStart", 1, &dataVal, &retval);
}
else if(action == kNodeOnCleanup) {
else if (action == kNodeOnCleanup) {
cleanupSchedulesAndActions(p);
}
@ -836,7 +851,7 @@ int ScriptingCore::handleTouchesEvent(void* data)
for(SetIterator it = pTouches->begin(); it != pTouches->end(); ++it, ++count) {
jsval jsret;
getJSTouchObject(this->cx_, (Touch *) *it, jsret);
if(!JS_SetElement(this->cx_, jsretArr, count, &jsret)) {
if (!JS_SetElement(this->cx_, jsretArr, count, &jsret)) {
break;
}
}
@ -889,10 +904,10 @@ bool ScriptingCore::executeFunctionWithObjectData(Node *self, const char *name,
jsval dataVal = OBJECT_TO_JSVAL(obj);
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), name, 1, &dataVal, &retval);
if(JSVAL_IS_NULL(retval)) {
if (JSVAL_IS_NULL(retval)) {
return false;
}
else if(JSVAL_IS_BOOLEAN(retval)) {
else if (JSVAL_IS_BOOLEAN(retval)) {
return JSVAL_TO_BOOLEAN(retval);
}
return false;
@ -909,10 +924,10 @@ JSBool ScriptingCore::executeFunctionWithOwner(jsval owner, const char *name, ui
do
{
if (JS_HasProperty(cx, obj, name, &hasAction) && hasAction) {
if(!JS_GetProperty(cx, obj, name, &temp_retval)) {
if (!JS_GetProperty(cx, obj, name, &temp_retval)) {
break;
}
if(temp_retval == JSVAL_VOID) {
if (temp_retval == JSVAL_VOID) {
break;
}
@ -963,7 +978,7 @@ int ScriptingCore::handleKeypadEvent(void* data)
js_proxy_t * p = jsb_get_native_proxy(keypadScriptData->nativeObject);
if(p){
if (p){
switch(action){
case kTypeBackClicked:
executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "backClicked");
@ -994,7 +1009,7 @@ int ScriptingCore::executeCustomTouchesEvent(int eventType,
for(SetIterator it = pTouches->begin(); it != pTouches->end(); ++it, ++count) {
jsval jsret;
getJSTouchObject(this->cx_, (Touch *) *it, jsret);
if(!JS_SetElement(this->cx_, jsretArr, count, &jsret)) {
if (!JS_SetElement(this->cx_, jsretArr, count, &jsret)) {
break;
}
}
@ -1099,9 +1114,9 @@ JSBool jsval_to_int32( JSContext *cx, jsval vp, int32_t *outval )
JSBool ok = JS_TRUE;
double dp;
ok &= JS_ValueToNumber(cx, vp, &dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ok &= !isnan(dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
*outval = (int32_t)dp;
@ -1113,9 +1128,9 @@ JSBool jsval_to_uint32( JSContext *cx, jsval vp, uint32_t *outval )
JSBool ok = JS_TRUE;
double dp;
ok &= JS_ValueToNumber(cx, vp, &dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ok &= !isnan(dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
*outval = (uint32_t)dp;
@ -1127,9 +1142,9 @@ JSBool jsval_to_uint16( JSContext *cx, jsval vp, uint16_t *outval )
JSBool ok = JS_TRUE;
double dp;
ok &= JS_ValueToNumber(cx, vp, &dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ok &= !isnan(dp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
*outval = (uint16_t)dp;
@ -1139,9 +1154,9 @@ JSBool jsval_to_uint16( JSContext *cx, jsval vp, uint16_t *outval )
JSBool jsval_to_long_long(JSContext *cx, jsval vp, long long* r) {
JSObject *tmp_arg;
JSBool ok = JS_ValueToObject( cx, vp, &tmp_arg );
JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION2( tmp_arg && JS_IsTypedArrayObject( tmp_arg ), cx, JS_FALSE, "Not a TypedArray object");
JSB_PRECONDITION2( JS_GetTypedArrayByteLength( tmp_arg ) == sizeof(long long), cx, JS_FALSE, "Invalid Typed Array length");
JSB_PRECONDITION3( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION3( tmp_arg && JS_IsTypedArrayObject( tmp_arg ), cx, JS_FALSE, "Not a TypedArray object");
JSB_PRECONDITION3( JS_GetTypedArrayByteLength( tmp_arg ) == sizeof(long long), cx, JS_FALSE, "Invalid Typed Array length");
uint32_t* arg_array = (uint32_t*)JS_GetArrayBufferViewData( tmp_arg );
long long ret = arg_array[0];
@ -1153,8 +1168,8 @@ JSBool jsval_to_long_long(JSContext *cx, jsval vp, long long* r) {
}
JSBool jsval_to_std_string(JSContext *cx, jsval v, std::string* ret) {
JSString *tmp = JS_ValueToString(cx, v);
JSB_PRECONDITION2(tmp, cx, JS_FALSE, "Error processing arguments");
JSString *tmp = v.isString() ? JS_ValueToString(cx, v) : NULL;
JSB_PRECONDITION3(tmp, cx, JS_FALSE, "Error processing arguments");
JSStringWrapper str(tmp);
*ret = str.get();
@ -1165,13 +1180,14 @@ JSBool jsval_to_ccpoint(JSContext *cx, jsval v, Point* ret) {
JSObject *tmp;
jsval jsx, jsy;
double x, y;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "x", &jsx) &&
JS_GetProperty(cx, tmp, "y", &jsy) &&
JS_ValueToNumber(cx, jsx, &x) &&
JS_ValueToNumber(cx, jsy, &y);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->x = (float)x;
ret->y = (float)y;
@ -1182,17 +1198,18 @@ JSBool jsval_to_ccacceleration(JSContext* cx,jsval v, Acceleration* ret) {
JSObject *tmp;
jsval jsx, jsy, jsz, jstimestamp;
double x, y, timestamp, z;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "x", &jsx) &&
JS_GetProperty(cx, tmp, "y", &jsy) &&
JS_GetProperty(cx, tmp, "z", &jsz) &&
JS_GetProperty(cx, tmp, "timestamp", &jstimestamp) &&
JS_ValueToNumber(cx, jsx, &x) &&
JS_ValueToNumber(cx, jsy, &y) &&
JS_ValueToNumber(cx, jsz, &z) &&
JS_ValueToNumber(cx, jstimestamp, &timestamp);
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "x", &jsx) &&
JS_GetProperty(cx, tmp, "y", &jsy) &&
JS_GetProperty(cx, tmp, "z", &jsz) &&
JS_GetProperty(cx, tmp, "timestamp", &jstimestamp) &&
JS_ValueToNumber(cx, jsx, &x) &&
JS_ValueToNumber(cx, jsy, &y) &&
JS_ValueToNumber(cx, jsz, &z) &&
JS_ValueToNumber(cx, jstimestamp, &timestamp);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->x = x;
ret->y = y;
@ -1209,7 +1226,7 @@ JSBool jsvals_variadic_to_ccarray( JSContext *cx, jsval *vp, int argc, Array** r
{
double num = 0.0;
// optimization: JS_ValueToNumber is expensive. And can convert an string like "12" to a number
if( JSVAL_IS_NUMBER(*vp)) {
if ( JSVAL_IS_NUMBER(*vp)) {
ok &= JS_ValueToNumber(cx, *vp, &num );
if (!ok) {
break;
@ -1234,7 +1251,7 @@ JSBool jsvals_variadic_to_ccarray( JSContext *cx, jsval *vp, int argc, Array** r
vp++;
}
*ret = pArray;
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
return ok;
}
@ -1242,7 +1259,8 @@ JSBool jsval_to_ccrect(JSContext *cx, jsval v, Rect* ret) {
JSObject *tmp;
jsval jsx, jsy, jswidth, jsheight;
double x, y, width, height;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "x", &jsx) &&
JS_GetProperty(cx, tmp, "y", &jsy) &&
JS_GetProperty(cx, tmp, "width", &jswidth) &&
@ -1252,7 +1270,7 @@ JSBool jsval_to_ccrect(JSContext *cx, jsval v, Rect* ret) {
JS_ValueToNumber(cx, jswidth, &width) &&
JS_ValueToNumber(cx, jsheight, &height);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->origin.x = x;
ret->origin.y = y;
@ -1265,13 +1283,14 @@ JSBool jsval_to_ccsize(JSContext *cx, jsval v, Size* ret) {
JSObject *tmp;
jsval jsw, jsh;
double w, h;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "width", &jsw) &&
JS_GetProperty(cx, tmp, "height", &jsh) &&
JS_ValueToNumber(cx, jsw, &w) &&
JS_ValueToNumber(cx, jsh, &h);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->width = w;
ret->height = h;
return JS_TRUE;
@ -1281,7 +1300,8 @@ JSBool jsval_to_cccolor4b(JSContext *cx, jsval v, Color4B* ret) {
JSObject *tmp;
jsval jsr, jsg, jsb, jsa;
double r, g, b, a;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "r", &jsr) &&
JS_GetProperty(cx, tmp, "g", &jsg) &&
JS_GetProperty(cx, tmp, "b", &jsb) &&
@ -1291,7 +1311,7 @@ JSBool jsval_to_cccolor4b(JSContext *cx, jsval v, Color4B* ret) {
JS_ValueToNumber(cx, jsb, &b) &&
JS_ValueToNumber(cx, jsa, &a);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->r = r;
ret->g = g;
@ -1304,7 +1324,8 @@ JSBool jsval_to_cccolor4f(JSContext *cx, jsval v, Color4F* ret) {
JSObject *tmp;
jsval jsr, jsg, jsb, jsa;
double r, g, b, a;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "r", &jsr) &&
JS_GetProperty(cx, tmp, "g", &jsg) &&
JS_GetProperty(cx, tmp, "b", &jsb) &&
@ -1314,7 +1335,7 @@ JSBool jsval_to_cccolor4f(JSContext *cx, jsval v, Color4F* ret) {
JS_ValueToNumber(cx, jsb, &b) &&
JS_ValueToNumber(cx, jsa, &a);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->r = r;
ret->g = g;
ret->b = b;
@ -1326,7 +1347,8 @@ JSBool jsval_to_cccolor3b(JSContext *cx, jsval v, Color3B* ret) {
JSObject *tmp;
jsval jsr, jsg, jsb;
double r, g, b;
JSBool ok = JS_ValueToObject(cx, v, &tmp) &&
JSBool ok = v.isObject() &&
JS_ValueToObject(cx, v, &tmp) &&
JS_GetProperty(cx, tmp, "r", &jsr) &&
JS_GetProperty(cx, tmp, "g", &jsg) &&
JS_GetProperty(cx, tmp, "b", &jsb) &&
@ -1334,7 +1356,7 @@ JSBool jsval_to_cccolor3b(JSContext *cx, jsval v, Color3B* ret) {
JS_ValueToNumber(cx, jsg, &g) &&
JS_ValueToNumber(cx, jsb, &b);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
ret->r = r;
ret->g = g;
@ -1345,9 +1367,9 @@ JSBool jsval_to_cccolor3b(JSContext *cx, jsval v, Color3B* ret) {
JSBool jsval_to_ccarray_of_CCPoint(JSContext* cx, jsval v, Point **points, int *numPoints) {
// Parsing sequence
JSObject *jsobj;
JSBool ok = JS_ValueToObject( cx, v, &jsobj );
JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION2( jsobj && JS_IsArrayObject( cx, jsobj), cx, JS_FALSE, "Object must be an array");
JSBool ok = v.isObject() && JS_ValueToObject( cx, v, &jsobj );
JSB_PRECONDITION3( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION3( jsobj && JS_IsArrayObject( cx, jsobj), cx, JS_FALSE, "Object must be an array");
uint32_t len;
JS_GetArrayLength(cx, jsobj, &len);
@ -1359,7 +1381,7 @@ JSBool jsval_to_ccarray_of_CCPoint(JSContext* cx, jsval v, Point **points, int *
JS_GetElement(cx, jsobj, i, &valarg);
ok = jsval_to_ccpoint(cx, valarg, &array[i]);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
}
*numPoints = len;
@ -1371,9 +1393,9 @@ JSBool jsval_to_ccarray_of_CCPoint(JSContext* cx, jsval v, Point **points, int *
JSBool jsval_to_ccarray(JSContext* cx, jsval v, Array** ret) {
JSObject *jsobj;
JSBool ok = JS_ValueToObject( cx, v, &jsobj );
JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION2( jsobj && JS_IsArrayObject( cx, jsobj), cx, JS_FALSE, "Object must be an array");
JSBool ok = v.isObject() && JS_ValueToObject( cx, v, &jsobj );
JSB_PRECONDITION3( ok, cx, JS_FALSE, "Error converting value to object");
JSB_PRECONDITION3( jsobj && JS_IsArrayObject( cx, jsobj), cx, JS_FALSE, "Object must be an array");
uint32_t len = 0;
JS_GetArrayLength(cx, jsobj, &len);
@ -1465,7 +1487,7 @@ jsval ccarray_to_jsval(JSContext* cx, Array *arr)
Float* floatVal = NULL;
Integer* intVal = NULL;
if((strVal = dynamic_cast<cocos2d::String *>(obj))) {
if ((strVal = dynamic_cast<cocos2d::String *>(obj))) {
arrElement = c_string_to_jsval(cx, strVal->getCString());
} else if ((dictVal = dynamic_cast<cocos2d::Dictionary*>(obj))) {
arrElement = ccdictionary_to_jsval(cx, dictVal);
@ -1483,7 +1505,7 @@ jsval ccarray_to_jsval(JSContext* cx, Array *arr)
CCASSERT(false, "the type isn't suppored.");
}
}
if(!JS_SetElement(cx, jsretArr, i, &arrElement)) {
if (!JS_SetElement(cx, jsretArr, i, &arrElement)) {
break;
}
++i;
@ -1513,7 +1535,7 @@ jsval ccdictionary_to_jsval(JSContext* cx, Dictionary* dict)
Float* floatVal = NULL;
Integer* intVal = NULL;
if((strVal = dynamic_cast<cocos2d::String *>(obj))) {
if ((strVal = dynamic_cast<cocos2d::String *>(obj))) {
dictElement = c_string_to_jsval(cx, strVal->getCString());
} else if ((dictVal = dynamic_cast<Dictionary*>(obj))) {
dictElement = ccdictionary_to_jsval(cx, dictVal);
@ -1542,7 +1564,7 @@ jsval ccdictionary_to_jsval(JSContext* cx, Dictionary* dict)
JSBool jsval_to_ccdictionary(JSContext* cx, jsval v, Dictionary** ret) {
if(JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
{
*ret = NULL;
return JS_TRUE;
@ -1574,7 +1596,7 @@ JSBool jsval_to_ccdictionary(JSContext* cx, jsval v, Dictionary** ret) {
}
JSStringWrapper keyWrapper(JSVAL_TO_STRING(key), cx);
if(!dict) {
if (!dict) {
dict = Dictionary::create();
}
@ -1658,7 +1680,7 @@ JSBool jsval_to_ccaffinetransform(JSContext* cx, jsval v, AffineTransform* ret)
JS_ValueToNumber(cx, jstx, &tx) &&
JS_ValueToNumber(cx, jsty, &ty);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments");
*ret = AffineTransformMake(a, b, c, d, tx, ty);
return JS_TRUE;
@ -1958,7 +1980,7 @@ JSBool jsb_set_reserved_slot(JSObject *obj, uint32_t idx, jsval value)
{
JSClass *klass = JS_GetClass(obj);
unsigned int slots = JSCLASS_RESERVED_SLOTS(klass);
if( idx >= slots )
if ( idx >= slots )
return JS_FALSE;
JS_SetReservedSlot(obj, idx, value);
@ -1970,7 +1992,7 @@ JSBool jsb_get_reserved_slot(JSObject *obj, uint32_t idx, jsval& ret)
{
JSClass *klass = JS_GetClass(obj);
unsigned int slots = JSCLASS_RESERVED_SLOTS(klass);
if( idx >= slots )
if ( idx >= slots )
return JS_FALSE;
ret = JS_GetReservedSlot(obj, idx);
@ -2237,7 +2259,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
{
JSObject *jsobj;
if( ! JS_ValueToObject( cx, vp, &jsobj ) )
if (!JS_ValueToObject( cx, vp, &jsobj ) )
return JS_FALSE;
JSB_PRECONDITION( jsobj, "Not a valid JS object");
@ -2319,7 +2341,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "fontFillColor", &jsr);
JSObject *jsobjColor;
if( ! JS_ValueToObject( cx, jsr, &jsobjColor ) )
if (!JS_ValueToObject( cx, jsr, &jsobjColor ) )
return JS_FALSE;
out->_fontFillColor = getColorFromJSObject(cx, jsobjColor);
@ -2332,7 +2354,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "fontDimensions", &jsr);
JSObject *jsobjSize;
if( ! JS_ValueToObject( cx, jsr, &jsobjSize ) )
if (!JS_ValueToObject( cx, jsr, &jsobjSize ) )
return JS_FALSE;
out->_dimensions = getSizeFromJSObject(cx, jsobjSize);
@ -2345,7 +2367,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "shadowEnabled", &jsr);
out->_shadow._shadowEnabled = ToBoolean(jsr);
if( out->_shadow._shadowEnabled )
if ( out->_shadow._shadowEnabled )
{
// default shadow values
out->_shadow._shadowOffset = Size(5, 5);
@ -2359,7 +2381,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "shadowOffset", &jsr);
JSObject *jsobjShadowOffset;
if( ! JS_ValueToObject( cx, jsr, &jsobjShadowOffset ) )
if (!JS_ValueToObject( cx, jsr, &jsobjShadowOffset ) )
return JS_FALSE;
out->_shadow._shadowOffset = getSizeFromJSObject(cx, jsobjShadowOffset);
}
@ -2393,7 +2415,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "strokeEnabled", &jsr);
out->_stroke._strokeEnabled = ToBoolean(jsr);
if( out->_stroke._strokeEnabled )
if ( out->_stroke._strokeEnabled )
{
// default stroke values
out->_stroke._strokeSize = 1;
@ -2406,7 +2428,7 @@ JSBool jsval_to_FontDefinition( JSContext *cx, jsval vp, FontDefinition *out )
JS_GetProperty(cx, jsobj, "strokeColor", &jsr);
JSObject *jsobjStrokeColor;
if( ! JS_ValueToObject( cx, jsr, &jsobjStrokeColor ) )
if (!JS_ValueToObject( cx, jsr, &jsobjStrokeColor ) )
return JS_FALSE;
out->_stroke._strokeColor = getColorFromJSObject(cx, jsobjStrokeColor);
}

View File

@ -94,7 +94,7 @@ public:
bool executeFunctionWithObjectData(Node *self, const char *name, JSObject *obj);
JSBool executeFunctionWithOwner(jsval owner, const char *name, uint32_t argc = 0, jsval* vp = NULL, jsval* retVal = NULL);
void executeJSFunctionWithThisObj(jsval thisObj, jsval callback, jsval *data);
void executeJSFunctionWithThisObj(jsval thisObj, jsval callback, uint32_t argc = 0, jsval* vp = NULL, jsval* retVal = NULL);
/**
* will eval the specified string

View File

@ -135,6 +135,24 @@ cc.EDITBOX_INPUT_FLAG_INITIAL_CAPS_SENTENCE = 3;
*/
cc.EDITBOX_INPUT_FLAG_INITIAL_CAPS_ALL_CHARACTERS = 4;
cc.CONTROL_EVENT_TOTAL_NUMBER = 9;
cc.CONTROL_EVENT_TOUCH_DOWN = 1 << 0; // A touch-down event in the control.
cc.CONTROL_EVENT_TOUCH_DRAG_INSIDE = 1 << 1; // An event where a finger is dragged inside the bounds of the control.
cc.CONTROL_EVENT_TOUCH_DRAG_OUTSIDE = 1 << 2; // An event where a finger is dragged just outside the bounds of the control.
cc.CONTROL_EVENT_TOUCH_DRAG_ENTER = 1 << 3; // An event where a finger is dragged into the bounds of the control.
cc.CONTROL_EVENT_TOUCH_DRAG_EXIT = 1 << 4; // An event where a finger is dragged from within a control to outside its bounds.
cc.CONTROL_EVENT_TOUCH_UP_INSIDE = 1 << 5; // A touch-up event in the control where the finger is inside the bounds of the control.
cc.CONTROL_EVENT_TOUCH_UP_OUTSIDE = 1 << 6; // A touch-up event in the control where the finger is outside the bounds of the control.
cc.CONTROL_EVENT_TOUCH_CANCEL = 1 << 7; // A system event canceling the current touches for the control.
cc.CONTROL_EVENT_VALUECHANGED = 1 << 8; // A touch dragging or otherwise manipulating a control; causing it to emit a series of different values.
cc.CONTROL_STATE_NORMAL = 1 << 0; // The normal; or default state of a control梩hat is; enabled but neither selected nor highlighted.
cc.CONTROL_STATE_HIGHLIGHTED = 1 << 1; // Highlighted state of a control. A control enters this state when a touch down; drag inside or drag enter is performed. You can retrieve and set this value through the highlighted property.
cc.CONTROL_STATE_DISABLED = 1 << 2; // Disabled state of a control. This state indicates that the control is currently disabled. You can retrieve and set this value through the enabled property.
cc.CONTROL_STATE_SELECTED = 1 << 3; // Selected state of a control. This state indicates that the control is currently selected. You can retrieve and set this value through the selected property.
cc.CONTROL_STATE_INITIAL = 1 << 3;
// PhysicsDebugNode
cc.PhysicsDebugNode.create = function( space ) {
var s = space;

View File

@ -71,6 +71,9 @@
} while(0)
#endif
#define JSB_PRECONDITION3( condition, context, ret_value, ...) do { \
if( ! (condition) ) return (ret_value); \
} while(0)
/** @def JSB_REPRESENT_LONGLONG_AS_STR

View File

@ -76,7 +76,8 @@ static JSBool js_cocos2dx_CCScrollView_setDelegate(JSContext *cx, uint32_t argc,
cocos2d::extension::ScrollView* cobj = (cocos2d::extension::ScrollView *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
if (argc == 1) {
if (argc == 1)
{
// save the delegate
JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]);
JSB_ScrollViewDelegate* nativeDelegate = new JSB_ScrollViewDelegate();
@ -199,7 +200,8 @@ static JSBool js_cocos2dx_CCTableView_setDelegate(JSContext *cx, uint32_t argc,
cocos2d::extension::TableView* cobj = (cocos2d::extension::TableView *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
if (argc == 1) {
if (argc == 1)
{
// save the delegate
JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]);
JSB_TableViewDelegate* nativeDelegate = new JSB_TableViewDelegate();
@ -249,10 +251,12 @@ public:
{
jsval ret;
bool ok = callJSDelegate(table, idx, "tableCellSizeForIndex", ret);
if (!ok) {
if (!ok)
{
ok = callJSDelegate(table, "cellSizeForTable", ret);
}
if (ok) {
if (ok)
{
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
Size size;
JSBool isSucceed = jsval_to_ccsize(cx, ret, &size);
@ -324,13 +328,17 @@ private:
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
JSObject* obj = _JSTableViewDataSource;
if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction) {
if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval)) {
if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction)
{
if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval))
{
return false;
}
if(temp_retval == JSVAL_VOID) {
if(temp_retval == JSVAL_VOID)
{
return false;
}
JSAutoCompartment ac(cx, obj);
JS_CallFunctionName(cx, obj, jsFunctionName.c_str(),
1, &dataVal, &retVal);
@ -354,13 +362,18 @@ private:
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
JSObject* obj = _JSTableViewDataSource;
if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction) {
if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval)) {
if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction)
{
if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval))
{
return false;
}
if(temp_retval == JSVAL_VOID) {
if(temp_retval == JSVAL_VOID)
{
return false;
}
JSAutoCompartment ac(cx, obj);
JS_CallFunctionName(cx, obj, jsFunctionName.c_str(),
2, dataVal, &retVal);
@ -412,7 +425,8 @@ static JSBool js_cocos2dx_CCTableView_create(JSContext *cx, uint32_t argc, jsval
{
jsval *argv = JS_ARGV(cx, vp);
JSBool ok = JS_TRUE;
if (argc == 3 || argc == 2) {
if (argc == 3 || argc == 2)
{
JSB_TableViewDataSource* pNativeSource = new JSB_TableViewDataSource();
pNativeSource->setTableViewDataSource(JSVAL_TO_OBJECT(argv[0]));
@ -427,10 +441,13 @@ static JSBool js_cocos2dx_CCTableView_create(JSContext *cx, uint32_t argc, jsval
jsval jsret;
do {
if (ret) {
if (ret)
{
js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::extension::TableView>(cx, ret);
jsret = OBJECT_TO_JSVAL(proxy->obj);
} else {
}
else
{
jsret = JSVAL_NULL;
}
} while (0);
@ -442,7 +459,8 @@ static JSBool js_cocos2dx_CCTableView_create(JSContext *cx, uint32_t argc, jsval
else
{
cocos2d::Node* arg2;
do {
do
{
js_proxy_t *proxy;
JSObject *tmpObj = JSVAL_TO_OBJECT(argv[2]);
proxy = jsb_get_js_proxy(tmpObj);
@ -554,7 +572,8 @@ static JSBool js_cocos2dx_CCEditBox_setDelegate(JSContext *cx, uint32_t argc, js
cocos2d::extension::EditBox* cobj = (cocos2d::extension::EditBox *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
if (argc == 1) {
if (argc == 1)
{
// save the delegate
JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]);
JSB_EditBoxDelegate* nativeDelegate = new JSB_EditBoxDelegate();
@ -573,9 +592,196 @@ static JSBool js_cocos2dx_CCEditBox_setDelegate(JSContext *cx, uint32_t argc, js
}
class JSB_ControlButtonTarget : public Object
{
public:
JSB_ControlButtonTarget()
: _jsFunc(nullptr),
_type(Control::EventType::TOUCH_DOWN),
_jsTarget(nullptr),
_needUnroot(false)
{}
virtual ~JSB_ControlButtonTarget()
{
CCLOGINFO("In the destruction of JSB_ControlButtonTarget ...");
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
if (_needUnroot)
{
JS_RemoveObjectRoot(cx, &_jsTarget);
}
JS_RemoveObjectRoot(cx, &_jsFunc);
for (auto iter = _jsNativeTargetMap.begin(); iter != _jsNativeTargetMap.end(); ++iter)
{
if (this == iter->second)
{
_jsNativeTargetMap.erase(iter);
break;
}
}
}
virtual void onEvent(Object *controlButton, Control::EventType event)
{
js_proxy_t * p;
JS_GET_PROXY(p, controlButton);
if (!p)
{
log("Failed to get proxy for control button");
return;
}
jsval dataVal[2];
dataVal[0] = OBJECT_TO_JSVAL(p->obj);
int arg1 = (int)event;
dataVal[1] = INT_TO_JSVAL(arg1);
jsval jsRet;
ScriptingCore::getInstance()->executeJSFunctionWithThisObj(OBJECT_TO_JSVAL(_jsTarget), OBJECT_TO_JSVAL(_jsFunc), 2, dataVal, &jsRet);
}
void setJSTarget(JSObject* pJSTarget)
{
_jsTarget = pJSTarget;
js_proxy_t* p = jsb_get_js_proxy(_jsTarget);
if (!p)
{
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
JS_AddNamedObjectRoot(cx, &_jsTarget, "JSB_ControlButtonTarget, target");
_needUnroot = true;
}
}
void setJSAction(JSObject* jsFunc)
{
_jsFunc = jsFunc;
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
JS_AddNamedObjectRoot(cx, &_jsFunc, "JSB_ControlButtonTarget, func");
}
void setEventType(Control::EventType type)
{
_type = type;
}
public:
static std::multimap<JSObject*, JSB_ControlButtonTarget*> _jsNativeTargetMap;
JSObject* _jsFunc;
Control::EventType _type;
private:
JSObject* _jsTarget;
bool _needUnroot;
};
std::multimap<JSObject*, JSB_ControlButtonTarget*> JSB_ControlButtonTarget::_jsNativeTargetMap;
static JSBool js_cocos2dx_CCControl_addTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
js_proxy_t *proxy = jsb_get_js_proxy(obj);
cocos2d::extension::Control* cobj = (cocos2d::extension::Control *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
JSBool ok = JS_TRUE;
if (argc == 3)
{
JSObject* jsDelegate = JSVAL_TO_OBJECT(argv[0]);
JSObject* jsFunc = JSVAL_TO_OBJECT(argv[1]);
Control::EventType arg2;
ok &= jsval_to_int32(cx, argv[2], (int32_t *)&arg2);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing control event");
// Check whether the target already exists.
auto range = JSB_ControlButtonTarget::_jsNativeTargetMap.equal_range(jsDelegate);
for (auto it = range.first; it != range.second; ++it)
{
if (it->second->_jsFunc == jsFunc && arg2 == it->second->_type)
{
// Return true directly.
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
}
// save the delegate
JSB_ControlButtonTarget* nativeDelegate = new JSB_ControlButtonTarget();
nativeDelegate->setJSTarget(jsDelegate);
nativeDelegate->setJSAction(jsFunc);
nativeDelegate->setEventType(arg2);
Array* nativeDelegateArray = static_cast<Array*>(cobj->getUserObject());
if (nullptr == nativeDelegateArray)
{
nativeDelegateArray = new Array();
cobj->setUserObject(nativeDelegateArray); // The reference of nativeDelegateArray is added to 2
nativeDelegateArray->release(); // Release nativeDelegateArray to make the reference to 1
}
nativeDelegateArray->addObject(nativeDelegate); // The reference of nativeDelegate is added to 2
nativeDelegate->release(); // Release nativeDelegate to make the reference to 1
cobj->addTargetWithActionForControlEvents(nativeDelegate, cccontrol_selector(JSB_ControlButtonTarget::onEvent), arg2);
JSB_ControlButtonTarget::_jsNativeTargetMap.insert(std::make_pair(jsDelegate, nativeDelegate));
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3);
return JS_FALSE;
}
static JSBool js_cocos2dx_CCControl_removeTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
js_proxy_t *proxy = jsb_get_js_proxy(obj);
cocos2d::extension::Control* cobj = (cocos2d::extension::Control *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
JSBool ok = JS_TRUE;
if (argc == 3)
{
Control::EventType arg2;
ok &= jsval_to_int32(cx, argv[2], (int32_t *)&arg2);
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing control event");
obj = JSVAL_TO_OBJECT(argv[0]);
JSObject* jsFunc = JSVAL_TO_OBJECT(argv[1]);
JSB_ControlButtonTarget* nativeTargetToRemoved = nullptr;
auto range = JSB_ControlButtonTarget::_jsNativeTargetMap.equal_range(obj);
for (auto it = range.first; it != range.second; ++it)
{
if (it->second->_jsFunc == jsFunc && arg2 == it->second->_type)
{
nativeTargetToRemoved = it->second;
JSB_ControlButtonTarget::_jsNativeTargetMap.erase(it);
break;
}
}
cobj->removeTargetWithActionForControlEvents(nativeTargetToRemoved, cccontrol_selector(JSB_ControlButtonTarget::onEvent), arg2);
return JS_TRUE;
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3);
return JS_FALSE;
}
extern JSObject* jsb_ScrollView_prototype;
extern JSObject* jsb_TableView_prototype;
extern JSObject* jsb_EditBox_prototype;
extern JSObject* jsb_Control_prototype;
void register_all_cocos2dx_extension_manual(JSContext* cx, JSObject* global)
{
@ -583,6 +789,8 @@ void register_all_cocos2dx_extension_manual(JSContext* cx, JSObject* global)
JS_DefineFunction(cx, jsb_TableView_prototype, "setDelegate", js_cocos2dx_CCTableView_setDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineFunction(cx, jsb_TableView_prototype, "setDataSource", js_cocos2dx_CCTableView_setDataSource, 1, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineFunction(cx, jsb_EditBox_prototype, "setDelegate", js_cocos2dx_CCEditBox_setDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineFunction(cx, jsb_Control_prototype, "addTargetWithActionForControlEvents", js_cocos2dx_CCControl_addTargetWithActionForControlEvents, 3, JSPROP_READONLY | JSPROP_PERMANENT);
JS_DefineFunction(cx, jsb_Control_prototype, "removeTargetWithActionForControlEvents", js_cocos2dx_CCControl_removeTargetWithActionForControlEvents, 3, JSPROP_READONLY | JSPROP_PERMANENT);
JSObject *tmpObj = JSVAL_TO_OBJECT(anonEvaluate(cx, global, "(function () { return cc.TableView; })()"));
JS_DefineFunction(cx, tmpObj, "create", js_cocos2dx_CCTableView_create, 3, JSPROP_READONLY | JSPROP_PERMANENT);