输入框自定义光标

#include"CursorTextField.h"

CursorTextField::CursorTextField()
{
    m_textField = NULL;
    m_cursorSprite = NULL;
    m_cursorAction = NULL;
}

Node * CursorTextField::createWithTextField(TextField *text, const std::string &TTFpath, int fontSize)
{
    auto ref = new CursorTextField;
    if (ref &&ref->init(text, TTFpath, fontSize))
    {
        ref->autorelease();
    }
    else CC_SAFE_DELETE(ref);
    return ref;
}

bool CursorTextField::init(TextField *text, const std::string &TTFpath, int fontSize)
{
    
    initTextField(text, TTFpath, fontSize);
    
    addCursorSprite();
    
    m_textField->addEventListener(CC_CALLBACK_2(CursorTextField::textFiledEvent,this));
    
    return true;
}

void CursorTextField::initTextField(TextField *text, const std::string &TTFpath, int fontSize)
{
    m_textField = text;
    m_ttfPath = TTFpath;
    m_FontSize = fontSize;
}

int CursorTextField::getContentWidth()
{
    auto label = Label::createWithTTF(m_textField->getString(), m_ttfPath, m_FontSize);
    auto width = label->getContentSize().width;
	int endWidth = m_textField->getPosition().x - m_textField->getContentSize().width / 2 + width + 2;
	return endWidth;
}
void CursorTextField::textFiledEvent(Ref *pSender, TextField::EventType type)
{
    switch (type)
    {
        case TextField::EventType::ATTACH_WITH_IME:
        {
            m_cursorSprite->setVisible(true);
            m_cursorSprite->setPositionX(getContentWidth());
            break;
        }
            
            
        case TextField::EventType::DETACH_WITH_IME:
            m_cursorSprite->setVisible(false);
            break;
            
        case TextField::EventType::INSERT_TEXT:
        {
            m_cursorSprite->setVisible(true);
            m_cursorSprite->setPositionX(getContentWidth());
            break;
        }
            
            
        case TextField::EventType::DELETE_BACKWARD:
        {
            m_cursorSprite->setVisible(true);
            m_cursorSprite->setPositionX(getContentWidth());
            
            break;
        }
            
        default:
            break;
    }
}
void CursorTextField::addCursorSprite()
{
    int column = 2;
	int height = m_textField->getFontSize();
    int pData[50][2];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < column; j++)
        {
            pData[i][j] = 0x00000000;
        }
    }
    Texture2D* texture = new Texture2D();
    
    texture->initWithData(pData, 20, Texture2D::PixelFormat::RGB888, 1, height, Size(column, height));
    m_cursorSprite = Sprite::createWithTexture(texture);
    m_cursorSprite->setPositionY(m_textField->Node::getPositionY());
    
    texture->autorelease();
    
    addChild(m_cursorSprite);
    m_cursorSprite->setVisible(false);
    m_cursorAction = RepeatForever::create(Sequence::create(FadeOut::create(0.5f), FadeIn::create(0.5f),NULL));
    m_cursorSprite->runAction(m_cursorAction);
}

调用

    TextField * accountTF = (TextField *)UINode::seekNodeByName(rootNode, "AccountTF");
    Node * accountTF_L = CursorTextField::createWithTextField(accountTF, "LuoLi.TTC", accountTF->getFontSize());
    accountTF->getParent()->addChild(accountTF_L);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lin&Yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值