📄 asix_kb.c
字号:
kbctrl->cur_mode=NOINPUT;
break;
}
else
{
ActiveAreaSuspend(kbctrl->HW_Icon1[i].icon_id,AREA_SUSPEND);
}
// position_temp = xSrc+i*16;
// if ( ActiveAreaEnable((P_U32)&(kbctrl->HW_Icon2[i].icon_id), ICON_AREA, CONTINUOUS_MODE,\
// position_temp, ySrc-32, position_temp+16, ySrc-16, kbctrl->wndid) !=PPSM_OK) {
// kbctrl->cur_mode=NOINPUT;
// break;
// }
kbctrl->HW_Icon1[i].icon_data=0;
// kbctrl->HW_Icon2[i].icon_data=0;
}
DrawRec(kbctrl->pGC,GPC_BLACK,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,ySrc-CHAR_WIDTH-2,(LCD_WIDTH-CHAR_WIDTH*10)/2+CHAR_WIDTH*10,ySrc-1,GPC_SOLID_LINE,GPC_REPLACE_STYLE);
#endif //#ifdef SOLIVE
break;
case BOHAO:
kbctrl->cur_mode=BOHAO;
if (( kbctrl->BoHaoIcon = Lcalloc( 12*sizeof(U32)))==NULL)
{
kbctrl->cur_mode=NOINPUT;
break;
}
{
U16 width;
U16 height;
GroupOn( kbctrl->pGC );
for (i=0;i<12;i++){
bmp=LoadBitmap(BohaoList[i].icon_bmp, NULL);
width = ((BITMAP *)bmp)->info.width +3;
height = ((BITMAP *)bmp)->info.height +8;
position_temp = xSrc+(i % 3)*width;
if ( ActiveAreaEnable((P_U32)&(kbctrl->BoHaoIcon[i]), ICON_AREA, CONTINUOUS_MODE,\
position_temp, ySrc+(i / 3)*height, position_temp+width, ySrc+(i/3+1)*height,kbctrl->wndid) !=PPSM_OK) {
kbctrl->cur_mode=NOINPUT;
break;
}
//modified by dsa 2002/04/17
// switchonetotwo(BohaoList[i].icon_bmp, position_temp + 4, ySrc+(i / 3)*40+7, \
// 44, 25);
// SysDrawMonoImage(kbctrl->pGC,BohaoList[i].icon_bmp,position_temp + 4,ySrc+(i / 3)*40+7,\
// 44,25,GPC_WHITE,GPC_BLACK);
DisplayBMP(kbctrl->pGC,position_temp,ySrc+(i / 3)*height,bmp);
FreeBitmap(bmp);
}
GroupOff( kbctrl->pGC, xSrc, ySrc, PHY_LCD_W-1, PHY_LCD_H-1 );
}
break;
default:
kbctrl->cur_mode=NOINPUT;
break;
}
//ClearRec used follows maybe error!!!!
if (kbctrl->cur_mode == NOINPUT) {
/* Clear the control icons*/
for( i=0; (i<5) && (mode != BOHAO) ;i++)
if ( kbctrl->CtrlIcon[i].icon_id!=0 ) ActiveAreaDisable(kbctrl->CtrlIcon[i].icon_id);
/* Clear Handwriting or Pinying data icons*/
if (mode==SHOUXIE) {
if (CurWindow->status & WST_HANDWRITE)
{
SysCloseInputPad(kbctrl->areaId1);
/* we clear the status bit in the parent win*/
CurWindow->status &= (~WST_HANDWRITE);
/* reopen the parent window's client area*/
ActiveAreaSuspend( ( (struct wn_ctrl *)CurWindow->ctrl_str )->clientid, AREA_REENABLE);
}
#ifdef SOLIVE
if (kbctrl->HW_Icon1!=NULL)
{
for (i=0;i<9;i++)
if ( kbctrl->HW_Icon1[i].icon_id!=0 )
ActiveAreaDisable(kbctrl->HW_Icon1[i].icon_id);
Lfree(kbctrl->HW_Icon1);
kbctrl->HW_Icon1 = NULL;
ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,ySrc-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
}
// if (kbctrl->HW_Icon2!=NULL)
// {
// for (i=0;i<9;i++)
// if ( kbctrl->HW_Icon2[i].icon_id!=0 )
// ActiveAreaDisable(kbctrl->HW_Icon2[i].icon_id);
//
// Lfree(kbctrl->HW_Icon2);
// kbctrl->HW_Icon2 = NULL;
// }
#endif
} else if (mode==PINYING) {
if (kbctrl->PY_Icon!=NULL)
{
for (i=0;i<7;i++)
if (kbctrl->PY_Icon[i].icon_id!=0)
ActiveAreaDisable(kbctrl->PY_Icon[i].icon_id);
Lfree(kbctrl->PY_Icon);
if (kbctrl->PY_LeftButtonId!=0) ActiveAreaDisable(kbctrl->PY_LeftButtonId);
if (kbctrl->PY_RightButtonId!=0) ActiveAreaDisable(kbctrl->PY_RightButtonId);
ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2-10,ySrc-CHAR_WIDTH-2,CHAR_WIDTH*7+20,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
}
if (kbctrl->Pycb!=NULL)
{
Lfree(kbctrl->Pycb);
}
} else if (mode == BOHAO ) {
if (kbctrl->BoHaoIcon!=NULL)
{
for (i=0;i<12;i++)
{
if (kbctrl->BoHaoIcon[i]!=0)
ActiveAreaDisable(kbctrl->BoHaoIcon[i]);
}
ClearRec(kbctrl->pGC,GPC_WHITE,2,kbctrl->cur_y,156,160,GPC_REPLACE_STYLE);
Lfree(kbctrl->BoHaoIcon);
}
}
ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y,154,76,GPC_REPLACE_STYLE);
SysCloseSoftKey(kbctrl->areaId);
memset(kbctrl,0x0,sizeof(struct kbd_ctrl));
}
return kbctrl->cur_mode;
}
extern const unsigned int ClearWidth;
extern const unsigned int ClearHeight;
static void closeinput(struct kbd_ctrl *kbctrl)
{
register U16 i;
// S16 pen_x,pen_y; //modified by dsa 2002/04/17
ASIX_WINDOW *CurWindow; //add by dsa 2002/04/17
CurWindow =(ASIX_WINDOW *)GetCurWindow(); //add by dsa 2002/04/17
//modified by dsa 2002/04/17
//getpen:
// PenGetInput(&pen_x,&pen_y);
// if ( (pen_x>0) && (pen_y>0) ) goto getpen;
if (kbctrl->cur_mode == BOHAO )
ClearRec(kbctrl->pGC,GPC_WHITE,2,kbctrl->cur_y,156,160,GPC_REPLACE_STYLE);
else
ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y, ClearWidth, ClearHeight,GPC_REPLACE_STYLE);
// ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y,154,75,GPC_REPLACE_STYLE);
if (kbctrl->cur_mode==PINYING){
for (i=0;i<7;i++)
ActiveAreaDisable(kbctrl->PY_Icon[i].icon_id);
if (kbctrl->PY_LeftButtonId!=0)
{
ActiveAreaDisable(kbctrl->PY_LeftButtonId);
kbctrl->PY_LeftButtonId=0;
}
if (kbctrl->PY_RightButtonId!=0)
{
ActiveAreaDisable(kbctrl->PY_RightButtonId);
kbctrl->PY_RightButtonId=0;
}
Lfree(kbctrl->PY_Icon);
kbctrl->PY_Icon=NULL;
Lfree(kbctrl->Pycb);
kbctrl->Pycb=NULL;
//Pycb.ClearFlag=TRUE;/*2000/2/17*/
// ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y-18,154,18,REPLACE_STYLE);
ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2-10,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*7+20,CHAR_WIDTH+2,GPC_REPLACE_STYLE );
} else if (kbctrl->cur_mode==SHOUXIE) {
// ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE );
SysCloseInputPad(kbctrl->areaId1);
//AppSwap(FALSE);
#ifdef SOLIVE
for(i=0;i<10;i++) {
ActiveAreaDisable(kbctrl->HW_Icon1[i].icon_id);
// ActiveAreaDisable(kbctrl->HW_Icon2[i].icon_id);
}
Lfree(kbctrl->HW_Icon1);
Lfree(kbctrl->HW_Icon2);
kbctrl->HW_Icon1=NULL;
kbctrl->HW_Icon2=NULL;
#endif
ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
/* we clear the status bit in the parent win*/
CurWindow->status &= (~WST_HANDWRITE);
/* reopen the parent window's client area*/
ActiveAreaSuspend( ( (struct wn_ctrl *)CurWindow->ctrl_str )->clientid, AREA_REENABLE);
} else if (kbctrl->cur_mode == BOHAO ) {
for (i = 0; i<12 ;i++)
ActiveAreaDisable(kbctrl->BoHaoIcon[i]);
Lfree(kbctrl->BoHaoIcon);
kbctrl->BoHaoIcon=NULL;
}
for( i=0;i<5 && kbctrl->cur_mode!= BOHAO ;i++)
if ( kbctrl->CtrlIcon[i].icon_id!=0 ) ActiveAreaDisable(kbctrl->CtrlIcon[i].icon_id);
SysCloseSoftKey(kbctrl->areaId);
kbctrl->cur_mode=NOINPUT;
kbctrl->char_flag=KB_NODATA;
memset(kbctrl->CtrlIcon,0x0,5*sizeof(struct ctrl_icon));/* Clear the ctrol icon list*/
memset(kbctrl->icon_select_map,UNSELECTED,6*sizeof(U8));
kbctrl->CtrlIconSelect=0;
kbctrl->icon_index=0;
}
STATUS kbd_create(char *caption, U32 style, U16 x, U16 y, U16 width, U16 hight,
U32 wndid, U32 menu, void **ctrl_str, void *exdata)
{
U8 mode, allow;
struct kbd_ctrl *kbctrl_ptr;
U32 pGC;
mode = HIBYTE(LOWORD(style));
allow = LOBYTE(LOWORD(style));
asix_kb_memdbgprintf( "### Create Keyboard ###" );
kbctrl_ptr = Lcalloc( sizeof(struct kbd_ctrl) );
if ( kbctrl_ptr == NULL )
{
asix_kb_memdbgprintf( "### Create Keyboard Error ###" );
return ASIX_NO_MEM;
}
pGC =GetGC();
kbctrl_ptr->pGC=pGC;
kbctrl_ptr->classid = (U32)WNDCLASS_KEYBD;
kbctrl_ptr->wndid = wndid;
kbctrl_ptr->cur_x = x;
if ( openinput(y, mode, allow, kbctrl_ptr) != mode )
{
Lfree(kbctrl_ptr);
*ctrl_str=NULL;
asix_kb_memdbgprintf( "### Create Keyboard Error ###" );
return ASIX_ERROR;
}
*ctrl_str = (void *)kbctrl_ptr;
asix_kb_memdbgprintf( "### Create Keyboard Successfully ###" );
return ASIX_OK;
}
STATUS kbd_destroy(void *ctrl_str)
{
asix_kb_memdbgprintf( "### Destroy Keyboard ###" );
closeinput(ctrl_str);
Lfree(ctrl_str);
asix_kb_memdbgprintf( "### Destroy Keyboard Successfully ###" );
return ASIX_OK;
}
STATUS kbd_msgtrans(void *ctrl_str, U16 msg_type, U32 areaId, P_U16 data, U32 size, PMSG trans_msg)
{
register U8 i;
/* Hand writing candidates number*/
#ifdef SOLIVE
U8 candy_num = 8;
#endif
#ifdef SANBAO
U8 candy_num = 4;
#endif
/* PingYing */
char PY_Key;
register struct kbd_ctrl *ctrlstr;
U16 chtext[2];
chtext[1]=0;
if ( msg_type != ASIX_ICON && msg_type != ASIX_CHINESE/*ASIX_HWR*/ && msg_type != ASIX_SOFTKEY) return ASIX_NO_MSG;
// ctrlstr = (struct kb_ctrl *)ctrl_str;
ctrlstr = (kbd_ctrl *)ctrl_str;
if (ctrlstr==NULL || ctrlstr->cur_mode==NOINPUT || trans_msg==NULL)
return ASIX_ERROR;
memset( (void *)trans_msg, 0x0, sizeof (MSG) );
trans_msg->messageType = ASIX_MESSAGE; //the type of all the ASIX win messages are ASIX_MESSAGE
//ctrl_str->classid = (U16)WNDCLASS_KEYBD;
switch( msg_type )
{
case ASIX_ICON:
ctrlstr->CtrlIconSelect = 0;
for (i=0;i<5;i++)
{
if (areaId==ctrlstr->CtrlIcon[i].icon_id )
{
ctrlstr->CtrlIconSelect = CONTROL_ICON;
ctrlstr->icon_index = i;
ctrlstr->icon_areaid = areaId;
goto msg_translate;
}
}
if (ctrlstr->cur_mode == SHOUXIE)
{
#ifdef SOLIVE
for (i=0;i<10;i++)
{
if ( (areaId==ctrlstr->HW_Icon1[i].icon_id)&&(ctrlstr->HW_Icon1[i].icon_data!=0)) {
ctrlstr->CtrlIconSelect=HWR_ICON1;
ctrlstr->icon_index=i;
ctrlstr->icon_areaid = areaId;
goto msg_translate;
}
// if ( (areaId==ctrlstr->HW_Icon2[i].icon_id)&&(ctrlstr->HW_Icon2[i].icon_data!=0)) {
// ctrlstr->CtrlIconSelect=HWR_ICON2;
// ctrlstr->icon_index=i;
// ctrlstr->icon_areaid = areaId;
// goto msg_translate;
// }
}
#endif
} else if (ctrlstr->cur_mode == PINYING) {
for (i=0; i<7; i++)
{
if ( (areaId==ctrlstr->PY_Icon[i].icon_id)&&(ctrlstr->PY_Icon[i].icon_data!=0)) {
ctrlstr->CtrlIconSelect = PY_ICON;
ctrlstr->icon_index = i;
ctrlstr->icon_areaid = areaId;
goto msg_translate;
}
}
if (areaId==ctrlstr->PY_RightButtonId) {
ctrlstr->CtrlIconSelect = PY_RIGHT;
ctrlstr->icon_areaid = areaId;
} else if (areaId==ctrlstr->PY_LeftButtonId) {
ctrlstr->CtrlIconSelect = PY_LEFT;
ctrlstr->icon_areaid = areaId;
}
} else if (ctrlstr->cur_mode == BOHAO ) {
for (i=0; i<12; i++)
{
if (areaId == ctrlstr->BoHaoIcon[i])
{
ctrlstr->CtrlIconSelect = BH_ICON;
ctrlstr->icon_index = i;
ctrlstr->icon_areaid = areaId;
goto msg_translate;
}
}
}
msg_translate:
if (ctrlstr->cur_mode == 0) return ASIX_NO_MSG;
if (ctrlstr->CtrlIconSelect == 0 ) return ASIX_NO_MSG;
trans_msg->lparam = ctrlstr->wndid;
trans_msg->data = (void *)ctrlstr;
trans_msg->wparam = (U16)WNDCLASS_KEYBD;
// if ( *data == PPSM_ICON_TOUCH ) trans_msg->message = WM_PENDOWN;
// else if ( *data == PPSM_ICON_DRAG ) trans_msg->message = WM_PENDRAG;
// else if ( *data == PPSM_ICON_DRAG_UP ) trans_msg->message = WM_PENDRAGUP;
// else if ( *data == PPSM_ICON_PEN_UP ) trans_msg->message = WM_PENUP;
if ( size == PPSM_ICON_TOUCH ) trans_msg->message = WM_PENDOWN;
else if ( size == PPSM_ICON_DRAG ) trans_msg->message = WM_PENDRAG;
else if ( size == PPSM_ICON_DRAG_UP ) trans_msg->message = WM_PENDRAGUP;
else if ( size == PPSM_ICON_PEN_UP ) trans_msg->message = WM_PENUP;
break;
case ASIX_CHINESE:/*ASIX_HWR:*/
if ( (data == NULL) || (size == 0) || (*(P_U8)data == 0 ) ) return ASIX_ERROR;
if ( ctrlstr->cur_mode == SHOUXIE )
{
#ifdef SOLIVE
// for ( i=0; i<9; i++)
// ctrlstr->HW_Icon2[i].icon_data = ctrlstr->HW_Icon1[i].icon_data;
// if ( size < 16 ) candy_num = size/2;
// for (i=0; i<9; i++)
// {
// if (i<=candy_num-1) {
// ctrlstr->HW_Icon1[i].icon_data = data[i];
// } else {
// ctrlstr->HW_Icon1[i].icon_data = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -