#include #include "../include/JGE.h" #include "../include/JRenderer.h" #include "../include/JLBFont.h" #include "../include/JGBKFont.h" #include "../include/JInputSystem.h" char input_table[3][9][4]={ {{',','a','b','c'},{'.','d','e','f'},{'!','g','h','i'}, {'-','j','k','l'},{' ','m',' ','n'},{'?','o','p','q'}, {'(','r','s','t'},{':','u','v','w'},{')','x','y','z'}}, {{'^','A','B','C'},{'@','D','E','F'},{'*','G','H','I'}, {'_','J','K','L'},{' ','M',' ','N'},{'"','O','P','Q'}, {'=','R','S','T'},{';','U','V','W'},{'/','X','Y','Z'}}, {{'=','+','0','-'},{'^','*','1','/'},{'|','(','2',')'}, {'%','[','3',']'},{' ','4',' ','5'},{'&','{','6','}'}, {'!','<','7','>'},{'$','#','8','~'},{':','\'','9','"'}}}; JInputSystem* JInputSystem::m_pJInputSystem=NULL; JInputSystem * JInputSystem::GetInstance() { if(m_pJInputSystem==NULL) m_pJInputSystem = new JInputSystem(); return m_pJInputSystem; } void JInputSystem::Destory() { if (m_pJInputSystem!=NULL) { delete m_pJInputSystem; } m_pJInputSystem = NULL; } JInputSystem::JInputSystem(void) { //SetInputActive(false); mIsInputActive=false; mBitmapFont12 = NULL; mBitmapFont12 = new JGBKFont(); mBitmapFont12->Init("ASC12", "GBK12", 12,true); mTimer=0.0f; mInPut[0]=0; mpInput=NULL; mPY[0]=0; mStatus = eInputEng; mEnablePYSel=false; mPYShowFirstIndex=0; mPYSelIndex=0; mPYSelTableSize=1; mHZShowFirstIndex=0; mHZSelIndex=0; mHZSelTableSize=6; mIsHZ_H=true; mHZ=NULL; } JInputSystem::~JInputSystem(void) { if(mBitmapFont12) delete mBitmapFont12; } ////////////////////////////////////////////////////////////////////////// /// Update: ////////////////////////////////////////////////////////////////////////// void JInputSystem::Update() { if (JGE::GetInstance()->GetButtonState(PSP_CTRL_DOWN) && JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) // exit when the CROSS is pressed { JInputSystem::GetInstance()->DisableInputMode(); return; } switch(mStatus) { case eInputEng: UpdateInputEng(); break; case eInputChi: UpdateInputChi(); break; case eSelPY: UpdateSelPY(); break; case eSelHZ: mIsHZ_H?UpdateSelHZ_H():UpdateSelHZ(); //UpdateSelHZ_H(); break; case eInputNum: UpdateInputNum(); break; default: break; } // switch the input type. if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_RTRIGGER)) { switch(mStatus) { case eInputEng: mStatus = eInputChi; break; case eInputChi: case eSelPY: case eSelHZ: mStatus = eInputNum; mPY[0]=0; break; case eInputNum: mStatus = eInputEng; break; default: break; } } // Update Timer mTimer += JGE::GetInstance()->GetDelta(); if (mTimer > 400 || mTimer < 0) { mTimer = 0; } } void JInputSystem::UpdateInputEng() { char* pBuf = mpInput; int a,b,c; if (GetInputKey(a,b,c)) { if(b==4 && c==0) { int len = strlen(pBuf); if(len>0) { if(pBuf[len-1]>0) { pBuf[len-1]=0; } else { if(len>=2) { if(pBuf[len-2]<0) { pBuf[len-2]=0; } } } } } else { char cc[2]; cc[0]=input_table[a][b][c]; cc[1]=0; strcat(pBuf,(cc)); } } } void JInputSystem::UpdateInputChi() { if(mStatus != eInputChi) return; int a,b,c; if (GetInputKey(a,b,c)) { if(b==4 && c==0) {// press Backspace. int len = strlen(mPY); if(len>0) { mPY[len-1]=0; } else { len = strlen(mpInput); if(len>0) { if(mpInput[len-1]>0) { mpInput[len-1]=0; } else { if(len>=2) { if(mpInput[len-2]<0) { mpInput[len-2]=0; } } } } } } else if(b==4 && c==2 && mPY[0]!=0){//press Space mStatus = mEnablePYSel?eSelPY:eSelHZ; //mStatus = eSelPY; } else if(a==0 && c!=0 && !(b==4 && c==2)) {// Input PY char cc[2]; cc[0]=input_table[a][b][c]; cc[1]=0; strcat(mPY,(cc)); } else {// Input String char cc[2]; cc[0]=input_table[a][b][c]; cc[1]=0; strcat(mpInput,(cc)); } } else { if((JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN)) && mPY[0]!=0) mStatus = mEnablePYSel?eSelPY:eSelHZ; //mStatus = eSelPY; } } void JInputSystem::UpdateSelPY() { if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) { mStatus = eInputChi; mPYSelIndex = 0; mPYShowFirstIndex=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP)) { mPYSelIndex--; if (mPYSelIndex<0) mPYSelIndex = 0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN)) { PY_index* pyindex=NULL; int len = GetNexPYIndex(mPY,pyindex); if(len>0 && mPYSelIndex < len-1 ) mPYSelIndex++; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE)) mStatus = eSelHZ; } void JInputSystem::UpdateSelHZ() { PY_index* pyindex=NULL; int totalLen = 0; char* str=NULL; int len = GetNexPYIndex(mPY,pyindex); if(len>0 && mPYSelIndex < len) { str = pyindex[mPYSelIndex].PY_mb; totalLen=strlen(str)/2; } else return; if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) { mStatus = eInputChi; mPYSelIndex = 0; mPYShowFirstIndex=0; mHZSelIndex = 0; mHZShowFirstIndex=0; mPY[0]=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE)) { mStatus = mEnablePYSel?eSelPY:eInputChi; //mStatus = eSelPY; mHZSelIndex = 0; mHZShowFirstIndex=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE)) { int inlen = strlen(mpInput); mpInput[inlen]=str[mHZSelIndex*2]; mpInput[inlen+1]=str[mHZSelIndex*2+1]; mpInput[inlen+2]=0; mStatus = eInputChi; mPYSelIndex = 0; mPYShowFirstIndex=0; mHZSelIndex = 0; mHZShowFirstIndex=0; mPY[0]=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP)) { mHZSelIndex--; if (mHZSelIndex<0) mHZSelIndex = 0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN)) { if(len>0 && mHZSelIndex < totalLen -1) mHZSelIndex++; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT)) { if(totalLen - mHZSelIndex > mHZSelTableSize) { mHZSelIndex+=mHZSelTableSize; mHZShowFirstIndex+=mHZSelTableSize; } else if(totalLen - mHZShowFirstIndex > mHZSelTableSize && totalLen > mHZSelIndex) { mHZSelIndex = totalLen-1; mHZShowFirstIndex+=mHZSelTableSize; } } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT)) { if(mHZSelIndex>=mHZSelTableSize) { mHZSelIndex-=mHZSelTableSize; mHZShowFirstIndex-=mHZSelTableSize; if(mHZShowFirstIndex<0) mHZShowFirstIndex=0; } else if(mHZSelIndex > 0 && mHZShowFirstIndex > 0) { mHZSelIndex=0; mHZShowFirstIndex = 0; } } } void JInputSystem::UpdateInputNum() { if(mStatus != eInputNum) return; char* pBuf = mpInput; int a,b,c; if (GetInputKey(a,b,c)) { a=2; if(b==4 && c==0) { int len = strlen(pBuf); if(len>0) { if(pBuf[len-1]>0) { pBuf[len-1]=0; } else { if(len>=2) { if(pBuf[len-2]<0) { pBuf[len-2]=0; } } } } } else { char cc[2]; cc[0]=input_table[a][b][c]; cc[1]=0; strcat(pBuf,(cc)); } } } ////////////////////////////////////////////////////////////////////////// /// Draw ////////////////////////////////////////////////////////////////////////// void JInputSystem::Draw() { DrawInputHelp(2,181); //DrawStatus(450,3/*17*//*5*/); float x,y; x=SCREEN_WIDTH_F/2; y=SCREEN_HEIGHT_F/2; DrawStatus(x-25,y-8); DrawInputString(x,y); if(mStatus!=eInputEng) { DrawPYInput(x,y+14); //if(mEnablePYSel) //DrawPYSel(220,15); mIsHZ_H?DrawHZSel_H(x,y+28):DrawHZSel(x,y+28); } } void JInputSystem::DrawInputString( float x,float y ) { // render text int len = strlen12(mpInput); int dlen=5; JRenderer::GetInstance()->FillRect(x-7,y-8,len+dlen+7,15,ARGB(255,0,0,0)); JRenderer::GetInstance()->DrawLine(x-7,y-8,x+len+dlen,y-8,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len+dlen+1,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y-8,x-7,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+len+dlen,y-8,x+len+dlen,y+7,ARGB(255,255,255,255)); if(mTimer > 200) printf12("|",x+len+1,y); if(len<=0) return; printf12(mpInput, x+1, y); //DrawStr1(mInPut,x,y); return; } void JInputSystem::DrawStr1( char* str, float x, float y, u32 color) { y+=7; int len = strlen12(str); JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,color); printf12(str,x,y); JRenderer::GetInstance()->DrawLine(x-7,y-7,x+len,y-7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y-7,x-7,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+len,y-7,x+len,y+7,ARGB(255,255,255,255)); } void JInputSystem::DrawStatus( float x,float y ) { switch(mStatus) { case eInputEng: DrawStr1("Eng",x,y); break; case eInputChi: DrawStr1("Chi",x,y); break; case eSelPY: DrawStr1("PYSel",x,y); break; case eSelHZ: DrawStr1("HZSel",x,y); break; case eInputNum: DrawStr1("Num",x,y); break; default: break; } } void JInputSystem::DrawPYInput( float x,float y ) { if(mStatus == eInputNum || mStatus == eInputEng) return; PY_index* pyindex=NULL; int indexlen = GetNexPYIndex(mPY,pyindex); if(!pyindex || indexlen == 0) { int pylen = strlen(mPY); if (pylen > 0) { mPY[strlen(mPY)-1]=0; } else mPY[0]=0; } int len = 6+strlen12(mPY); if(mStatus==eInputChi) JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,ARGB(255,100,100,100)); else JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,ARGB(255,0,0,0)); JRenderer::GetInstance()->DrawLine(x-7,y-7,x+len,y-7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-7,y-7,x-7,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+len,y-7,x+len,y+7,ARGB(255,255,255,255)); if(mTimer > 200 && mStatus == eInputChi) { char bb[8]; sprintf(bb,"%s_",mPY); printf12(bb, x+1, y); } else { char bb[8]; sprintf(bb,"%s",mPY); printf12(bb, x+1, y); } } void JInputSystem::DrawPYSel( float x,float y ) { PY_index* pyindex=NULL; int len = GetNexPYIndex(mPY,pyindex); //if(len==1) //mStatus=eSelHZ; if(pyindex && len>0) { int totalLen=len; int startIndex=mPYShowFirstIndex; int endIndex=mPYShowFirstIndex+(mPYSelTableSize-1); int curIndex=mPYSelIndex-startIndex; if(endIndex+1 >= totalLen) endIndex=totalLen-1; if(mPYSelIndex > endIndex) { startIndex += mPYSelIndex-endIndex; mPYShowFirstIndex = startIndex; endIndex = mPYSelIndex; curIndex = endIndex-startIndex; } else if(mPYSelIndex < startIndex) { endIndex -= startIndex - mPYSelIndex; mPYShowFirstIndex = endIndex -(mPYSelTableSize-1); startIndex = mPYSelIndex; curIndex = 0; } int i; unsigned int slen=0; // count the max string len. for(i = startIndex; i<=endIndex; i++) { char buf[8]; sprintf(buf," %s",((PY_index*)(pyindex+i))->PY); buf[0]=mPY[0]; if(slenFillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,100,100,100)); else JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,0,0,0)); JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x+slen-2,y-7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8,y+7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x-8,y+7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+slen-2,y-7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255)); } //return; for(i=0; i <= endIndex - startIndex; i++) { char buf[8]; sprintf(buf," %s",((PY_index*)(pyindex+i+startIndex))->PY); buf[0]=mPY[0]; printf12(buf,x,y+14*i); } } } void JInputSystem::DrawHZSel( float x,float y ) { PY_index* pyindex=NULL; int len = GetNexPYIndex(mPY,pyindex); if(len>0 && mPYSelIndex < len) { char* str = pyindex[mPYSelIndex].PY_mb; //PSPCommonDrawUtility::GetInstance()->printf12(str,x,y); int totalLen=strlen(str)/2; int startIndex=mHZShowFirstIndex; int endIndex=mHZShowFirstIndex+(mHZSelTableSize-1); int curIndex=mHZSelIndex-startIndex; if(endIndex+1 >= totalLen) endIndex=totalLen-1; if(mHZSelIndex > endIndex) { startIndex += mHZSelIndex-endIndex; mHZShowFirstIndex = startIndex; endIndex = mHZSelIndex; curIndex = endIndex-startIndex; } else if(mHZSelIndex < startIndex) { endIndex -= startIndex - mHZSelIndex; mHZShowFirstIndex = endIndex -(mHZSelTableSize-1); startIndex = mHZSelIndex; curIndex = 0; } int i; int slen=12; // Draw back ground for(i=0; i <= endIndex - startIndex; i++) { if(mStatus==eSelHZ && curIndex==i) JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,100,100,100)); else JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,0,0,0)); JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x+slen-2,y-7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8,y+7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x-8,y+7+14*i,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+slen-2,y-7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255)); } for(i=0; i <= endIndex - startIndex; i++) { char buf[8]; buf[0]=str[(startIndex+i)*2]; buf[1]=str[(startIndex+i)*2+1]; buf[2]=0; buf[3]=0; printf12(buf,x+1,1+y+14*i); } } } void JInputSystem::DrawInputHelp( float x, float y ) { int a,b,c,i,j; GetInputKey(a,b,c); float L=90; u32 color = ARGB(255,255,255,255); JRenderer* renderer = JRenderer::GetInstance(); for(j=0; j<3; j++) { for(i=0; i<3; i++) { if(j+i*3==b) renderer->FillRect(x+j*L/3,y+i*L/3,L/3,L/3,ARGB(255,100,100,100)); else renderer->FillRect(x+j*L/3,y+i*L/3,L/3,L/3,ARGB(255,0,0,0)); } } renderer->DrawLine(x, y, x+L, y, color); renderer->DrawLine(x, y+L/3, x+L, y+L/3, color); renderer->DrawLine(x, y+L*2/3,x+L, y+L*2/3,color); renderer->DrawLine(x-1, y+L, x+L+1, y+L, color); renderer->DrawLine(x, y, x, y+L,color); renderer->DrawLine(x+L/3, y, x+L/3, y+L,color); renderer->DrawLine(x+L*2/3,y, x+L*2/3,y+L,color); renderer->DrawLine(x+L, y, x+L, y+L,color); for(j=0; j<3; j++) { for(i=0; i<3; i++) { char cc[2]; cc[1]=0; cc[0]=input_table[a][j*3+i][0]; printf12(cc, (int)(x+L/3/2+i*L/3+2), (int)(j*L/3+y+8), JGETEXT_CENTER); cc[0]=input_table[a][j*3+i][1]; printf12(cc, (int)(x+8+i*L/3+2), (int)(j*L/3+y+L/3/2), JGETEXT_CENTER); cc[0]=input_table[a][j*3+i][3]; printf12(cc, (int)(x+L/3-8+i*L/3+2), (int)(j*L/3+y+L/3/2), JGETEXT_CENTER); cc[0]=input_table[a][j*3+i][2]; printf12(cc, (int)(x+L/3/2+i*L/3+2), (int)(j*L/3+y+L/3-7), JGETEXT_CENTER); } } x+=L/2/**1.5f*/; y+=L/2-8; printf12("%f%f",x,y); x--; y+=19; JRenderer::GetInstance()->DrawLine(x-4,y,x+4,y,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-4,y-3,x-4,y,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+4,y-3,x+4,y,ARGB(255,255,255,255)); return; } ////////////////////////////////////////////////////////////////////////// /// ////////////////////////////////////////////////////////////////////////// bool JInputSystem::GetInputKey( int& a, int& b, int& c ) { if(JGE::GetInstance()->GetButtonState(PSP_CTRL_LTRIGGER)) a=1; else a=0; if (mStatus == eInputNum) { a=2; } if(JGE::GetInstance()->GetAnalogX() < 50 && JGE::GetInstance()->GetAnalogY() < 50) b=0; else if(JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200 && JGE::GetInstance()->GetAnalogY() < 50) b=1; else if(JGE::GetInstance()->GetAnalogX() > 200 && JGE::GetInstance()->GetAnalogY() < 50) b=2; else if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() < 50) b=3; if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200) b=4; if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() > 200) b=5; if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() < 50) b=6; if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200) b=7; if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() > 200) b=8; if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE)) c=0; else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_SQUARE)) c=1; else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE)) c=3; else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) c=2; else return false; return true; } char* JInputSystem::GetChinese( char* str) { char first = str[0]; char* after = str+1; if(first=='i')return NULL; /*ƴȁE */ if(first=='u')return NULL; if(first=='v')return NULL; PY_index* py_index = PY_index_headletter[first-'a']; const int len = PY_index_headsize[first-'a']; for (int i=0; i 7)// > 6 return 0; int i,j; PY_index* rt_py_index=NULL; char first = str[0]; rt_py_index = PY_index_headletter[first-'a']; int index_len = PY_index_headsize[first-'a']; py_index = rt_py_index; for(i=1; i < (int)pylen; i++) { for(j=0; j0 && mPYSelIndex < len) { char* str = pyindex[mPYSelIndex].PY_mb; //PSPCommonDrawUtility::GetInstance()->printf12(str,x,y); int totalLen=strlen(str)/2; int startIndex=mHZShowFirstIndex; int endIndex=mHZShowFirstIndex+(mHZSelTableSize-1); int curIndex=mHZSelIndex-startIndex; if(endIndex+1 >= totalLen) endIndex=totalLen-1; if(mHZSelIndex > endIndex) { startIndex += mHZSelIndex-endIndex; mHZShowFirstIndex = startIndex; endIndex = mHZSelIndex; curIndex = endIndex-startIndex; } else if(mHZSelIndex < startIndex) { endIndex -= startIndex - mHZSelIndex; mHZShowFirstIndex = endIndex -(mHZSelTableSize-1); startIndex = mHZSelIndex; curIndex = 0; } int i; int slen=12; // Draw back ground for(i=0; i <= endIndex - startIndex; i++) { if(mStatus==eSelHZ && curIndex==i) JRenderer::GetInstance()->FillRect(x-7+15*i,y-7,15,slen+3,ARGB(255,100,100,100)); else JRenderer::GetInstance()->FillRect(x-7+15*i,y-7,15,slen+3,ARGB(255,0,0,0)); JRenderer::GetInstance()->DrawLine(x-8+15*i,y-7,x+slen-5+15*i,y-7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8+15*i,y+7,x+slen-4+15*i,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x-8+15*i,y-7,x-8+15*i,y+7,ARGB(255,255,255,255)); JRenderer::GetInstance()->DrawLine(x+slen-5+15*i,y-7,x+slen-5+15*i,y+7,ARGB(255,255,255,255)); } for(i=0; i <= endIndex - startIndex; i++) { char buf[8]; buf[0]=str[(startIndex+i)*2]; buf[1]=str[(startIndex+i)*2+1]; buf[2]=0; buf[3]=0; printf12(buf,x+15*i,1+y); } } } void JInputSystem::UpdateSelHZ_H() { PY_index* pyindex=NULL; int totalLen = 0; char* str=NULL; int len = GetNexPYIndex(mPY,pyindex); if(len>0 && mPYSelIndex < len) { str = pyindex[mPYSelIndex].PY_mb; totalLen=strlen(str)/2; } else return; if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) { mStatus = eInputChi; mPYSelIndex = 0; mPYShowFirstIndex=0; mHZSelIndex = 0; mHZShowFirstIndex=0; mPY[0]=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE)) { mStatus = mEnablePYSel?eSelPY:eInputChi; //mStatus = eSelPY; mHZSelIndex = 0; mHZShowFirstIndex=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE)) { int inlen = strlen(mpInput); mpInput[inlen]=str[mHZSelIndex*2]; mpInput[inlen+1]=str[mHZSelIndex*2+1]; mpInput[inlen+2]=0; mStatus = eInputChi; mPYSelIndex = 0; mPYShowFirstIndex=0; mHZSelIndex = 0; mHZShowFirstIndex=0; mPY[0]=0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT)) { mHZSelIndex--; if (mHZSelIndex<0) mHZSelIndex = 0; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT)) { if(len>0 && mHZSelIndex < totalLen -1) mHZSelIndex++; } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN)) { if(totalLen - mHZSelIndex > mHZSelTableSize) { mHZSelIndex+=mHZSelTableSize; mHZShowFirstIndex+=mHZSelTableSize; } else if(totalLen - mHZShowFirstIndex > mHZSelTableSize && totalLen > mHZSelIndex) { mHZSelIndex = totalLen-1; mHZShowFirstIndex+=mHZSelTableSize; } } else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP)) { if(mHZSelIndex>=mHZSelTableSize) { mHZSelIndex-=mHZSelTableSize; mHZShowFirstIndex-=mHZSelTableSize; if(mHZShowFirstIndex<0) mHZShowFirstIndex=0; } else if(mHZSelIndex > 0 && mHZShowFirstIndex > 0) { mHZSelIndex=0; mHZShowFirstIndex = 0; } } } void JInputSystem::printf12( char* str,float x, float y, float scale/*=1.0f*/, PIXEL_TYPE color/*=ARGB(255,255,255,255)*/,int type/*=JGETEXT_LEFT*/ ) { mBitmapFont12->SetScale(scale); mBitmapFont12->SetColor(color); mBitmapFont12->RenderString((u8*)str,x,y,type); } int JInputSystem::strlen12( char* buff, float scale/*=1.0f*/ ) { mBitmapFont12->SetScale(scale); return mBitmapFont12->GetStringWidth((u8*)buff); }