2014-08-19 10:28:24 +08:00
|
|
|
/****************************************************************************
|
|
|
|
Copyright (c) 2010-2012 cocos2d-x.org
|
|
|
|
Copyright (c) 2012 James Chen
|
|
|
|
|
|
|
|
http://www.cocos2d-x.org
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
THE SOFTWARE.
|
|
|
|
****************************************************************************/
|
|
|
|
|
2016-03-20 21:53:44 +08:00
|
|
|
#include "ui/UIEditBox/UIEditBox.h"
|
|
|
|
#include "ui/UIEditBox/UIEditBoxImpl.h"
|
2014-08-19 10:28:24 +08:00
|
|
|
|
|
|
|
NS_CC_BEGIN
|
|
|
|
|
|
|
|
namespace ui {
|
|
|
|
|
|
|
|
static const float CHECK_EDITBOX_POSITION_INTERVAL = 0.1f;
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
EditBox::EditBox()
|
2014-08-19 10:28:24 +08:00
|
|
|
: _editBoxImpl(nullptr)
|
|
|
|
, _delegate(nullptr)
|
2014-10-30 22:25:46 +08:00
|
|
|
, _backgroundSprite(nullptr)
|
2017-11-02 13:57:11 +08:00
|
|
|
, _adjustHeight(0.f)
|
2014-08-19 10:28:24 +08:00
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
|
|
|
, _scriptEditBoxHandler(0)
|
|
|
|
#endif
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
EditBox::~EditBox()
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
CC_SAFE_DELETE(_editBoxImpl);
|
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
|
|
|
unregisterScriptEditBoxHandler();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-11-16 09:48:37 +08:00
|
|
|
void EditBox::touchDownAction(Ref* /*sender*/, TouchEventType controlEvent)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
if (controlEvent == Widget::TouchEventType::ENDED) {
|
2016-03-22 14:18:39 +08:00
|
|
|
_editBoxImpl->openKeyboard();
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EditBox* EditBox::create(const Size& size,
|
2014-09-02 17:37:55 +08:00
|
|
|
const std::string& normalSprite,
|
2014-08-19 10:28:24 +08:00
|
|
|
TextureResType texType /*= TextureResType::LOCAL*/)
|
|
|
|
{
|
2015-12-16 14:02:55 +08:00
|
|
|
EditBox* pRet = new (std::nothrow) EditBox();
|
2014-08-19 10:28:24 +08:00
|
|
|
|
2014-09-02 17:37:55 +08:00
|
|
|
if (pRet != nullptr && pRet->initWithSizeAndBackgroundSprite(size, normalSprite, texType))
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
pRet->autorelease();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
CC_SAFE_DELETE(pRet);
|
|
|
|
}
|
|
|
|
|
|
|
|
return pRet;
|
|
|
|
}
|
2014-08-20 16:08:28 +08:00
|
|
|
|
2014-09-02 17:37:55 +08:00
|
|
|
|
2016-11-16 09:48:37 +08:00
|
|
|
EditBox* EditBox::create(const cocos2d::Size &size, cocos2d::ui::Scale9Sprite *normalSprite, ui::Scale9Sprite* /*pressedSprite*/, Scale9Sprite* /*disabledSprite*/)
|
2014-08-20 16:08:28 +08:00
|
|
|
{
|
2014-08-28 07:31:57 +08:00
|
|
|
EditBox* pRet = new (std::nothrow) EditBox();
|
2014-08-20 16:08:28 +08:00
|
|
|
|
2014-09-02 17:37:55 +08:00
|
|
|
if (pRet != nullptr && pRet->initWithSizeAndBackgroundSprite(size, normalSprite))
|
2014-08-20 16:08:28 +08:00
|
|
|
{
|
|
|
|
pRet->autorelease();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
CC_SAFE_DELETE(pRet);
|
|
|
|
}
|
|
|
|
|
|
|
|
return pRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool EditBox::initWithSizeAndBackgroundSprite(const cocos2d::Size &size, cocos2d::ui::Scale9Sprite *pNormal9SpriteBg)
|
|
|
|
{
|
|
|
|
if (Widget::init())
|
|
|
|
{
|
|
|
|
_editBoxImpl = __createSystemEditBox(this);
|
|
|
|
_editBoxImpl->initWithSize(size);
|
|
|
|
_editBoxImpl->setInputMode(EditBox::InputMode::ANY);
|
|
|
|
|
|
|
|
_backgroundSprite = pNormal9SpriteBg;
|
|
|
|
|
|
|
|
this->setContentSize(size);
|
|
|
|
this->setPosition(Vec2(0, 0));
|
|
|
|
|
|
|
|
_backgroundSprite->setPosition(Vec2(_contentSize.width/2, _contentSize.height/2));
|
|
|
|
_backgroundSprite->setContentSize(size);
|
|
|
|
this->addProtectedChild(_backgroundSprite);
|
|
|
|
|
|
|
|
this->setTouchEnabled(true);
|
|
|
|
|
|
|
|
this->addTouchEventListener(CC_CALLBACK_2(EditBox::touchDownAction, this));
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
|
|
|
|
bool EditBox::initWithSizeAndBackgroundSprite(const Size& size,
|
|
|
|
const std::string& pNormal9SpriteBg,
|
|
|
|
TextureResType texType)
|
|
|
|
{
|
|
|
|
if (Widget::init())
|
|
|
|
{
|
|
|
|
_editBoxImpl = __createSystemEditBox(this);
|
|
|
|
_editBoxImpl->initWithSize(size);
|
|
|
|
_editBoxImpl->setInputMode(EditBox::InputMode::ANY);
|
|
|
|
|
|
|
|
if (texType == Widget::TextureResType::LOCAL)
|
|
|
|
{
|
|
|
|
_backgroundSprite = Scale9Sprite::create(pNormal9SpriteBg);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_backgroundSprite = Scale9Sprite::createWithSpriteFrameName(pNormal9SpriteBg);
|
|
|
|
}
|
|
|
|
this->setContentSize(size);
|
|
|
|
this->setPosition(Vec2(0, 0));
|
|
|
|
|
|
|
|
_backgroundSprite->setPosition(Vec2(_contentSize.width/2, _contentSize.height/2));
|
|
|
|
_backgroundSprite->setContentSize(size);
|
|
|
|
this->addProtectedChild(_backgroundSprite);
|
|
|
|
|
|
|
|
this->setTouchEnabled(true);
|
|
|
|
|
|
|
|
this->addTouchEventListener(CC_CALLBACK_2(EditBox::touchDownAction, this));
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setDelegate(EditBoxDelegate* pDelegate)
|
|
|
|
{
|
|
|
|
_delegate = pDelegate;
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setDelegate(pDelegate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EditBoxDelegate* EditBox::getDelegate()
|
|
|
|
{
|
|
|
|
return _delegate;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setText(const char* pText)
|
|
|
|
{
|
|
|
|
if (pText != nullptr)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setText(pText);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
const char* EditBox::getText() const
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
const char* pText = _editBoxImpl->getText();
|
|
|
|
if(pText != nullptr)
|
|
|
|
return pText;
|
|
|
|
}
|
|
|
|
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setFont(const char* pFontName, int fontSize)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
CCASSERT(pFontName != nullptr, "fontName can't be nullptr");
|
2014-08-19 10:28:24 +08:00
|
|
|
if (pFontName != nullptr)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setFont(pFontName, fontSize);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setFontName(const char* pFontName)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
CCASSERT(pFontName != nullptr, "fontName can't be nullptr");
|
|
|
|
if (_editBoxImpl != nullptr)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
_editBoxImpl->setFont(pFontName, _editBoxImpl->getFontSize());
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
const char* EditBox::getFontName() const
|
2017-02-17 15:45:19 +08:00
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getFontName();
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setFontSize(int fontSize)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
_editBoxImpl->setFont(_editBoxImpl->getFontName(), fontSize);
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
int EditBox::getFontSize() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getFontSize();
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setFontColor(const Color3B& color)
|
2015-03-02 19:31:59 +08:00
|
|
|
{
|
|
|
|
setFontColor(Color4B(color));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setFontColor(const Color4B& color)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setFontColor(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
const Color4B& EditBox::getFontColor() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getFontColor();
|
|
|
|
}
|
|
|
|
return Color4B::WHITE;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setPlaceholderFont(const char* pFontName, int fontSize)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
CCASSERT(pFontName != nullptr, "fontName can't be nullptr");
|
2014-08-19 10:28:24 +08:00
|
|
|
if (pFontName != nullptr)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setPlaceholderFont(pFontName, fontSize);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setPlaceholderFontName(const char* pFontName)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
CCASSERT(pFontName != nullptr, "fontName can't be nullptr");
|
|
|
|
if (_editBoxImpl != nullptr)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
_editBoxImpl->setPlaceholderFont(pFontName, _editBoxImpl->getPlaceholderFontSize());
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
const char* EditBox::getPlaceholderFontName() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getPlaceholderFontName();
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setPlaceholderFontSize(int fontSize)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
_editBoxImpl->setPlaceholderFont(_editBoxImpl->getPlaceholderFontName(), fontSize);
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
int EditBox::getPlaceholderFontSize() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getPlaceholderFontSize();
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setPlaceholderFontColor(const Color3B& color)
|
|
|
|
{
|
2015-03-02 19:31:59 +08:00
|
|
|
setPlaceholderFontColor(Color4B(color));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setPlaceholderFontColor(const Color4B& color)
|
|
|
|
{
|
2014-08-19 10:28:24 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setPlaceholderFontColor(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
const Color4B& EditBox::getPlaceholderFontColor() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getPlaceholderFontColor();
|
|
|
|
}
|
|
|
|
return Color4B::GRAY;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setPlaceHolder(const char* pText)
|
|
|
|
{
|
|
|
|
if (pText != nullptr)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setPlaceHolder(pText);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
const char* EditBox::getPlaceHolder() const
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getPlaceHolder();
|
|
|
|
}
|
|
|
|
return "";
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setInputMode(EditBox::InputMode inputMode)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setInputMode(inputMode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
EditBox::InputMode EditBox::getInputMode() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getInputMode();
|
|
|
|
}
|
|
|
|
return InputMode::SINGLE_LINE;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setMaxLength(int maxLength)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setMaxLength(maxLength);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int EditBox::getMaxLength()
|
|
|
|
{
|
2017-02-17 15:45:19 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getMaxLength();
|
|
|
|
}
|
|
|
|
return -1;
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setInputFlag(EditBox::InputFlag inputFlag)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setInputFlag(inputFlag);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
EditBox::InputFlag EditBox::getInputFlag() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getInputFlag();
|
|
|
|
}
|
|
|
|
return InputFlag::LOWERCASE_ALL_CHARACTERS;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
void EditBox::setReturnType(EditBox::KeyboardReturnType returnType)
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setReturnType(returnType);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
EditBox::KeyboardReturnType EditBox::getReturnType() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getReturnType();
|
|
|
|
}
|
|
|
|
return KeyboardReturnType::DEFAULT;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setTextHorizontalAlignment(TextHAlignment alignment)
|
2016-11-09 10:38:00 +08:00
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setTextHorizontalAlignment(alignment);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-17 15:45:19 +08:00
|
|
|
TextHAlignment EditBox::getTextHorizontalAlignment() const
|
|
|
|
{
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
return _editBoxImpl->getTextHorizontalAlignment();
|
|
|
|
}
|
|
|
|
return TextHAlignment::LEFT;
|
|
|
|
}
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
/* override function */
|
|
|
|
void EditBox::setPosition(const Vec2& pos)
|
|
|
|
{
|
|
|
|
Widget::setPosition(pos);
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setPosition(pos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setVisible(bool visible)
|
|
|
|
{
|
|
|
|
Widget::setVisible(visible);
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setVisible(visible);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setContentSize(const Size& size)
|
|
|
|
{
|
|
|
|
Widget::setContentSize(size);
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setContentSize(size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::adaptRenderers()
|
|
|
|
{
|
|
|
|
if (_contentSizeDirty)
|
|
|
|
{
|
|
|
|
_backgroundSprite->setContentSize(_contentSize);
|
|
|
|
_backgroundSprite->setPosition(Vec2(_contentSize.width/2, _contentSize.height/2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::setAnchorPoint(const Vec2& anchorPoint)
|
|
|
|
{
|
|
|
|
Widget::setAnchorPoint(anchorPoint);
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->setAnchorPoint(anchorPoint);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-27 10:10:04 +08:00
|
|
|
std::string EditBox::getDescription() const
|
|
|
|
{
|
|
|
|
return "EditBox";
|
|
|
|
}
|
|
|
|
|
2015-08-07 17:27:15 +08:00
|
|
|
void EditBox::draw(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
Widget::draw(renderer, parentTransform, parentFlags);
|
2014-08-19 10:28:24 +08:00
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
2015-08-07 17:27:15 +08:00
|
|
|
_editBoxImpl->draw(renderer, parentTransform, parentFlags & FLAGS_TRANSFORM_DIRTY);
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
void EditBox::onEnter()
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
|
|
|
if (_scriptType == kScriptTypeJavascript)
|
|
|
|
{
|
|
|
|
if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
Widget::onEnter();
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->onEnter();
|
|
|
|
}
|
|
|
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
|
2014-10-04 00:38:36 +08:00
|
|
|
this->schedule(CC_SCHEDULE_SELECTOR(EditBox::updatePosition), CHECK_EDITBOX_POSITION_INTERVAL);
|
2014-08-19 10:28:24 +08:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::updatePosition(float dt)
|
|
|
|
{
|
|
|
|
if (nullptr != _editBoxImpl) {
|
|
|
|
_editBoxImpl->updatePosition(dt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
void EditBox::onExit()
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
2015-07-28 16:07:14 +08:00
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
|
|
|
if (_scriptType == kScriptTypeJavascript)
|
|
|
|
{
|
2015-07-28 18:24:03 +08:00
|
|
|
if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnExit))
|
2015-07-28 16:07:14 +08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2014-08-19 10:28:24 +08:00
|
|
|
Widget::onExit();
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
// remove system edit control
|
2016-03-22 14:18:39 +08:00
|
|
|
_editBoxImpl->closeKeyboard();
|
2014-08-19 10:28:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static Rect getRect(Node * pNode)
|
|
|
|
{
|
|
|
|
Size contentSize = pNode->getContentSize();
|
|
|
|
Rect rect = Rect(0, 0, contentSize.width, contentSize.height);
|
|
|
|
return RectApplyTransform(rect, pNode->getNodeToWorldTransform());
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::keyboardWillShow(IMEKeyboardNotificationInfo& info)
|
|
|
|
{
|
|
|
|
// CCLOG("CCEditBox::keyboardWillShow");
|
|
|
|
Rect rectTracked = getRect(this);
|
|
|
|
// some adjustment for margin between the keyboard and the edit box.
|
|
|
|
rectTracked.origin.y -= 4;
|
|
|
|
|
|
|
|
// if the keyboard area doesn't intersect with the tracking node area, nothing needs to be done.
|
|
|
|
if (!rectTracked.intersectsRect(info.end))
|
|
|
|
{
|
|
|
|
CCLOG("needn't to adjust view layout.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// assume keyboard at the bottom of screen, calculate the vertical adjustment.
|
|
|
|
_adjustHeight = info.end.getMaxY() - rectTracked.getMinY();
|
|
|
|
// CCLOG("CCEditBox:needAdjustVerticalPosition(%f)", _adjustHeight);
|
|
|
|
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->doAnimationWhenKeyboardMove(info.duration, _adjustHeight);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-16 09:48:37 +08:00
|
|
|
void EditBox::keyboardDidShow(IMEKeyboardNotificationInfo& /*info*/)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditBox::keyboardWillHide(IMEKeyboardNotificationInfo& info)
|
|
|
|
{
|
|
|
|
// CCLOG("CCEditBox::keyboardWillHide");
|
|
|
|
if (_editBoxImpl != nullptr)
|
|
|
|
{
|
|
|
|
_editBoxImpl->doAnimationWhenKeyboardMove(info.duration, -_adjustHeight);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-16 09:48:37 +08:00
|
|
|
void EditBox::keyboardDidHide(IMEKeyboardNotificationInfo& /*info*/)
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
|
|
|
void EditBox::registerScriptEditBoxHandler(int handler)
|
|
|
|
{
|
|
|
|
unregisterScriptEditBoxHandler();
|
|
|
|
_scriptEditBoxHandler = handler;
|
|
|
|
}
|
|
|
|
|
2017-11-02 13:57:11 +08:00
|
|
|
void EditBox::unregisterScriptEditBoxHandler()
|
2014-08-19 10:28:24 +08:00
|
|
|
{
|
|
|
|
if (0 != _scriptEditBoxHandler)
|
|
|
|
{
|
|
|
|
ScriptEngineManager::getInstance()->getScriptEngine()->removeScriptHandler(_scriptEditBoxHandler);
|
|
|
|
_scriptEditBoxHandler = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_CC_END
|