Merge pull request #3664 from dumganhar/keyboard_test

[win32] glfw keyboard callback is enabled now. Enables KeyboardTest for win32.
This commit is contained in:
James Chen 2013-09-17 08:23:02 -07:00
commit 4542732207
20 changed files with 122 additions and 55 deletions

View File

@ -280,6 +280,23 @@ void Layer::onAcceleration(Acceleration* pAccelerationValue, Event* event)
}
}
void Layer::onKeyPressed(KeyboardEvent::KeyCode keyCode, Event* event)
{
CC_UNUSED_PARAM(keyCode);
CC_UNUSED_PARAM(event);
}
void Layer::onKeyReleased(KeyboardEvent::KeyCode keyCode, Event* event)
{
CC_UNUSED_PARAM(event);
if(kScriptTypeNone != _scriptType)
{
KeypadScriptData data(keyCode, this);
ScriptEvent event(kKeypadEvent,&data);
ScriptEngineManager::getInstance()->getScriptEngine()->sendEvent(&event);
}
}
/// isKeyboardEnabled getter
bool Layer::isKeyboardEnabled() const
{

View File

@ -145,14 +145,15 @@ public:
virtual bool isKeyboardEnabled() const;
virtual void setKeyboardEnabled(bool value);
/** Please use onKeyPressed instead. */
/** Please use onKeyPressed instead. */
virtual void keyPressed(int keyCode) final {};
/** Please use onKeyRelease instead. */
/** Please use onKeyReleased instead. */
virtual void keyReleased(int keyCode) final {};
virtual void onKeyPressed(KeyboardEvent::KeyCode keyCode, Event* event) {};
virtual void onKeyReleased(KeyboardEvent::KeyCode keyCode, Event* event) {};
virtual void onKeyPressed(KeyboardEvent::KeyCode keyCode, Event* event);
virtual void onKeyReleased(KeyboardEvent::KeyCode keyCode, Event* event);
CC_DEPRECATED_ATTRIBUTE virtual bool isKeypadEnabled() const final { return false; };
CC_DEPRECATED_ATTRIBUTE virtual void setKeypadEnabled(bool value) final {};

View File

@ -35,12 +35,20 @@ THE SOFTWARE.
NS_CC_BEGIN
static std::map<int, KeyboardEvent::KeyCode> g_keyCodeMap;// = {
struct keyCodeItem
{
int glfwKeyCode;
KeyboardEvent::KeyCode keyCode;
};
static std::map<int, KeyboardEvent::KeyCode> g_keyCodeMap;
static keyCodeItem g_keyCodeStructArray[] = {
/* The unknown key */
// make_pair( GLFW_KEY_UNKNOWN , KeyboardEvent::KeyCode::KEY_NONE ),
{ GLFW_KEY_UNKNOWN , KeyboardEvent::KeyCode::KEY_NONE },
/* Printable keys */
/*
{ GLFW_KEY_SPACE , KeyboardEvent::KeyCode::KEY_SPACE },
{ GLFW_KEY_APOSTROPHE , KeyboardEvent::KeyCode::KEY_APOSTROPHE },
{ GLFW_KEY_COMMA , KeyboardEvent::KeyCode::KEY_COMMA },
@ -92,7 +100,7 @@ static std::map<int, KeyboardEvent::KeyCode> g_keyCodeMap;// = {
{ GLFW_KEY_WORLD_1 , KeyboardEvent::KeyCode::KEY_GRAVE },
{ GLFW_KEY_WORLD_2 , KeyboardEvent::KeyCode::KEY_NONE },
/* Function keys *//*
/* Function keys */
{ GLFW_KEY_ESCAPE , KeyboardEvent::KeyCode::KEY_ESCAPE },
{ GLFW_KEY_ENTER , KeyboardEvent::KeyCode::KEY_KP_ENTER },
{ GLFW_KEY_TAB , KeyboardEvent::KeyCode::KEY_TAB },
@ -163,8 +171,8 @@ static std::map<int, KeyboardEvent::KeyCode> g_keyCodeMap;// = {
{ GLFW_KEY_RIGHT_ALT , KeyboardEvent::KeyCode::KEY_ALT },
{ GLFW_KEY_RIGHT_SUPER , KeyboardEvent::KeyCode::KEY_HYPER },
{ GLFW_KEY_MENU , KeyboardEvent::KeyCode::KEY_MENU },
{ GLFW_KEY_LAST , KeyboardEvent::KeyCode::KEY_NONE }*/
//};
{ GLFW_KEY_LAST , KeyboardEvent::KeyCode::KEY_NONE }
};
#if(_MSC_VER >= 1600) // Visual Studio 2010 or higher version.
// Windows Touch define
@ -368,6 +376,11 @@ EGLView::EGLView()
{
CCASSERT(nullptr == s_pEglView, "EGLView is singleton, Should be inited only one time\n");
s_pEglView = this;
g_keyCodeMap.clear();
for (auto& item : g_keyCodeStructArray)
{
g_keyCodeMap.insert(std::make_pair(item.glfwKeyCode, item.keyCode));
}
strcpy(_viewName, "Cocos2dxWin32");
glfwSetErrorCallback(EGLViewEventHandler::OnGLFWError);
glfwInit();

View File

@ -28,6 +28,7 @@
#include "platform/CCCommon.h"
#include "event_dispatcher/CCTouch.h"
#include "event_dispatcher/CCTouchEvent.h"
#include "event_dispatcher/CCKeyboardEvent.h"
#include "cocoa/CCSet.h"
#include <map>
#include <string>
@ -291,7 +292,7 @@ struct TouchScriptData
struct KeypadScriptData
{
int actionType;
KeyboardEvent::KeyCode actionType;
void* nativeObject;
// Constructor
@ -299,7 +300,7 @@ struct KeypadScriptData
* @js NA
* @lua NA
*/
KeypadScriptData(int inActionType,void* inNativeObject)
KeypadScriptData(KeyboardEvent::KeyCode inActionType,void* inNativeObject)
: actionType(inActionType),nativeObject(inNativeObject)
{
}

View File

@ -46,7 +46,7 @@ ArmatureDataManager *ArmatureDataManager::getInstance()
return s_sharedArmatureDataManager;
}
void ArmatureDataManager::purge()
void ArmatureDataManager::destoryInstance()
{
SpriteFrameCacheHelper::purge();
DataReaderHelper::purge();

View File

@ -40,9 +40,12 @@ public:
/** @deprecated Use getInstance() instead */
CC_DEPRECATED_ATTRIBUTE static ArmatureDataManager *sharedArmatureDataManager() { return ArmatureDataManager::getInstance(); }
/** @deprecated Use destoryInstance() instead */
CC_DEPRECATED_ATTRIBUTE static void purge() { ArmatureDataManager::destoryInstance(); };
static ArmatureDataManager *getInstance();
static void purge();
static void destoryInstance();
private:
/**
* @js ctor

View File

@ -163,7 +163,7 @@ void ArmatureTestLayer::onEnter()
addChild(menu, 100);
setShaderProgram(ShaderCache::getInstance()->programForKey(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR));
setShaderProgram(ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR));
}
void ArmatureTestLayer::onExit()
@ -171,6 +171,8 @@ void ArmatureTestLayer::onExit()
removeAllChildren();
backItem = restartItem = nextItem = NULL;
Layer::onExit();
}
std::string ArmatureTestLayer::title()

View File

@ -1,7 +1,5 @@
#include "KeyboardTest.h"
#ifdef CC_KEYBOARD_SUPPORT
KeyboardTest::KeyboardTest()
{
auto s = Director::getInstance()->getWinSize();
@ -43,4 +41,3 @@ void KeyboardTestScene::runThisTest()
layer->release();
}
#endif

View File

@ -1,8 +1,6 @@
#ifndef _KEYBOARD_TEST_H_
#define _KEYBOARD_TEST_H_
#ifdef CC_KEYBOARD_SUPPORT
#include "cocos2d.h"
#include "../testBasic.h"
@ -25,6 +23,5 @@ public:
virtual void runThisTest();
};
#endif
#endif

View File

@ -7,7 +7,7 @@ KeypadTest::KeypadTest()
addChild(label, 0);
label->setPosition( Point(s.width/2, s.height-50) );
setKeypadEnabled(true);
setKeyboardEnabled(true);
// create a label to display the tip string
_label = LabelTTF::create("Please press any key...", "Arial", 22);

View File

@ -50,9 +50,7 @@ struct {
{ "FileUtilsTest", []() { return new FileUtilsTestScene(); } },
{ "FontTest", []() { return new FontTestScene(); } },
{ "IntervalTest", [](){return new IntervalTestScene(); } },
#ifdef CC_KEYBOARD_SUPPORT
{ "KeyboardTest", []() { return new KeyboardTestScene(); } },
#endif
#if (CC_TARGET_PLATFORM != CC_PLATFORM_BADA)
{ "KeypadTest", []() { return new KeypadTestScene(); } },
#endif

View File

@ -1,5 +1,6 @@
#include "testBasic.h"
#include "controller.h"
#include "cocos-ext.h"
TestScene::TestScene(bool bPortrait)
{
@ -48,6 +49,8 @@ void TestScene::onEnter()
Director::getInstance()->replaceScene(scene);
scene->release();
}
cocos2d::extension::armature::ArmatureDataManager::destoryInstance();
});
auto menu =Menu::create(menuItem, NULL);

View File

@ -5,6 +5,7 @@
#include "VisibleRect.h"
USING_NS_CC;
using namespace std;
class TestScene : public Scene

View File

@ -31,9 +31,7 @@
#include "EffectsAdvancedTest/EffectsAdvancedTest.h"
#include "AccelerometerTest/AccelerometerTest.h"
#include "KeypadTest/KeypadTest.h"
#ifdef CC_KEYBOARD_SUPPORT
#include "KeyboardTest/KeyboardTest.h"
#endif
#include "PerformanceTest/PerformanceTest.h"
#include "ZwoptexTest/ZwoptexTest.h"
#include "CocosDenshionTest/CocosDenshionTest.h"

View File

@ -177,6 +177,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\..\..\external\libwebsockets\win32\lib\*.*" "$(O
<ClCompile Include="..\Classes\ExtensionsTest\TableViewTest\CustomTableViewCell.cpp" />
<ClCompile Include="..\Classes\ExtensionsTest\TableViewTest\TableViewTestScene.cpp" />
<ClCompile Include="..\Classes\FileUtilsTest\FileUtilsTest.cpp" />
<ClCompile Include="..\Classes\KeyboardTest\KeyboardTest.cpp" />
<ClCompile Include="..\Classes\LabelTest\LabelTestNew.cpp" />
<ClCompile Include="..\Classes\NewEventDispatcherTest\NewEventDispatcherTest.cpp" />
<ClCompile Include="..\Classes\PerformanceTest\PerformanceAllocTest.cpp" />
@ -312,6 +313,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\..\..\external\libwebsockets\win32\lib\*.*" "$(O
<ClInclude Include="..\Classes\ExtensionsTest\TableViewTest\CustomTableViewCell.h" />
<ClInclude Include="..\Classes\ExtensionsTest\TableViewTest\TableViewTestScene.h" />
<ClInclude Include="..\Classes\FileUtilsTest\FileUtilsTest.h" />
<ClInclude Include="..\Classes\KeyboardTest\KeyboardTest.h" />
<ClInclude Include="..\Classes\LabelTest\LabelTestNew.h" />
<ClInclude Include="..\Classes\NewEventDispatcherTest\NewEventDispatcherTest.h" />
<ClInclude Include="..\Classes\PhysicsTest\PhysicsTest.h" />

View File

@ -297,6 +297,9 @@
<Filter Include="Classes\ExtensionsTest\CocoStudioGUITest\UIButtonTest">
<UniqueIdentifier>{24f044ee-09a6-406b-98d7-8d5d759e5bb1}</UniqueIdentifier>
</Filter>
<Filter Include="Classes\KeyboardTest">
<UniqueIdentifier>{8d7d37cd-5cc2-4a7d-9bd2-7b5c928adbb5}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
@ -689,6 +692,9 @@
<ClCompile Include="..\Classes\ExtensionsTest\CocoStudioGUITest\UISceneManager.cpp">
<Filter>Classes\ExtensionsTest\CocoStudioGUITest</Filter>
</ClCompile>
<ClCompile Include="..\Classes\KeyboardTest\KeyboardTest.cpp">
<Filter>Classes\KeyboardTest</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h">
@ -1258,5 +1264,8 @@
<ClInclude Include="..\Classes\ExtensionsTest\CocoStudioGUITest\UISceneManager.h">
<Filter>Classes\ExtensionsTest\CocoStudioGUITest</Filter>
</ClInclude>
<ClInclude Include="..\Classes\KeyboardTest\KeyboardTest.h">
<Filter>Classes\KeyboardTest</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1 +1 @@
febc64c0af18af645de925396d73473973a0b37e
968b4fa41bd81c391c5cbcd17d8e5d40f7d7c02e

View File

@ -980,23 +980,40 @@ int ScriptingCore::handleKeypadEvent(void* data)
if (NULL == keypadScriptData->nativeObject)
return 0;
int action = keypadScriptData->actionType;
KeyboardEvent::KeyCode action = keypadScriptData->actionType;
js_proxy_t * p = jsb_get_native_proxy(keypadScriptData->nativeObject);
if (p)
{
// FIXME: switch(action)
// {
// case kTypeBackClicked:
// executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "backClicked");
// break;
// case kTypeMenuClicked:
// executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "menuClicked");
// break;
// default:
// break;
// }
JSBool ret = JS_FALSE;
switch(action)
{
case KeyboardEvent::KeyCode::KEY_BACKSPACE:
ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onBackClicked");
if (!ret)
{
ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "backClicked");
if (ret)
{
CCLOG("backClicked will be deprecated, please use onBackClicked instead.");
}
}
break;
case KeyboardEvent::KeyCode::KEY_MENU:
ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onMenuClicked");
if (!ret)
{
ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "menuClicked");
if (ret)
{
CCLOG("menuClicked will be deprecated, please use onMenuClicked instead.");
}
}
break;
default:
break;
}
return 1;
}

View File

@ -64,4 +64,14 @@ var cc = cc || {};
cc.log("cc.Menu.setHandlerPriority was deprecated, 3.0 uses new event dispatcher to dispatch touch event based on draw order, so setHandlerPriority is not needed now.");
};
cc.Layer.prototype.setKeypadEnabled = function() {
logW("cc.Layer.setKeypadEnabled", "cc.Layer.setKeyboardEnabled");
return cc.Layer.prototype.setKeyboardEnabled.apply(this, arguments);
};
cc.Layer.prototype.isKeypadEnabled = function() {
logW("cc.Layer.isKeypadEnabled", "cc.Layer.isKeyboardEnabled");
return cc.Layer.prototype.isKeyboardEnabled.apply(this, arguments);
};
})();

View File

@ -400,22 +400,20 @@ int LuaEngine::handleKeypadEvent(void* data)
if (0 == handler)
return 0;
int action = keypadScriptData->actionType;
KeyboardEvent::KeyCode action = keypadScriptData->actionType;
switch(action)
{
case KeyboardEvent::KeyCode::KEY_BACKSPACE:
_stack->pushString("backClicked");
break;
case KeyboardEvent::KeyCode::KEY_MENU:
_stack->pushString("menuClicked");
break;
default:
break;
}
//FIXME:
// switch (action)
// {
// case kTypeBackClicked:
// _stack->pushString("backClicked");
// break;
//
// case kTypeMenuClicked:
// _stack->pushString("menuClicked");
// break;
//
// default:
// return 0;
// }
int ret = _stack->executeFunctionByHandler(handler, 1);
_stack->clean();
return ret;