This commit is contained in:
honghui 2014-09-29 16:28:18 +08:00
commit 82eb6eeff9
100 changed files with 2294 additions and 1039 deletions

13
AUTHORS
View File

@ -811,6 +811,7 @@ Developers:
Added Node::stopAllActionsByTag && ActionManager::removeAllActionsByTag
Added getAllTouches() in GLViewProtocol
Precompiled headers improvements
Added Application::openUrl for all supported platforms ecept WP8 and WinRT
youknowone
Adds iOS-like elastic bounceback support for cocos2d::extension::ScrollView
@ -1010,6 +1011,18 @@ Developers:
wohaaitinciu
WebView support on windows
guykogus
Implemented Application::openUrl for WP8 and WinRT
tttreal
Fixed Label::getStringNumLines()
hongliang-goudou
Fixed the bug that UI animation playing crash if GUI JSON file is loaded again
yestein
Add Cocostudio Armature getOffsetPoints API for Lua
Retired Core Developers:
WenSheng Yang

View File

@ -1,9 +1,17 @@
cocos2d-x-3.3
[NEW] Audio: new audio supports Mac OS X
[NEW] Application: added openUrl()
[NEW] Armature: added getOffsetPoints()
[NEW] Rect: added merge()
[NEW] Utils: added getCascadeBoundingBox()
[NEW] UI: `WebView` support on windows
[FIX] Accelerometer: using Accelerometer will freeze app and then crash on WP8
[FIX] C++: remove armv7s in VALID_ARCHS for Xcode projects
[FIX] Cocos Studio: UI animation playing crash if GUI JSON file is loaded again
[FIX] EditBox: view rendereed in wrong position if click EditBox on iOS 8
[FIX] Label: getStringNumLines() may returns wrong result if label is dirty
[FIX] Lua-binding: may crash if passing two-dimensional table from lua to c++
[FIX] TextFieldTTF: will get wrong characters if using Chinese input method on WP8
cocos2d-x-3.3 Sep.20 2014

View File

@ -6834,6 +6834,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../external/freetype2/include/ios $(SRCROOT)/../external/curl/include/ios $(SRCROOT)/../external/webp/include/ios $(SRCROOT)/../external/tiff/include/ios $(SRCROOT)/../external/jpeg/include/ios $(SRCROOT)/../external/png/include/ios $(SRCROOT)/../external/websockets/include/ios $(SRCROOT)/../external/chipmunk/include/chipmunk";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -6866,6 +6867,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../external/freetype2/include/ios $(SRCROOT)/../external/curl/include/ios $(SRCROOT)/../external/webp/include/ios $(SRCROOT)/../external/tiff/include/ios $(SRCROOT)/../external/jpeg/include/ios $(SRCROOT)/../external/png/include/ios $(SRCROOT)/../external/websockets/include/ios $(SRCROOT)/../external/chipmunk/include/chipmunk";
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};

View File

@ -939,6 +939,8 @@
A07A52BF1783AF210073F6A7 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A07A52B91783AE900073F6A7 /* OpenGLES.framework */; };
A07A52C01783AF250073F6A7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A07A52B71783AE6D0073F6A7 /* UIKit.framework */; };
A07A52C31783B02C0073F6A7 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A07A52C11783B01F0073F6A7 /* AVFoundation.framework */; };
A5030C3519D059DA000E78E7 /* OpenURLTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5030C3319D059DA000E78E7 /* OpenURLTest.cpp */; };
A5030C3619D059DA000E78E7 /* OpenURLTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5030C3319D059DA000E78E7 /* OpenURLTest.cpp */; };
B2507B6B192589AF00FA4972 /* Shaders3D in Resources */ = {isa = PBXBuildFile; fileRef = B2507B6A192589AF00FA4972 /* Shaders3D */; };
B2507B6C192589AF00FA4972 /* Shaders3D in Resources */ = {isa = PBXBuildFile; fileRef = B2507B6A192589AF00FA4972 /* Shaders3D */; };
B609E67319C18DAD003D0074 /* BillBoardTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B609E67119C18DAD003D0074 /* BillBoardTest.cpp */; };
@ -2963,6 +2965,8 @@
A07A52B91783AE900073F6A7 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
A07A52BB1783AEB80073F6A7 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
A07A52C11783B01F0073F6A7 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; };
A5030C3319D059DA000E78E7 /* OpenURLTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenURLTest.cpp; path = OpenURLTest/OpenURLTest.cpp; sourceTree = "<group>"; };
A5030C3419D059DA000E78E7 /* OpenURLTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenURLTest.h; path = OpenURLTest/OpenURLTest.h; sourceTree = "<group>"; };
B2507B6A192589AF00FA4972 /* Shaders3D */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Shaders3D; path = "../tests/cpp-tests/Resources/Shaders3D"; sourceTree = "<group>"; };
B609E67119C18DAD003D0074 /* BillBoardTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BillBoardTest.cpp; path = BillBoardTest/BillBoardTest.cpp; sourceTree = "<group>"; };
B609E67219C18DAD003D0074 /* BillBoardTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BillBoardTest.h; path = BillBoardTest/BillBoardTest.h; sourceTree = "<group>"; };
@ -5510,6 +5514,7 @@
1AC35B1718CECF0C00F37B72 /* UserDefaultTest */,
1AC35B1A18CECF0C00F37B72 /* VisibleRect.cpp */,
1AC35B1B18CECF0C00F37B72 /* VisibleRect.h */,
A5030C3219D059AB000E78E7 /* OpenURLTest */,
1AC35B1C18CECF0C00F37B72 /* ZwoptexTest */,
);
name = Classes;
@ -7156,6 +7161,15 @@
name = Products;
sourceTree = "<group>";
};
A5030C3219D059AB000E78E7 /* OpenURLTest */ = {
isa = PBXGroup;
children = (
A5030C3319D059DA000E78E7 /* OpenURLTest.cpp */,
A5030C3419D059DA000E78E7 /* OpenURLTest.h */,
);
name = OpenURLTest;
sourceTree = "<group>";
};
B609E67019C18D90003D0074 /* BillBoardTest */ = {
isa = PBXGroup;
children = (
@ -8006,6 +8020,7 @@
1AC35B2918CECF0C00F37B72 /* AppDelegate.cpp in Sources */,
29080DA1191B595E0066F8DF /* GUIEditorTest.cpp in Sources */,
1AC35B3718CECF0C00F37B72 /* Bug-1159.cpp in Sources */,
A5030C3519D059DA000E78E7 /* OpenURLTest.cpp in Sources */,
29080D1C191B574B0066F8DF /* UITest.cpp in Sources */,
1AC35C3118CECF0C00F37B72 /* PerformanceRendererTest.cpp in Sources */,
1AC35C4518CECF0C00F37B72 /* SceneTest.cpp in Sources */,
@ -8234,6 +8249,7 @@
1AC35C6018CECF0C00F37B72 /* Paddle.cpp in Sources */,
29080DBE191B595E0066F8DF /* UIPageViewTest.cpp in Sources */,
1AC35BDC18CECF0C00F37B72 /* SceneEditorTest.cpp in Sources */,
A5030C3619D059DA000E78E7 /* OpenURLTest.cpp in Sources */,
1AC35B4C18CECF0C00F37B72 /* BugsTest.cpp in Sources */,
1AC35C5218CECF0C00F37B72 /* testBasic.cpp in Sources */,
1AC35B7A18CECF0C00F37B72 /* EnemyController.cpp in Sources */,
@ -8577,6 +8593,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto $(SRCROOT)/../cocos/base";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8603,6 +8620,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto $(SRCROOT)/../cocos/base";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8687,6 +8705,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8704,6 +8723,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8724,6 +8744,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8745,6 +8766,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8804,6 +8826,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8825,6 +8848,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/.. $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../external $(SRCROOT)/../external/lua/luajit/include $(SRCROOT)/../external/lua/tolua $(SRCROOT)/../cocos/scripting/lua-bindings/manual $(SRCROOT)/../cocos/scripting/lua-bindings/auto";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8874,6 +8898,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8893,6 +8918,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8915,6 +8941,7 @@
buildSettings = {
COMPRESS_PNG_FILES = NO;
SDKROOT = iphoneos;
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8923,6 +8950,7 @@
buildSettings = {
COMPRESS_PNG_FILES = NO;
SDKROOT = iphoneos;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};
@ -8946,6 +8974,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -8970,6 +8999,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};

View File

@ -1226,6 +1226,15 @@ void Label::computeStringNumLines()
_currNumLines = quantityOfLines;
}
int Label::getStringNumLines() const {
if (_contentDirty)
{
const_cast<Label*>(this)->updateContent();
}
return _currNumLines;
}
int Label::getStringLength() const
{
return static_cast<int>(_currentUTF16String.length());

View File

@ -235,7 +235,7 @@ public:
float getAdditionalKerning() const;
// string related stuff
int getStringNumLines() const { return _currNumLines;}
int getStringNumLines() const;
int getStringLength() const;
FontAtlas* getFontAtlas() { return _fontAtlas; }

View File

@ -30,6 +30,7 @@ THE SOFTWARE.
#include "base/CCCamera.h"
#include "base/CCEventDispatcher.h"
#include "base/CCEventListenerCustom.h"
#include "renderer/CCRenderer.h"
#include "deprecated/CCString.h"
#if CC_USE_PHYSICS
@ -124,6 +125,44 @@ void Scene::onProjectionChanged(EventCustom* event)
}
}
void Scene::render(Renderer* renderer)
{
auto director = Director::getInstance();
Camera* defaultCamera = nullptr;
for (const auto& camera : _cameras)
{
Camera::_visitingCamera = camera;
if (Camera::_visitingCamera->getCameraFlag() == CameraFlag::DEFAULT)
{
defaultCamera = Camera::_visitingCamera;
continue;
}
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
//visit the scene
visit(renderer, Mat4::IDENTITY, 0);
renderer->render();
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
}
//draw with default camera
if (defaultCamera)
{
Camera::_visitingCamera = defaultCamera;
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
//visit the scene
visit(renderer, Mat4::IDENTITY, 0);
renderer->render();
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
}
Camera::_visitingCamera = nullptr;
}
#if CC_USE_PHYSICS
void Scene::addChild(Node* child, int zOrder, int tag)
{

View File

@ -34,6 +34,7 @@ THE SOFTWARE.
NS_CC_BEGIN
class Camera;
class Renderer;
class EventListenerCustom;
class EventCustom;
#if CC_USE_PHYSICS
@ -72,6 +73,9 @@ public:
/** get all cameras */
const std::vector<Camera*>& getCameras() const { return _cameras; }
/** render the scene */
void render(Renderer* renderer);
CC_CONSTRUCTOR_ACCESS:
Scene();
virtual ~Scene();
@ -86,7 +90,6 @@ protected:
friend class ProtectedNode;
friend class SpriteBatchNode;
friend class Camera;
friend class Director;
friend class Renderer;
std::vector<Camera*> _cameras; //weak ref to Camera

View File

@ -30,6 +30,7 @@ THE SOFTWARE.
#include <string>
#include "2d/CCNode.h"
#include "2d/CCDrawNode.h"
#include "base/CCProtocols.h"
#include "renderer/CCTextureAtlas.h"
#include "renderer/CCQuadCommand.h"

View File

@ -7,12 +7,12 @@
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_VARIADIC_MAX=10;NOMINMAX;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_VARIADIC_MAX=10;NOMINMAX;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAsWinRT>true</CompileAsWinRT>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<DisableSpecificWarnings>4056;4996;</DisableSpecificWarnings>
<DisableSpecificWarnings>4056;4996;4244;</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalOptions>/IGNORE:4264 %(AdditionalOptions)</AdditionalOptions>

View File

@ -54,19 +54,19 @@
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="cocos2d_wp8_headers.props" />
<Import Project="cocos2dx.props" />
<Import Project="cocos2d_winrt.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<Import Project="cocos2d_wp8_headers.props" />
<Import Project="cocos2dx.props" />
<Import Project="cocos2d_winrt.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="cocos2d_wp8_headers.props" />
<Import Project="cocos2dx.props" />
<Import Project="cocos2d_winrt.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<Import Project="cocos2d_wp8_headers.props" />
<Import Project="cocos2dx.props" />
<Import Project="cocos2d_winrt.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
@ -706,7 +706,4 @@
<None Include="..\renderer\ccShader_Position_uColor.frag" />
<None Include="..\renderer\ccShader_Position_uColor.vert" />
</ItemGroup>
<ItemGroup>
<Text Include="..\renderer\CMakeLists.txt" />
</ItemGroup>
</Project>

View File

@ -1454,9 +1454,4 @@
<Filter>renderer\shaders</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Text Include="..\renderer\CMakeLists.txt">
<Filter>renderer</Filter>
</Text>
</ItemGroup>
</Project>

View File

@ -162,7 +162,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
<AdditionalDependencies>sqlite3.lib;libcurl_imp.lib;websockets.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries> ;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<IgnoreSpecificDefaultLibraries>LIBCMTD.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -404,7 +404,6 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
<ClCompile Include="..\renderer\CCVertexIndexData.cpp" />
<ClCompile Include="..\storage\local-storage\LocalStorage.cpp" />
<ClCompile Include="..\ui\CocosGUI.cpp" />
<ClCompile Include="..\ui\proj.win32\Win32InputBox.cpp" />
<ClCompile Include="..\ui\UIButton.cpp" />
<ClCompile Include="..\ui\UICheckBox.cpp" />
<ClCompile Include="..\ui\UIDeprecated.cpp" />
@ -783,7 +782,6 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
<ClInclude Include="..\storage\local-storage\LocalStorage.h" />
<ClInclude Include="..\ui\CocosGUI.h" />
<ClInclude Include="..\ui\GUIExport.h" />
<ClInclude Include="..\ui\proj.win32\Win32InputBox.h" />
<ClInclude Include="..\ui\UIButton.h" />
<ClInclude Include="..\ui\UICheckBox.h" />
<ClInclude Include="..\ui\UIDeprecated.h" />

View File

@ -1144,9 +1144,6 @@
<ClCompile Include="..\..\extensions\GUI\CCControlExtension\CCInvocation.cpp">
<Filter>extension\GUI\CCControlExtensions</Filter>
</ClCompile>
<ClCompile Include="..\ui\proj.win32\Win32InputBox.cpp">
<Filter>ui\UIWidgets\EditBox</Filter>
</ClCompile>
<ClCompile Include="..\platform\win32\CCApplication-win32.cpp">
<Filter>platform\win32</Filter>
</ClCompile>
@ -2278,9 +2275,6 @@
<ClInclude Include="..\..\extensions\GUI\CCControlExtension\CCInvocation.h">
<Filter>extension\GUI\CCControlExtensions</Filter>
</ClInclude>
<ClInclude Include="..\ui\proj.win32\Win32InputBox.h">
<Filter>ui\UIWidgets\EditBox</Filter>
</ClInclude>
<ClInclude Include="..\platform\win32\CCApplication-win32.h">
<Filter>platform\win32</Filter>
</ClInclude>

View File

@ -227,6 +227,10 @@ LOCAL_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat
LOCAL_EXPORT_CFLAGS := -DUSE_FILE32API
LOCAL_EXPORT_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_ARM_NEON := true
endif
include $(BUILD_STATIC_LIBRARY)
#==============================================================
@ -234,7 +238,6 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dx_static
LOCAL_MODULE_FILENAME := libcocos2d
LOCAL_STATIC_LIBRARIES := cocostudio_static

View File

@ -287,41 +287,8 @@ void Director::drawScene()
//clear draw stats
_renderer->clearDrawStats();
Camera* defaultCamera = nullptr;
const auto& cameras = _runningScene->_cameras;
//draw with camera
for (size_t i = 0; i < cameras.size(); i++)
{
Camera::_visitingCamera = cameras[i];
if (Camera::_visitingCamera->getCameraFlag() == CameraFlag::DEFAULT)
{
defaultCamera = Camera::_visitingCamera;
continue;
}
pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
//visit the scene
_runningScene->visit(_renderer, Mat4::IDENTITY, 0);
_renderer->render();
popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
}
//draw with default camera
if (defaultCamera)
{
Camera::_visitingCamera = defaultCamera;
pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
//visit the scene
_runningScene->visit(_renderer, Mat4::IDENTITY, 0);
_renderer->render();
popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
}
Camera::_visitingCamera = nullptr;
//render the scene
_runningScene->render(_renderer);
_eventDispatcher->dispatchEvent(_eventAfterVisit);
}

View File

@ -28,13 +28,13 @@ THE SOFTWARE.
#include "base/ccMacros.h"
#include "base/CCScriptSupport.h"
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
#include <algorithm> // std::find
#endif
NS_CC_BEGIN
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
static void trackRef(Ref* ref);
static void untrackRef(Ref* ref);
#endif
@ -49,7 +49,7 @@ Ref::Ref()
_scriptObject = nullptr;
#endif
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
trackRef(this);
#endif
}
@ -73,7 +73,7 @@ Ref::~Ref()
#endif
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
if (_referenceCount != 0)
untrackRef(this);
#endif
@ -127,7 +127,7 @@ void Ref::release()
}
#endif
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
untrackRef(this);
#endif
delete this;
@ -145,7 +145,7 @@ unsigned int Ref::getReferenceCount() const
return _referenceCount;
}
#if CC_USE_MEM_LEAK_DETECTION
#if CC_REF_LEAK_DETECTION
static std::list<Ref*> __refAllocationList;

View File

@ -29,7 +29,7 @@ THE SOFTWARE.
#include "platform/CCPlatformMacros.h"
#include "base/ccConfig.h"
#define CC_USE_MEM_LEAK_DETECTION 0
#define CC_REF_LEAK_DETECTION 0
NS_CC_BEGIN

View File

@ -73,7 +73,7 @@ void ActionManagerEx::initWithDictionary(const char* jsonName,const rapidjson::V
action->initWithDictionary(actionDic,root);
actionList.pushBack(action);
}
_actionDic.insert(std::pair<std::string, cocos2d::Vector<ActionObject*>>(fileName, actionList));
_actionDic[fileName] = actionList;
}
void ActionManagerEx::initWithBinary(const char* file,
@ -108,7 +108,7 @@ void ActionManagerEx::initWithDictionary(const char* jsonName,const rapidjson::V
actionList.pushBack(action);
}
}
_actionDic.insert(std::pair<std::string, cocos2d::Vector<ActionObject*>>(fileName, actionList));
_actionDic[fileName] = actionList;
}

View File

@ -352,6 +352,11 @@ const Vec2& Armature::getAnchorPointInPoints() const
return _realAnchorPointInPoints;
}
const Vec2& Armature::getOffsetPoints() const
{
return _offsetPoint;
}
void Armature::setAnimation(ArmatureAnimation *animation)
{
_animation = animation;

View File

@ -184,6 +184,7 @@ public:
virtual void updateOffsetPoint();
virtual void setAnchorPoint(const cocos2d::Vec2& point) override;
virtual const cocos2d::Vec2& getAnchorPointInPoints() const override;
virtual const cocos2d::Vec2& getOffsetPoints() const;
virtual void setAnimation(ArmatureAnimation *animation);
virtual ArmatureAnimation *getAnimation() const;

View File

@ -210,53 +210,53 @@ namespace cocostudio
int ecb;
if (dynamic_cast<ui::PageView*>(widget)) {
cr = DICTOOL->getIntValue_json(options, "bgColorR",150);
cg = DICTOOL->getIntValue_json(options, "bgColorG",150);
cb = DICTOOL->getIntValue_json(options, "bgColorB",100);
cr = DICTOOL->getIntValue_json(options, P_BgColorR,150);
cg = DICTOOL->getIntValue_json(options, P_BgColorG,150);
cb = DICTOOL->getIntValue_json(options, P_BgColorB,100);
scr = DICTOOL->getIntValue_json(options, "bgStartColorR",255);
scg = DICTOOL->getIntValue_json(options, "bgStartColorG",255);
scb = DICTOOL->getIntValue_json(options, "bgStartColorB",255);
scr = DICTOOL->getIntValue_json(options, P_BgStartColorR,255);
scg = DICTOOL->getIntValue_json(options, P_BgStartColorG,255);
scb = DICTOOL->getIntValue_json(options, P_BgStartColorB,255);
ecr = DICTOOL->getIntValue_json(options, "bgEndColorR",255);
ecg = DICTOOL->getIntValue_json(options, "bgEndColorG",150);
ecb = DICTOOL->getIntValue_json(options, "bgEndColorB",100);
ecr = DICTOOL->getIntValue_json(options, P_BgEndColorR,255);
ecg = DICTOOL->getIntValue_json(options, P_BgEndColorG,150);
ecb = DICTOOL->getIntValue_json(options, P_BgEndColorB,100);
}else if(dynamic_cast<ui::ListView*>(widget)){
cr = DICTOOL->getIntValue_json(options, "bgColorR",150);
cg = DICTOOL->getIntValue_json(options, "bgColorG",150);
cb = DICTOOL->getIntValue_json(options, "bgColorB",255);
cr = DICTOOL->getIntValue_json(options, P_BgColorR,150);
cg = DICTOOL->getIntValue_json(options, P_BgColorG,150);
cb = DICTOOL->getIntValue_json(options, P_BgColorB,255);
scr = DICTOOL->getIntValue_json(options, "bgStartColorR",255);
scg = DICTOOL->getIntValue_json(options, "bgStartColorG",255);
scb = DICTOOL->getIntValue_json(options, "bgStartColorB",255);
scr = DICTOOL->getIntValue_json(options, P_BgStartColorR,255);
scg = DICTOOL->getIntValue_json(options, P_BgStartColorG,255);
scb = DICTOOL->getIntValue_json(options, P_BgStartColorB,255);
ecr = DICTOOL->getIntValue_json(options, "bgEndColorR",150);
ecg = DICTOOL->getIntValue_json(options, "bgEndColorG",150);
ecb = DICTOOL->getIntValue_json(options, "bgEndColorB",255);
ecr = DICTOOL->getIntValue_json(options, P_BgEndColorR,150);
ecg = DICTOOL->getIntValue_json(options, P_BgEndColorG,150);
ecb = DICTOOL->getIntValue_json(options, P_BgEndColorB,255);
}else if(dynamic_cast<ui::ScrollView*>(widget)){
cr = DICTOOL->getIntValue_json(options, "bgColorR",255);
cg = DICTOOL->getIntValue_json(options, "bgColorG",150);
cb = DICTOOL->getIntValue_json(options, "bgColorB",100);
cr = DICTOOL->getIntValue_json(options, P_BgColorR,255);
cg = DICTOOL->getIntValue_json(options, P_BgColorG,150);
cb = DICTOOL->getIntValue_json(options, P_BgColorB,100);
scr = DICTOOL->getIntValue_json(options, "bgStartColorR",255);
scg = DICTOOL->getIntValue_json(options, "bgStartColorG",255);
scb = DICTOOL->getIntValue_json(options, "bgStartColorB",255);
scr = DICTOOL->getIntValue_json(options, P_BgStartColorR,255);
scg = DICTOOL->getIntValue_json(options, P_BgStartColorG,255);
scb = DICTOOL->getIntValue_json(options, P_BgStartColorB,255);
ecr = DICTOOL->getIntValue_json(options, "bgEndColorR",255);
ecg = DICTOOL->getIntValue_json(options, "bgEndColorG",150);
ecb = DICTOOL->getIntValue_json(options, "bgEndColorB",100);
ecr = DICTOOL->getIntValue_json(options, P_BgEndColorR,255);
ecg = DICTOOL->getIntValue_json(options, P_BgEndColorG,150);
ecb = DICTOOL->getIntValue_json(options, P_BgEndColorB,100);
}else{
cr = DICTOOL->getIntValue_json(options, "bgColorR",150);
cg = DICTOOL->getIntValue_json(options, "bgColorG",200);
cb = DICTOOL->getIntValue_json(options, "bgColorB",255);
cr = DICTOOL->getIntValue_json(options, P_BgColorR,150);
cg = DICTOOL->getIntValue_json(options, P_BgColorG,200);
cb = DICTOOL->getIntValue_json(options, P_BgColorB,255);
scr = DICTOOL->getIntValue_json(options, "bgStartColorR",255);
scg = DICTOOL->getIntValue_json(options, "bgStartColorG",255);
scb = DICTOOL->getIntValue_json(options, "bgStartColorB",255);
scr = DICTOOL->getIntValue_json(options, P_BgStartColorR,255);
scg = DICTOOL->getIntValue_json(options, P_BgStartColorG,255);
scb = DICTOOL->getIntValue_json(options, P_BgStartColorB,255);
ecr = DICTOOL->getIntValue_json(options, "bgEndColorR",150);
ecg = DICTOOL->getIntValue_json(options, "bgEndColorG",200);
ecb = DICTOOL->getIntValue_json(options, "bgEndColorB",255);
ecr = DICTOOL->getIntValue_json(options, P_BgEndColorR,150);
ecg = DICTOOL->getIntValue_json(options, P_BgEndColorG,200);
ecb = DICTOOL->getIntValue_json(options, P_BgEndColorB,255);
}
float bgcv1 = DICTOOL->getFloatValue_json(options, P_VectorX);
@ -295,7 +295,7 @@ namespace cocostudio
int bgimgcb = DICTOOL->getIntValue_json(options, P_ColorB,255);
panel->setBackGroundImageColor(Color3B(bgimgcr, bgimgcg, bgimgcb));
int bgimgopacity = DICTOOL->getIntValue_json(options, "opacity",255);
int bgimgopacity = DICTOOL->getIntValue_json(options, P_Opacity, 255);
panel->setBackGroundImageOpacity(bgimgopacity);

View File

@ -21,12 +21,62 @@ This file was modified to fit the cocos2d-x project
#include "MathUtil.h"
#include "base/ccMacros.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <cpu-features.h>
#endif
//#define USE_NEON32 : neon 32 code will be used
//#define USE_NEON64 : neon 64 code will be used
//#define INCLUDE_NEON32 : neon 32 code included
//#define INCLUDE_NEON64 : neon 64 code included
//#define USE_SSE : SSE code used
//#define INCLUDE_SSE : SSE code included
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#if defined (__arm64__)
#define USE_NEON64
#define INCLUDE_NEON64
#elif defined (__ARM_NEON__)
#define USE_NEON32
#define INCLUDE_NEON32
#else
#endif
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#if defined (__arm64__)
#define INCLUDE_NEON64
#elif defined (__ARM_NEON__)
#define INCLUDE_NEON32
#else
#endif
#else
#endif
#if defined (__SSE__)
#define USE_SSE
#define INCLUDE_SSE
#endif
#ifdef INCLUDE_NEON32
#include "MathUtilNeon.inl"
#endif
#ifdef INCLUDE_NEON64
#include "MathUtilNeon64.inl"
#endif
#ifdef INCLUDE_SSE
#include "MathUtilSSE.inl"
#endif
#include "MathUtil.inl"
NS_CC_MATH_BEGIN
void MathUtil::smooth(float* x, float target, float elapsedTime, float responseTime)
{
GP_ASSERT(x);
if (elapsedTime > 0)
{
*x += (target - *x) * elapsedTime / (elapsedTime + responseTime);
@ -44,4 +94,179 @@ void MathUtil::smooth(float* x, float target, float elapsedTime, float riseTime,
}
}
bool MathUtil::isNeon32Enabled()
{
#ifdef USE_NEON32
return true;
#elif (defined (INCLUDE_NEON32) && (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) )
class AnrdoidNeonChecker
{
public:
AnrdoidNeonChecker()
{
if (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0)
_isNeonEnabled = true;
else
_isNeonEnabled = false;
}
bool isNeonEnabled() const { return _isNeonEnabled; }
private:
bool _isNeonEnabled;
};
static AnrdoidNeonChecker checker;
return checker.isNeonEnabled();
#else
return false;
#endif
}
bool MathUtil::isNeon64Enabled()
{
#ifdef USE_NEON64
return true;
#else
return false;
#endif
}
void MathUtil::addMatrix(const float* m, float scalar, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::addMatrix(m, scalar, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::addMatrix(m, scalar, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::addMatrix(m, scalar, dst);
else MathUtilC::addMatrix(m, scalar, dst);
#else
MathUtilC::addMatrix(m, scalar, dst);
#endif
}
void MathUtil::addMatrix(const float* m1, const float* m2, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::addMatrix(m1, m2, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::addMatrix(m1, m2, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::addMatrix(m1, m2, dst);
else MathUtilC::addMatrix(m1, m2, dst);
#else
MathUtilC::addMatrix(m1, m2, dst);
#endif
}
void MathUtil::subtractMatrix(const float* m1, const float* m2, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::subtractMatrix(m1, m2, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::subtractMatrix(m1, m2, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::subtractMatrix(m1, m2, dst);
else MathUtilC::subtractMatrix(m1, m2, dst);
#else
MathUtilC::subtractMatrix(m1, m2, dst);
#endif
}
void MathUtil::multiplyMatrix(const float* m, float scalar, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::multiplyMatrix(m, scalar, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::multiplyMatrix(m, scalar, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::multiplyMatrix(m, scalar, dst);
else MathUtilC::multiplyMatrix(m, scalar, dst);
#else
MathUtilC::multiplyMatrix(m, scalar, dst);
#endif
}
void MathUtil::multiplyMatrix(const float* m1, const float* m2, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::multiplyMatrix(m1, m2, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::multiplyMatrix(m1, m2, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::multiplyMatrix(m1, m2, dst);
else MathUtilC::multiplyMatrix(m1, m2, dst);
#else
MathUtilC::multiplyMatrix(m1, m2, dst);
#endif
}
void MathUtil::negateMatrix(const float* m, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::negateMatrix(m, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::negateMatrix(m, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::negateMatrix(m, dst);
else MathUtilC::negateMatrix(m, dst);
#else
MathUtilC::negateMatrix(m, dst);
#endif
}
void MathUtil::transposeMatrix(const float* m, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::transposeMatrix(m, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::transposeMatrix(m, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::transposeMatrix(m, dst);
else MathUtilC::transposeMatrix(m, dst);
#else
MathUtilC::transposeMatrix(m, dst);
#endif
}
void MathUtil::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::transformVec4(m, x, y, z, w, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::transformVec4(m, x, y, z, w, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::transformVec4(m, x, y, z, w, dst);
else MathUtilC::transformVec4(m, x, y, z, w, dst);
#else
MathUtilC::transformVec4(m, x, y, z, w, dst);
#endif
}
void MathUtil::transformVec4(const float* m, const float* v, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::transformVec4(m, v, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::transformVec4(m, v, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::transformVec4(m, v, dst);
else MathUtilC::transformVec4(m, v, dst);
#else
MathUtilC::transformVec4(m, v, dst);
#endif
}
void MathUtil::crossVec3(const float* v1, const float* v2, float* dst)
{
#ifdef USE_NEON32
MathUtilNeon::crossVec3(v1, v2, dst);
#elif defined (USE_NEON64)
MathUtilNeon64::crossVec3(v1, v2, dst);
#elif defined (INCLUDE_NEON32)
if(isNeon32Enabled()) MathUtilNeon::crossVec3(v1, v2, dst);
else MathUtilC::crossVec3(v1, v2, dst);
#else
MathUtilC::crossVec3(v1, v2, dst);
#endif
}
NS_CC_MATH_END

View File

@ -69,59 +69,52 @@ public:
* @param fallTime response time for falling slope (in the same units as elapsedTime).
*/
static void smooth(float* x, float target, float elapsedTime, float riseTime, float fallTime);
private:
//Indicates that if neon is enabled
static bool isNeon32Enabled();
static bool isNeon64Enabled();
private:
#ifdef __SSE__
inline static void addMatrix(const __m128 m[4], float scalar, __m128 dst[4]);
static void addMatrix(const __m128 m[4], float scalar, __m128 dst[4]);
inline static void addMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
static void addMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
inline static void subtractMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
static void subtractMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
inline static void multiplyMatrix(const __m128 m[4], float scalar, __m128 dst[4]);
static void multiplyMatrix(const __m128 m[4], float scalar, __m128 dst[4]);
inline static void multiplyMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
static void multiplyMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4]);
inline static void negateMatrix(const __m128 m[4], __m128 dst[4]);
static void negateMatrix(const __m128 m[4], __m128 dst[4]);
inline static void transposeMatrix(const __m128 m[4], __m128 dst[4]);
static void transposeMatrix(const __m128 m[4], __m128 dst[4]);
inline static void transformVec4(const __m128 m[4], const __m128& v, __m128& dst);
static void transformVec4(const __m128 m[4], const __m128& v, __m128& dst);
#endif
inline static void addMatrix(const float* m, float scalar, float* dst);
static void addMatrix(const float* m, float scalar, float* dst);
inline static void addMatrix(const float* m1, const float* m2, float* dst);
static void addMatrix(const float* m1, const float* m2, float* dst);
inline static void subtractMatrix(const float* m1, const float* m2, float* dst);
static void subtractMatrix(const float* m1, const float* m2, float* dst);
inline static void multiplyMatrix(const float* m, float scalar, float* dst);
static void multiplyMatrix(const float* m, float scalar, float* dst);
inline static void multiplyMatrix(const float* m1, const float* m2, float* dst);
static void multiplyMatrix(const float* m1, const float* m2, float* dst);
inline static void negateMatrix(const float* m, float* dst);
static void negateMatrix(const float* m, float* dst);
inline static void transposeMatrix(const float* m, float* dst);
static void transposeMatrix(const float* m, float* dst);
inline static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);
static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);
inline static void transformVec4(const float* m, const float* v, float* dst);
static void transformVec4(const float* m, const float* v, float* dst);
inline static void crossVec3(const float* v1, const float* v2, float* dst);
static void crossVec3(const float* v1, const float* v2, float* dst);
MathUtil();
};
NS_CC_MATH_END
#define MATRIX_SIZE ( sizeof(float) * 16)
#ifdef USE_NEON
#include "MathUtilNeon.inl"
#else
#include "MathUtil.inl"
#if defined(__SSE__)
#include "MathUtilSSE.inl"
#endif
#endif
#endif

View File

@ -20,7 +20,31 @@
NS_CC_MATH_BEGIN
inline void MathUtil::addMatrix(const float* m, float scalar, float* dst)
class MathUtilC
{
public:
inline static void addMatrix(const float* m, float scalar, float* dst);
inline static void addMatrix(const float* m1, const float* m2, float* dst);
inline static void subtractMatrix(const float* m1, const float* m2, float* dst);
inline static void multiplyMatrix(const float* m, float scalar, float* dst);
inline static void multiplyMatrix(const float* m1, const float* m2, float* dst);
inline static void negateMatrix(const float* m, float* dst);
inline static void transposeMatrix(const float* m, float* dst);
inline static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);
inline static void transformVec4(const float* m, const float* v, float* dst);
inline static void crossVec3(const float* v1, const float* v2, float* dst);
};
inline void MathUtilC::addMatrix(const float* m, float scalar, float* dst)
{
dst[0] = m[0] + scalar;
dst[1] = m[1] + scalar;
@ -40,7 +64,7 @@ inline void MathUtil::addMatrix(const float* m, float scalar, float* dst)
dst[15] = m[15] + scalar;
}
inline void MathUtil::addMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilC::addMatrix(const float* m1, const float* m2, float* dst)
{
dst[0] = m1[0] + m2[0];
dst[1] = m1[1] + m2[1];
@ -60,7 +84,7 @@ inline void MathUtil::addMatrix(const float* m1, const float* m2, float* dst)
dst[15] = m1[15] + m2[15];
}
inline void MathUtil::subtractMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilC::subtractMatrix(const float* m1, const float* m2, float* dst)
{
dst[0] = m1[0] - m2[0];
dst[1] = m1[1] - m2[1];
@ -80,7 +104,7 @@ inline void MathUtil::subtractMatrix(const float* m1, const float* m2, float* ds
dst[15] = m1[15] - m2[15];
}
inline void MathUtil::multiplyMatrix(const float* m, float scalar, float* dst)
inline void MathUtilC::multiplyMatrix(const float* m, float scalar, float* dst)
{
dst[0] = m[0] * scalar;
dst[1] = m[1] * scalar;
@ -100,35 +124,35 @@ inline void MathUtil::multiplyMatrix(const float* m, float scalar, float* dst)
dst[15] = m[15] * scalar;
}
inline void MathUtil::multiplyMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilC::multiplyMatrix(const float* m1, const float* m2, float* dst)
{
// Support the case where m1 or m2 is the same array as dst.
float product[16];
product[0] = m1[0] * m2[0] + m1[4] * m2[1] + m1[8] * m2[2] + m1[12] * m2[3];
product[1] = m1[1] * m2[0] + m1[5] * m2[1] + m1[9] * m2[2] + m1[13] * m2[3];
product[2] = m1[2] * m2[0] + m1[6] * m2[1] + m1[10] * m2[2] + m1[14] * m2[3];
product[3] = m1[3] * m2[0] + m1[7] * m2[1] + m1[11] * m2[2] + m1[15] * m2[3];
product[4] = m1[0] * m2[4] + m1[4] * m2[5] + m1[8] * m2[6] + m1[12] * m2[7];
product[5] = m1[1] * m2[4] + m1[5] * m2[5] + m1[9] * m2[6] + m1[13] * m2[7];
product[6] = m1[2] * m2[4] + m1[6] * m2[5] + m1[10] * m2[6] + m1[14] * m2[7];
product[7] = m1[3] * m2[4] + m1[7] * m2[5] + m1[11] * m2[6] + m1[15] * m2[7];
product[8] = m1[0] * m2[8] + m1[4] * m2[9] + m1[8] * m2[10] + m1[12] * m2[11];
product[9] = m1[1] * m2[8] + m1[5] * m2[9] + m1[9] * m2[10] + m1[13] * m2[11];
product[10] = m1[2] * m2[8] + m1[6] * m2[9] + m1[10] * m2[10] + m1[14] * m2[11];
product[11] = m1[3] * m2[8] + m1[7] * m2[9] + m1[11] * m2[10] + m1[15] * m2[11];
product[12] = m1[0] * m2[12] + m1[4] * m2[13] + m1[8] * m2[14] + m1[12] * m2[15];
product[13] = m1[1] * m2[12] + m1[5] * m2[13] + m1[9] * m2[14] + m1[13] * m2[15];
product[14] = m1[2] * m2[12] + m1[6] * m2[13] + m1[10] * m2[14] + m1[14] * m2[15];
product[15] = m1[3] * m2[12] + m1[7] * m2[13] + m1[11] * m2[14] + m1[15] * m2[15];
memcpy(dst, product, MATRIX_SIZE);
}
inline void MathUtil::negateMatrix(const float* m, float* dst)
inline void MathUtilC::negateMatrix(const float* m, float* dst)
{
dst[0] = -m[0];
dst[1] = -m[1];
@ -148,7 +172,7 @@ inline void MathUtil::negateMatrix(const float* m, float* dst)
dst[15] = -m[15];
}
inline void MathUtil::transposeMatrix(const float* m, float* dst)
inline void MathUtilC::transposeMatrix(const float* m, float* dst)
{
float t[16] = {
m[0], m[4], m[8], m[12],
@ -159,33 +183,33 @@ inline void MathUtil::transposeMatrix(const float* m, float* dst)
memcpy(dst, t, MATRIX_SIZE);
}
inline void MathUtil::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
inline void MathUtilC::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
{
dst[0] = x * m[0] + y * m[4] + z * m[8] + w * m[12];
dst[1] = x * m[1] + y * m[5] + z * m[9] + w * m[13];
dst[2] = x * m[2] + y * m[6] + z * m[10] + w * m[14];
}
inline void MathUtil::transformVec4(const float* m, const float* v, float* dst)
inline void MathUtilC::transformVec4(const float* m, const float* v, float* dst)
{
// Handle case where v == dst.
float x = v[0] * m[0] + v[1] * m[4] + v[2] * m[8] + v[3] * m[12];
float y = v[0] * m[1] + v[1] * m[5] + v[2] * m[9] + v[3] * m[13];
float z = v[0] * m[2] + v[1] * m[6] + v[2] * m[10] + v[3] * m[14];
float w = v[0] * m[3] + v[1] * m[7] + v[2] * m[11] + v[3] * m[15];
dst[0] = x;
dst[1] = y;
dst[2] = z;
dst[3] = w;
}
inline void MathUtil::crossVec3(const float* v1, const float* v2, float* dst)
inline void MathUtilC::crossVec3(const float* v1, const float* v2, float* dst)
{
float x = (v1[1] * v2[2]) - (v1[2] * v2[1]);
float y = (v1[2] * v2[0]) - (v1[0] * v2[2]);
float z = (v1[0] * v2[1]) - (v1[1] * v2[0]);
dst[0] = x;
dst[1] = y;
dst[2] = z;

View File

@ -17,232 +17,255 @@
This file was modified to fit the cocos2d-x project
*/
NS_CC_MATH_BEGIN
inline void MathUtil::addMatrix(const float* m, float scalar, float* dst)
class MathUtilNeon
{
public:
inline static void addMatrix(const float* m, float scalar, float* dst);
inline static void addMatrix(const float* m1, const float* m2, float* dst);
inline static void subtractMatrix(const float* m1, const float* m2, float* dst);
inline static void multiplyMatrix(const float* m, float scalar, float* dst);
inline static void multiplyMatrix(const float* m1, const float* m2, float* dst);
inline static void negateMatrix(const float* m, float* dst);
inline static void transposeMatrix(const float* m, float* dst);
inline static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);
inline static void transformVec4(const float* m, const float* v, float* dst);
inline static void crossVec3(const float* v1, const float* v2, float* dst);
};
inline void MathUtilNeon::addMatrix(const float* m, float scalar, float* dst)
{
asm volatile(
"vld1.32 {q0, q1}, [%1]! \n\t" // M[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M[m8-m15]
"vld1.32 {d8[0]}, [%2] \n\t" // s
"vmov.f32 s17, s16 \n\t" // s
"vmov.f32 s18, s16 \n\t" // s
"vmov.f32 s19, s16 \n\t" // s
"vadd.f32 q8, q0, q4 \n\t" // DST->M[m0-m3] = M[m0-m3] + s
"vadd.f32 q9, q1, q4 \n\t" // DST->M[m4-m7] = M[m4-m7] + s
"vadd.f32 q10, q2, q4 \n\t" // DST->M[m8-m11] = M[m8-m11] + s
"vadd.f32 q11, q3, q4 \n\t" // DST->M[m12-m15] = M[m12-m15] + s
"vst1.32 {q8, q9}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q10, q11}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m), "r"(&scalar)
: "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "memory"
);
"vld1.32 {q0, q1}, [%1]! \n\t" // M[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M[m8-m15]
"vld1.32 {d8[0]}, [%2] \n\t" // s
"vmov.f32 s17, s16 \n\t" // s
"vmov.f32 s18, s16 \n\t" // s
"vmov.f32 s19, s16 \n\t" // s
"vadd.f32 q8, q0, q4 \n\t" // DST->M[m0-m3] = M[m0-m3] + s
"vadd.f32 q9, q1, q4 \n\t" // DST->M[m4-m7] = M[m4-m7] + s
"vadd.f32 q10, q2, q4 \n\t" // DST->M[m8-m11] = M[m8-m11] + s
"vadd.f32 q11, q3, q4 \n\t" // DST->M[m12-m15] = M[m12-m15] + s
"vst1.32 {q8, q9}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q10, q11}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m), "r"(&scalar)
: "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "memory"
);
}
inline void MathUtil::addMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilNeon::addMatrix(const float* m1, const float* m2, float* dst)
{
asm volatile(
"vld1.32 {q0, q1}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {q8, q9}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {q10, q11}, [%2] \n\t" // M2[m8-m15]
"vadd.f32 q12, q0, q8 \n\t" // DST->M[m0-m3] = M1[m0-m3] + M2[m0-m3]
"vadd.f32 q13, q1, q9 \n\t" // DST->M[m4-m7] = M1[m4-m7] + M2[m4-m7]
"vadd.f32 q14, q2, q10 \n\t" // DST->M[m8-m11] = M1[m8-m11] + M2[m8-m11]
"vadd.f32 q15, q3, q11 \n\t" // DST->M[m12-m15] = M1[m12-m15] + M2[m12-m15]
"vst1.32 {q12, q13}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q14, q15}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m1), "r"(m2)
: "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", "memory"
);
"vld1.32 {q0, q1}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {q8, q9}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {q10, q11}, [%2] \n\t" // M2[m8-m15]
"vadd.f32 q12, q0, q8 \n\t" // DST->M[m0-m3] = M1[m0-m3] + M2[m0-m3]
"vadd.f32 q13, q1, q9 \n\t" // DST->M[m4-m7] = M1[m4-m7] + M2[m4-m7]
"vadd.f32 q14, q2, q10 \n\t" // DST->M[m8-m11] = M1[m8-m11] + M2[m8-m11]
"vadd.f32 q15, q3, q11 \n\t" // DST->M[m12-m15] = M1[m12-m15] + M2[m12-m15]
"vst1.32 {q12, q13}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q14, q15}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m1), "r"(m2)
: "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", "memory"
);
}
inline void MathUtil::subtractMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilNeon::subtractMatrix(const float* m1, const float* m2, float* dst)
{
asm volatile(
"vld1.32 {q0, q1}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {q8, q9}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {q10, q11}, [%2] \n\t" // M2[m8-m15]
"vsub.f32 q12, q0, q8 \n\t" // DST->M[m0-m3] = M1[m0-m3] - M2[m0-m3]
"vsub.f32 q13, q1, q9 \n\t" // DST->M[m4-m7] = M1[m4-m7] - M2[m4-m7]
"vsub.f32 q14, q2, q10 \n\t" // DST->M[m8-m11] = M1[m8-m11] - M2[m8-m11]
"vsub.f32 q15, q3, q11 \n\t" // DST->M[m12-m15] = M1[m12-m15] - M2[m12-m15]
"vst1.32 {q12, q13}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q14, q15}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m1), "r"(m2)
: "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", "memory"
);
"vld1.32 {q0, q1}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {q2, q3}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {q8, q9}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {q10, q11}, [%2] \n\t" // M2[m8-m15]
"vsub.f32 q12, q0, q8 \n\t" // DST->M[m0-m3] = M1[m0-m3] - M2[m0-m3]
"vsub.f32 q13, q1, q9 \n\t" // DST->M[m4-m7] = M1[m4-m7] - M2[m4-m7]
"vsub.f32 q14, q2, q10 \n\t" // DST->M[m8-m11] = M1[m8-m11] - M2[m8-m11]
"vsub.f32 q15, q3, q11 \n\t" // DST->M[m12-m15] = M1[m12-m15] - M2[m12-m15]
"vst1.32 {q12, q13}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q14, q15}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m1), "r"(m2)
: "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", "memory"
);
}
inline void MathUtil::multiplyMatrix(const float* m, float scalar, float* dst)
inline void MathUtilNeon::multiplyMatrix(const float* m, float scalar, float* dst)
{
asm volatile(
"vld1.32 {d0[0]}, [%2] \n\t" // M[m0-m7]
"vld1.32 {q4-q5}, [%1]! \n\t" // M[m8-m15]
"vld1.32 {q6-q7}, [%1] \n\t" // s
"vmul.f32 q8, q4, d0[0] \n\t" // DST->M[m0-m3] = M[m0-m3] * s
"vmul.f32 q9, q5, d0[0] \n\t" // DST->M[m4-m7] = M[m4-m7] * s
"vmul.f32 q10, q6, d0[0] \n\t" // DST->M[m8-m11] = M[m8-m11] * s
"vmul.f32 q11, q7, d0[0] \n\t" // DST->M[m12-m15] = M[m12-m15] * s
"vst1.32 {q8-q9}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q10-q11}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m), "r"(&scalar)
: "q0", "q4", "q5", "q6", "q7", "q8", "q9", "q10", "q11", "memory"
);
"vld1.32 {d0[0]}, [%2] \n\t" // M[m0-m7]
"vld1.32 {q4-q5}, [%1]! \n\t" // M[m8-m15]
"vld1.32 {q6-q7}, [%1] \n\t" // s
"vmul.f32 q8, q4, d0[0] \n\t" // DST->M[m0-m3] = M[m0-m3] * s
"vmul.f32 q9, q5, d0[0] \n\t" // DST->M[m4-m7] = M[m4-m7] * s
"vmul.f32 q10, q6, d0[0] \n\t" // DST->M[m8-m11] = M[m8-m11] * s
"vmul.f32 q11, q7, d0[0] \n\t" // DST->M[m12-m15] = M[m12-m15] * s
"vst1.32 {q8-q9}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q10-q11}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m), "r"(&scalar)
: "q0", "q4", "q5", "q6", "q7", "q8", "q9", "q10", "q11", "memory"
);
}
inline void MathUtil::multiplyMatrix(const float* m1, const float* m2, float* dst)
inline void MathUtilNeon::multiplyMatrix(const float* m1, const float* m2, float* dst)
{
asm volatile(
"vld1.32 {d16 - d19}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {d20 - d23}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {d0 - d3}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {d4 - d7}, [%2] \n\t" // M2[m8-m15]
"vmul.f32 q12, q8, d0[0] \n\t" // DST->M[m0-m3] = M1[m0-m3] * M2[m0]
"vmul.f32 q13, q8, d2[0] \n\t" // DST->M[m4-m7] = M1[m4-m7] * M2[m4]
"vmul.f32 q14, q8, d4[0] \n\t" // DST->M[m8-m11] = M1[m8-m11] * M2[m8]
"vmul.f32 q15, q8, d6[0] \n\t" // DST->M[m12-m15] = M1[m12-m15] * M2[m12]
"vmla.f32 q12, q9, d0[1] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m1]
"vmla.f32 q13, q9, d2[1] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m5]
"vmla.f32 q14, q9, d4[1] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m9]
"vmla.f32 q15, q9, d6[1] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m13]
"vmla.f32 q12, q10, d1[0] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m2]
"vmla.f32 q13, q10, d3[0] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m6]
"vmla.f32 q14, q10, d5[0] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m10]
"vmla.f32 q15, q10, d7[0] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m14]
"vmla.f32 q12, q11, d1[1] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m3]
"vmla.f32 q13, q11, d3[1] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m7]
"vmla.f32 q14, q11, d5[1] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m11]
"vmla.f32 q15, q11, d7[1] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m15]
"vst1.32 {d24 - d27}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {d28 - d31}, [%0] \n\t" // DST->M[m8-m15]
: // output
: "r"(dst), "r"(m1), "r"(m2) // input - note *value* of pointer doesn't change.
: "memory", "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
);
"vld1.32 {d16 - d19}, [%1]! \n\t" // M1[m0-m7]
"vld1.32 {d20 - d23}, [%1] \n\t" // M1[m8-m15]
"vld1.32 {d0 - d3}, [%2]! \n\t" // M2[m0-m7]
"vld1.32 {d4 - d7}, [%2] \n\t" // M2[m8-m15]
"vmul.f32 q12, q8, d0[0] \n\t" // DST->M[m0-m3] = M1[m0-m3] * M2[m0]
"vmul.f32 q13, q8, d2[0] \n\t" // DST->M[m4-m7] = M1[m4-m7] * M2[m4]
"vmul.f32 q14, q8, d4[0] \n\t" // DST->M[m8-m11] = M1[m8-m11] * M2[m8]
"vmul.f32 q15, q8, d6[0] \n\t" // DST->M[m12-m15] = M1[m12-m15] * M2[m12]
"vmla.f32 q12, q9, d0[1] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m1]
"vmla.f32 q13, q9, d2[1] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m5]
"vmla.f32 q14, q9, d4[1] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m9]
"vmla.f32 q15, q9, d6[1] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m13]
"vmla.f32 q12, q10, d1[0] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m2]
"vmla.f32 q13, q10, d3[0] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m6]
"vmla.f32 q14, q10, d5[0] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m10]
"vmla.f32 q15, q10, d7[0] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m14]
"vmla.f32 q12, q11, d1[1] \n\t" // DST->M[m0-m3] += M1[m0-m3] * M2[m3]
"vmla.f32 q13, q11, d3[1] \n\t" // DST->M[m4-m7] += M1[m4-m7] * M2[m7]
"vmla.f32 q14, q11, d5[1] \n\t" // DST->M[m8-m11] += M1[m8-m11] * M2[m11]
"vmla.f32 q15, q11, d7[1] \n\t" // DST->M[m12-m15] += M1[m12-m15] * M2[m15]
"vst1.32 {d24 - d27}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {d28 - d31}, [%0] \n\t" // DST->M[m8-m15]
: // output
: "r"(dst), "r"(m1), "r"(m2) // input - note *value* of pointer doesn't change.
: "memory", "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
);
}
inline void MathUtil::negateMatrix(const float* m, float* dst)
inline void MathUtilNeon::negateMatrix(const float* m, float* dst)
{
asm volatile(
"vld1.32 {q0-q1}, [%1]! \n\t" // load m0-m7
"vld1.32 {q2-q3}, [%1] \n\t" // load m8-m15
"vneg.f32 q4, q0 \n\t" // negate m0-m3
"vneg.f32 q5, q1 \n\t" // negate m4-m7
"vneg.f32 q6, q2 \n\t" // negate m8-m15
"vneg.f32 q7, q3 \n\t" // negate m8-m15
"vst1.32 {q4-q5}, [%0]! \n\t" // store m0-m7
"vst1.32 {q6-q7}, [%0] \n\t" // store m8-m15
:
: "r"(dst), "r"(m)
: "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "memory"
);
"vld1.32 {q0-q1}, [%1]! \n\t" // load m0-m7
"vld1.32 {q2-q3}, [%1] \n\t" // load m8-m15
"vneg.f32 q4, q0 \n\t" // negate m0-m3
"vneg.f32 q5, q1 \n\t" // negate m4-m7
"vneg.f32 q6, q2 \n\t" // negate m8-m15
"vneg.f32 q7, q3 \n\t" // negate m8-m15
"vst1.32 {q4-q5}, [%0]! \n\t" // store m0-m7
"vst1.32 {q6-q7}, [%0] \n\t" // store m8-m15
:
: "r"(dst), "r"(m)
: "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "memory"
);
}
inline void MathUtil::transposeMatrix(const float* m, float* dst)
inline void MathUtilNeon::transposeMatrix(const float* m, float* dst)
{
asm volatile(
"vld4.32 {d0[0], d2[0], d4[0], d6[0]}, [%1]! \n\t" // DST->M[m0, m4, m8, m12] = M[m0-m3]
"vld4.32 {d0[1], d2[1], d4[1], d6[1]}, [%1]! \n\t" // DST->M[m1, m5, m9, m12] = M[m4-m7]
"vld4.32 {d1[0], d3[0], d5[0], d7[0]}, [%1]! \n\t" // DST->M[m2, m6, m10, m12] = M[m8-m11]
"vld4.32 {d1[1], d3[1], d5[1], d7[1]}, [%1] \n\t" // DST->M[m3, m7, m11, m12] = M[m12-m15]
"vst1.32 {q0-q1}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q2-q3}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m)
: "q0", "q1", "q2", "q3", "memory"
);
"vld4.32 {d0[0], d2[0], d4[0], d6[0]}, [%1]! \n\t" // DST->M[m0, m4, m8, m12] = M[m0-m3]
"vld4.32 {d0[1], d2[1], d4[1], d6[1]}, [%1]! \n\t" // DST->M[m1, m5, m9, m12] = M[m4-m7]
"vld4.32 {d1[0], d3[0], d5[0], d7[0]}, [%1]! \n\t" // DST->M[m2, m6, m10, m12] = M[m8-m11]
"vld4.32 {d1[1], d3[1], d5[1], d7[1]}, [%1] \n\t" // DST->M[m3, m7, m11, m12] = M[m12-m15]
"vst1.32 {q0-q1}, [%0]! \n\t" // DST->M[m0-m7]
"vst1.32 {q2-q3}, [%0] \n\t" // DST->M[m8-m15]
:
: "r"(dst), "r"(m)
: "q0", "q1", "q2", "q3", "memory"
);
}
inline void MathUtil::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
inline void MathUtilNeon::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
{
asm volatile(
"vld1.32 {d0[0]}, [%1] \n\t" // V[x]
"vld1.32 {d0[1]}, [%2] \n\t" // V[y]
"vld1.32 {d1[0]}, [%3] \n\t" // V[z]
"vld1.32 {d1[1]}, [%4] \n\t" // V[w]
"vld1.32 {d18 - d21}, [%5]! \n\t" // M[m0-m7]
"vld1.32 {d22 - d25}, [%5] \n\t" // M[m8-m15]
"vmul.f32 q13, q9, d0[0] \n\t" // DST->V = M[m0-m3] * V[x]
"vmla.f32 q13, q10, d0[1] \n\t" // DST->V += M[m4-m7] * V[y]
"vmla.f32 q13, q11, d1[0] \n\t" // DST->V += M[m8-m11] * V[z]
"vmla.f32 q13, q12, d1[1] \n\t" // DST->V += M[m12-m15] * V[w]
"vst1.32 {d26}, [%0]! \n\t" // DST->V[x, y]
"vst1.32 {d27[0]}, [%0] \n\t" // DST->V[z]
:
: "r"(dst), "r"(&x), "r"(&y), "r"(&z), "r"(&w), "r"(m)
: "q0", "q9", "q10","q11", "q12", "q13", "memory"
);
"vld1.32 {d0[0]}, [%1] \n\t" // V[x]
"vld1.32 {d0[1]}, [%2] \n\t" // V[y]
"vld1.32 {d1[0]}, [%3] \n\t" // V[z]
"vld1.32 {d1[1]}, [%4] \n\t" // V[w]
"vld1.32 {d18 - d21}, [%5]! \n\t" // M[m0-m7]
"vld1.32 {d22 - d25}, [%5] \n\t" // M[m8-m15]
"vmul.f32 q13, q9, d0[0] \n\t" // DST->V = M[m0-m3] * V[x]
"vmla.f32 q13, q10, d0[1] \n\t" // DST->V += M[m4-m7] * V[y]
"vmla.f32 q13, q11, d1[0] \n\t" // DST->V += M[m8-m11] * V[z]
"vmla.f32 q13, q12, d1[1] \n\t" // DST->V += M[m12-m15] * V[w]
"vst1.32 {d26}, [%0]! \n\t" // DST->V[x, y]
"vst1.32 {d27[0]}, [%0] \n\t" // DST->V[z]
:
: "r"(dst), "r"(&x), "r"(&y), "r"(&z), "r"(&w), "r"(m)
: "q0", "q9", "q10","q11", "q12", "q13", "memory"
);
}
inline void MathUtil::transformVec4(const float* m, const float* v, float* dst)
inline void MathUtilNeon::transformVec4(const float* m, const float* v, float* dst)
{
asm volatile
(
"vld1.32 {d0, d1}, [%1] \n\t" // V[x, y, z, w]
"vld1.32 {d18 - d21}, [%2]! \n\t" // M[m0-m7]
"vld1.32 {d22 - d25}, [%2] \n\t" // M[m8-m15]
"vmul.f32 q13, q9, d0[0] \n\t" // DST->V = M[m0-m3] * V[x]
"vmla.f32 q13, q10, d0[1] \n\t" // DST->V = M[m4-m7] * V[y]
"vmla.f32 q13, q11, d1[0] \n\t" // DST->V = M[m8-m11] * V[z]
"vmla.f32 q13, q12, d1[1] \n\t" // DST->V = M[m12-m15] * V[w]
"vst1.32 {d26, d27}, [%0] \n\t" // DST->V
:
: "r"(dst), "r"(v), "r"(m)
: "q0", "q9", "q10","q11", "q12", "q13", "memory"
);
"vld1.32 {d0, d1}, [%1] \n\t" // V[x, y, z, w]
"vld1.32 {d18 - d21}, [%2]! \n\t" // M[m0-m7]
"vld1.32 {d22 - d25}, [%2] \n\t" // M[m8-m15]
"vmul.f32 q13, q9, d0[0] \n\t" // DST->V = M[m0-m3] * V[x]
"vmla.f32 q13, q10, d0[1] \n\t" // DST->V = M[m4-m7] * V[y]
"vmla.f32 q13, q11, d1[0] \n\t" // DST->V = M[m8-m11] * V[z]
"vmla.f32 q13, q12, d1[1] \n\t" // DST->V = M[m12-m15] * V[w]
"vst1.32 {d26, d27}, [%0] \n\t" // DST->V
:
: "r"(dst), "r"(v), "r"(m)
: "q0", "q9", "q10","q11", "q12", "q13", "memory"
);
}
inline void MathUtil::crossVec3(const float* v1, const float* v2, float* dst)
inline void MathUtilNeon::crossVec3(const float* v1, const float* v2, float* dst)
{
asm volatile(
"vld1.32 {d1[1]}, [%1] \n\t" //
"vld1.32 {d0}, [%2] \n\t" //
"vmov.f32 s2, s1 \n\t" // q0 = (v1y, v1z, v1z, v1x)
"vld1.32 {d2[1]}, [%3] \n\t" //
"vld1.32 {d3}, [%4] \n\t" //
"vmov.f32 s4, s7 \n\t" // q1 = (v2z, v2x, v2y, v2z)
"vmul.f32 d4, d0, d2 \n\t" // x = v1y * v2z, y = v1z * v2x
"vmls.f32 d4, d1, d3 \n\t" // x -= v1z * v2y, y-= v1x - v2z
"vmul.f32 d5, d3, d1[1] \n\t" // z = v1x * v2y
"vmls.f32 d5, d0, d2[1] \n\t" // z-= v1y * vx
"vst1.32 {d4}, [%0]! \n\t" // V[x, y]
"vst1.32 {d5[0]}, [%0] \n\t" // V[z]
:
: "r"(dst), "r"(v1), "r"((v1+1)), "r"(v2), "r"((v2+1))
: "q0", "q1", "q2", "memory"
);
"vld1.32 {d1[1]}, [%1] \n\t" //
"vld1.32 {d0}, [%2] \n\t" //
"vmov.f32 s2, s1 \n\t" // q0 = (v1y, v1z, v1z, v1x)
"vld1.32 {d2[1]}, [%3] \n\t" //
"vld1.32 {d3}, [%4] \n\t" //
"vmov.f32 s4, s7 \n\t" // q1 = (v2z, v2x, v2y, v2z)
"vmul.f32 d4, d0, d2 \n\t" // x = v1y * v2z, y = v1z * v2x
"vmls.f32 d4, d1, d3 \n\t" // x -= v1z * v2y, y-= v1x - v2z
"vmul.f32 d5, d3, d1[1] \n\t" // z = v1x * v2y
"vmls.f32 d5, d0, d2[1] \n\t" // z-= v1y * vx
"vst1.32 {d4}, [%0]! \n\t" // V[x, y]
"vst1.32 {d5[0]}, [%0] \n\t" // V[z]
:
: "r"(dst), "r"(v1), "r"((v1+1)), "r"(v2), "r"((v2+1))
: "q0", "q1", "q2", "memory"
);
}
NS_CC_MATH_END

View File

@ -0,0 +1,218 @@
/**
Copyright 2013 BlackBerry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Original file from GamePlay3D: http://gameplay3d.org
This file was modified to fit the cocos2d-x project
*/
NS_CC_MATH_BEGIN
class MathUtilNeon64
{
public:
inline static void addMatrix(const float* m, float scalar, float* dst);
inline static void addMatrix(const float* m1, const float* m2, float* dst);
inline static void subtractMatrix(const float* m1, const float* m2, float* dst);
inline static void multiplyMatrix(const float* m, float scalar, float* dst);
inline static void multiplyMatrix(const float* m1, const float* m2, float* dst);
inline static void negateMatrix(const float* m, float* dst);
inline static void transposeMatrix(const float* m, float* dst);
inline static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);
inline static void transformVec4(const float* m, const float* v, float* dst);
inline static void crossVec3(const float* v1, const float* v2, float* dst);
};
inline void MathUtilNeon64::addMatrix(const float* m, float scalar, float* dst)
{
dst[0] = m[0] + scalar;
dst[1] = m[1] + scalar;
dst[2] = m[2] + scalar;
dst[3] = m[3] + scalar;
dst[4] = m[4] + scalar;
dst[5] = m[5] + scalar;
dst[6] = m[6] + scalar;
dst[7] = m[7] + scalar;
dst[8] = m[8] + scalar;
dst[9] = m[9] + scalar;
dst[10] = m[10] + scalar;
dst[11] = m[11] + scalar;
dst[12] = m[12] + scalar;
dst[13] = m[13] + scalar;
dst[14] = m[14] + scalar;
dst[15] = m[15] + scalar;
}
inline void MathUtilNeon64::addMatrix(const float* m1, const float* m2, float* dst)
{
dst[0] = m1[0] + m2[0];
dst[1] = m1[1] + m2[1];
dst[2] = m1[2] + m2[2];
dst[3] = m1[3] + m2[3];
dst[4] = m1[4] + m2[4];
dst[5] = m1[5] + m2[5];
dst[6] = m1[6] + m2[6];
dst[7] = m1[7] + m2[7];
dst[8] = m1[8] + m2[8];
dst[9] = m1[9] + m2[9];
dst[10] = m1[10] + m2[10];
dst[11] = m1[11] + m2[11];
dst[12] = m1[12] + m2[12];
dst[13] = m1[13] + m2[13];
dst[14] = m1[14] + m2[14];
dst[15] = m1[15] + m2[15];
}
inline void MathUtilNeon64::subtractMatrix(const float* m1, const float* m2, float* dst)
{
dst[0] = m1[0] - m2[0];
dst[1] = m1[1] - m2[1];
dst[2] = m1[2] - m2[2];
dst[3] = m1[3] - m2[3];
dst[4] = m1[4] - m2[4];
dst[5] = m1[5] - m2[5];
dst[6] = m1[6] - m2[6];
dst[7] = m1[7] - m2[7];
dst[8] = m1[8] - m2[8];
dst[9] = m1[9] - m2[9];
dst[10] = m1[10] - m2[10];
dst[11] = m1[11] - m2[11];
dst[12] = m1[12] - m2[12];
dst[13] = m1[13] - m2[13];
dst[14] = m1[14] - m2[14];
dst[15] = m1[15] - m2[15];
}
inline void MathUtilNeon64::multiplyMatrix(const float* m, float scalar, float* dst)
{
dst[0] = m[0] * scalar;
dst[1] = m[1] * scalar;
dst[2] = m[2] * scalar;
dst[3] = m[3] * scalar;
dst[4] = m[4] * scalar;
dst[5] = m[5] * scalar;
dst[6] = m[6] * scalar;
dst[7] = m[7] * scalar;
dst[8] = m[8] * scalar;
dst[9] = m[9] * scalar;
dst[10] = m[10] * scalar;
dst[11] = m[11] * scalar;
dst[12] = m[12] * scalar;
dst[13] = m[13] * scalar;
dst[14] = m[14] * scalar;
dst[15] = m[15] * scalar;
}
inline void MathUtilNeon64::multiplyMatrix(const float* m1, const float* m2, float* dst)
{
// Support the case where m1 or m2 is the same array as dst.
float product[16];
product[0] = m1[0] * m2[0] + m1[4] * m2[1] + m1[8] * m2[2] + m1[12] * m2[3];
product[1] = m1[1] * m2[0] + m1[5] * m2[1] + m1[9] * m2[2] + m1[13] * m2[3];
product[2] = m1[2] * m2[0] + m1[6] * m2[1] + m1[10] * m2[2] + m1[14] * m2[3];
product[3] = m1[3] * m2[0] + m1[7] * m2[1] + m1[11] * m2[2] + m1[15] * m2[3];
product[4] = m1[0] * m2[4] + m1[4] * m2[5] + m1[8] * m2[6] + m1[12] * m2[7];
product[5] = m1[1] * m2[4] + m1[5] * m2[5] + m1[9] * m2[6] + m1[13] * m2[7];
product[6] = m1[2] * m2[4] + m1[6] * m2[5] + m1[10] * m2[6] + m1[14] * m2[7];
product[7] = m1[3] * m2[4] + m1[7] * m2[5] + m1[11] * m2[6] + m1[15] * m2[7];
product[8] = m1[0] * m2[8] + m1[4] * m2[9] + m1[8] * m2[10] + m1[12] * m2[11];
product[9] = m1[1] * m2[8] + m1[5] * m2[9] + m1[9] * m2[10] + m1[13] * m2[11];
product[10] = m1[2] * m2[8] + m1[6] * m2[9] + m1[10] * m2[10] + m1[14] * m2[11];
product[11] = m1[3] * m2[8] + m1[7] * m2[9] + m1[11] * m2[10] + m1[15] * m2[11];
product[12] = m1[0] * m2[12] + m1[4] * m2[13] + m1[8] * m2[14] + m1[12] * m2[15];
product[13] = m1[1] * m2[12] + m1[5] * m2[13] + m1[9] * m2[14] + m1[13] * m2[15];
product[14] = m1[2] * m2[12] + m1[6] * m2[13] + m1[10] * m2[14] + m1[14] * m2[15];
product[15] = m1[3] * m2[12] + m1[7] * m2[13] + m1[11] * m2[14] + m1[15] * m2[15];
memcpy(dst, product, MATRIX_SIZE);
}
inline void MathUtilNeon64::negateMatrix(const float* m, float* dst)
{
dst[0] = -m[0];
dst[1] = -m[1];
dst[2] = -m[2];
dst[3] = -m[3];
dst[4] = -m[4];
dst[5] = -m[5];
dst[6] = -m[6];
dst[7] = -m[7];
dst[8] = -m[8];
dst[9] = -m[9];
dst[10] = -m[10];
dst[11] = -m[11];
dst[12] = -m[12];
dst[13] = -m[13];
dst[14] = -m[14];
dst[15] = -m[15];
}
inline void MathUtilNeon64::transposeMatrix(const float* m, float* dst)
{
float t[16] = {
m[0], m[4], m[8], m[12],
m[1], m[5], m[9], m[13],
m[2], m[6], m[10], m[14],
m[3], m[7], m[11], m[15]
};
memcpy(dst, t, MATRIX_SIZE);
}
inline void MathUtilNeon64::transformVec4(const float* m, float x, float y, float z, float w, float* dst)
{
dst[0] = x * m[0] + y * m[4] + z * m[8] + w * m[12];
dst[1] = x * m[1] + y * m[5] + z * m[9] + w * m[13];
dst[2] = x * m[2] + y * m[6] + z * m[10] + w * m[14];
}
inline void MathUtilNeon64::transformVec4(const float* m, const float* v, float* dst)
{
// Handle case where v == dst.
float x = v[0] * m[0] + v[1] * m[4] + v[2] * m[8] + v[3] * m[12];
float y = v[0] * m[1] + v[1] * m[5] + v[2] * m[9] + v[3] * m[13];
float z = v[0] * m[2] + v[1] * m[6] + v[2] * m[10] + v[3] * m[14];
float w = v[0] * m[3] + v[1] * m[7] + v[2] * m[11] + v[3] * m[15];
dst[0] = x;
dst[1] = y;
dst[2] = z;
dst[3] = w;
}
inline void MathUtilNeon64::crossVec3(const float* v1, const float* v2, float* dst)
{
float x = (v1[1] * v2[2]) - (v1[2] * v2[1]);
float y = (v1[2] * v2[0]) - (v1[0] * v2[2]);
float z = (v1[0] * v2[1]) - (v1[1] * v2[0]);
dst[0] = x;
dst[1] = y;
dst[2] = z;
}
NS_CC_MATH_END

View File

@ -1,6 +1,8 @@
NS_CC_MATH_BEGIN
inline void MathUtil::addMatrix(const __m128 m[4], float scalar, __m128 dst[4])
#ifdef __SSE__
void MathUtil::addMatrix(const __m128 m[4], float scalar, __m128 dst[4])
{
__m128 s = _mm_set1_ps(scalar);
dst[0] = _mm_add_ps(m[0], s);
@ -9,7 +11,7 @@ inline void MathUtil::addMatrix(const __m128 m[4], float scalar, __m128 dst[4])
dst[3] = _mm_add_ps(m[3], s);
}
inline void MathUtil::addMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
void MathUtil::addMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
{
dst[0] = _mm_add_ps(m1[0], m2[0]);
dst[1] = _mm_add_ps(m1[1], m2[1]);
@ -17,7 +19,7 @@ inline void MathUtil::addMatrix(const __m128 m1[4], const __m128 m2[4], __m128 d
dst[3] = _mm_add_ps(m1[3], m2[3]);
}
inline void MathUtil::subtractMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
void MathUtil::subtractMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
{
dst[0] = _mm_sub_ps(m1[0], m2[0]);
dst[1] = _mm_sub_ps(m1[1], m2[1]);
@ -25,7 +27,7 @@ inline void MathUtil::subtractMatrix(const __m128 m1[4], const __m128 m2[4], __m
dst[3] = _mm_sub_ps(m1[3], m2[3]);
}
inline void MathUtil::multiplyMatrix(const __m128 m[4], float scalar, __m128 dst[4])
void MathUtil::multiplyMatrix(const __m128 m[4], float scalar, __m128 dst[4])
{
__m128 s = _mm_set1_ps(scalar);
dst[0] = _mm_mul_ps(m[0], s);
@ -34,7 +36,7 @@ inline void MathUtil::multiplyMatrix(const __m128 m[4], float scalar, __m128 dst
dst[3] = _mm_mul_ps(m[3], s);
}
inline void MathUtil::multiplyMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
void MathUtil::multiplyMatrix(const __m128 m1[4], const __m128 m2[4], __m128 dst[4])
{
__m128 dst0, dst1, dst2, dst3;
{
@ -114,7 +116,7 @@ inline void MathUtil::multiplyMatrix(const __m128 m1[4], const __m128 m2[4], __m
dst[3] = dst3;
}
inline void MathUtil::negateMatrix(const __m128 m[4], __m128 dst[4])
void MathUtil::negateMatrix(const __m128 m[4], __m128 dst[4])
{
__m128 z = _mm_setzero_ps();
dst[0] = _mm_sub_ps(z, m[0]);
@ -123,7 +125,7 @@ inline void MathUtil::negateMatrix(const __m128 m[4], __m128 dst[4])
dst[3] = _mm_sub_ps(z, m[3]);
}
inline void MathUtil::transposeMatrix(const __m128 m[4], __m128 dst[4])
void MathUtil::transposeMatrix(const __m128 m[4], __m128 dst[4])
{
__m128 tmp0 = _mm_shuffle_ps(m[0], m[1], 0x44);
__m128 tmp2 = _mm_shuffle_ps(m[0], m[1], 0xEE);
@ -136,7 +138,7 @@ inline void MathUtil::transposeMatrix(const __m128 m[4], __m128 dst[4])
dst[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);
}
inline void MathUtil::transformVec4(const __m128 m[4], const __m128& v, __m128& dst)
void MathUtil::transformVec4(const __m128 m[4], const __m128& v, __m128& dst)
{
__m128 col1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));
__m128 col2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));
@ -144,9 +146,12 @@ inline void MathUtil::transformVec4(const __m128 m[4], const __m128& v, __m128&
__m128 col4 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));
dst = _mm_add_ps(
_mm_add_ps(_mm_mul_ps(m[0], col1), _mm_mul_ps(m[1], col2)),
_mm_add_ps(_mm_mul_ps(m[2], col3), _mm_mul_ps(m[3], col4))
);
_mm_add_ps(_mm_mul_ps(m[0], col1), _mm_mul_ps(m[1], col2)),
_mm_add_ps(_mm_mul_ps(m[2], col3), _mm_mul_ps(m[3], col4))
);
}
#endif
NS_CC_MATH_END

View File

@ -133,6 +133,15 @@ public:
* @lua NA
*/
virtual Platform getTargetPlatform() = 0;
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
* @js NA
* @lua NA
*/
virtual bool openURL(const std::string &url) = 0;
};
// end of platform group

View File

@ -947,23 +947,15 @@ bool FileUtils::isAbsolutePath(const std::string& path) const
bool FileUtils::isDirectoryExistInternal(const std::string& dirPath) const
{
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32) && (CC_TARGET_PLATFORM != CC_PLATFORM_WP8) && (CC_TARGET_PLATFORM != CC_PLATFORM_WINRT)
struct stat st;
if (stat(dirPath.c_str(), &st) == 0)
{
return S_ISDIR(st.st_mode);
}
return false;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
WIN32_FILE_ATTRIBUTE_DATA wfad;
if (GetFileAttributesExA(dirPath.c_str(), GetFileExInfoStandard, &wfad))
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
WIN32_FILE_ATTRIBUTE_DATA wfad;
std::wstring wdirPath(dirPath.begin(), dirPath.end());
if (GetFileAttributesEx(wdirPath.c_str(), GetFileExInfoStandard, &wfad))
{
return true;
}
return false;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
unsigned long fAttrib = GetFileAttributesA(dirPath.c_str());
if (fAttrib != INVALID_FILE_ATTRIBUTES &&
(fAttrib & FILE_ATTRIBUTE_DIRECTORY))
@ -971,7 +963,16 @@ bool FileUtils::isDirectoryExistInternal(const std::string& dirPath) const
return true;
}
return false;
#else
struct stat st;
if (stat(dirPath.c_str(), &st) == 0)
{
return S_ISDIR(st.st_mode);
}
return false;
#endif
}
bool FileUtils::isDirectoryExist(const std::string& dirPath)
@ -1040,29 +1041,12 @@ bool FileUtils::createDirectory(const std::string& path)
}
}
}
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32) && (CC_TARGET_PLATFORM != CC_PLATFORM_WP8) && (CC_TARGET_PLATFORM != CC_PLATFORM_WINRT)
DIR *dir = NULL;
// Create path recursively
subpath = "";
for (int i = 0; i < dirs.size(); ++i) {
subpath += dirs[i];
dir = opendir(subpath.c_str());
if (!dir)
{
int ret = mkdir(subpath.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
if (ret != 0 && (errno != EEXIST))
{
return false;
}
}
}
return true;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
WIN32_FILE_ATTRIBUTE_DATA wfad;
if (!(GetFileAttributesExA(path.c_str(), GetFileExInfoStandard, &wfad)))
std::wstring wpath(path.begin(), path.end());
if (!(GetFileAttributesEx(wpath.c_str(), GetFileExInfoStandard, &wfad)))
{
subpath = "";
for(int i = 0 ; i < dirs.size() ; ++i)
@ -1070,7 +1054,8 @@ bool FileUtils::createDirectory(const std::string& path)
subpath += dirs[i];
if (i > 0 && !isDirectoryExist(subpath))
{
BOOL ret = CreateDirectoryA(subpath.c_str(), NULL);
std::wstring wsubpath(subpath.begin(), subpath.end());
BOOL ret = CreateDirectory(wsubpath.c_str(), NULL);
if (!ret && ERROR_ALREADY_EXISTS != GetLastError())
{
return false;
@ -1079,8 +1064,7 @@ bool FileUtils::createDirectory(const std::string& path)
}
}
return true;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
if ((GetFileAttributesA(path.c_str())) == INVALID_FILE_ATTRIBUTES)
{
subpath = "";
@ -1098,6 +1082,24 @@ bool FileUtils::createDirectory(const std::string& path)
}
}
return true;
#else
DIR *dir = NULL;
// Create path recursively
subpath = "";
for (int i = 0; i < dirs.size(); ++i) {
subpath += dirs[i];
dir = opendir(subpath.c_str());
if (!dir)
{
int ret = mkdir(subpath.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
if (ret != 0 && (errno != EEXIST))
{
return false;
}
}
}
return true;
#endif
}
@ -1110,21 +1112,13 @@ bool FileUtils::removeDirectory(const std::string& path)
}
// Remove downloaded files
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32) && (CC_TARGET_PLATFORM != CC_PLATFORM_WP8) && (CC_TARGET_PLATFORM != CC_PLATFORM_WINRT)
std::string command = "rm -r ";
// Path may include space.
command += "\"" + path + "\"";
if (system(command.c_str()) >= 0)
return true;
else
return false;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
std::string Files = path + "*.*";
std::wstring wpath = std::wstring(path.begin(), path.end());
std::wstring files = wpath + L"*.*";
WIN32_FIND_DATA wfd;
HANDLE search = FindFirstFileEx(Files.c_str(), FindExInfoStandard, &wfd, FindExSearchNameMatch, NULL, 0);
HANDLE search = FindFirstFileEx(files.c_str(), FindExInfoStandard, &wfd, FindExSearchNameMatch, NULL, 0);
bool ret=true;
std::string Tmp;
if (search!=INVALID_HANDLE_VALUE)
{
bool find=true;
@ -1133,16 +1127,16 @@ bool FileUtils::removeDirectory(const std::string& path)
//. ..
if(wfd.cFileName[0]!='.')
{
Tmp = path + wfd.cFileName;
std::wstring temp = wpath + wfd.cFileName;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
Tmp += '/';
ret = ret && this->removeDirectory(Tmp);
temp += '/';
ret = ret && this->removeDirectory(std::string(temp.begin(), temp.end()));
}
else
{
SetFileAttributes(Tmp.c_str(), FILE_ATTRIBUTE_NORMAL);
ret = ret && DeleteFile(Tmp.c_str());
SetFileAttributes(temp.c_str(), FILE_ATTRIBUTE_NORMAL);
ret = ret && DeleteFile(temp.c_str());
}
}
find = FindNextFile(search, &wfd);
@ -1150,10 +1144,9 @@ bool FileUtils::removeDirectory(const std::string& path)
FindClose(search);
}
if (ret)
return RemoveDirectoryA(path.c_str());
return RemoveDirectory(wpath.c_str());
return false;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
std::string command = "cmd /c rd /s /q ";
// Path may include space.
command += "\"" + path + "\"";
@ -1162,14 +1155,8 @@ bool FileUtils::removeDirectory(const std::string& path)
return true;
else
return false;
#endif
}
bool FileUtils::removeFile(const std::string &path)
{
// Remove downloaded file
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32) && (CC_TARGET_PLATFORM != CC_PLATFORM_WP8) && (CC_TARGET_PLATFORM != CC_PLATFORM_WINRT)
std::string command = "rm -f ";
#else
std::string command = "rm -r ";
// Path may include space.
command += "\"" + path + "\"";
if (system(command.c_str()) >= 0)
@ -1177,14 +1164,20 @@ bool FileUtils::removeFile(const std::string &path)
else
return false;
#endif
}
bool FileUtils::removeFile(const std::string &path)
{
// Remove downloaded file
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
if (DeleteFileA(path.c_str()))
std::wstring wpath(path.begin(), path.end());
if (DeleteFile(wpath.c_str()))
{
return true;
}
return false;
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
std::string command = "cmd /c del /q ";
std::string win32path = path;
int len = win32path.length();
@ -1201,6 +1194,14 @@ bool FileUtils::removeFile(const std::string &path)
return true;
else
return false;
#else
std::string command = "rm -f ";
// Path may include space.
command += "\"" + path + "\"";
if (system(command.c_str()) >= 0)
return true;
else
return false;
#endif
}

View File

@ -176,6 +176,11 @@ Application::Platform Application::getTargetPlatform()
return Platform::OS_ANDROID;
}
bool Application::openURL(const std::string &url)
{
return openURLJNI(url.c_str());
}
void Application::applicationScreenSizeChanged(int newWidth, int newHeight) {
}

View File

@ -83,6 +83,13 @@ public:
@brief Get target platform
*/
virtual Platform getTargetPlatform();
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**
@brief This function will be called when the application screen size is changed.

View File

@ -32,9 +32,11 @@ import java.lang.Runnable;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Build;
import android.preference.PreferenceManager.OnActivityResultListener;
import android.util.DisplayMetrics;
@ -170,6 +172,18 @@ public class Cocos2dxHelper {
public static void setKeepScreenOn(boolean value) {
((Cocos2dxActivity)sActivity).setKeepScreenOn(value);
}
public static boolean openURL(String url) {
boolean ret = false;
try {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
sActivity.startActivity(i);
ret = true;
} catch (Exception e) {
}
return ret;
}
public static void preloadBackgroundMusic(final String pPath) {
Cocos2dxHelper.sCocos2dMusic.preloadBackgroundMusic(pPath);

View File

@ -219,6 +219,20 @@ void setKeepScreenOnJni(bool value) {
}
}
extern bool openURLJNI(const char* url) {
JniMethodInfo t;
bool ret = false;
if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "openURL", "(Ljava/lang/String;)Z")) {
jstring stringArg = t.env->NewStringUTF(url);
ret = t.env->CallStaticBooleanMethod(t.classID, t.methodID, stringArg);
t.env->DeleteLocalRef(t.classID);
t.env->DeleteLocalRef(stringArg);
}
return ret;
}
// functions for UserDefault
bool getBoolForKeyJNI(const char* key, bool defaultValue)
{

View File

@ -40,6 +40,7 @@ extern void enableAccelerometerJni();
extern void disableAccelerometerJni();
extern void setAccelerometerIntervalJni(float interval);
extern void setKeepScreenOnJni(bool value);
extern bool openURLJNI(const char* url);
// functions for UserDefault
extern bool getBoolForKeyJNI(const char* key, bool defaultValue);
extern int getIntegerForKeyJNI(const char* key, int defaultValue);

View File

@ -85,6 +85,13 @@ public:
@brief Get target platform
*/
virtual Platform getTargetPlatform();
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**
@brief This function will be called when the application screen size is changed.

View File

@ -167,6 +167,13 @@ Application::Platform Application::getTargetPlatform()
}
}
bool Application::openURL(const std::string &url)
{
NSString* msg = [NSString stringWithCString:url.c_str() encoding:NSUTF8StringEncoding];
NSURL* nsUrl = [NSURL URLWithString:msg];
return [[UIApplication sharedApplication] openURL:nsUrl];
}
void Application::applicationScreenSizeChanged(int newWidth, int newHeight) {
}

View File

@ -731,7 +731,7 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
CGSize viewSize = self.frame.size;
CGFloat tmp;
switch ([[UIApplication sharedApplication] statusBarOrientation])
switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
{
case UIInterfaceOrientationPortrait:
begin.origin.y = viewSize.height - begin.origin.y - begin.size.height;
@ -744,15 +744,9 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
break;
case UIInterfaceOrientationLandscapeLeft:
tmp = begin.size.width;
begin.size.width = begin.size.height;
begin.size.height = tmp;
tmp = end.size.width;
end.size.width = end.size.height;
end.size.height = tmp;
tmp = viewSize.width;
viewSize.width = viewSize.height;
viewSize.height = tmp;
std::swap(begin.size.width, begin.size.height);
std::swap(end.size.width, end.size.height);
std::swap(viewSize.width, viewSize.height);
tmp = begin.origin.x;
begin.origin.x = begin.origin.y;
@ -763,15 +757,9 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
break;
case UIInterfaceOrientationLandscapeRight:
tmp = begin.size.width;
begin.size.width = begin.size.height;
begin.size.height = tmp;
tmp = end.size.width;
end.size.width = end.size.height;
end.size.height = tmp;
tmp = viewSize.width;
viewSize.width = viewSize.height;
viewSize.height = tmp;
std::swap(begin.size.width, begin.size.height);
std::swap(end.size.width, end.size.height);
std::swap(viewSize.width, viewSize.height);
tmp = begin.origin.x;
begin.origin.x = begin.origin.y;
@ -850,6 +838,15 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
}
}
UIInterfaceOrientation getFixedOrientation(UIInterfaceOrientation statusBarOrientation)
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
statusBarOrientation = UIInterfaceOrientationPortrait;
}
return statusBarOrientation;
}
-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis
{
[UIView beginAnimations:nil context:nullptr];
@ -869,7 +866,7 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
dis /= 2.0f;
}
switch ([[UIApplication sharedApplication] statusBarOrientation])
switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
{
case UIInterfaceOrientationPortrait:
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.width, originalRect_.size.height);

View File

@ -136,6 +136,12 @@ Application::Platform Application::getTargetPlatform()
return Platform::OS_LINUX;
}
bool Application::openURL(const std::string &url)
{
std::string op = std::string("open ").append(url);
return system(op.c_str())!=-1;
}
//////////////////////////////////////////////////////////////////////////
// static member function
//////////////////////////////////////////////////////////////////////////

View File

@ -77,6 +77,13 @@ public:
@return Current language iso 639-1 code
*/
virtual const char * getCurrentLanguageCode();
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**

View File

@ -90,6 +90,13 @@ public:
@brief Get target platform
*/
virtual Platform getTargetPlatform();
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**
* Sets the Resource root path.

View File

@ -213,6 +213,13 @@ LanguageType Application::getCurrentLanguage()
return ret;
}
bool Application::openURL(const std::string &url)
{
NSString* msg = [NSString stringWithCString:url.c_str() encoding:NSUTF8StringEncoding];
NSURL* nsUrl = [NSURL URLWithString:msg];
return [[NSWorkspace sharedWorkspace] openURL:nsUrl];
}
void Application::setResourceRootPath(const std::string& rootResDir)
{
_resourceRootPath = rootResDir;

View File

@ -30,6 +30,7 @@ THE SOFTWARE.
#include "base/CCDirector.h"
#include <algorithm>
#include "platform/CCFileUtils.h"
#include <shellapi.h>
/**
@brief This function change the PVRFrame show/hide setting in register.
@param bEnable If true show the PVRFrame window, otherwise hide.
@ -206,6 +207,15 @@ Application::Platform Application::getTargetPlatform()
return Platform::OS_WINDOWS;
}
bool Application::openURL(const std::string &url)
{
WCHAR *temp = new WCHAR[url.size() + 1];
int wchars_num = MultiByteToWideChar(CP_UTF8, 0, url.c_str(), url.size() + 1, temp, url.size() + 1);
HINSTANCE r = ShellExecuteW(NULL, L"open", temp, NULL, NULL, SW_SHOWNORMAL);
delete[] temp;
return (int)r>32;
}
void Application::setResourceRootPath(const std::string& rootResDir)
{
_resourceRootPath = rootResDir;

View File

@ -74,6 +74,13 @@ public:
@brief Get target platform
*/
virtual Platform getTargetPlatform();
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**
* Sets the Resource root path.

View File

@ -54,7 +54,8 @@ Application * Application::sm_pSharedApplication = 0;
// sharedApplication pointer
Application * s_pSharedApplication = 0;
Application::Application()
Application::Application() :
m_openURLDelegate(nullptr)
{
m_nAnimationInterval.QuadPart = 0;
CC_ASSERT(! sm_pSharedApplication);
@ -177,6 +178,19 @@ Application::Platform Application::getTargetPlatform()
return Platform::OS_WP8;
}
bool Application::openURL(const std::string &url)
{
if (m_openURLDelegate)
{
m_openURLDelegate(PlatformStringFromString(url));
return true;
}
else
{
return false;
}
}
void Application::setResourceRootPath(const std::string& rootResDir)
{
m_resourceRootPath = rootResDir;

View File

@ -31,6 +31,7 @@ THE SOFTWARE.
#include "platform/CCStdC.h"
#include "platform/CCCommon.h"
#include "platform/CCApplicationProtocol.h"
#include "platform/winrt/InputEvent.h"
#include <string>
NS_CC_BEGIN
@ -62,6 +63,22 @@ public:
@brief Get target platform
*/
virtual Platform getTargetPlatform() override;
/**
@brief Open url in default browser
@param String with url to open.
@return true if the resource located by the URL was successfully opened; otherwise false.
*/
virtual bool openURL(const std::string &url);
/**
@brief Set the callback responsible for opening a URL.
@param del The delegate that will handle opening a URL. We can't pass back a Platform::String due to name clash.
*/
void SetXamlOpenURLDelegate(const std::function<void(::Platform::String^)>& del)
{
m_openURLDelegate = del;
}
/**
* Sets the Resource root path.
@ -87,6 +104,8 @@ protected:
std::string m_resourceRootPath;
std::string m_startupScriptFilename;
std::function<void(::Platform::String^)> m_openURLDelegate;
static Application * sm_pSharedApplication;
};

View File

@ -54,6 +54,14 @@ void Device::setAccelerometerEnabled(bool isEnabled)
static Windows::Foundation::EventRegistrationToken sToken;
static bool sEnabled = false;
// we always need to reset the accelerometer
if (sAccelerometer)
{
sAccelerometer->ReadingChanged -= sToken;
sAccelerometer = nullptr;
sEnabled = false;
}
if (isEnabled)
{
sAccelerometer = Accelerometer::GetDefault();
@ -118,17 +126,6 @@ void Device::setAccelerometerEnabled(bool isEnabled)
cocos2d::GLViewImpl::sharedOpenGLView()->QueueEvent(event);
});
}
else
{
if (sAccelerometer)
{
sAccelerometer->ReadingChanged -= sToken;
sAccelerometer = nullptr;
}
sEnabled = false;
}
}
void Device::setAccelerometerInterval(float interval)

View File

@ -94,12 +94,14 @@ typedef SSIZE_T ssize_t;
#include <Windows.h>
#ifdef WINRT_NO_WINSOCK
#undef timeval
struct timeval
{
long tv_sec; // seconds
long tv_usec; // microSeconds
};
};
#endif // WINRT_NO_WINSOCK
#endif // CC_TARGET_PLATFORM == CC_PLATFORM_WP8
struct timezone

View File

@ -95,6 +95,12 @@ std::string PlatformStringToString(Platform::String^ s) {
return std::string(t.begin(),t.end());
}
Platform::String^ PlatformStringFromString(const std::string& s)
{
std::wstring ws(CCUtf8ToUnicode(s.c_str()));
return ref new Platform::String(ws.data(), ws.length());
}
// Method to convert a length in device-independent pixels (DIPs) to a length in physical pixels.
float ConvertDipsToPixels(float dips)
{

View File

@ -41,6 +41,7 @@ NS_CC_BEGIN
std::wstring CC_DLL CCUtf8ToUnicode(const char * pszUtf8Str, unsigned len = -1);
std::string CC_DLL CCUnicodeToUtf8(const wchar_t* pwszStr);
std::string PlatformStringToString(Platform::String^ s);
Platform::String^ PlatformStringFromString(const std::string& s);
// Method to convert a length in device-independent pixels (DIPs) to a length in physical pixels.
float ConvertDipsToPixels(float dips);

View File

@ -36,6 +36,7 @@ namespace PhoneDirect3DXamlAppComponent
public delegate void Cocos2dEventDelegate(Cocos2dEvent event, Platform::String^ text);
public delegate void Cocos2dMessageBoxDelegate(Platform::String^ title, Platform::String^ text);
public delegate void Cocos2dEditBoxDelegate(Platform::String^ strPlaceHolder, Platform::String^ strText, int maxLength, int inputMode, int inputFlag, Windows::Foundation::EventHandler<Platform::String^>^ receiveHandler);
public delegate void Cocos2dOpenURLDelegate(Platform::String^ url);
}
NS_CC_BEGIN

View File

@ -181,7 +181,12 @@ void Cocos2dRenderer::SetXamlEditBoxDelegate(PhoneDirect3DXamlAppComponent::Coco
}
}
void Cocos2dRenderer::SetXamlOpenURLDelegate(PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ delegate)
{
m_openURLDelegate = delegate;
Application* app = Application::getInstance();
if (app)
{
app->SetXamlOpenURLDelegate(delegate);
}
}

View File

@ -45,6 +45,7 @@ public:
void SetXamlEventDelegate(PhoneDirect3DXamlAppComponent::Cocos2dEventDelegate^ delegate);
void SetXamlMessageBoxDelegate(PhoneDirect3DXamlAppComponent::Cocos2dMessageBoxDelegate^ delegate);
void SetXamlEditBoxDelegate(PhoneDirect3DXamlAppComponent::Cocos2dEditBoxDelegate^ delegate);
void SetXamlOpenURLDelegate(PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ delegate);
Windows::Foundation::IAsyncAction^ OnSuspending();
void Connect();
@ -61,6 +62,7 @@ private:
PhoneDirect3DXamlAppComponent::Cocos2dEventDelegate^ m_delegate;
PhoneDirect3DXamlAppComponent::Cocos2dMessageBoxDelegate^ m_messageBoxDelegate;
PhoneDirect3DXamlAppComponent::Cocos2dEditBoxDelegate^ m_editBoxDelegate;
PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ m_openURLDelegate;
// The AppDelegate for the Cocos2D app
AppDelegate* mApp;

View File

@ -129,6 +129,11 @@ void Direct3DInterop::OnCocos2dEditboxEvent(Object^ sender, Platform::String^ ar
cocos2d::GLViewImpl::sharedOpenGLView()->QueueEvent(e);
}
void Direct3DInterop::OnCocos2dOpenURL(Platform::String^ url)
{
m_openURLDelegate->Invoke(url);
}
@ -174,6 +179,12 @@ void Direct3DInterop::SetCocos2dEditBoxDelegate(Cocos2dEditBoxDelegate ^ delegat
m_renderer->SetXamlEditBoxDelegate(delegate);
}
void Direct3DInterop::SetCocos2dOpenURLDelegate(Cocos2dOpenURLDelegate ^ delegate)
{
m_openURLDelegate = delegate;
m_renderer->SetXamlOpenURLDelegate(delegate);
}
bool Direct3DInterop::SendCocos2dEvent(Cocos2dEvent event)
{

View File

@ -60,6 +60,7 @@ public:
void OnCocos2dKeyEvent(Cocos2dKeyEvent key);
void OnCocos2dKeyEvent(Cocos2dKeyEvent key, Platform::String^ text);
void OnCocos2dEditboxEvent(Platform::Object^ sender, Platform::String^ args, Windows::Foundation::EventHandler<Platform::String^>^ handler);
void OnCocos2dOpenURL(Platform::String^ url);
property Windows::Graphics::Display::DisplayOrientations WindowOrientation;
property Windows::Foundation::Size WindowBounds;
@ -67,6 +68,7 @@ public:
void SetCocos2dEventDelegate(Cocos2dEventDelegate^ delegate);
void SetCocos2dMessageBoxDelegate(Cocos2dMessageBoxDelegate ^ delegate);
void SetCocos2dEditBoxDelegate(Cocos2dEditBoxDelegate ^ delegate);
void SetCocos2dOpenURLDelegate(Cocos2dOpenURLDelegate ^ delegate);
protected:
@ -90,6 +92,7 @@ private:
Cocos2dEventDelegate^ m_delegate;
Cocos2dMessageBoxDelegate^ m_messageBoxDelegate;
Cocos2dEditBoxDelegate^ m_editBoxDelegate;
Cocos2dOpenURLDelegate^ m_openURLDelegate;
};

View File

@ -25,6 +25,7 @@ using Windows.UI.Input;
using System.Windows.Threading;
using Microsoft.Phone.Info;
using Windows.Graphics.Display;
using Microsoft.Phone.Tasks;
namespace PhoneDirect3DXamlAppInterop
{
@ -93,6 +94,7 @@ namespace PhoneDirect3DXamlAppInterop
m_d3dInterop.SetCocos2dEventDelegate(OnCocos2dEvent);
m_d3dInterop.SetCocos2dMessageBoxDelegate(OnCocos2dMessageBoxEvent);
m_d3dInterop.SetCocos2dEditBoxDelegate(OpenEditBox);
m_d3dInterop.SetCocos2dOpenURLDelegate(OpenURL);
}
}
@ -206,6 +208,13 @@ namespace PhoneDirect3DXamlAppInterop
}
}
public void OpenURL(String url)
{
WebBrowserTask webBrowserTask = new WebBrowserTask();
webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
webBrowserTask.Show();
}
private void StartTimer()
{
m_timer = new DispatcherTimer();

View File

@ -86,7 +86,7 @@ const unsigned char s_133478C5A874C1E6F59B418CE6C7C39F1AE0F873[] = {
120, 116, 117, 114, 101, 48, 0, 0,
0, 0, 1, 0, 0, 0, 248, 3,
0, 0, 4, 5, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 11, 95,
74, 206, 145, 124, 32, 219, 67, 19,
@ -456,7 +456,7 @@ const unsigned char s_13E33F532157A58EC77EDE3B3112560A89D272B2[] = {
116, 114, 105, 120, 0, 0, 0, 0,
0, 0, 0, 0, 204, 2, 0, 0,
164, 4, 0, 0, 0, 0, 0, 0,
221, 144, 0, 0, 0, 0, 0, 0,
194, 137, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
68, 88, 66, 67, 127, 145, 81, 72,
216, 190, 16, 61, 245, 231, 235, 249,
@ -800,7 +800,7 @@ const unsigned char s_1A69A7CC77C7C8FC62799B0513816EA41FBF3BFE[] = {
116, 67, 111, 108, 111, 114, 0, 0,
0, 0, 3, 0, 0, 0, 208, 7,
0, 0, 4, 5, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 65, 106,
69, 173, 111, 248, 97, 165, 186, 90,
@ -1301,7 +1301,7 @@ const unsigned char s_53938AB67AD93ABA0DDB87F3C9889304284E011E[] = {
120, 116, 117, 114, 101, 48, 0, 0,
0, 0, 1, 0, 0, 0, 24, 4,
0, 0, 4, 5, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 200, 5,
103, 205, 248, 30, 69, 65, 32, 117,
@ -1675,7 +1675,7 @@ const unsigned char s_67837675F2BB48C0E926316F505FC1538228E0FA[] = {
86, 80, 77, 97, 116, 114, 105, 120,
0, 0, 0, 0, 0, 0, 0, 0,
16, 4, 0, 0, 48, 5, 0, 0,
0, 0, 0, 0, 221, 144, 0, 0,
0, 0, 0, 0, 194, 137, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 68, 88, 66, 67,
79, 226, 72, 124, 94, 252, 37, 157,
@ -2070,7 +2070,7 @@ const unsigned char s_78250E25D1929D4A842050738140787BE42541C6[] = {
108, 112, 104, 97, 95, 118, 97, 108,
117, 101, 0, 0, 0, 0, 2, 0,
0, 0, 36, 5, 0, 0, 4, 5,
0, 0, 0, 0, 0, 0, 221, 144,
0, 0, 0, 0, 0, 0, 194, 137,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 68, 88,
66, 67, 100, 113, 175, 29, 164, 71,
@ -2485,7 +2485,7 @@ const unsigned char s_7B67DD242152D35ACC079265FAD9D03DC98182DE[] = {
67, 95, 84, 101, 120, 116, 117, 114,
101, 48, 0, 0, 0, 0, 1, 0,
0, 0, 248, 3, 0, 0, 0, 5,
0, 0, 0, 0, 0, 0, 221, 144,
0, 0, 0, 0, 0, 0, 194, 137,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 68, 88,
66, 67, 11, 95, 74, 206, 145, 124,
@ -2869,7 +2869,7 @@ const unsigned char s_7CE5EE84ACB6110F7FA29152ECE3344CB6D6620D[] = {
99, 111, 108, 111, 114, 0, 0, 0,
0, 2, 0, 0, 0, 96, 4, 0,
0, 192, 4, 0, 0, 0, 0, 0,
0, 221, 144, 0, 0, 0, 0, 0,
0, 194, 137, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 68, 88, 66, 67, 157, 116, 105,
89, 118, 135, 249, 239, 42, 226, 184,
@ -3250,7 +3250,7 @@ const unsigned char s_7E1EEF397305D0BC2DCDBA4F2DAFBCBA1534E45C[] = {
117, 95, 99, 111, 108, 111, 114, 0,
0, 0, 0, 1, 0, 0, 0, 52,
3, 0, 0, 40, 4, 0, 0, 0,
0, 0, 0, 221, 144, 0, 0, 0,
0, 0, 0, 194, 137, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 88, 66, 67, 153,
8, 62, 201, 202, 170, 111, 182, 149,
@ -3584,7 +3584,7 @@ const unsigned char s_847DBFDDA6EC09C57E4ED43012AE2FB5CAC7D8D5[] = {
111, 108, 111, 114, 0, 0, 0, 0,
2, 0, 0, 0, 240, 4, 0, 0,
4, 5, 0, 0, 0, 0, 0, 0,
221, 144, 0, 0, 0, 0, 0, 0,
194, 137, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
68, 88, 66, 67, 134, 66, 128, 226,
107, 172, 247, 161, 241, 207, 89, 240,
@ -4001,7 +4001,7 @@ const unsigned char s_92BE325B516F887D2C928EDE20ADF428DB01C038[] = {
95, 118, 97, 108, 117, 101, 0, 0,
0, 0, 2, 0, 0, 0, 36, 5,
0, 0, 0, 5, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 100, 113,
175, 29, 164, 71, 177, 78, 120, 99,
@ -5038,7 +5038,7 @@ const unsigned char s_976D0E98457C40DFC2F0FBD00E30607C9E4CFDAE[] = {
99, 111, 108, 111, 114, 0, 0, 0,
0, 3, 0, 0, 0, 96, 4, 0,
0, 148, 13, 0, 0, 0, 0, 0,
0, 221, 144, 0, 0, 0, 0, 0,
0, 194, 137, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 68, 88, 66, 67, 157, 116, 105,
89, 118, 135, 249, 239, 42, 226, 184,
@ -5709,7 +5709,7 @@ const unsigned char s_A2377A827972A5466DA8637681045D32DA8A817D[] = {
99, 111, 108, 111, 114, 0, 0, 0,
0, 2, 0, 0, 0, 96, 4, 0,
0, 144, 4, 0, 0, 0, 0, 0,
0, 221, 144, 0, 0, 0, 0, 0,
0, 194, 137, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 68, 88, 66, 67, 157, 116, 105,
89, 118, 135, 249, 239, 42, 226, 184,
@ -6094,7 +6094,7 @@ const unsigned char s_B5E27B4F3CF7236633255B28CBA530D6EE5CED86[] = {
111, 108, 111, 114, 0, 0, 0, 0,
2, 0, 0, 0, 240, 5, 0, 0,
4, 5, 0, 0, 0, 0, 0, 0,
221, 144, 0, 0, 0, 0, 0, 0,
194, 137, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
68, 88, 66, 67, 223, 173, 203, 80,
172, 13, 170, 215, 168, 128, 228, 5,
@ -6526,7 +6526,7 @@ const unsigned char s_E2C7CE1244DE9C76688EFA9463B2A130B6A08893[] = {
77, 97, 116, 114, 105, 120, 0, 0,
0, 0, 0, 0, 0, 0, 204, 2,
0, 0, 144, 4, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 127, 145,
81, 72, 216, 190, 16, 61, 245, 231,
@ -6856,8 +6856,8 @@ const unsigned char s_E2D56227712263272BD5218FEA117CD06180F81B[] = {
117, 95, 112, 111, 105, 110, 116, 83,
105, 122, 101, 0, 0, 0, 0, 2,
0, 0, 0, 204, 2, 0, 0, 208,
4, 0, 0, 0, 0, 0, 0, 221,
144, 0, 0, 0, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 194,
137, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 68,
88, 66, 67, 127, 145, 81, 72, 216,
190, 16, 61, 245, 231, 235, 249, 125,
@ -7207,7 +7207,7 @@ const unsigned char s_F46558C274182079784898CF4968CF431593D5E2[] = {
116, 67, 111, 108, 111, 114, 0, 0,
0, 0, 3, 0, 0, 0, 108, 6,
0, 0, 4, 5, 0, 0, 0, 0,
0, 0, 221, 144, 0, 0, 0, 0,
0, 0, 194, 137, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 68, 88, 66, 67, 47, 220,
115, 183, 137, 174, 141, 96, 204, 60,
@ -7663,7 +7663,7 @@ const unsigned char s_F6BA4519AF2653A53D57FB5D5508F0D8617105D6[] = {
101, 120, 116, 117, 114, 101, 48, 0,
0, 0, 0, 1, 0, 0, 0, 156,
3, 0, 0, 144, 4, 0, 0, 0,
0, 0, 0, 221, 144, 0, 0, 0,
0, 0, 0, 194, 137, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 88, 66, 67, 203,
117, 183, 110, 154, 52, 220, 70, 125,

View File

@ -3,12 +3,28 @@
-- @module Application
-- @parent_module cc
--------------------------------
-- brief Open url in default browser<br>
-- param String with url to open.<br>
-- return true if the resource located by the URL was successfully opened; otherwise false.
-- @function [parent=#Application] openURL
-- @param self
-- @param #string url
-- @return bool#bool ret (return value: bool)
--------------------------------
-- brief Get target platform
-- @function [parent=#Application] getTargetPlatform
-- @param self
-- @return int#int ret (return value: int)
--------------------------------
-- brief Get current language config<br>
-- return Current language config
-- @function [parent=#Application] getCurrentLanguage
-- @param self
-- @return int#int ret (return value: int)
--------------------------------
-- brief Get current language iso 639-1 code<br>
-- return Current language iso 639-1 code
@ -16,13 +32,6 @@
-- @param self
-- @return char#char ret (return value: char)
--------------------------------
-- brief Get current language config<br>
-- return Current language config
-- @function [parent=#Application] getCurrentLanguage
-- @param self
-- @return int#int ret (return value: int)
--------------------------------
-- brief Callback by Director to limit FPS.<br>
-- param interval The time, expressed in seconds, between current frame and next.

View File

@ -133,6 +133,12 @@
-- @param self
-- @return ArmatureAnimation#ArmatureAnimation ret (return value: ccs.ArmatureAnimation)
--------------------------------
--
-- @function [parent=#Armature] getOffsetPoints
-- @param self
-- @return vec2_table#vec2_table ret (return value: vec2_table)
--------------------------------
-- Get Armature's bone dictionary<br>
-- return Armature's bone dictionary

View File

@ -0,0 +1,31 @@
--------------------------------
-- @module Device
-- @parent_module cc
--------------------------------
-- To enable or disable accelerometer.
-- @function [parent=#Device] setAccelerometerEnabled
-- @param self
-- @param #bool isEnabled
--------------------------------
--
-- @function [parent=#Device] setKeepScreenOn
-- @param self
-- @param #bool value
--------------------------------
-- Sets the interval of accelerometer.
-- @function [parent=#Device] setAccelerometerInterval
-- @param self
-- @param #float interval
--------------------------------
-- Gets the DPI of device<br>
-- return The DPI of device.
-- @function [parent=#Device] getDPI
-- @param self
-- @return int#int ret (return value: int)
return nil

View File

@ -10,6 +10,12 @@
-- @param self
-- @return PhysicsWorld#PhysicsWorld ret (return value: cc.PhysicsWorld)
--------------------------------
-- render the scene
-- @function [parent=#Scene] render
-- @param self
-- @param #cc.Renderer renderer
--------------------------------
-- creates a new Scene object with a predefined Size
-- @function [parent=#Scene] createWithSize

View File

@ -1146,6 +1146,11 @@
-- @field [parent=#cc] TextureCache#TextureCache TextureCache preloaded module
--------------------------------------------------------
-- the cc Device
-- @field [parent=#cc] Device#Device Device preloaded module
--------------------------------------------------------
-- the cc Application
-- @field [parent=#cc] Application#Application Application preloaded module

View File

@ -1,4 +1,5 @@
#include "lua_cocos2dx_audioengine_auto.hpp"
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC
#include "AudioEngine.h"
#include "tolua_fix.h"
#include "LuaBasicConversions.h"
@ -907,3 +908,4 @@ TOLUA_API int register_all_cocos2dx_audioengine(lua_State* tolua_S)
return 1;
}
#endif

View File

@ -1,4 +1,5 @@
#include "base/ccConfig.h"
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC
#ifndef __cocos2dx_audioengine_h__
#define __cocos2dx_audioengine_h__
@ -39,3 +40,4 @@ int register_all_cocos2dx_audioengine(lua_State* tolua_S);
#endif // __cocos2dx_audioengine_h__
#endif //#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC

View File

@ -9039,6 +9039,52 @@ int lua_cocos2dx_Scene_getPhysicsWorld(lua_State* tolua_S)
return 0;
}
int lua_cocos2dx_Scene_render(lua_State* tolua_S)
{
int argc = 0;
cocos2d::Scene* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"cc.Scene",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocos2d::Scene*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Scene_render'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 1)
{
cocos2d::Renderer* arg0;
ok &= luaval_to_object<cocos2d::Renderer>(tolua_S, 2, "cc.Renderer",&arg0);
if(!ok)
return 0;
cobj->render(arg0);
return 0;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "cc.Scene:render",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Scene_render'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Scene_createWithSize(lua_State* tolua_S)
{
int argc = 0;
@ -9147,6 +9193,7 @@ int lua_register_cocos2dx_Scene(lua_State* tolua_S)
tolua_beginmodule(tolua_S,"Scene");
tolua_function(tolua_S,"getPhysicsWorld",lua_cocos2dx_Scene_getPhysicsWorld);
tolua_function(tolua_S,"render",lua_cocos2dx_Scene_render);
tolua_function(tolua_S,"createWithSize", lua_cocos2dx_Scene_createWithSize);
tolua_function(tolua_S,"create", lua_cocos2dx_Scene_create);
tolua_function(tolua_S,"createWithPhysics", lua_cocos2dx_Scene_createWithPhysics);
@ -58962,6 +59009,203 @@ int lua_register_cocos2dx_TextureCache(lua_State* tolua_S)
return 1;
}
int lua_cocos2dx_Device_setAccelerometerEnabled(lua_State* tolua_S)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(tolua_S,1,"cc.Device",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(tolua_S) - 1;
if (argc == 1)
{
bool arg0;
ok &= luaval_to_boolean(tolua_S, 2,&arg0, "cc.Device:setAccelerometerEnabled");
if(!ok)
return 0;
cocos2d::Device::setAccelerometerEnabled(arg0);
return 0;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Device:setAccelerometerEnabled",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Device_setAccelerometerEnabled'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Device_setKeepScreenOn(lua_State* tolua_S)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(tolua_S,1,"cc.Device",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(tolua_S) - 1;
if (argc == 1)
{
bool arg0;
ok &= luaval_to_boolean(tolua_S, 2,&arg0, "cc.Device:setKeepScreenOn");
if(!ok)
return 0;
cocos2d::Device::setKeepScreenOn(arg0);
return 0;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Device:setKeepScreenOn",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Device_setKeepScreenOn'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Device_setAccelerometerInterval(lua_State* tolua_S)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(tolua_S,1,"cc.Device",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(tolua_S) - 1;
if (argc == 1)
{
double arg0;
ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.Device:setAccelerometerInterval");
if(!ok)
return 0;
cocos2d::Device::setAccelerometerInterval(arg0);
return 0;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Device:setAccelerometerInterval",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Device_setAccelerometerInterval'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Device_getDPI(lua_State* tolua_S)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(tolua_S,1,"cc.Device",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(tolua_S) - 1;
if (argc == 0)
{
if(!ok)
return 0;
int ret = cocos2d::Device::getDPI();
tolua_pushnumber(tolua_S,(lua_Number)ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Device:getDPI",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Device_getDPI'.",&tolua_err);
#endif
return 0;
}
static int lua_cocos2dx_Device_finalize(lua_State* tolua_S)
{
printf("luabindings: finalizing LUA object (Device)");
return 0;
}
int lua_register_cocos2dx_Device(lua_State* tolua_S)
{
tolua_usertype(tolua_S,"cc.Device");
tolua_cclass(tolua_S,"Device","cc.Device","",nullptr);
tolua_beginmodule(tolua_S,"Device");
tolua_function(tolua_S,"setAccelerometerEnabled", lua_cocos2dx_Device_setAccelerometerEnabled);
tolua_function(tolua_S,"setKeepScreenOn", lua_cocos2dx_Device_setKeepScreenOn);
tolua_function(tolua_S,"setAccelerometerInterval", lua_cocos2dx_Device_setAccelerometerInterval);
tolua_function(tolua_S,"getDPI", lua_cocos2dx_Device_getDPI);
tolua_endmodule(tolua_S);
std::string typeName = typeid(cocos2d::Device).name();
g_luaType[typeName] = "cc.Device";
g_typeCast["Device"] = "cc.Device";
return 1;
}
int lua_cocos2dx_Application_openURL(lua_State* tolua_S)
{
int argc = 0;
cocos2d::Application* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"cc.Application",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocos2d::Application*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Application_openURL'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 1)
{
std::string arg0;
ok &= luaval_to_std_string(tolua_S, 2,&arg0, "cc.Application:openURL");
if(!ok)
return 0;
bool ret = cobj->openURL(arg0);
tolua_pushboolean(tolua_S,(bool)ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "cc.Application:openURL",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Application_openURL'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Application_getTargetPlatform(lua_State* tolua_S)
{
int argc = 0;
@ -59006,50 +59250,6 @@ int lua_cocos2dx_Application_getTargetPlatform(lua_State* tolua_S)
return 0;
}
int lua_cocos2dx_Application_getCurrentLanguageCode(lua_State* tolua_S)
{
int argc = 0;
cocos2d::Application* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"cc.Application",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocos2d::Application*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Application_getCurrentLanguageCode'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 0)
{
if(!ok)
return 0;
const char* ret = cobj->getCurrentLanguageCode();
tolua_pushstring(tolua_S,(const char*)ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "cc.Application:getCurrentLanguageCode",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Application_getCurrentLanguageCode'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Application_getCurrentLanguage(lua_State* tolua_S)
{
int argc = 0;
@ -59094,6 +59294,50 @@ int lua_cocos2dx_Application_getCurrentLanguage(lua_State* tolua_S)
return 0;
}
int lua_cocos2dx_Application_getCurrentLanguageCode(lua_State* tolua_S)
{
int argc = 0;
cocos2d::Application* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"cc.Application",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocos2d::Application*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Application_getCurrentLanguageCode'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 0)
{
if(!ok)
return 0;
const char* ret = cobj->getCurrentLanguageCode();
tolua_pushstring(tolua_S,(const char*)ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "cc.Application:getCurrentLanguageCode",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Application_getCurrentLanguageCode'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_Application_setAnimationInterval(lua_State* tolua_S)
{
int argc = 0;
@ -59183,9 +59427,10 @@ int lua_register_cocos2dx_Application(lua_State* tolua_S)
tolua_cclass(tolua_S,"Application","cc.Application","",nullptr);
tolua_beginmodule(tolua_S,"Application");
tolua_function(tolua_S,"openURL",lua_cocos2dx_Application_openURL);
tolua_function(tolua_S,"getTargetPlatform",lua_cocos2dx_Application_getTargetPlatform);
tolua_function(tolua_S,"getCurrentLanguageCode",lua_cocos2dx_Application_getCurrentLanguageCode);
tolua_function(tolua_S,"getCurrentLanguage",lua_cocos2dx_Application_getCurrentLanguage);
tolua_function(tolua_S,"getCurrentLanguageCode",lua_cocos2dx_Application_getCurrentLanguageCode);
tolua_function(tolua_S,"setAnimationInterval",lua_cocos2dx_Application_setAnimationInterval);
tolua_function(tolua_S,"getInstance", lua_cocos2dx_Application_getInstance);
tolua_endmodule(tolua_S);
@ -65523,6 +65768,7 @@ TOLUA_API int register_all_cocos2dx(lua_State* tolua_S)
lua_register_cocos2dx_TransitionTurnOffTiles(tolua_S);
lua_register_cocos2dx_RotateTo(tolua_S);
lua_register_cocos2dx_TransitionSplitRows(tolua_S);
lua_register_cocos2dx_Device(tolua_S);
lua_register_cocos2dx_TransitionProgressRadialCCW(tolua_S);
lua_register_cocos2dx_EventListenerFocus(tolua_S);
lua_register_cocos2dx_TransitionPageTurn(tolua_S);

View File

@ -1567,6 +1567,13 @@ int register_all_cocos2dx(lua_State* tolua_S);

View File

@ -10782,6 +10782,50 @@ int lua_cocos2dx_studio_Armature_getAnimation(lua_State* tolua_S)
return 0;
}
int lua_cocos2dx_studio_Armature_getOffsetPoints(lua_State* tolua_S)
{
int argc = 0;
cocostudio::Armature* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"ccs.Armature",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocostudio::Armature*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_studio_Armature_getOffsetPoints'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 0)
{
if(!ok)
return 0;
const cocos2d::Vec2& ret = cobj->getOffsetPoints();
vec2_to_luaval(tolua_S, ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "ccs.Armature:getOffsetPoints",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_studio_Armature_getOffsetPoints'.",&tolua_err);
#endif
return 0;
}
int lua_cocos2dx_studio_Armature_getBoneDic(lua_State* tolua_S)
{
int argc = 0;
@ -10953,6 +10997,7 @@ int lua_register_cocos2dx_studio_Armature(lua_State* tolua_S)
tolua_function(tolua_S,"getArmatureData",lua_cocos2dx_studio_Armature_getArmatureData);
tolua_function(tolua_S,"getVersion",lua_cocos2dx_studio_Armature_getVersion);
tolua_function(tolua_S,"getAnimation",lua_cocos2dx_studio_Armature_getAnimation);
tolua_function(tolua_S,"getOffsetPoints",lua_cocos2dx_studio_Armature_getOffsetPoints);
tolua_function(tolua_S,"getBoneDic",lua_cocos2dx_studio_Armature_getBoneDic);
tolua_function(tolua_S,"create", lua_cocos2dx_studio_Armature_create);
tolua_endmodule(tolua_S);

View File

@ -490,6 +490,7 @@ int register_all_cocos2dx_studio(lua_State* tolua_S);
#endif // __cocos2dx_studio_h__

View File

@ -1534,7 +1534,7 @@ bool luaval_to_ccvaluemap(lua_State* L, int lo, cocos2d::ValueMap* ret, const ch
{
lua_pop(L,1);
ValueMap dictVal;
if (luaval_to_ccvaluemap(L, -1, &dictVal))
if (luaval_to_ccvaluemap(L, lua_gettop(L), &dictVal))
{
dict[stringKey] = Value(dictVal);
}
@ -1543,7 +1543,7 @@ bool luaval_to_ccvaluemap(lua_State* L, int lo, cocos2d::ValueMap* ret, const ch
{
lua_pop(L,1);
ValueVector arrVal;
if (luaval_to_ccvaluevector(L, -1, &arrVal))
if (luaval_to_ccvaluevector(L, lua_gettop(L), &arrVal))
{
dict[stringKey] = Value(arrVal);
}
@ -1622,7 +1622,7 @@ bool luaval_to_ccvaluemapintkey(lua_State* L, int lo, cocos2d::ValueMapIntKey* r
{
lua_pop(L,1);
ValueMap dictVal;
if (luaval_to_ccvaluemap(L, -1, &dictVal))
if (luaval_to_ccvaluemap(L, lua_gettop(L), &dictVal))
{
dict[intKey] = Value(dictVal);
}
@ -1631,7 +1631,7 @@ bool luaval_to_ccvaluemapintkey(lua_State* L, int lo, cocos2d::ValueMapIntKey* r
{
lua_pop(L,1);
ValueVector arrVal;
if (luaval_to_ccvaluevector(L, -1, &arrVal))
if (luaval_to_ccvaluevector(L, lua_gettop(L), &arrVal))
{
dict[intKey] = Value(arrVal);
}
@ -1703,7 +1703,7 @@ bool luaval_to_ccvaluevector(lua_State* L, int lo, cocos2d::ValueVector* ret, co
{
lua_pop(L,1);
ValueMap dictVal;
if (luaval_to_ccvaluemap(L, -1, &dictVal))
if (luaval_to_ccvaluemap(L, lua_gettop(L), &dictVal))
{
ret->push_back(Value(dictVal));
}
@ -1712,7 +1712,7 @@ bool luaval_to_ccvaluevector(lua_State* L, int lo, cocos2d::ValueVector* ret, co
{
lua_pop(L,1);
ValueVector arrVal;
if(luaval_to_ccvaluevector(L, -1, &arrVal))
if(luaval_to_ccvaluevector(L, lua_gettop(L), &arrVal))
{
ret->push_back(Value(arrVal));
}

View File

@ -407,6 +407,61 @@ static void extendBone(lua_State* L)
lua_pop(L, 1);
}
static int lua_cocos2dx_extension_Armature_getOffsetPoints(lua_State* L)
{
int argc = 0;
cocostudio::Armature* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(L,1,"ccs.Armature",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocostudio::Armature*)tolua_tousertype(L,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(L, "invalid 'cobj' in function 'lua_cocos2dx_extension_Armature_getOffsetPoints'", nullptr);
return 0;
}
#endif
argc = lua_gettop(L)-1;
if (argc == 0)
{
if(!ok)
return 0;
const cocos2d::Vec2& ret = cobj->getOffsetPoints();
vec2_to_luaval(L, ret);
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "getOffsetPoints", argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(L,"#ferror in function 'lua_cocos2dx_extension_Armature_getOffsetPoints'.",&tolua_err);
#endif
return 0;
}
static void extendArmature(lua_State* L)
{
lua_pushstring(L, "ccs.Armature");
lua_rawget(L, LUA_REGISTRYINDEX);
if (lua_istable(L,-1))
{
tolua_function(L, "getOffsetPoints", lua_cocos2dx_extension_Armature_getOffsetPoints);
}
lua_pop(L, 1);
}
int lua_cocos2dx_studio_NodeReader_getInstance(lua_State* L)
{
int argc = 0;
@ -607,6 +662,7 @@ int register_all_cocos2dx_coco_studio_manual(lua_State* L)
{
if (nullptr == L)
return 0;
extendArmature(L);
extendArmatureAnimation(L);
extendArmatureDataManager(L);
extendBone(L);

View File

@ -7,6 +7,10 @@
objects = {
/* Begin PBXBuildFile section */
150906F019D556C5002C4D97 /* lua_cocos2dx_audioengine_auto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2BDB0319C5E5FE0055CDCD /* lua_cocos2dx_audioengine_auto.cpp */; };
150906F119D556C8002C4D97 /* lua_cocos2dx_audioengine_auto.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E2BDB0419C5E5FE0055CDCD /* lua_cocos2dx_audioengine_auto.hpp */; };
150906F219D556CE002C4D97 /* lua_cocos2dx_audioengine_manual.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2BDB0819C5E6100055CDCD /* lua_cocos2dx_audioengine_manual.cpp */; };
150906F319D556D1002C4D97 /* lua_cocos2dx_audioengine_manual.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2BDB0919C5E6100055CDCD /* lua_cocos2dx_audioengine_manual.h */; };
15415A7019A71768004F1E71 /* lua_cocos2dx_extension_auto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AACE74C18BC45C200215002 /* lua_cocos2dx_extension_auto.cpp */; };
15415A7119A71782004F1E71 /* lua_cocos2dx_extension_auto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AACE74C18BC45C200215002 /* lua_cocos2dx_extension_auto.cpp */; };
15415A7219A718FB004F1E71 /* lua_cocos2dx_3d_auto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1516227F19A0F3E3006099B8 /* lua_cocos2dx_3d_auto.cpp */; };
@ -749,6 +753,7 @@
15AC69E01987711400D17520 /* luaconf.h in Headers */,
155C7DF819A71C4400F08B25 /* lua_cocos2dx_cocosdenshion_manual.h in Headers */,
15415AAF19A71A53004F1E71 /* except.h in Headers */,
150906F319D556D1002C4D97 /* lua_cocos2dx_audioengine_manual.h in Headers */,
155C7E0419A71C6D00F08B25 /* lua_cocos2dx_cocosbuilder_manual.h in Headers */,
15415ACB19A71A53004F1E71 /* socket.h in Headers */,
15415ADF19A71A53004F1E71 /* usocket.h in Headers */,
@ -784,6 +789,7 @@
15415AC719A71A53004F1E71 /* select.h in Headers */,
155C7E1C19A71CC200F08B25 /* lua_cocos2dx_spine_manual.hpp in Headers */,
15C1C2D41987499F00A46ACC /* lua_cocos2dx_auto.hpp in Headers */,
150906F119D556C8002C4D97 /* lua_cocos2dx_audioengine_auto.hpp in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -921,6 +927,7 @@
files = (
15415A7219A718FB004F1E71 /* lua_cocos2dx_3d_auto.cpp in Sources */,
15415A7319A718FB004F1E71 /* lua_cocos2dx_cocosbuilder_auto.cpp in Sources */,
150906F219D556CE002C4D97 /* lua_cocos2dx_audioengine_manual.cpp in Sources */,
15415A7519A718FB004F1E71 /* lua_cocos2dx_experimental_video_auto.cpp in Sources */,
15415A7619A718FB004F1E71 /* lua_cocos2dx_ui_auto.cpp in Sources */,
15415A7719A718FB004F1E71 /* lua_cocos2dx_spine_auto.cpp in Sources */,
@ -962,6 +969,7 @@
15C1C2CE1987498B00A46ACC /* LuaOpengl.cpp in Sources */,
566F015F19B5EB0F00FCA620 /* CustomGUIReader.cpp in Sources */,
15415AC119A71A53004F1E71 /* options.c in Sources */,
150906F019D556C5002C4D97 /* lua_cocos2dx_audioengine_auto.cpp in Sources */,
155C7E0A19A71C8B00F08B25 /* lua_cocos2dx_network_manual.cpp in Sources */,
15415AD119A71A53004F1E71 /* timeout.c in Sources */,
15C1C2CF1987498B00A46ACC /* lua_cocos2dx_deprecated.cpp in Sources */,

View File

@ -28,7 +28,463 @@
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "UIEditBox.h"
#include "ui/proj.win32/Win32InputBox.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "2d/CCLabel.h"
#include "base/CCDirector.h"
#include "base/ccUTF8.h"
#pragma warning (disable: 4312)
class CWin32InputBox;
// Structure used to orient the inputbox behavior
struct WIN32INPUTBOX_PARAM
{
friend class CWin32InputBox;
//
IN OPTIONAL bool bMultiline;
// Pass this as none zero so to use this memory dlg template
IN OPTIONAL LPVOID DlgTemplateData;
// Pass this as none ZERO so to load DLGTEMPLATE from resources
IN OPTIONAL LPCSTR DlgTemplateName;
// passing both "DlgTemplateName" and "DlgTemplateData" ZERO will cause
// the dialog to use his default embedded resource
// Center on monitor or owner window?
IN OPTIONAL bool bCenter;
// Want to add more styles to the dialog?
IN OPTIONAL DWORD dwStylesPlus, dwStylesMinus;
IN OPTIONAL DWORD dwExStylesPlus, dwExStylesMinus;
IN LPCSTR szTitle, szPrompt;
// Return buffer
OUT LPSTR szResult;
IN DWORD nResultSize;
// Owner window
HWND hwndOwner;
HINSTANCE hInstance;
short xPos, yPos;
WIN32INPUTBOX_PARAM();
private:
HWND hDlg;
};
class CWin32InputBox
{
private:
WIN32INPUTBOX_PARAM *_param;
static LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
HWND _hwndEditCtrl;
void InitDialog();
void SetParam(WIN32INPUTBOX_PARAM *);
WIN32INPUTBOX_PARAM * GetParam();
public:
CWin32InputBox(WIN32INPUTBOX_PARAM *);
~CWin32InputBox();
static INT_PTR InputBoxEx(WIN32INPUTBOX_PARAM *);
static INT_PTR InputBox(
LPCSTR szTitle,
LPCSTR szPrompt,
LPSTR szResult,
DWORD nResultSize,
bool bMultiLine = false,
HWND hwndParent = 0);
static std::string AnsiToUtf8(std::string strAnsi);
static std::string Utf8ToAnsi(std::string strUTF8);
};
typedef struct _MSDN_DLGTEMPLATEEX
{
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
BYTE _rest[1]; // rest of structure
} MSDN_DLGTEMPLATEEX;
static bool IsDlgTemplateExtended(DLGTEMPLATE *dlgTemplate)
{
MSDN_DLGTEMPLATEEX *dgExTemplate = (MSDN_DLGTEMPLATEEX *)dlgTemplate;
// MSDN excerpt:
//* dlgVer
// Specifies the version number of the extended dialog box template. This member must be 1.
//* signature
// Indicates whether a template is an extended dialog box template.
// If signature is 0xFFFF, this is an extended dialog box template.
// In this case, the dlgVer member specifies the template version number.
// If signature is any value other than 0xFFFF, this is a standard dialog box template that uses the DLGTEMPLATE and DLGITEMTEMPLATE structures.
return (dgExTemplate->dlgVer == 1) && (dgExTemplate->signature == 0xFFFF);
}
// Use alignment if supported by the compiler
#ifdef _MSC_VER
#if _MSC_VER > 1200
__declspec(align(4))
#endif
#endif
// per the MSDN, the DLGTEMPLATE must be DWORD aligned
// this was generated by the DlgResToDlgTemplate tool
static unsigned char definputbox_dlg[] =
{
0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0xc8, 0x00, 0x06,
0x00, 0x16, 0x00, 0x11, 0x00, 0xe7, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69,
0x00, 0x6e, 0x00, 0x33, 0x00, 0x32, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74,
0x00, 0x42, 0x00, 0x6f, 0x00, 0x78, 0x00, 0x00, 0x00, 0x08, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x4d,
0x00, 0x53, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x20,
0x00, 0x44, 0x00, 0x6c, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x50, 0x06, 0x00, 0x04, 0x00, 0x9d, 0x00, 0x21, 0x00, 0xe8,
0x03, 0x00, 0x00, 0xff, 0xff, 0x82, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x70,
0x00, 0x74, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, 0x06, 0x00, 0x25, 0x00, 0xd8, 0x00, 0x0e, 0x00, 0xe9,
0x03, 0x00, 0x00, 0xff, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x84, 0x10, 0xa1, 0x50, 0x06, 0x00, 0x37, 0x00, 0xd8, 0x00, 0x31, 0x00, 0xea,
0x03, 0x00, 0x00, 0xff, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0xab, 0x00, 0x04, 0x00, 0x33, 0x00, 0x0e, 0x00, 0x01,
0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x4f, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x50, 0xab, 0x00, 0x15, 0x00, 0x33,
0x00, 0x0e, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x43, 0x00, 0x41, 0x00, 0x4e,
0x00, 0x43, 0x00, 0x45, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x27, 0x00, 0x08, 0x00, 0x08, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00
};
static LPCTSTR definputbox_buttonnames[] = { _T("OK"), _T("CANCEL") };
static const INT_PTR definputbox_buttonids[] = { IDOK, IDCANCEL };
static const INT
definputbox_id_prompt = 1000,
definputbox_id_edit1 = 1001,
definputbox_id_edit2 = 1002;
WIN32INPUTBOX_PARAM::WIN32INPUTBOX_PARAM()
{
bMultiline = false;
hwndOwner = 0;
DlgTemplateName = 0;
hInstance = (HINSTANCE) ::GetModuleHandle(0);
DlgTemplateData = definputbox_dlg;
bCenter = true;
dwStylesPlus = 0;
dwExStylesPlus = 0;
dwStylesMinus = 0xFFFFFFFF;
dwExStylesMinus = 0xFFFFFFFF;
xPos = yPos = -1;
szResult = 0;
nResultSize = 0;
}
CWin32InputBox::CWin32InputBox(WIN32INPUTBOX_PARAM *param)
{
_param = param;
}
CWin32InputBox::~CWin32InputBox()
{
}
void CWin32InputBox::SetParam(WIN32INPUTBOX_PARAM *param)
{
_param = param;
}
WIN32INPUTBOX_PARAM *CWin32InputBox::GetParam()
{
return _param;
}
INT_PTR CWin32InputBox::InputBoxEx(WIN32INPUTBOX_PARAM *param)
{
// Check mandatory parameters
if (param->szResult == 0)
{
::SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
LPDLGTEMPLATE dlgTemplate;
if (param->DlgTemplateName != 0)
{
HMODULE hModule = (HMODULE)param->hInstance;
#ifdef __MINGW32__
HRSRC rcDlg = ::FindResource(hModule, (LPWSTR)(ULONG_PTR)(size_t)(param->DlgTemplateName), RT_DIALOG);
#else
HRSRC rcDlg = ::FindResource(hModule, MAKEINTRESOURCE(param->DlgTemplateName), RT_DIALOG);
#endif
if (rcDlg == nullptr)
return 0;
HGLOBAL hglobalDlg = ::LoadResource(hModule, rcDlg);
if (hglobalDlg == nullptr)
return 0;
dlgTemplate = (LPDLGTEMPLATE)hglobalDlg;
}
else if (param->DlgTemplateData != 0)
{
dlgTemplate = (LPDLGTEMPLATE)param->DlgTemplateData;
}
MSDN_DLGTEMPLATEEX *dlgTemplateEx =
IsDlgTemplateExtended((LPDLGTEMPLATE)dlgTemplate) ? (MSDN_DLGTEMPLATEEX *)dlgTemplate : 0;
if (dlgTemplateEx != 0)
{
dlgTemplateEx->exStyle |= param->dwExStylesPlus;
dlgTemplateEx->style |= param->dwStylesPlus;
dlgTemplateEx->exStyle &= param->dwExStylesMinus;
dlgTemplateEx->style &= param->dwStylesMinus;
if (param->bCenter)
dlgTemplateEx->style |= DS_CENTER;
if (param->xPos != -1)
dlgTemplateEx->x = param->xPos;
if (param->yPos != -1)
dlgTemplateEx->y = param->yPos;
}
else
{
dlgTemplate->dwExtendedStyle |= param->dwExStylesPlus;
dlgTemplate->style |= param->dwStylesPlus;
dlgTemplate->dwExtendedStyle &= param->dwExStylesMinus;
dlgTemplate->style &= param->dwStylesMinus;
if (param->bCenter)
dlgTemplate->style |= DS_CENTER;
if (param->xPos != -1)
dlgTemplate->x = param->xPos;
if (param->yPos != -1)
dlgTemplate->y = param->yPos;
}
CWin32InputBox inputbox(param);
// Resize dialog and SHOW or HIDE multiline
INT_PTR r = ::DialogBoxIndirectParam(param->hInstance, dlgTemplate, param->hwndOwner, (DLGPROC)DlgProc, (LPARAM)&inputbox);
return r;
}
INT_PTR CWin32InputBox::InputBox(
LPCSTR szTitle,
LPCSTR szPrompt,
LPSTR szResult,
DWORD nResultSize,
bool bMultiLine,
HWND hwndParent)
{
WIN32INPUTBOX_PARAM param;
param.szTitle = szTitle;
param.szPrompt = szPrompt;
param.szResult = szResult;
param.nResultSize = nResultSize;
param.bMultiline = bMultiLine;
param.hwndOwner = hwndParent;
return InputBoxEx(&param);
}
void CWin32InputBox::InitDialog()
{
// Set the button captions
for (size_t i = 0; i<sizeof(definputbox_buttonids) / sizeof(definputbox_buttonids[0]); i++)
::SetDlgItemText(_param->hDlg, (int)definputbox_buttonids[i], definputbox_buttonnames[i]);
// Set other controls
::SetWindowTextA(_param->hDlg, Utf8ToAnsi(_param->szTitle).c_str());
::SetDlgItemTextA(_param->hDlg, definputbox_id_prompt, Utf8ToAnsi(_param->szPrompt).c_str());
HWND hwndEdit1 = ::GetDlgItem(_param->hDlg, definputbox_id_edit1);
HWND hwndEdit2 = ::GetDlgItem(_param->hDlg, definputbox_id_edit2);
if (_param->bMultiline)
_hwndEditCtrl = hwndEdit2;
else
_hwndEditCtrl = hwndEdit1;
::SetWindowTextA(_hwndEditCtrl, Utf8ToAnsi(_param->szResult).c_str());
RECT rectDlg, rectEdit1, rectEdit2;
::GetWindowRect(_param->hDlg, &rectDlg);
::GetWindowRect(hwndEdit1, &rectEdit1);
::GetWindowRect(hwndEdit2, &rectEdit2);
if (_param->bMultiline)
{
::ShowWindow(hwndEdit1, SW_HIDE);
::SetWindowPos(
hwndEdit2,
HWND_NOTOPMOST,
rectEdit1.left - rectDlg.left,
(rectEdit1.top - rectDlg.top) - (rectEdit1.bottom - rectEdit1.top),
0,
0,
SWP_NOSIZE | SWP_NOZORDER);
::SetWindowPos(
_param->hDlg,
HWND_NOTOPMOST,
0,
0,
rectDlg.right - rectDlg.left,
rectDlg.bottom - rectDlg.top - (rectEdit1.bottom - rectEdit1.top),
SWP_NOMOVE);
}
else
{
::SetWindowPos(
_param->hDlg,
HWND_NOTOPMOST,
0,
0,
rectDlg.right - rectDlg.left,
rectEdit1.bottom - rectDlg.top + 5,
SWP_NOMOVE);
::ShowWindow(hwndEdit2, SW_HIDE);
}
}
// Message handler for about box.
LRESULT CALLBACK CWin32InputBox::DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
CWin32InputBox *_this = (CWin32InputBox *) ::GetWindowLongPtr(hDlg, GWLP_USERDATA);
WIN32INPUTBOX_PARAM *param = _this ? _this->GetParam() : 0;
switch (message)
{
case WM_INITDIALOG:
{
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)lParam);
_this = (CWin32InputBox *)lParam;
_this->_param->hDlg = hDlg;
_this->InitDialog();
return TRUE;
}
case WM_COMMAND:
{
#ifdef _MY_DEBUG
CHAR buf[1024];
static int i = 0;
sprintf(buf, "WM_COMMAND: %09d wParam=%08X lParam=%08X\n", i++, wParam, lParam);
OutputDebugString(buf);
#endif
INT_PTR buttonId = LOWORD(wParam);
for (size_t i = 0;
i<sizeof(definputbox_buttonids) / sizeof(definputbox_buttonids[0]);
i++)
{
if (buttonId == definputbox_buttonids[i])
{
::GetWindowTextA(
_this->_hwndEditCtrl,
_this->_param->szResult,
_this->_param->nResultSize);
std::string strUtf8 = AnsiToUtf8(_this->_param->szResult);
memset(_this->_param->szResult, 0, _this->_param->nResultSize);
strncpy(_this->_param->szResult, strUtf8.c_str(), _this->_param->nResultSize - 1);
::EndDialog(hDlg, buttonId);
return TRUE;
}
}
}
break;
}
return FALSE;
}
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi)
{
std::string ret;
if (strAnsi.length() > 0)
{
int nWideStrLength = MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, nullptr, 0);
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength + 1)*sizeof(WCHAR));
memset(pwszBuf, 0, (nWideStrLength + 1)*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, pwszBuf, (nWideStrLength + 1)*sizeof(WCHAR));
int nUtf8Length = WideCharToMultiByte(CP_UTF8, 0, pwszBuf, -1, nullptr, 0, nullptr, FALSE);
char* pszUtf8Buf = (char*)malloc((nUtf8Length + 1)*sizeof(char));
memset(pszUtf8Buf, 0, (nUtf8Length + 1)*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, pwszBuf, -1, pszUtf8Buf, (nUtf8Length + 1)*sizeof(char), nullptr, FALSE);
ret = pszUtf8Buf;
free(pszUtf8Buf);
free(pwszBuf);
}
return ret;
}
std::string CWin32InputBox::Utf8ToAnsi(std::string strUTF8)
{
std::string ret;
if (strUTF8.length() > 0)
{
int nWideStrLength = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, nullptr, 0);
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength + 1)*sizeof(WCHAR));
memset(pwszBuf, 0, (nWideStrLength + 1)*sizeof(WCHAR));
MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, pwszBuf, (nWideStrLength + 1)*sizeof(WCHAR));
int nAnsiStrLength = WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, nullptr, 0, nullptr, FALSE);
char* pszAnsiBuf = (char*)malloc((nAnsiStrLength + 1)*sizeof(char));
memset(pszAnsiBuf, 0, (nAnsiStrLength + 1)*sizeof(char));
WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, pszAnsiBuf, (nAnsiStrLength + 1)*sizeof(char), nullptr, FALSE);
ret = pszAnsiBuf;
free(pszAnsiBuf);
free(pwszBuf);
}
return ret;
}
NS_CC_BEGIN
@ -162,7 +618,7 @@ void EditBoxImplWin::setText(const char* pText)
if (EditBox::InputFlag::PASSWORD == _editBoxInputFlag)
{
long length = cc_utf8_strlen(_text.c_str(), -1);
long length = StringUtils::getCharacterCountInUTF8String(_text);
for (long i = 0; i < length; i++)
{
strToShow.append("*");

View File

@ -1,383 +0,0 @@
#include "Win32InputBox.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include <stdio.h>
#pragma warning (disable: 4312)
typedef struct _MSDN_DLGTEMPLATEEX
{
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
BYTE _rest[1]; // rest of structure
} MSDN_DLGTEMPLATEEX;
static bool IsDlgTemplateExtended(DLGTEMPLATE *dlgTemplate)
{
MSDN_DLGTEMPLATEEX *dgExTemplate = (MSDN_DLGTEMPLATEEX *) dlgTemplate;
// MSDN excerpt:
//* dlgVer
// Specifies the version number of the extended dialog box template. This member must be 1.
//* signature
// Indicates whether a template is an extended dialog box template.
// If signature is 0xFFFF, this is an extended dialog box template.
// In this case, the dlgVer member specifies the template version number.
// If signature is any value other than 0xFFFF, this is a standard dialog box template that uses the DLGTEMPLATE and DLGITEMTEMPLATE structures.
return (dgExTemplate->dlgVer == 1) && (dgExTemplate->signature == 0xFFFF);
}
// Use alignment if supported by the compiler
#ifdef _MSC_VER
#if _MSC_VER > 1200
__declspec(align(4))
#endif
#endif
// per the MSDN, the DLGTEMPLATE must be DWORD aligned
// this was generated by the DlgResToDlgTemplate tool
static unsigned char definputbox_dlg[] =
{
0x01,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0xc8,0x00,0x06,
0x00,0x16,0x00,0x11,0x00,0xe7,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x57,0x00,0x69,
0x00,0x6e,0x00,0x33,0x00,0x32,0x00,0x49,0x00,0x6e,0x00,0x70,0x00,0x75,0x00,0x74,
0x00,0x42,0x00,0x6f,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0xbc,0x02,0x00,0x00,0x4d,
0x00,0x53,0x00,0x20,0x00,0x53,0x00,0x68,0x00,0x65,0x00,0x6c,0x00,0x6c,0x00,0x20,
0x00,0x44,0x00,0x6c,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x02,0x50,0x06,0x00,0x04,0x00,0x9d,0x00,0x21,0x00,0xe8,
0x03,0x00,0x00,0xff,0xff,0x82,0x00,0x50,0x00,0x72,0x00,0x6f,0x00,0x6d,0x00,0x70,
0x00,0x74,0x00,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x81,0x50,0x06,0x00,0x25,0x00,0xd8,0x00,0x0e,0x00,0xe9,
0x03,0x00,0x00,0xff,0xff,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x84,0x10,0xa1,0x50,0x06,0x00,0x37,0x00,0xd8,0x00,0x31,0x00,0xea,
0x03,0x00,0x00,0xff,0xff,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x00,0x03,0x50,0xab,0x00,0x04,0x00,0x33,0x00,0x0e,0x00,0x01,
0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x4f,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x50,0xab,0x00,0x15,0x00,0x33,
0x00,0x0e,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x43,0x00,0x41,0x00,0x4e,
0x00,0x43,0x00,0x45,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x27,0x00,0x08,0x00,0x08,0x00,0xff,
0xff,0xff,0xff,0xff,0xff,0x82,0x00,0x00,0x00,0x00,0x00
};
static LPCTSTR definputbox_buttonnames[] = { _T("OK"), _T("CANCEL") };
static const INT_PTR definputbox_buttonids[] = { IDOK, IDCANCEL };
static const INT
definputbox_id_prompt = 1000,
definputbox_id_edit1 = 1001,
definputbox_id_edit2 = 1002;
WIN32INPUTBOX_PARAM::WIN32INPUTBOX_PARAM()
{
bMultiline = false;
hwndOwner = 0;
DlgTemplateName = 0;
hInstance = (HINSTANCE) ::GetModuleHandle(0);
DlgTemplateData = definputbox_dlg;
bCenter = true;
dwStylesPlus = 0;
dwExStylesPlus = 0;
dwStylesMinus = 0xFFFFFFFF;
dwExStylesMinus = 0xFFFFFFFF;
xPos = yPos = -1;
szResult = 0;
nResultSize = 0;
}
CWin32InputBox::CWin32InputBox(WIN32INPUTBOX_PARAM *param)
{
_param = param;
}
CWin32InputBox::~CWin32InputBox()
{
}
void CWin32InputBox::SetParam(WIN32INPUTBOX_PARAM *param)
{
_param = param;
}
WIN32INPUTBOX_PARAM *CWin32InputBox::GetParam()
{
return _param;
}
INT_PTR CWin32InputBox::InputBoxEx(WIN32INPUTBOX_PARAM *param)
{
// Check mandatory parameters
if (param->szResult == 0)
{
::SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
LPDLGTEMPLATE dlgTemplate;
if (param->DlgTemplateName != 0)
{
HMODULE hModule = (HMODULE)param->hInstance;
#ifdef __MINGW32__
HRSRC rcDlg = ::FindResource(hModule, (LPWSTR)(ULONG_PTR)(size_t)(param->DlgTemplateName), RT_DIALOG);
#else
HRSRC rcDlg = ::FindResource(hModule, MAKEINTRESOURCE(param->DlgTemplateName), RT_DIALOG);
#endif
if (rcDlg == nullptr)
return 0;
HGLOBAL hglobalDlg = ::LoadResource(hModule, rcDlg);
if (hglobalDlg == nullptr)
return 0;
dlgTemplate = (LPDLGTEMPLATE) hglobalDlg;
}
else if (param->DlgTemplateData != 0)
{
dlgTemplate = (LPDLGTEMPLATE) param->DlgTemplateData;
}
MSDN_DLGTEMPLATEEX *dlgTemplateEx =
IsDlgTemplateExtended((LPDLGTEMPLATE) dlgTemplate) ? (MSDN_DLGTEMPLATEEX *) dlgTemplate : 0;
if (dlgTemplateEx != 0)
{
dlgTemplateEx->exStyle |= param->dwExStylesPlus;
dlgTemplateEx->style |= param->dwStylesPlus;
dlgTemplateEx->exStyle &= param->dwExStylesMinus;
dlgTemplateEx->style &= param->dwStylesMinus;
if (param->bCenter)
dlgTemplateEx->style |= DS_CENTER;
if (param->xPos != -1)
dlgTemplateEx->x = param->xPos;
if (param->yPos != -1)
dlgTemplateEx->y = param->yPos;
}
else
{
dlgTemplate->dwExtendedStyle |= param->dwExStylesPlus;
dlgTemplate->style |= param->dwStylesPlus;
dlgTemplate->dwExtendedStyle &= param->dwExStylesMinus;
dlgTemplate->style &= param->dwStylesMinus;
if (param->bCenter)
dlgTemplate->style |= DS_CENTER;
if (param->xPos != -1)
dlgTemplate->x = param->xPos;
if (param->yPos != -1)
dlgTemplate->y = param->yPos;
}
CWin32InputBox inputbox(param);
// Resize dialog and SHOW or HIDE multiline
INT_PTR r = ::DialogBoxIndirectParam(param->hInstance, dlgTemplate, param->hwndOwner, (DLGPROC)DlgProc, (LPARAM)&inputbox);
return r;
}
INT_PTR CWin32InputBox::InputBox(
LPCSTR szTitle,
LPCSTR szPrompt,
LPSTR szResult,
DWORD nResultSize,
bool bMultiLine,
HWND hwndParent)
{
WIN32INPUTBOX_PARAM param;
param.szTitle = szTitle;
param.szPrompt = szPrompt;
param.szResult = szResult;
param.nResultSize = nResultSize;
param.bMultiline = bMultiLine;
param.hwndOwner = hwndParent;
return InputBoxEx(&param);
}
void CWin32InputBox::InitDialog()
{
// Set the button captions
for (size_t i=0;i<sizeof(definputbox_buttonids)/sizeof(definputbox_buttonids[0]);i++)
::SetDlgItemText(_param->hDlg, (int) definputbox_buttonids[i], definputbox_buttonnames[i]);
// Set other controls
::SetWindowTextA(_param->hDlg, Utf8ToAnsi(_param->szTitle).c_str());
::SetDlgItemTextA(_param->hDlg, definputbox_id_prompt, Utf8ToAnsi(_param->szPrompt).c_str());
HWND hwndEdit1 = ::GetDlgItem(_param->hDlg, definputbox_id_edit1);
HWND hwndEdit2 = ::GetDlgItem(_param->hDlg, definputbox_id_edit2);
if (_param->bMultiline)
_hwndEditCtrl = hwndEdit2;
else
_hwndEditCtrl = hwndEdit1;
::SetWindowTextA(_hwndEditCtrl, Utf8ToAnsi(_param->szResult).c_str());
RECT rectDlg, rectEdit1, rectEdit2;
::GetWindowRect(_param->hDlg, &rectDlg);
::GetWindowRect(hwndEdit1, &rectEdit1);
::GetWindowRect(hwndEdit2, &rectEdit2);
if (_param->bMultiline)
{
::ShowWindow(hwndEdit1, SW_HIDE);
::SetWindowPos(
hwndEdit2,
HWND_NOTOPMOST,
rectEdit1.left - rectDlg.left,
(rectEdit1.top - rectDlg.top) - (rectEdit1.bottom - rectEdit1.top),
0,
0,
SWP_NOSIZE | SWP_NOZORDER);
::SetWindowPos(
_param->hDlg,
HWND_NOTOPMOST,
0,
0,
rectDlg.right - rectDlg.left,
rectDlg.bottom - rectDlg.top - (rectEdit1.bottom - rectEdit1.top),
SWP_NOMOVE);
}
else
{
::SetWindowPos(
_param->hDlg,
HWND_NOTOPMOST,
0,
0,
rectDlg.right - rectDlg.left,
rectEdit1.bottom - rectDlg.top + 5,
SWP_NOMOVE);
::ShowWindow(hwndEdit2, SW_HIDE);
}
}
// Message handler for about box.
LRESULT CALLBACK CWin32InputBox::DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
CWin32InputBox *_this = (CWin32InputBox *) ::GetWindowLongPtr(hDlg, GWLP_USERDATA);
WIN32INPUTBOX_PARAM *param = _this ? _this->GetParam() : 0;
switch (message)
{
case WM_INITDIALOG:
{
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR) lParam);
_this = (CWin32InputBox *) lParam;
_this->_param->hDlg = hDlg;
_this->InitDialog();
return TRUE;
}
case WM_COMMAND:
{
#ifdef _MY_DEBUG
CHAR buf[1024];
static int i=0;
sprintf(buf, "WM_COMMAND: %09d wParam=%08X lParam=%08X\n", i++, wParam, lParam);
OutputDebugString(buf);
#endif
INT_PTR buttonId = LOWORD(wParam);
for (size_t i=0;
i<sizeof(definputbox_buttonids)/sizeof(definputbox_buttonids[0]);
i++)
{
if (buttonId == definputbox_buttonids[i])
{
::GetWindowTextA(
_this->_hwndEditCtrl,
_this->_param->szResult,
_this->_param->nResultSize);
std::string strUtf8 = AnsiToUtf8(_this->_param->szResult);
memset(_this->_param->szResult, 0, _this->_param->nResultSize);
strncpy(_this->_param->szResult, strUtf8.c_str(), _this->_param->nResultSize-1);
::EndDialog(hDlg, buttonId);
return TRUE;
}
}
}
break;
}
return FALSE;
}
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi)
{
std::string ret;
if (strAnsi.length() > 0)
{
int nWideStrLength = MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, nullptr, 0);
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR));
memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR));
int nUtf8Length = WideCharToMultiByte( CP_UTF8,0,pwszBuf,-1,nullptr,0,nullptr,FALSE );
char* pszUtf8Buf = (char*)malloc((nUtf8Length+1)*sizeof(char));
memset(pszUtf8Buf, 0, (nUtf8Length+1)*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, pwszBuf, -1, pszUtf8Buf, (nUtf8Length+1)*sizeof(char), nullptr, FALSE);
ret = pszUtf8Buf;
free(pszUtf8Buf);
free(pwszBuf);
}
return ret;
}
std::string CWin32InputBox::Utf8ToAnsi(std::string strUTF8)
{
std::string ret;
if (strUTF8.length() > 0)
{
int nWideStrLength = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, nullptr, 0);
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR));
memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR));
MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR));
int nAnsiStrLength = WideCharToMultiByte( CP_ACP,0,pwszBuf,-1,nullptr,0,nullptr,FALSE );
char* pszAnsiBuf = (char*)malloc((nAnsiStrLength+1)*sizeof(char));
memset(pszAnsiBuf, 0, (nAnsiStrLength+1)*sizeof(char));
WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, pszAnsiBuf, (nAnsiStrLength+1)*sizeof(char), nullptr, FALSE);
ret = pszAnsiBuf;
free(pszAnsiBuf);
free(pwszBuf);
}
return ret;
}
#endif /* #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */

View File

@ -1,106 +0,0 @@
#ifndef __03022006__WIN32INPUTBOX__
#define __03022006__WIN32INPUTBOX__
#include "cocos2d.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
/*
This library is (c) Elias Bachaalany aka lallous <lallousx86@yahoo.com>
You may use this library under the following license agreement:
The zlib/libpng License.
---------------------------
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications,
and to alter it and redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented;
you must not claim that you wrote the original software.
If you use this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such,
and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include <windows.h>
#include <tchar.h>
class CWin32InputBox;
// Structure used to orient the inputbox behavior
struct WIN32INPUTBOX_PARAM
{
friend class CWin32InputBox;
//
IN OPTIONAL bool bMultiline;
// Pass this as none zero so to use this memory dlg template
IN OPTIONAL LPVOID DlgTemplateData;
// Pass this as none ZERO so to load DLGTEMPLATE from resources
IN OPTIONAL LPCSTR DlgTemplateName;
// passing both "DlgTemplateName" and "DlgTemplateData" ZERO will cause
// the dialog to use his default embedded resource
// Center on monitor or owner window?
IN OPTIONAL bool bCenter;
// Want to add more styles to the dialog?
IN OPTIONAL DWORD dwStylesPlus, dwStylesMinus;
IN OPTIONAL DWORD dwExStylesPlus, dwExStylesMinus;
IN LPCSTR szTitle, szPrompt;
// Return buffer
OUT LPSTR szResult;
IN DWORD nResultSize;
// Owner window
HWND hwndOwner;
HINSTANCE hInstance;
short xPos, yPos;
WIN32INPUTBOX_PARAM();
private:
HWND hDlg;
};
class CWin32InputBox
{
private:
WIN32INPUTBOX_PARAM *_param;
static LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
HWND _hwndEditCtrl;
void InitDialog();
void SetParam(WIN32INPUTBOX_PARAM *);
WIN32INPUTBOX_PARAM * GetParam();
public:
CWin32InputBox(WIN32INPUTBOX_PARAM *);
~CWin32InputBox();
static INT_PTR InputBoxEx(WIN32INPUTBOX_PARAM *);
static INT_PTR InputBox(
LPCSTR szTitle,
LPCSTR szPrompt,
LPSTR szResult,
DWORD nResultSize,
bool bMultiLine = false,
HWND hwndParent = 0);
static std::string AnsiToUtf8(std::string strAnsi);
static std::string Utf8ToAnsi(std::string strUTF8);
};
#endif /* (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */
#endif

View File

@ -22,6 +22,8 @@
#include "CCPhysicsSprite.h"
#if (CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION)
#if (CC_ENABLE_CHIPMUNK_INTEGRATION && CC_ENABLE_BOX2D_INTEGRATION)
#error "Either Chipmunk or Box2d should be enabled, but not both at the same time"
#endif
@ -300,6 +302,8 @@ float PhysicsSprite::getRotation() const
return (_ignoreBodyRotation ? Sprite::getRotation() :
CC_RADIANS_TO_DEGREES(_pB2Body->GetAngle()));
#else
return 0.0f;
#endif
}
@ -408,3 +412,5 @@ void PhysicsSprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t fla
}
NS_CC_EXT_END
#endif // CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION

View File

@ -27,6 +27,8 @@
#include "extensions/ExtensionMacros.h"
#include "extensions/ExtensionExport.h"
#if (CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION)
struct cpBody;
class b2Body;
@ -135,4 +137,6 @@ protected:
NS_CC_EXT_END
#endif // CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION
#endif // __PHYSICSNODES_CCPHYSICSSPRITE_H__

View File

@ -673,6 +673,7 @@
"cocos/math/MathUtil.h",
"cocos/math/MathUtil.inl",
"cocos/math/MathUtilNeon.inl",
"cocos/math/MathUtilNeon64.inl",
"cocos/math/MathUtilSSE.inl",
"cocos/math/Quaternion.cpp",
"cocos/math/Quaternion.h",
@ -1083,8 +1084,6 @@
"cocos/ui/UIWebViewImpl-win32.h",
"cocos/ui/UIWidget.cpp",
"cocos/ui/UIWidget.h",
"cocos/ui/proj.win32/Win32InputBox.cpp",
"cocos/ui/proj.win32/Win32InputBox.h",
"cocos/ui/proj.win32/libui.vcxproj",
"cocos/ui/proj.win32/libui.vcxproj.filters",
"cocos/ui/proj.wp8/libGUI.vcxproj",
@ -3635,6 +3634,7 @@
"cocos/scripting/lua-bindings/auto/api/ControlSwitch.lua",
"cocos/scripting/lua-bindings/auto/api/Controller.lua",
"cocos/scripting/lua-bindings/auto/api/DelayTime.lua",
"cocos/scripting/lua-bindings/auto/api/Device.lua",
"cocos/scripting/lua-bindings/auto/api/Director.lua",
"cocos/scripting/lua-bindings/auto/api/DisplayData.lua",
"cocos/scripting/lua-bindings/auto/api/DisplayManager.lua",

View File

@ -541,6 +541,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -570,6 +571,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "";
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};

View File

@ -1,4 +1,4 @@
#include "../src/AppDelegate.h"
#include "../Classes/AppDelegate.h"
#include <stdlib.h>
#include <stdio.h>

View File

@ -25,6 +25,7 @@ using Windows.UI.Input;
using System.Windows.Threading;
using Microsoft.Phone.Info;
using Windows.Graphics.Display;
using Microsoft.Phone.Tasks;
namespace PhoneDirect3DXamlAppInterop
{
@ -93,6 +94,7 @@ namespace PhoneDirect3DXamlAppInterop
m_d3dInterop.SetCocos2dEventDelegate(OnCocos2dEvent);
m_d3dInterop.SetCocos2dMessageBoxDelegate(OnCocos2dMessageBoxEvent);
m_d3dInterop.SetCocos2dEditBoxDelegate(OpenEditBox);
m_d3dInterop.SetCocos2dOpenURLDelegate(OpenURL);
}
}
@ -206,6 +208,13 @@ namespace PhoneDirect3DXamlAppInterop
}
}
public void OpenURL(String url)
{
WebBrowserTask webBrowserTask = new WebBrowserTask();
webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
webBrowserTask.Show();
}
private void StartTimer()
{
m_timer = new DispatcherTimer();

View File

@ -26,7 +26,7 @@ THE SOFTWARE.
#include "Cocos2dRenderer.h"
#include "cocos2d.h"
#include "CCApplication.h"
#include "CCGLView.h"
#include "CCGLViewImpl.h"
#include "AppDelegate.h"
#include <ppltasks.h>
@ -181,7 +181,12 @@ void Cocos2dRenderer::SetXamlEditBoxDelegate(PhoneDirect3DXamlAppComponent::Coco
}
}
void Cocos2dRenderer::SetXamlOpenURLDelegate(PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ delegate)
{
m_openURLDelegate = delegate;
Application* app = Application::getInstance();
if (app)
{
app->SetXamlOpenURLDelegate(delegate);
}
}

View File

@ -45,6 +45,7 @@ public:
void SetXamlEventDelegate(PhoneDirect3DXamlAppComponent::Cocos2dEventDelegate^ delegate);
void SetXamlMessageBoxDelegate(PhoneDirect3DXamlAppComponent::Cocos2dMessageBoxDelegate^ delegate);
void SetXamlEditBoxDelegate(PhoneDirect3DXamlAppComponent::Cocos2dEditBoxDelegate^ delegate);
void SetXamlOpenURLDelegate(PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ delegate);
Windows::Foundation::IAsyncAction^ OnSuspending();
void Connect();
@ -61,6 +62,7 @@ private:
PhoneDirect3DXamlAppComponent::Cocos2dEventDelegate^ m_delegate;
PhoneDirect3DXamlAppComponent::Cocos2dMessageBoxDelegate^ m_messageBoxDelegate;
PhoneDirect3DXamlAppComponent::Cocos2dEditBoxDelegate^ m_editBoxDelegate;
PhoneDirect3DXamlAppComponent::Cocos2dOpenURLDelegate^ m_openURLDelegate;
// The AppDelegate for the Cocos2D app
AppDelegate* mApp;

View File

@ -129,6 +129,11 @@ void Direct3DInterop::OnCocos2dEditboxEvent(Object^ sender, Platform::String^ ar
cocos2d::GLViewImpl::sharedOpenGLView()->QueueEvent(e);
}
void Direct3DInterop::OnCocos2dOpenURL(Platform::String^ url)
{
m_openURLDelegate->Invoke(url);
}
@ -174,13 +179,19 @@ void Direct3DInterop::SetCocos2dEditBoxDelegate(Cocos2dEditBoxDelegate ^ delegat
m_renderer->SetXamlEditBoxDelegate(delegate);
}
void Direct3DInterop::SetCocos2dOpenURLDelegate(Cocos2dOpenURLDelegate ^ delegate)
{
m_openURLDelegate = delegate;
m_renderer->SetXamlOpenURLDelegate(delegate);
}
bool Direct3DInterop::SendCocos2dEvent(Cocos2dEvent event)
{
std::string str;
Platform::String^ str;
if(m_delegate)
{
m_delegate->Invoke(event, stringToPlatformString(str));
m_delegate->Invoke(event, str);
return true;
}
return false;

View File

@ -60,6 +60,7 @@ public:
void OnCocos2dKeyEvent(Cocos2dKeyEvent key);
void OnCocos2dKeyEvent(Cocos2dKeyEvent key, Platform::String^ text);
void OnCocos2dEditboxEvent(Platform::Object^ sender, Platform::String^ args, Windows::Foundation::EventHandler<Platform::String^>^ handler);
void OnCocos2dOpenURL(Platform::String^ url);
property Windows::Graphics::Display::DisplayOrientations WindowOrientation;
property Windows::Foundation::Size WindowBounds;
@ -67,6 +68,7 @@ public:
void SetCocos2dEventDelegate(Cocos2dEventDelegate^ delegate);
void SetCocos2dMessageBoxDelegate(Cocos2dMessageBoxDelegate ^ delegate);
void SetCocos2dEditBoxDelegate(Cocos2dEditBoxDelegate ^ delegate);
void SetCocos2dOpenURLDelegate(Cocos2dOpenURLDelegate ^ delegate);
protected:
@ -90,6 +92,7 @@ private:
Cocos2dEventDelegate^ m_delegate;
Cocos2dMessageBoxDelegate^ m_messageBoxDelegate;
Cocos2dEditBoxDelegate^ m_editBoxDelegate;
Cocos2dOpenURLDelegate^ m_openURLDelegate;
};

View File

@ -925,6 +925,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -947,6 +948,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};

View File

@ -1246,6 +1246,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Debug;
};
@ -1268,6 +1269,7 @@
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../cocos2d-x/cocos/platform/ios";
VALID_ARCHS = "arm64 armv7";
};
name = Release;
};

View File

@ -140,6 +140,7 @@ set(TESTS_SRC
Classes/MotionStreakTest/MotionStreakTest.cpp
Classes/MutiTouchTest/MutiTouchTest.cpp
Classes/NodeTest/NodeTest.cpp
Classes/OpenURLTest/OpenURLTest.cpp
Classes/ParallaxTest/ParallaxTest.cpp
Classes/ParticleTest/ParticleTest.cpp
Classes/PerformanceTest/PerformanceAllocTest.cpp

View File

@ -29,7 +29,7 @@ void SceneController::onEnter()
ComController::onEnter();
_fAddTargetTime = 1.0f;
static_cast<ComAudio*>(_owner->getComponent("Audio"))->playBackgroundMusic("background-music-aac.wav", true);
static_cast<ComAudio*>(_owner->getComponent("Audio"))->playBackgroundMusic("background.wav", true);
static_cast<ComAttribute*>(_owner->getComponent("CCComAttribute"))->setInt("KillCount", 0);
}

View File

@ -0,0 +1,38 @@
#include "OpenURLTest.h"
OpenURLTest::OpenURLTest()
{
auto label = Label::createWithTTF("Open URL Test", "fonts/arial.ttf", 28);
addChild(label, 0);
label->setPosition(VisibleRect::center().x, VisibleRect::top().y - 50);
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesEnded = CC_CALLBACK_2(OpenURLTest::onTouchesEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
// create a label to display the tip string
_label = Label::createWithTTF("Touch the screen to open\nthe cocos2d-x home page", "fonts/arial.ttf", 22);
_label->setPosition(VisibleRect::center());
addChild(_label, 0);
_label->retain();
}
void OpenURLTest::onTouchesEnded(const std::vector<Touch*>& touches, Event *event)
{
Application::getInstance()->openURL("http://www.cocos2d-x.org/");
}
OpenURLTest::~OpenURLTest()
{
_label->release();
}
void OpenURLTestScene::runThisTest()
{
auto layer = new (std::nothrow) OpenURLTest();
addChild(layer);
Director::getInstance()->replaceScene(this);
layer->release();
}

View File

@ -0,0 +1,24 @@
#ifndef _OPEN_URL_TEST_H_
#define _OPEN_URL_TEST_H_
#include "cocos2d.h"
#include "../testBasic.h"
class OpenURLTest : public Layer
{
public:
OpenURLTest();
~OpenURLTest();
void onTouchesEnded(const std::vector<Touch*>& touches, cocos2d::Event *event);
private:
cocos2d::Label* _label;
};
class OpenURLTestScene : public TestScene
{
public:
virtual void runThisTest();
};
#endif // _OPEN_URL_TEST_H_

View File

@ -104,7 +104,8 @@ Controller g_aTestNames[] = {
{ "Touches", [](){return new PongScene();} },
{ "Transitions", [](){return new TransitionsTestScene();} },
{ "Unit Test", []() { return new UnitTestScene(); }},
{ "UserDefault", []() { return new UserDefaultTestScene(); } },
{ "URL Open Test", []() { return new OpenURLTestScene(); } },
{ "UserDefault", []() { return new UserDefaultTestScene(); } },
{ "Zwoptex", []() { return new ZwoptexTestScene(); } },
};

View File

@ -75,4 +75,6 @@
#include "Camera3DTest/Camera3DTest.h"
#include "BillBoardTest/BillBoardTest.h"
#include "OpenURLTest/OpenURLTest.h"
#endif

View File

@ -186,6 +186,7 @@ LOCAL_SRC_FILES := main.cpp \
../../Classes/UnitTest/UnitTest.cpp \
../../Classes/UITest/UITest.cpp \
../../Classes/UserDefaultTest/UserDefaultTest.cpp \
../../Classes/OpenURLTest/OpenURLTest.cpp \
../../Classes/ZwoptexTest/ZwoptexTest.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \

View File

@ -275,6 +275,7 @@
<ClCompile Include="..\Classes\PerformanceTest\PerformanceTextureTest.cpp" />
<ClCompile Include="..\Classes\PerformanceTest\PerformanceTouchesTest.cpp" />
<ClCompile Include="..\Classes\PerformanceTest\PerformanceCallbackTest.cpp" />
<ClCompile Include="..\Classes\OpenURLTest\OpenURLTest.cpp" />
<ClCompile Include="..\Classes\ZwoptexTest\ZwoptexTest.cpp" />
<ClCompile Include="..\Classes\CurlTest\CurlTest.cpp" />
<ClCompile Include="..\Classes\TextInputTest\TextInputTest.cpp" />
@ -466,6 +467,7 @@
<ClInclude Include="..\Classes\PerformanceTest\PerformanceTextureTest.h" />
<ClInclude Include="..\Classes\PerformanceTest\PerformanceTouchesTest.h" />
<ClInclude Include="..\Classes\PerformanceTest\PerformanceCallbackTest.h" />
<ClInclude Include="..\Classes\OpenURLTest\OpenURLTest.h" />
<ClInclude Include="..\Classes\ZwoptexTest\ZwoptexTest.h" />
<ClInclude Include="..\Classes\CurlTest\CurlTest.h" />
<ClInclude Include="..\Classes\TextInputTest\TextInputTest.h" />

View File

@ -444,6 +444,9 @@
<ClCompile Include="..\Classes\PerformanceTest\PerformanceCallbackTest.cpp">
<Filter>Classes\PerformanceTest</Filter>
</ClCompile>
<ClCompile Include="..\Classes\OpenURLTest\OpenURLTest.cpp">
<Filter>Classes\OpenURLTest</Filter>
</ClCompile>
<ClCompile Include="..\Classes\ZwoptexTest\ZwoptexTest.cpp">
<Filter>Classes\ZwoptexTest</Filter>
</ClCompile>
@ -989,6 +992,9 @@
<ClInclude Include="..\Classes\PerformanceTest\PerformanceCallbackTest.h">
<Filter>Classes\PerformanceTest</Filter>
</ClInclude>
<ClInclude Include="..\Classes\OpenURLTest\OpenURLTest.h">
<Filter>Classes\OpenURLTest</Filter>
</ClInclude>
<ClInclude Include="..\Classes\ZwoptexTest\ZwoptexTest.h">
<Filter>Classes\ZwoptexTest</Filter>
</ClInclude>

View File

@ -218,6 +218,7 @@
<ClCompile Include="..\..\Classes\LabelTest\LabelTestNew.cpp" />
<ClCompile Include="..\..\Classes\NewEventDispatcherTest\NewEventDispatcherTest.cpp" />
<ClCompile Include="..\..\Classes\NewRendererTest\NewRendererTest.cpp" />
<ClCompile Include="..\..\Classes\OpenURLTest\OpenURLTest.cpp" />
<ClCompile Include="..\..\Classes\PerformanceTest\PerformanceAllocTest.cpp" />
<ClCompile Include="..\..\Classes\PerformanceTest\PerformanceContainerTest.cpp" />
<ClCompile Include="..\..\Classes\PerformanceTest\PerformanceEventDispatcherTest.cpp" />
@ -421,6 +422,7 @@
<ClInclude Include="..\..\Classes\LabelTest\LabelTestNew.h" />
<ClInclude Include="..\..\Classes\NewEventDispatcherTest\NewEventDispatcherTest.h" />
<ClInclude Include="..\..\Classes\NewRendererTest\NewRendererTest.h" />
<ClInclude Include="..\..\Classes\OpenURLTest\OpenURLTest.h" />
<ClInclude Include="..\..\Classes\PerformanceTest\PerformanceAllocTest.h" />
<ClInclude Include="..\..\Classes\PerformanceTest\PerformanceContainerTest.h" />
<ClInclude Include="..\..\Classes\PerformanceTest\PerformanceEventDispatcherTest.h" />

View File

@ -325,6 +325,9 @@
<Filter Include="Classes\BillBoardTest">
<UniqueIdentifier>{4dadf399-3bf1-4d35-85d1-d8def766fe0f}</UniqueIdentifier>
</Filter>
<Filter Include="Classes\OpenURLTest">
<UniqueIdentifier>{f3b97ed6-a90e-4abc-b916-f91da5de888d}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Classes\AppDelegate.cpp">
@ -862,6 +865,9 @@
<ClCompile Include="..\..\Classes\BillBoardTest\BillBoardTest.cpp">
<Filter>Classes\BillBoardTest</Filter>
</ClCompile>
<ClCompile Include="..\..\Classes\OpenURLTest\OpenURLTest.cpp">
<Filter>Classes\OpenURLTest</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Classes\AppDelegate.h">
@ -1598,6 +1604,9 @@
<ClInclude Include="..\..\Classes\BillBoardTest\BillBoardTest.h">
<Filter>Classes\BillBoardTest</Filter>
</ClInclude>
<ClInclude Include="..\..\Classes\OpenURLTest\OpenURLTest.h">
<Filter>Classes\OpenURLTest</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\external\curl\prebuilt\wp8\arm\libcurl.dll" />

View File

@ -350,7 +350,7 @@ function AudioProfileTest.create()
AudioProfileTest._files = {}
AudioProfileTest._files[1] = "background.mp3"
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
if (cc.PLATFORM_OS_MAC == currPlatform or cc.PLATFORM_OS_IPHONE == targetPlatform or cc.PLATFORM_OS_IPAD == targetPlatform) then
if (cc.PLATFORM_OS_MAC == targetPlatform or cc.PLATFORM_OS_IPHONE == targetPlatform or cc.PLATFORM_OS_IPAD == targetPlatform) then
AudioProfileTest._files[2] = "background.caf"
elseif (cc.PLATFORM_OS_ANDROID == targetPlatform) then
AudioProfileTest._files[2] = "background.ogg"
@ -388,7 +388,7 @@ function AudioProfileTest.create()
ccexp.AudioEngine:setFinishCallback(audioID,finishCallback)
end
end
local item = cc.MenuItemFont:create("play "..AudioProfileTest._files[index])
item:setFontSizeObj(20)
item:setPosition(cc.p(layerSize.width * 0.5,layerSize.height * heightRatio))
@ -490,7 +490,7 @@ function LargeAudioFileTest.create()
local layerSize = layer:getContentSize()
local function playAudio(tag, sender)
ccexp.AudioEngine:play2d("audio/Chee Lai(Arise).mp3")
ccexp.AudioEngine:play2d("audio/LuckyDay.mp3")
end
local playItem = cc.MenuItemFont:create("play large audio file")

View File

@ -26,7 +26,7 @@ headers = %(cocosdir)s/cocos/cocos2d.h %(cocosdir)s/cocos/2d/CCProtectedNode.h
# what classes to produce code for. You can use regular expressions here. When testing the regular
# expression, it will be enclosed in "^$", like this: "^Menu*$".
classes = New.* Sprite.* Scene Node.* Director Layer.* Menu.* Touch .*Action.* Move.* Rotate.* Blink.* Tint.* Sequence Repeat.* Fade.* Ease.* Scale.* Transition.* Spawn Animat.* Flip.* Delay.* Skew.* Jump.* Place.* Show.* Progress.* PointArray ToggleVisibility.* RemoveSelf Hide Particle.* Label.* Atlas.* TextureCache.* Texture2D Cardinal.* CatmullRom.* ParallaxNode TileMap.* .*TMX.* CallFunc RenderTexture GridAction Grid3DAction GridBase$ .+Grid Shaky3D Waves3D FlipX3D FlipY3D Speed ActionManager Set Scheduler Timer Orbit.* Follow.* Bezier.* CardinalSpline.* Camera.* DrawNode .*3D$ Liquid$ Waves$ ShuffleTiles$ TurnOffTiles$ Split.* Twirl$ FileUtils$ GLProgram ShaderCache Application ClippingNode MotionStreak ^Ref$ UserDefault GLViewImpl GLView Image Event(?!.*(Physics).*).* Component ProtectedNode Console GLProgramCache GLProgramState Camera
classes = New.* Sprite.* Scene Node.* Director Layer.* Menu.* Touch .*Action.* Move.* Rotate.* Blink.* Tint.* Sequence Repeat.* Fade.* Ease.* Scale.* Transition.* Spawn Animat.* Flip.* Delay.* Skew.* Jump.* Place.* Show.* Progress.* PointArray ToggleVisibility.* RemoveSelf Hide Particle.* Label.* Atlas.* TextureCache.* Texture2D Cardinal.* CatmullRom.* ParallaxNode TileMap.* .*TMX.* CallFunc RenderTexture GridAction Grid3DAction GridBase$ .+Grid Shaky3D Waves3D FlipX3D FlipY3D Speed ActionManager Set Scheduler Timer Orbit.* Follow.* Bezier.* CardinalSpline.* Camera.* DrawNode .*3D$ Liquid$ Waves$ ShuffleTiles$ TurnOffTiles$ Split.* Twirl$ FileUtils$ GLProgram ShaderCache Application ClippingNode MotionStreak ^Ref$ UserDefault GLViewImpl GLView Image Event(?!.*(Physics).*).* Component ProtectedNode Console GLProgramCache GLProgramState Camera Device
# what should we skip? in the format ClassName::[function function]
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
@ -137,6 +137,7 @@ skip = Node::[setGLServerState description getUserObject .*UserData getGLServerS
Sprite3DMaterialCache::[*],
Sprite3DCache::[*],
Bone3D::[*],
Device::[getTextureDataForText],
BillBoard::[*]
rename_functions = SpriteFrameCache::[addSpriteFramesWithFile=addSpriteFrames getSpriteFrameByName=getSpriteFrame],

View File

@ -7,6 +7,8 @@ prefix = cocos2dx_audioengine
# all classes will be embedded in that namespace
target_namespace = ccexp
macro_judgement = #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC
android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include
android_flags = -D_SIZE_T_DEFINED_