Пример #1
0
void CATextField::adjustCursorMoveForward()
{
    this->updateImage();

    m_iString_l_length = getStringLength(m_sText.substr(0, m_iCurPos));
    m_iString_r_length = m_cImageSize.width - m_iString_l_length;

    if (m_iString_l_length + m_iString_left_offX > m_iLabelWidth)
    {
        m_iString_left_offX = m_iLabelWidth - m_iString_l_length;
    }

    CCRect r = CCRectMake(0, 0, m_cImageSize.width, m_cImageSize.height);
    r.origin.x = -m_iString_left_offX;
    r.size.width = getStringViewLength();
    this->setImageRect(r);
    if (m_nInputType == KEY_BOARD_INPUT_PASSWORD)
    {
        //float mPmarkWidth = MIN(m_obContentSize.width, getCursorX());
        m_pCursorMark->setCenterOrigin(CCPoint(this->getImageRect().size.width + m_iHoriMargins, m_obContentSize.height / 2));
    }
    else
    {
        float mPmarkWidth = MIN(m_obContentSize.width, getCursorX());
        m_pCursorMark->setCenterOrigin(CCPoint(mPmarkWidth + m_iHoriMargins, m_obContentSize.height / 2));
    }
}
Пример #2
0
void CATextField::adjustCursorMove(bool forward)
{
	this->updateImage();

	if (m_sText.empty())
	{
		m_iString_l_length = m_iString_r_length = 0;
	}
	else
	{
		m_iString_l_length = getStringLength(m_sText.substr(0, m_iCurPos));
		m_iString_r_length = m_cImageSize.width - m_iString_l_length;
	}

	if (forward)
	{
		if (getCursorX() > m_iLabelWidth && m_iLabelWidth < m_iString_l_length)
		{
			m_iString_o_length = m_iLabelWidth - m_iString_l_length;
		}
	}
	else
	{
		if (getCursorX() <= 0)
		{
			m_iString_o_length = -m_iString_l_length;
		}
		else
		{
			if (m_iString_r_length + getCursorX() < m_iLabelWidth)
			{
				m_iString_o_length = MIN(0, m_iLabelWidth - m_cImageSize.width);
			}
		}
	}

	CCRect r = CCRect(0, 0, MIN(m_iLabelWidth, m_cImageSize.width), m_cImageSize.height);
	r.origin.x = -m_iString_o_length;
	r.size.width = getStringViewLength();
	if (r.size.width == 0)
	{
		r.size.width = m_cImageSize.width;
	}


	this->setImageRect(r);
	
	setCursorPosition();
}
Пример #3
0
void CATextField::deleteBackward()
{
    if (m_nInputType==KEY_BOARD_INPUT_PASSWORD)
    {
        m_sText="";
        spaceHolderIsOn=true;
        this->updateImage();
        m_pMark->setCenterOrigin(CCPoint(labelOrginX+getCursorX(), this->getBounds().size.height/2));

        return;
    }
    if(spaceHolderIsOn)
    {

        return;
    }

    int nStrLen =m_sLeft_string.length();

    int nDeleteLen = 1;    // default, erase 1 byte

    if (nStrLen == 0)
    {
        return;
    }

    while(0x80 == (0xC0 & m_sLeft_string.at(m_sLeft_string.length() - nDeleteLen)))
    {
        ++nDeleteLen;
    }
    if (m_pDelegate && m_pDelegate->onTextFieldDeleteBackward(this, m_sLeft_string.c_str() + nStrLen - nDeleteLen, nDeleteLen))
    {
        // delegate doesn't wan't to delete backwards
        return;
    }
    // if all text deleted, show placeholder string
    if (m_sText.length() <= nDeleteLen)
    {
        m_sLeft_string="";
        spaceHolderIsOn=true;
        m_vByteLengthArr.clear();
        TextAttribute tt;
        tt.charsize =0;
        tt.charlength =0;
        m_vByteLengthArr.push_back(tt);
        m_pMark->setCenterOrigin(CCPoint(labelOrginX, this->getBounds().size.height/2));
        this->updateImage();
        return;
    }


    int length = MAX(0, nStrLen - nDeleteLen);

    std::string sText(m_sLeft_string.c_str(), length);
    char str[512]="";
    sprintf(str, "%s%s",sText.c_str(),m_sRight_string.c_str());
    m_sText = str;
    this->updateImage();

    m_vByteLengthArr.erase(m_vByteLengthArr.begin()+getStringCharCount(m_sLeft_string));
    m_sLeft_string = sText.c_str();
    float left_width = getStringLength(m_sLeft_string);

    m_fString_left_length = m_rLabelRect.size.width;
    //left_width;
    m_fString_right_length = m_rLabelRect.size.width - m_fString_left_length;

    if (m_fString_right_length + getCursorX() < labelWidth)
    {
        m_fString_left_offX = MIN(0, labelWidth - m_rLabelRect.size.width);
    }

    CCRect rect = CCRectZero;
    rect.size = this->getBounds().size;
    CCRect r = m_rLabelRect;
    r.origin.x = -m_fString_left_offX;
    r.size.width = getStringViewLength();
    this->setImageRect(r);
    m_pMark->setCenterOrigin(CCPoint( getCursorX()+labelOrginX, this->getBounds().size.height/2));
    return;
}
Пример #4
0
void CATextField::insertText(const char * text, int len)
{
    if (len>3)
    {
        analyzeString(text,len);
        return;
    }
    if (m_nInputType == KEY_BOARD_INPUT_PASSWORD)
    {
        if (len>=2)
            return;
        if (spaceHolderIsOn)
        {
            spaceHolderIsOn = false;
            m_sText="";
        }
        m_sText = m_sPassWord;
        m_sText.append(text);



        std::string password="";
        for (int i=0; i<m_sText.length(); i++)
        {
            password.append("*");
        }
        m_sPassWord = m_sText;
        m_sText = password;
        this->updateImage();

        CCRect r = m_rLabelRect;
        r.origin.x = 0;
        r.origin.x = MAX(labelWidth-m_rLabelRect.size.width, 0);
        r.origin.x = MIN(0, r.origin.x);
        r.size.width = MIN(m_rLabelRect.size.width, labelWidth);
        this->setImageRect(r);
        float offsetX = MIN(labelWidth, m_rLabelRect.size.width);
        m_pMark->setCenterOrigin(CCPoint(offsetX+labelOrginX,this->getBounds().size.height/2));

        return;
    }

    if (!strcmp(text, "\n"))
    {
        return;
    }

    std::string inputstr;
    if (spaceHolderIsOn)
    {
        spaceHolderIsOn = false;
        m_sText = "";
    }

    if(isEditing)
    {
        isEditing =false;
    }
    willBg->setVisible(false);

    if (len > 0)
    {
        if (m_pDelegate && m_pDelegate->onTextFieldInsertText(this,text, len))
        {
            // delegate doesn't want to insert text
            return;
        }
        m_sLeft_string.append(text);

        float left_width = getStringLength(m_sLeft_string);

        TextAttribute t;
        t.charlength = left_width - m_fString_left_length;
        t.charsize = strlen(text);
        m_vByteLengthArr.insert(m_vByteLengthArr.begin()+getStringCharCount(m_sLeft_string), t);

        char str[512]="";
        sprintf(str, "%s%s",m_sLeft_string.c_str(),m_sRight_string.c_str());
        m_sText = str;

        this->updateImage();

        m_fString_left_length = m_rLabelRect.size.width;
        //left_width;
        m_fString_right_length = m_rLabelRect.size.width - m_fString_left_length;

        if (m_fString_left_length + m_fString_left_offX > labelWidth)
        {
            m_fString_left_offX = labelWidth - m_fString_left_length;
        }


        CCRect rect = CCRectZero;
        rect.size = this->getBounds().size;
        CCRect r = m_rLabelRect;
        r.origin.x = -m_fString_left_offX;
        r.size.width = getStringViewLength();
        this->setImageRect(r);
    }
    m_pMark->setCenterOrigin(CCPoint(getCursorX()+labelOrginX,this->getBounds().size.height/2));

}