Merge branch 'v3' of https://github.com/cocos2d/cocos2d-x into v3-game

This commit is contained in:
Wenhai Lin 2014-12-11 18:24:03 +08:00
commit 46f6f6bb34
27 changed files with 533 additions and 551 deletions

View File

@ -1,6 +1,7 @@
cocos2d-x-3.3 Dec.12
[FIX] Billboard: allow billboard rotate along z axis
[FIX] Bundle3D: create aabb for mesh whose aabb does not exist (user custom mesh)
[FIX] EditBox: text position and move animation error on iPhone6 Plus
[FIX] FileUtils: createDirectory(): doesn't invoke closedir() after opendir on platforms other than WP8/WinRT/Windows
cocos2d-x-3.3-rc2 Dec.5

View File

@ -83,6 +83,12 @@ Run
$ cocos run -p win32
### Build and run new project for Windows 8.1 and Windows Phone 8.1 ###
$ cocos new MyGame -p com.bar.foo -l cpp -d projects
With the Cocos2d-x v3.3, you can create Universal App (Two projects at the same time: Windows(Tablet) and Windows Phone 8.1 )
See more info on How to install and Create games on Windows RT (Windows and Windows Phone 8.1) at http://msopentech.github.io/cocos2d-x/
Main features
-------------
@ -124,15 +130,18 @@ Build Requirements
* or Windows 7+, VS 2012+
* Python 2.7.5
* NDK r9d is required to build Android games
* Windows Phone/Store 8.0 VS 2012+
* Windows Phone/Store 8.1 VS 2013 Update 3+
Runtime Requirements
--------------------
* iOS 5.0+ for iPhone / iPad games
* Android 2.3+ for Android games
* Windows Phone 8+ for Windows Phone games
* Windows Phone 8 and 8.1 for Windows Phone games
* OS X v10.6+ for Mac games
* Windows 7+ for Win games
* Windows 8+ for WinRT games (Modern Apps)
Running Tests

View File

@ -52,8 +52,14 @@ public:
KEY_RETURN,
KEY_CAPS_LOCK,
KEY_SHIFT,
KEY_LEFT_SHIFT = KEY_SHIFT,
KEY_RIGHT_SHIFT,
KEY_CTRL,
KEY_LEFT_CTRL = KEY_CTRL,
KEY_RIGHT_CTRL,
KEY_ALT,
KEY_LEFT_ALT = KEY_ALT,
KEY_RIGHT_ALT,
KEY_MENU,
KEY_HYPER,
KEY_INSERT,
@ -201,13 +207,7 @@ public:
KEY_DPAD_DOWN,
KEY_DPAD_CENTER,
KEY_ENTER,
KEY_PLAY,
KEY_LEFT_CTRL,
KEY_RIGHT_CTRL,
KEY_LEFT_ALT,
KEY_RIGHT_ALT,
KEY_LEFT_SHIFT,
KEY_RIGHT_SHIFT
KEY_PLAY
};
EventKeyboard(KeyCode keyCode, bool isPressed);

View File

@ -31,7 +31,7 @@ NS_CC_BEGIN
CC_DLL const char* cocos2dVersion()
{
return "cocos2d-x 3.3rc2";
return "cocos2d-x 3.3";
}
NS_CC_END

View File

@ -682,9 +682,20 @@ Frame* ActionTimelineCache::loadColorFrameWithFlatBuffers(const flatbuffers::Tim
Frame* ActionTimelineCache::loadTextureFrameWithFlatBuffers(const flatbuffers::TimeLineTextureFrame *flatbuffers)
{
std::string path = "";
int resourceType = 0;
std::string plist = "";
TextureFrame* frame = TextureFrame::create();
std::string path = flatbuffers->path()->c_str();
auto fileNameData = flatbuffers->fileNameData();
resourceType = fileNameData->resourceType();
switch (resourceType)
{
case 0:
{
path = fileNameData->path()->c_str();
if (FileUtils::getInstance()->isFileExist(path))
{
std::string fullPath = FileUtils::getInstance()->fullPathForFilename(path);
@ -694,6 +705,28 @@ Frame* ActionTimelineCache::loadTextureFrameWithFlatBuffers(const flatbuffers::T
{
path = "";
}
break;
}
case 1:
{
plist = fileNameData->plistFile()->c_str();
if (FileUtils::getInstance()->isFileExist(plist))
{
path = fileNameData->path()->c_str();
}
else
{
path = "";
}
break;
}
default:
break;
}
frame->setTextureName(path);
int frameIndex = flatbuffers->frameIndex();

View File

@ -2038,13 +2038,13 @@ inline flatbuffers::Offset<TimeLineColorFrame> CreateTimeLineColorFrame(flatbuff
struct TimeLineTextureFrame : private flatbuffers::Table {
int32_t frameIndex() const { return GetField<int32_t>(4, 0); }
uint8_t tween() const { return GetField<uint8_t>(6, 1); }
const flatbuffers::String *path() const { return GetPointer<const flatbuffers::String *>(8); }
const ResourceData *fileNameData() const { return GetPointer<const ResourceData *>(8); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int32_t>(verifier, 4 /* frameIndex */) &&
VerifyField<uint8_t>(verifier, 6 /* tween */) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 8 /* path */) &&
verifier.Verify(path()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 8 /* fileNameData */) &&
verifier.VerifyTable(fileNameData()) &&
verifier.EndTable();
}
};
@ -2054,7 +2054,7 @@ struct TimeLineTextureFrameBuilder {
flatbuffers::uoffset_t start_;
void add_frameIndex(int32_t frameIndex) { fbb_.AddElement<int32_t>(4, frameIndex, 0); }
void add_tween(uint8_t tween) { fbb_.AddElement<uint8_t>(6, tween, 1); }
void add_path(flatbuffers::Offset<flatbuffers::String> path) { fbb_.AddOffset(8, path); }
void add_fileNameData(flatbuffers::Offset<ResourceData> fileNameData) { fbb_.AddOffset(8, fileNameData); }
TimeLineTextureFrameBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
TimeLineTextureFrameBuilder &operator=(const TimeLineTextureFrameBuilder &);
flatbuffers::Offset<TimeLineTextureFrame> Finish() {
@ -2066,9 +2066,9 @@ struct TimeLineTextureFrameBuilder {
inline flatbuffers::Offset<TimeLineTextureFrame> CreateTimeLineTextureFrame(flatbuffers::FlatBufferBuilder &_fbb,
int32_t frameIndex = 0,
uint8_t tween = 1,
flatbuffers::Offset<flatbuffers::String> path = 0) {
flatbuffers::Offset<ResourceData> fileNameData = 0) {
TimeLineTextureFrameBuilder builder_(_fbb);
builder_.add_path(path);
builder_.add_fileNameData(fileNameData);
builder_.add_frameIndex(frameIndex);
builder_.add_tween(tween);
return builder_.Finish();

View File

@ -59,6 +59,7 @@
#include "flatbuffers/util.h"
USING_NS_CC;
using namespace cocos2d::ui;
using namespace cocostudio;
@ -77,6 +78,8 @@ static const char* FrameType_TextureFrame = "TextureFrame";
static const char* FrameType_EventFrame = "EventFrame";
static const char* FrameType_ZOrderFrame = "ZOrderFrame";
static FlatBuffersSerialize* _instanceFlatBuffersSerialize = nullptr;
FlatBuffersSerialize::FlatBuffersSerialize()
: _isSimulator(false)
, _builder(nullptr)
@ -109,11 +112,9 @@ FlatBuffersSerialize::~FlatBuffersSerialize()
purge();
}
static FlatBuffersSerialize* _instanceFlatBuffersSerialize = nullptr;
FlatBuffersSerialize* FlatBuffersSerialize::getInstance()
{
if (_instanceFlatBuffersSerialize == nullptr)
if (!_instanceFlatBuffersSerialize)
{
_instanceFlatBuffersSerialize = new FlatBuffersSerialize();
}
@ -124,6 +125,16 @@ FlatBuffersSerialize* FlatBuffersSerialize::getInstance()
void FlatBuffersSerialize::purge()
{
CC_SAFE_DELETE(_instanceFlatBuffersSerialize);
}
void FlatBuffersSerialize::deleteFlatBufferBuilder()
{
if (_builder != nullptr)
{
_builder->Clear();
CC_SAFE_DELETE(_builder);
}
}
std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::string &xmlFileName,
@ -146,7 +157,7 @@ std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::str
document->Parse(content.c_str());
const tinyxml2::XMLElement* rootElement = document->RootElement();// Root
CCLOG("rootElement name = %s", rootElement->Name());
// CCLOG("rootElement name = %s", rootElement->Name());
const tinyxml2::XMLElement* element = rootElement->FirstChildElement();
@ -155,7 +166,7 @@ std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::str
while (element)
{
CCLOG("entity name = %s", element->Name());
// CCLOG("entity name = %s", element->Name());
if (strcmp("Content", element->Name()) == 0)
{
@ -209,8 +220,7 @@ std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::str
if (serializeEnabled)
{
FlatBufferBuilder builder;
_builder = &builder;
_builder = new FlatBufferBuilder();
Offset<NodeTree> nodeTree;
Offset<NodeAction> aciton;
@ -236,12 +246,12 @@ std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::str
child = child->NextSiblingElement();
}
auto csparsebinary = CreateCSParseBinary(builder,
builder.CreateVector(_textures),
builder.CreateVector(_texturePngs),
auto csparsebinary = CreateCSParseBinary(*_builder,
_builder->CreateVector(_textures),
_builder->CreateVector(_texturePngs),
nodeTree,
aciton);
builder.Finish(csparsebinary);
_builder->Finish(csparsebinary);
_textures.clear();
_texturePngs.clear();
@ -251,13 +261,15 @@ std::string FlatBuffersSerialize::serializeFlatBuffersWithXMLFile(const std::str
size_t pos = outFullPath.find_last_of('.');
std::string convert = outFullPath.substr(0, pos).append(".csb");
auto save = flatbuffers::SaveFile(convert.c_str(),
reinterpret_cast<const char *>(builder.GetBufferPointer()),
builder.GetSize(),
reinterpret_cast<const char *>(_builder->GetBufferPointer()),
_builder->GetSize(),
true);
if (!save)
{
return "couldn't save files!";
}
deleteFlatBufferBuilder();
}
return "";
@ -268,7 +280,7 @@ Offset<NodeTree> FlatBuffersSerialize::createNodeTree(const tinyxml2::XMLElement
std::string classType)
{
std::string classname = classType.substr(0, classType.find("ObjectData"));
CCLOG("classname = %s", classname.c_str());
// CCLOG("classname = %s", classname.c_str());
std::string name = "";
@ -301,7 +313,7 @@ Offset<NodeTree> FlatBuffersSerialize::createNodeTree(const tinyxml2::XMLElement
while (child)
{
CCLOG("child name = %s", child->Name());
// CCLOG("child name = %s", child->Name());
if (strcmp("Children", child->Name()) == 0)
{
@ -315,7 +327,7 @@ Offset<NodeTree> FlatBuffersSerialize::createNodeTree(const tinyxml2::XMLElement
if (containChildrenElement)
{
child = child->FirstChildElement();
CCLOG("element name = %s", child->Name());
// CCLOG("element name = %s", child->Name());
while (child)
{
@ -368,259 +380,7 @@ Offset<NodeTree> FlatBuffersSerialize::createNodeTree(const tinyxml2::XMLElement
_builder->CreateVector(children),
options,
_builder->CreateString(customClassName));
}
FlatBufferBuilder* FlatBuffersSerialize::createFlatBuffersWithXMLFileForSimulator(const std::string &xmlFileName)
{
std::string inFullpath = FileUtils::getInstance()->fullPathForFilename(xmlFileName).c_str();
// xml read
if (!FileUtils::getInstance()->isFileExist(inFullpath))
{
CCLOG(".csd file doesn not exists ");
}
ssize_t size;
std::string content =(char*)FileUtils::getInstance()->getFileData(inFullpath, "r", &size);
// xml parse
tinyxml2::XMLDocument* document = new tinyxml2::XMLDocument();
document->Parse(content.c_str());
const tinyxml2::XMLElement* rootElement = document->RootElement();// Root
CCLOG("rootElement name = %s", rootElement->Name());
const tinyxml2::XMLElement* element = rootElement->FirstChildElement();
bool serializeEnabled = false;
std::string rootType = "";
while (element)
{
CCLOG("entity name = %s", element->Name());
if (strcmp("Content", element->Name()) == 0)
{
const tinyxml2::XMLAttribute* attribute = element->FirstAttribute();
//
if (!attribute)
{
serializeEnabled = true;
rootType = "NodeObjectData";
}
}
if (serializeEnabled)
{
break;
}
const tinyxml2::XMLElement* child = element->FirstChildElement();
if (child)
{
element = child;
}
else
{
element = element->NextSiblingElement();
}
}
if (serializeEnabled)
{
_builder = new FlatBufferBuilder();
Offset<NodeTree> nodeTree;
Offset<NodeAction> aciton;
const tinyxml2::XMLElement* child = element->FirstChildElement();
while (child)
{
std::string name = child->Name();
if (name == "Animation") // action
{
const tinyxml2::XMLElement* animation = child;
aciton = createNodeAction(animation);
}
else if (name == "ObjectData") // nodeTree
{
const tinyxml2::XMLElement* objectData = child;
nodeTree = createNodeTreeForSimulator(objectData, rootType);
}
child = child->NextSiblingElement();
}
auto csparsebinary = CreateCSParseBinary(*_builder,
_builder->CreateVector(_textures),
_builder->CreateVector(_texturePngs),
nodeTree,
aciton);
_builder->Finish(csparsebinary);
_textures.clear();
_texturePngs.clear();
}
return _builder;
}
Offset<NodeTree> FlatBuffersSerialize::createNodeTreeForSimulator(const tinyxml2::XMLElement *objectData,
std::string classType)
{
std::string classname = classType.substr(0, classType.find("ObjectData"));
CCLOG("classname = %s", classname.c_str());
std::string name = "";
Offset<Options> options;
std::vector<Offset<NodeTree>> children;
if (classname == "ProjectNode")
{
auto projectNodeOptions = createProjectNodeOptionsForSimulator(objectData);
options = CreateOptions(*_builder, *(Offset<Table>*)(&projectNodeOptions));
}
else if (classname == "SimpleAudio")
{
auto reader = ComAudioReader::getInstance();
options = CreateOptions(*_builder, reader->createOptionsWithFlatBuffers(objectData, _builder));
}
else
{
std::string readername = getGUIClassName(classname);
readername.append("Reader");
NodeReaderProtocol* reader = dynamic_cast<NodeReaderProtocol*>(ObjectFactory::getInstance()->createObject(readername));
options = CreateOptions(*_builder, reader->createOptionsWithFlatBuffers(objectData, _builder));
}
// children
bool containChildrenElement = false;
const tinyxml2::XMLElement* child = objectData->FirstChildElement();
while (child)
{
CCLOG("child name = %s", child->Name());
if (strcmp("Children", child->Name()) == 0)
{
containChildrenElement = true;
break;
}
child = child->NextSiblingElement();
}
if (containChildrenElement)
{
child = child->FirstChildElement();
CCLOG("element name = %s", child->Name());
while (child)
{
const tinyxml2::XMLAttribute* attribute = child->FirstAttribute();
bool bHasType = false;
while (attribute)
{
std::string attriname = attribute->Name();
std::string value = attribute->Value();
if (attriname == "ctype")
{
children.push_back(createNodeTreeForSimulator(child, value));
bHasType = true;
break;
}
attribute = attribute->Next();
}
if(!bHasType)
{
children.push_back(createNodeTreeForSimulator(child, "NodeObjectData"));
}
child = child->NextSiblingElement();
}
}
//
std::string customClassName = "";
const tinyxml2::XMLAttribute* attribute = objectData->FirstAttribute();
while (attribute)
{
std::string attriname = attribute->Name();
std::string value = attribute->Value();
if (attriname == "CustomClassName")
{
customClassName = value;
break;
}
attribute = attribute->Next();
}
return CreateNodeTree(*_builder,
_builder->CreateString(classname),
_builder->CreateVector(children),
options,
_builder->CreateString(customClassName));
}
Offset<ProjectNodeOptions> FlatBuffersSerialize::createProjectNodeOptionsForSimulator(const tinyxml2::XMLElement *objectData)
{
auto temp = NodeReader::getInstance()->createOptionsWithFlatBuffers(objectData, _builder);
auto nodeOptions = *(Offset<WidgetOptions>*)(&temp);
std::string filename = "";
// FileData
const tinyxml2::XMLElement* child = objectData->FirstChildElement();
while (child)
{
std::string name = child->Name();
if (name == "FileData")
{
const tinyxml2::XMLAttribute* attribute = child->FirstAttribute();
while (attribute)
{
name = attribute->Name();
std::string value = attribute->Value();
if (name == "Path")
{
filename = value;
}
attribute = attribute->Next();
}
}
child = child->NextSiblingElement();
}
return CreateProjectNodeOptions(*_builder,
nodeOptions,
_builder->CreateString(filename));
}
void FlatBuffersSerialize::deleteFlatBufferBuilder()
{
if (_builder != nullptr)
{
_builder->Clear();
CC_SAFE_DELETE(_builder);
}
}
int FlatBuffersSerialize::getResourceType(std::string key)
@ -737,6 +497,7 @@ std::string FlatBuffersSerialize::getWidgetReaderClassName(Widget* widget)
return readerName;
}
//
// NodeAction
@ -745,7 +506,7 @@ Offset<NodeAction> FlatBuffersSerialize::createNodeAction(const tinyxml2::XMLEle
int duration = 0;
float speed = 0.0f;
CCLOG("animation name = %s", objectData->Name());
// CCLOG("animation name = %s", objectData->Name());
// ActionTimeline
const tinyxml2::XMLAttribute* attribute = objectData->FirstAttribute();
@ -822,17 +583,13 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
auto visibleFrame = createTimeLineBoolFrame(frameElement);
frame = CreateFrame(*_builder,
visibleFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_ZOrderFrame)
{
auto zOrderFrame = createTimeLineIntFrame(objectData);
auto zOrderFrame = createTimeLineIntFrame(frameElement);
frame = CreateFrame(*_builder,
0, // VisibleFrame
zOrderFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_RotationSkewFrame)
{
@ -841,8 +598,6 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
0, // VisibleFrame
0, // ZOrderFrame
rotationSkewFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_EventFrame)
{
@ -852,8 +607,6 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
0, // ZOrderFrame
0, // RotationSkewFrame
eventFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_AnchorFrame)
{
@ -864,8 +617,6 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
0, // RotationSkewFrame
0, // EventFrame
anchorPointFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_PositionFrame)
{
@ -877,12 +628,10 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
0, // EventFrame
0, // AnchorPointFrame
positionFrame);
frames.push_back(frame);
}
else if (frameType == FrameType_ScaleFrame)
{
auto scaleFrame = createTimeLinePointFrame(objectData);
auto scaleFrame = createTimeLinePointFrame(frameElement);
frame = CreateFrame(*_builder,
0, // VisibleFrame
0, // ZOrderFrame
@ -894,7 +643,7 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
}
else if (frameType == FrameType_ColorFrame)
{
auto colorFrame = createTimeLineColorFrame(objectData);
auto colorFrame = createTimeLineColorFrame(frameElement);
frame = CreateFrame(*_builder,
0, // VisibleFrame
0, // ZOrderFrame
@ -907,7 +656,7 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
}
else if (frameType == FrameType_TextureFrame)
{
auto textureFrame = createTimeLineTextureFrame(objectData);
auto textureFrame = createTimeLineTextureFrame(frameElement);
frame = CreateFrame(*_builder,
0, // VisibleFrame
0, // ZOrderFrame
@ -919,6 +668,7 @@ Offset<TimeLine> FlatBuffersSerialize::createTimeLine(const tinyxml2::XMLElement
0, // ColorFrame
textureFrame);
}
frames.push_back(frame);
frameElement = frameElement->NextSiblingElement();
}
@ -1136,8 +886,8 @@ Offset<TimeLineColorFrame> FlatBuffersSerialize::createTimeLineColorFrame(const
&f_color);
}
Offset<TimeLineTextureFrame> FlatBuffersSerialize::createTimeLineTextureFrame(const tinyxml2::XMLElement *objectData)
{
Offset<TimeLineTextureFrame> FlatBuffersSerialize::createTimeLineTextureFrame(const tinyxml2::XMLElement *objectData)
{
int frameIndex = 0;
bool tween = true;
@ -1145,6 +895,9 @@ Offset<TimeLineTextureFrame> FlatBuffersSerialize::createTimeLineTextureFrame(co
std::string plistFile = "";
int resourceType = 0;
std::string texture = "";
std::string texturePng = "";
const tinyxml2::XMLAttribute* attribute = objectData->FirstAttribute();
while (attribute)
{
@ -1174,12 +927,6 @@ Offset<TimeLineTextureFrame> FlatBuffersSerialize::createTimeLineTextureFrame(co
if (attriname == "Path")
{
std::string inFullpath = FileUtils::getInstance()->fullPathForFilename(value).c_str();
// xml read
if (!FileUtils::getInstance()->isFileExist(inFullpath))
path = "";
else
path = value;
}
else if (attriname == "Type")
@ -1189,29 +936,275 @@ Offset<TimeLineTextureFrame> FlatBuffersSerialize::createTimeLineTextureFrame(co
else if (attriname == "Plist")
{
plistFile = value;
std::string inFullpath = FileUtils::getInstance()->fullPathForFilename(value).c_str();
// xml read
if (!FileUtils::getInstance()->isFileExist(inFullpath))
{
path = "";
plistFile = "";
}
else
plistFile = value;
texture = value;
}
attribute = attribute->Next();
}
if (resourceType == 1)
{
_textures.push_back(_builder->CreateString(texture));
texturePng = texture.substr(0, texture.find_last_of('.')).append(".png");
_texturePngs.push_back(_builder->CreateString(texturePng));
}
child = child->NextSiblingElement();
}
return CreateTimeLineTextureFrame(*_builder,
frameIndex,
tween,
_builder->CreateString(path));
CreateResourceData(*_builder,
_builder->CreateString(path),
_builder->CreateString(plistFile),
resourceType));
}
/* create flat buffers with XML */
FlatBufferBuilder* FlatBuffersSerialize::createFlatBuffersWithXMLFileForSimulator(const std::string &xmlFileName)
{
std::string inFullpath = FileUtils::getInstance()->fullPathForFilename(xmlFileName).c_str();
// xml read
if (!FileUtils::getInstance()->isFileExist(inFullpath))
{
// CCLOG(".csd file doesn not exists ");
}
ssize_t size;
std::string content =(char*)FileUtils::getInstance()->getFileData(inFullpath, "r", &size);
// xml parse
tinyxml2::XMLDocument* document = new tinyxml2::XMLDocument();
document->Parse(content.c_str());
const tinyxml2::XMLElement* rootElement = document->RootElement();// Root
// CCLOG("rootElement name = %s", rootElement->Name());
const tinyxml2::XMLElement* element = rootElement->FirstChildElement();
bool serializeEnabled = false;
std::string rootType = "";
while (element)
{
// CCLOG("entity name = %s", element->Name());
if (strcmp("Content", element->Name()) == 0)
{
const tinyxml2::XMLAttribute* attribute = element->FirstAttribute();
//
if (!attribute)
{
serializeEnabled = true;
rootType = "NodeObjectData";
}
}
if (serializeEnabled)
{
break;
}
const tinyxml2::XMLElement* child = element->FirstChildElement();
if (child)
{
element = child;
}
else
{
element = element->NextSiblingElement();
}
}
if (serializeEnabled)
{
_builder = new FlatBufferBuilder();
Offset<NodeTree> nodeTree;
Offset<NodeAction> aciton;
const tinyxml2::XMLElement* child = element->FirstChildElement();
while (child)
{
std::string name = child->Name();
if (name == "Animation") // action
{
const tinyxml2::XMLElement* animation = child;
aciton = createNodeAction(animation);
}
else if (name == "ObjectData") // nodeTree
{
const tinyxml2::XMLElement* objectData = child;
nodeTree = createNodeTreeForSimulator(objectData, rootType);
}
child = child->NextSiblingElement();
}
auto csparsebinary = CreateCSParseBinary(*_builder,
_builder->CreateVector(_textures),
_builder->CreateVector(_texturePngs),
nodeTree,
aciton);
_builder->Finish(csparsebinary);
_textures.clear();
_texturePngs.clear();
}
return _builder;
}
Offset<NodeTree> FlatBuffersSerialize::createNodeTreeForSimulator(const tinyxml2::XMLElement *objectData,
std::string classType)
{
std::string classname = classType.substr(0, classType.find("ObjectData"));
// CCLOG("classname = %s", classname.c_str());
std::string name = "";
Offset<Options> options;
std::vector<Offset<NodeTree>> children;
if (classname == "ProjectNode")
{
auto projectNodeOptions = createProjectNodeOptionsForSimulator(objectData);
options = CreateOptions(*_builder, *(Offset<Table>*)(&projectNodeOptions));
}
else if (classname == "SimpleAudio")
{
auto reader = ComAudioReader::getInstance();
options = CreateOptions(*_builder, reader->createOptionsWithFlatBuffers(objectData, _builder));
}
else
{
std::string readername = getGUIClassName(classname);
readername.append("Reader");
NodeReaderProtocol* reader = dynamic_cast<NodeReaderProtocol*>(ObjectFactory::getInstance()->createObject(readername));
options = CreateOptions(*_builder, reader->createOptionsWithFlatBuffers(objectData, _builder));
}
// children
bool containChildrenElement = false;
const tinyxml2::XMLElement* child = objectData->FirstChildElement();
while (child)
{
// CCLOG("child name = %s", child->Name());
if (strcmp("Children", child->Name()) == 0)
{
containChildrenElement = true;
break;
}
child = child->NextSiblingElement();
}
if (containChildrenElement)
{
child = child->FirstChildElement();
// CCLOG("element name = %s", child->Name());
while (child)
{
const tinyxml2::XMLAttribute* attribute = child->FirstAttribute();
bool bHasType = false;
while (attribute)
{
std::string attriname = attribute->Name();
std::string value = attribute->Value();
if (attriname == "ctype")
{
children.push_back(createNodeTreeForSimulator(child, value));
bHasType = true;
break;
}
attribute = attribute->Next();
}
if(!bHasType)
{
children.push_back(createNodeTreeForSimulator(child, "NodeObjectData"));
}
child = child->NextSiblingElement();
}
}
//
std::string customClassName = "";
const tinyxml2::XMLAttribute* attribute = objectData->FirstAttribute();
while (attribute)
{
std::string attriname = attribute->Name();
std::string value = attribute->Value();
if (attriname == "CustomClassName")
{
customClassName = value;
break;
}
attribute = attribute->Next();
}
return CreateNodeTree(*_builder,
_builder->CreateString(classname),
_builder->CreateVector(children),
options,
_builder->CreateString(customClassName));
}
Offset<ProjectNodeOptions> FlatBuffersSerialize::createProjectNodeOptionsForSimulator(const tinyxml2::XMLElement *objectData)
{
auto temp = NodeReader::getInstance()->createOptionsWithFlatBuffers(objectData, _builder);
auto nodeOptions = *(Offset<WidgetOptions>*)(&temp);
std::string filename = "";
// FileData
const tinyxml2::XMLElement* child = objectData->FirstChildElement();
while (child)
{
std::string name = child->Name();
if (name == "FileData")
{
const tinyxml2::XMLAttribute* attribute = child->FirstAttribute();
while (attribute)
{
name = attribute->Name();
std::string value = attribute->Value();
if (name == "Path")
{
filename = value;
}
attribute = attribute->Next();
}
}
child = child->NextSiblingElement();
}
return CreateProjectNodeOptions(*_builder,
nodeOptions,
_builder->CreateString(filename));
}
}

View File

@ -78,18 +78,27 @@ namespace flatbuffers
struct TimeLineTextureFrame;
}
namespace tinyxml2
{
class XMLElement;
}
namespace cocostudio {
class CC_STUDIO_DLL FlatBuffersSerialize
{
public:
static FlatBuffersSerialize* getInstance();
static void purge();
FlatBuffersSerialize();
~FlatBuffersSerialize();
static FlatBuffersSerialize* getInstance();
static void purge();
void deleteFlatBufferBuilder();
std::string test(const std::string& xmlFileName,
const std::string& flatbuffersFileName);
/* serialize flat buffers with XML */
std::string serializeFlatBuffersWithXMLFile(const std::string& xmlFileName,
@ -110,16 +119,16 @@ public:
flatbuffers::Offset<flatbuffers::TimeLineTextureFrame> createTimeLineTextureFrame(const tinyxml2::XMLElement* objectData);
/**/
int getResourceType(std::string key);
std::string getGUIClassName(const std::string &name);
std::string getWidgetReaderClassName(cocos2d::ui::Widget *widget);
/* create flat buffers with XML */
flatbuffers::FlatBufferBuilder* createFlatBuffersWithXMLFileForSimulator(const std::string& xmlFileName);
flatbuffers::Offset<flatbuffers::NodeTree> createNodeTreeForSimulator(const tinyxml2::XMLElement* objectData,
std::string classType);
flatbuffers::Offset<flatbuffers::ProjectNodeOptions> createProjectNodeOptionsForSimulator(const tinyxml2::XMLElement* objectData);
void deleteFlatBufferBuilder();
int getResourceType(std::string key);
std::string getGUIClassName(const std::string &name);
std::string getWidgetReaderClassName(cocos2d::ui::Widget *widget);
/**/
public:
std::vector<flatbuffers::Offset<flatbuffers::String>> _textures;
@ -131,7 +140,6 @@ private:
flatbuffers::Offset<flatbuffers::CSParseBinary>* _csparsebinary;
};
}
#endif /* defined(__cocos2d_libs__FlatBuffersSerialize__) */

View File

@ -232,7 +232,7 @@ namespace cocostudio
button->setTitleFontSize(DICTOOL->getIntValue_json(options, P_FontSize,14));
button->setTitleFontName(DICTOOL->getStringValue_json(options, P_FontName,"微软雅黑"));
button->setTitleFontName(DICTOOL->getStringValue_json(options, P_FontName, ""));
@ -572,19 +572,6 @@ namespace cocostudio
std::string disabledTexturePath = disabledDic->path()->c_str();
button->loadTextureDisabled(disabledTexturePath, (Widget::TextureResType)disabledType);
if (scale9Enabled)
{
button->setUnifySizeEnabled(false);
button->ignoreContentAdaptWithSize(false);
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
button->setCapInsets(capInsets);
Size scale9Size(options->scale9Size()->width(), options->scale9Size()->height());
button->setContentSize(scale9Size);
}
std::string titleText = options->text()->c_str();
button->setTitleText(titleText);
@ -609,19 +596,20 @@ namespace cocostudio
button->setBright(displaystate);
button->setEnabled(displaystate);
Size contentSize;
if (!button->isScale9Enabled())
{
button->setUnifySizeEnabled(true);
contentSize = button->getVirtualRendererSize();
}
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (!button->isScale9Enabled())
if (scale9Enabled)
{
button->setContentSize(contentSize);
button->setUnifySizeEnabled(false);
button->ignoreContentAdaptWithSize(false);
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
button->setCapInsets(capInsets);
Size scale9Size(options->scale9Size()->width(), options->scale9Size()->height());
button->setContentSize(scale9Size);
}
}

View File

@ -164,7 +164,7 @@ namespace cocostudio
auto temp = WidgetReader::getInstance()->createOptionsWithFlatBuffers(objectData, builder);
auto widgetOptions = *(Offset<WidgetOptions>*)(&temp);
bool selectedState = true;
bool selectedState = false;
bool displaystate = true;
int backgroundboxResourceType = 0;

View File

@ -302,6 +302,8 @@ namespace cocostudio
bool scale9Enabled = options->scale9Enabled();
imageView->setScale9Enabled(scale9Enabled);
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (scale9Enabled)
{
@ -318,9 +320,6 @@ namespace cocostudio
imageView->setCapInsets(capInsets);
}
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
}
Node* ImageViewReader::createNodeWithFlatBuffers(const flatbuffers::Table *imageViewOptions)

View File

@ -606,6 +606,16 @@ namespace cocostudio
std::string imageFileName = imageFileNameDic->path()->c_str();
panel->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType);
auto widgetOptions = options->widgetOptions();
auto f_color = widgetOptions->color();
Color3B color(f_color->r(), f_color->g(), f_color->b());
panel->setColor(color);
int opacity = widgetOptions->alpha();
panel->setOpacity(opacity);
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (backGroundScale9Enabled)
{
@ -619,7 +629,6 @@ namespace cocostudio
}
else
{
auto widgetOptions = options->widgetOptions();
if (!panel->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
@ -627,17 +636,6 @@ namespace cocostudio
}
}
auto widgetOptions = options->widgetOptions();
auto f_color = widgetOptions->color();
Color3B color(f_color->r(), f_color->g(), f_color->b());
panel->setColor(color);
int opacity = widgetOptions->alpha();
panel->setOpacity(opacity);
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
}
Node* LayoutReader::createNodeWithFlatBuffers(const flatbuffers::Table *layoutOptions)

View File

@ -434,27 +434,6 @@ namespace cocostudio
std::string imageFileName = imageFileNameDic->path()->c_str();
listView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType);
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
listView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
listView->setContentSize(scale9Size);
}
else
{
auto widgetOptions = options->widgetOptions();
if (!listView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
listView->setContentSize(contentSize);
}
}
auto widgetOptions = options->widgetOptions();
auto f_color = widgetOptions->color();
Color3B color(f_color->r(), f_color->g(), f_color->b());
@ -511,12 +490,26 @@ namespace cocostudio
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
listView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
listView->setContentSize(scale9Size);
}
else
{
auto widgetOptions = options->widgetOptions();
if (!listView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
listView->setContentSize(contentSize);
}
}
}
Node* ListViewReader::createNodeWithFlatBuffers(const flatbuffers::Table *listViewOptions)
{

View File

@ -290,7 +290,7 @@ namespace cocostudio
auto options = CreateWidgetOptions(*builder,
builder->CreateString(name),
actionTag,
(int)actionTag,
&f_rotationskew,
zOrder,
visible,

View File

@ -348,26 +348,6 @@ namespace cocostudio
pageView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType);
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
pageView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
pageView->setContentSize(scale9Size);
}
else
{
auto widgetOptions = options->widgetOptions();
if (!pageView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
pageView->setContentSize(contentSize);
}
}
auto widgetOptions = options->widgetOptions();
auto f_color = widgetOptions->color();
Color3B color(f_color->r(), f_color->g(), f_color->b());
@ -380,6 +360,24 @@ namespace cocostudio
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
pageView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
pageView->setContentSize(scale9Size);
}
else
{
if (!pageView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
pageView->setContentSize(contentSize);
}
}
}
Node* PageViewReader::createNodeWithFlatBuffers(const flatbuffers::Table *pageViewOptions)

View File

@ -433,27 +433,6 @@ namespace cocostudio
std::string imageFileName = imageFileNameDic->path()->c_str();
scrollView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType);
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
scrollView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
scrollView->setContentSize(scale9Size);
}
else
{
auto widgetOptions = options->widgetOptions();
if (!scrollView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
scrollView->setContentSize(contentSize);
}
}
auto widgetOptions = options->widgetOptions();
auto f_color = widgetOptions->color();
Color3B color(f_color->r(), f_color->g(), f_color->b());
@ -474,6 +453,25 @@ namespace cocostudio
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
if (backGroundScale9Enabled)
{
auto f_capInsets = options->capInsets();
Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height());
scrollView->setBackGroundImageCapInsets(capInsets);
auto f_scale9Size = options->scale9Size();
Size scale9Size(f_scale9Size->width(), f_scale9Size->height());
scrollView->setContentSize(scale9Size);
}
else
{
if (!scrollView->isIgnoreContentAdaptWithSize())
{
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
scrollView->setContentSize(contentSize);
}
}
}
Node* ScrollViewReader::createNodeWithFlatBuffers(const flatbuffers::Table *scrollViewOptions)

View File

@ -107,7 +107,7 @@ namespace cocostudio
textField->setFontSize(DICTOOL->getIntValue_json(options, P_FontSize,20));
textField->setFontName(DICTOOL->getStringValue_json(options, P_FontName,"微软雅黑"));
textField->setFontName(DICTOOL->getStringValue_json(options, P_FontName, ""));
bool tsw = DICTOOL->checkObjectExist_json(options, P_TouchSizeWidth);
bool tsh = DICTOOL->checkObjectExist_json(options, P_TouchSizeHeight);
@ -274,9 +274,6 @@ namespace cocostudio
TextField* textField = static_cast<TextField*>(node);
auto options = (TextFieldOptions*)textFieldOptions;
textField->setUnifySizeEnabled(false);
textField->ignoreContentAdaptWithSize(false);
std::string placeholder = options->placeHolder()->c_str();
textField->setPlaceHolder(placeholder);
@ -316,9 +313,13 @@ namespace cocostudio
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
textField->setUnifySizeEnabled(false);
textField->ignoreContentAdaptWithSize(false);
auto widgetOptions = options->widgetOptions();
if (!textField->isIgnoreContentAdaptWithSize())
{
((Label*)(textField->getVirtualRenderer()))->setLineBreakWithoutSpace(true);
Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height());
textField->setContentSize(contentSize);
}

View File

@ -111,7 +111,7 @@ namespace cocostudio
label->setFontSize(DICTOOL->getIntValue_json(options, P_FontSize,20));
std::string fontName = DICTOOL->getStringValue_json(options, P_FontName, "微软雅黑");
std::string fontName = DICTOOL->getStringValue_json(options, P_FontName, "");
std::string fontFilePath = jsonPath.append(fontName);
if (FileUtils::getInstance()->isFileExist(fontFilePath))
@ -292,11 +292,6 @@ namespace cocostudio
Text* label = static_cast<Text*>(node);
auto options = (TextOptions*)textOptions;
bool IsCustomSize = options->isCustomSize();
label->ignoreContentAdaptWithSize(!IsCustomSize);
label->setUnifySizeEnabled(false);
bool touchScaleEnabled = options->touchScaleEnable();
label->setTouchScaleChangeEnabled(touchScaleEnabled);
std::string text = options->text()->c_str();
@ -330,6 +325,11 @@ namespace cocostudio
auto widgetReader = WidgetReader::getInstance();
widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions());
label->setUnifySizeEnabled(false);
bool IsCustomSize = options->isCustomSize();
label->ignoreContentAdaptWithSize(!IsCustomSize);
auto widgetOptions = options->widgetOptions();
if (!label->isIgnoreContentAdaptWithSize())
{

View File

@ -661,38 +661,11 @@ void GLViewImpl::onGLFWMouseScrollCallback(GLFWwindow* window, double x, double
void GLViewImpl::onGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
EventKeyboard::KeyCode additionalKeyCode = EventKeyboard::KeyCode::KEY_NONE;
switch (key)
{
case GLFW_KEY_LEFT_ALT:
case GLFW_KEY_RIGHT_ALT:
additionalKeyCode = EventKeyboard::KeyCode::KEY_ALT;
break;
case GLFW_KEY_LEFT_CONTROL:
case GLFW_KEY_RIGHT_CONTROL:
additionalKeyCode = EventKeyboard::KeyCode::KEY_CTRL;
break;
case GLFW_KEY_LEFT_SHIFT:
case GLFW_KEY_RIGHT_SHIFT:
additionalKeyCode = EventKeyboard::KeyCode::KEY_SHIFT;
break;
default:
break;
}
if (GLFW_REPEAT != action)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
// Keep compatibility for the old keycodes like SHIFT, CTRL, ALT.
if (additionalKeyCode != EventKeyboard::KeyCode::KEY_NONE)
{
EventKeyboard additionalEvent(additionalKeyCode, GLFW_PRESS == action);
dispatcher->dispatchEvent(&additionalEvent);
}
}
if (GLFW_RELEASE != action && g_keyCodeMap[key] == EventKeyboard::KeyCode::KEY_BACKSPACE)

View File

@ -778,13 +778,10 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
float scaleY = glview->getScaleY();
if (self.contentScaleFactor == 2.0f)
{
// Convert to pixel coordinate
begin = CGRectApplyAffineTransform(begin, CGAffineTransformScale(CGAffineTransformIdentity, 2.0f, 2.0f));
end = CGRectApplyAffineTransform(end, CGAffineTransformScale(CGAffineTransformIdentity, 2.0f, 2.0f));
}
// Convert to pixel coordinate
begin = CGRectApplyAffineTransform(begin, CGAffineTransformScale(CGAffineTransformIdentity, self.contentScaleFactor, self.contentScaleFactor));
end = CGRectApplyAffineTransform(end, CGAffineTransformScale(CGAffineTransformIdentity, self.contentScaleFactor, self.contentScaleFactor));
float offestY = glview->getViewPortRect().origin.y;
CCLOG("offestY = %f", offestY);
@ -861,10 +858,7 @@ UIInterfaceOrientation getFixedOrientation(UIInterfaceOrientation statusBarOrien
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
dis *= glview->getScaleY();
if (self.contentScaleFactor == 2.0f)
{
dis /= 2.0f;
}
dis /= self.contentScaleFactor;
switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
{

View File

@ -44,7 +44,7 @@ int register_network_module(lua_State* L)
luaopen_lua_extensions(L);
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
tolua_web_socket_open(L);
register_web_socket_manual(L);
#endif

View File

@ -132,7 +132,6 @@ private:
Vec2 _anchorPoint;
UIEditBoxImplIOS_objc* _systemControl;
int _maxTextLength;
bool _inRetinaMode;
};

View File

@ -279,9 +279,6 @@ EditBoxImplIOS::EditBoxImplIOS(EditBox* pEditText)
, _systemControl(nullptr)
, _maxTextLength(-1)
{
auto view = cocos2d::Director::getInstance()->getOpenGLView();
_inRetinaMode = view->isRetinaDisplay();
}
EditBoxImplIOS::~EditBoxImplIOS()
@ -305,11 +302,10 @@ bool EditBoxImplIOS::initWithSize(const Size& size)
CGRect rect = CGRectMake(0, 0, size.width * glview->getScaleX(),size.height * glview->getScaleY());
if (_inRetinaMode)
{
rect.size.width /= 2.0f;
rect.size.height /= 2.0f;
}
CCEAGLView *eaglview = static_cast<CCEAGLView *>(glview->getEAGLView());
float factor = eaglview.contentScaleFactor;
rect.size.width /= factor;
rect.size.height /= factor;
_systemControl = [[UIEditBoxImplIOS_objc alloc] initWithFrame:rect editBox:this];
if (!_systemControl) break;
@ -376,7 +372,8 @@ void EditBoxImplIOS::setFont(const char* pFontName, int fontSize)
isValidFontName = false;
}
float retinaFactor = _inRetinaMode ? 2.0f : 1.0f;
CCEAGLView *eaglview = static_cast<CCEAGLView *>(cocos2d::Director::getInstance()->getOpenGLView()->getEAGLView());
float retinaFactor = eaglview.contentScaleFactor;
NSString * fntName = [NSString stringWithUTF8String:pFontName];
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
@ -554,7 +551,7 @@ void EditBoxImplIOS::setPlaceHolder(const char* pText)
_labelPlaceHolder->setString(pText);
}
static CGPoint convertDesignCoordToScreenCoord(const Vec2& designCoord, bool bInRetinaMode)
static CGPoint convertDesignCoordToScreenCoord(const Vec2& designCoord)
{
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
CCEAGLView *eaglview = (CCEAGLView *) glview->getEAGLView();
@ -566,11 +563,10 @@ static CGPoint convertDesignCoordToScreenCoord(const Vec2& designCoord, bool bIn
CGPoint screenPos = CGPointMake(screenGLPos.x, viewH - screenGLPos.y);
if (bInRetinaMode)
{
screenPos.x = screenPos.x / 2.0f;
screenPos.y = screenPos.y / 2.0f;
}
float factor = eaglview.contentScaleFactor;
screenPos.x = screenPos.x / factor;
screenPos.y = screenPos.y / factor;
CCLOGINFO("[EditBox] pos x = %f, y = %f", screenGLPos.x, screenGLPos.y);
return screenPos;
}
@ -594,11 +590,11 @@ void EditBoxImplIOS::setContentSize(const Size& size)
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
CGSize controlSize = CGSizeMake(size.width * glview->getScaleX(),size.height * glview->getScaleY());
if (_inRetinaMode)
{
controlSize.width /= 2.0f;
controlSize.height /= 2.0f;
}
CCEAGLView *eaglview = static_cast<CCEAGLView *>(glview->getEAGLView());
float factor = eaglview.contentScaleFactor;
controlSize.width /= factor;
controlSize.height /= factor;
[_systemControl setContentSize:controlSize];
}
@ -638,7 +634,7 @@ void EditBoxImplIOS::adjustTextFieldPosition()
rect = RectApplyAffineTransform(rect, _editBox->nodeToWorldTransform());
Vec2 designCoord = Vec2(rect.origin.x, rect.origin.y + rect.size.height);
[_systemControl setPosition:convertDesignCoordToScreenCoord(designCoord, _inRetinaMode)];
[_systemControl setPosition:convertDesignCoordToScreenCoord(designCoord)];
}
void EditBoxImplIOS::openKeyboard()

View File

@ -360,6 +360,7 @@ void Text::copySpecialProperties(Widget *widget)
setTextHorizontalAlignment(label->_labelRenderer->getHorizontalAlignment());
setTextVerticalAlignment(label->_labelRenderer->getVerticalAlignment());
setTextAreaSize(label->_labelRenderer->getDimensions());
setContentSize(label->getContentSize());
}
}

View File

@ -1,5 +1,5 @@
{
"version":"v3-deps-28",
"version":"v3-deps-29",
"zip_file_size":"87419231",
"repo_name":"cocos2d-x-3rd-party-libs-bin",
"repo_parent":"https://github.com/cocos2d/",

View File

@ -222,7 +222,7 @@ void TestChangePlaySection::onEnter()
ActionTimelineTestLayer::onEnter();
Node* node = CSLoader::createNode("ActionTimeline/DemoPlayer.csb");
ActionTimeline* action = CSLoader::createTimeline("ActionTimeline/DemoPlayer.csb");
action = CSLoader::createTimeline("ActionTimeline/DemoPlayer.csb");
node->runAction(action);
action->gotoFrameAndPlay(41, action->getDuration(), true);
@ -247,9 +247,9 @@ std::string TestChangePlaySection::title() const
void TestChangePlaySection::onTouchesEnded(const std::vector<Touch*>& touches, Event* event)
{
if(action->getStartFrame() == 0)
action->gotoFrameAndPlay(70, action->getDuration(), true);
action->gotoFrameAndPlay(41, action->getDuration(), true);
else
action->gotoFrameAndPlay(0, 60, true);
action->gotoFrameAndPlay(0, 40, true);
}
// TestFrameEvent

View File

@ -1215,7 +1215,7 @@ local function ExtensionsMainLayer()
cc.MenuItemFont:setFontSize(24)
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
local bSupportWebSocket = false
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) then
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) or (cc.PLATFORM_OS_MAC == targetPlatform) then
bSupportWebSocket = true
end
local bSupportEdit = false