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)); } }
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(); }
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; }
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)); }