📄 afce_zi.c
字号:
agshLoadParameter(AG_PINYIN_DATA,chiContext_p->currentPyBsh,AGHO_UPDATE_DATA);
if (chiContext_p->imeState == IME_STATE_SE_INPUT)
{
agdmDisplayPopup(AG_HANZI_SENGLISH_INPUT_TEMPLATE);
/*画竖线*/
abs.x = 0,
abs.y = 122,
abs2.x = 0,
abs2.y = 141;
gddiDrawLine(&abs, &abs2);
/*将选中的SE反显*/
/*得到反显区域之前有几个英文单词*/
blankcount =
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib-chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
xInvertPos = 2; /*反显区的X坐标初试值*/
i=0;
while (blankcount>0)/*计算反显区的开始点*/
{
if (chiContext_p->currentPyBsh[i]==0x20)
blankcount--;
xInvertPos += GetGlyphWidth(chiContext_p->currentPyBsh[i])+1;/*加1是考虑字间距*/
i++;
}
/*计算反显区的长度*/
clipRect.topLeft.x = xInvertPos;
clipRect.topLeft.y = 124;
for (xInvertPos=2;chiContext_p->currentPyBsh[i]!=0x20;i++)
{
xInvertPos += GetGlyphWidth(chiContext_p->currentPyBsh[i])+1;
}
xInvertPos += GetGlyphWidth(0x20); /*选中的单词的长度*/
clipRect.width = xInvertPos-1;
clipRect.height = 15;
/*反显*/
gddiSetClippingRect(&clipRect);
gddiInvert(TRUE);
gddiSetClippingRect(NULL);
}
else
{
/*显示候选汉字*/
agshLoadParameter(AG_HANZI_DATA,
chiContext_p->currentHzGroupInfo.currentSelHz,
AGHO_UPDATE_DATA);
if (chiContext_p->imeState == IME_STATE_ASSOCIATION_SELECT)
{
agdmDisplayPopup(AG_HANZI_ASSOCIATION_INPUT_TEMPLATE);
}
else if (chiContext_p->imeState == IME_STATE_BISHUN_INPUT)
{
agdmDisplayPopup(AG_BH_INPUT_TEMPLATE);
}
else
{
if (chiContext_p->imeState == IME_STATE_PY_HZ_SELECT)
{
agshLoadParameter(AG_ARROW_HOLE,PNULL,AGHO_UPDATE_DATA);
}
/*拼音或者汉字选择状态*/
agdmDisplayPopup(AG_CE_INPUT_TEMPLATE);
}
/*划横线*/
abs.x = 1,
abs.y = 121,
abs2.x = 128,
abs2.y = 121;
gddiDrawLine(&abs, &abs2);
/*画竖线*/
abs.x = 0,
abs.y = 102,
abs2.x = 0,
abs2.y = 143;
gddiDrawLine(&abs, &abs2);
/* 反显候选拼音区域*/
if (chiContext_p->imeState == IME_STATE_PY_INPUT)
{
/*得到反显区域的长度和大小*/
blankcount =
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib-chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
xInvertPos = 2;
i=0;
while (blankcount>0)
{
if (chiContext_p->currentPyBsh[i]==0x20)
blankcount--;
xInvertPos += GetGlyphWidth(chiContext_p->currentPyBsh[i])+1;/*加1是考虑字间距*/
i++;
}
clipRect.topLeft.x = xInvertPos;
clipRect.topLeft.y = 104;
for (xInvertPos = 2;chiContext_p->currentPyBsh[i] != 0x20;i++)
xInvertPos += GetGlyphWidth(chiContext_p->currentPyBsh[i])+1;
xInvertPos += GetGlyphWidth(0x20);
clipRect.width = xInvertPos;
clipRect.height = 15;
gddiSetClippingRect(&clipRect);
gddiInvert(TRUE);
gddiSetClippingRect(NULL);
}
else
{
/* 反显候选汉字区域,汉字比较简单,宽度是固定的*/
/*应该将箭头提示去掉*/
agshLoadParameter(AG_HANZI_DATA,PNULL,AGHO_UPDATE_DATA);
agshLoadParameter(AG_ARROW_HOLE,PNULL,AGHO_UPDATE_DATA);
blankcount =
chiContext_p->currentHzGroupInfo.currentHzIndex-chiContext_p->currentHzGroupInfo.beginHzInLib;
clipRect.topLeft.x = 2 + blankcount*15;
clipRect.topLeft.y = 123;
clipRect.width = 15;
clipRect.height = 17;
gddiSetClippingRect(&clipRect);
gddiInvert(TRUE);
gddiSetClippingRect(NULL);
}
}
/* Update the display */
agshLoadElement(AG_CHINESE_INPUT_EVENTS);
}
/* AFCE_ZI004肯定要刷新屏幕,为了防止快速按键的时候updateFlag可以发生错误,所以这里相当于强制刷新*/
while ((refreshFlag=agdmGetUpdateFlag())!=0 )
{
agdmSetDoUpdate (TRUE);
}
chiContext_p->updateCompleted = TRUE;
}
/***************************************************************************
* 所有按键的处理函数
***************************************************************************/
static void
afImeEvents ( chiEditContext *chiContext_p, SignalBuffer *signalBuffer_p)
{
AgshEventInd *eventInd_p;
//Int8 hzIndex;
//Int8 maxIndex;
Boolean bDoBeep = TRUE;
L1AmTone keyTone = L1AM_MMI_VALID;
Boolean keyValid;
Int8 i;
//Int8 tempIndex;
eventInd_p = &signalBuffer_p->sig->agshEventInd;
/* 输入的是数字键 */
if (AG_EVENT_IS_CHAR_CODE(eventInd_p->event) == TRUE && (AG_EVENT_IS_NUM_CODE(eventInd_p->event)==TRUE))
{
/*输入事件,调用输入的函数*/
keyValid = afImeInputEvents(chiContext_p,eventInd_p);
}
else /* 输入的不是数字键 */
{
if(eventInd_p->isCommitted ==FALSE)
{
bDoBeep = FALSE; /*commit只处理一个TRUE就行了*/
}
else /*isCommitted = TRUE*/
{ /* Now do other event processing */
if (eventInd_p->event == AG_CLEAR_EVENT||eventInd_p->event == AG_ERASE_LINE_EVENT)
{
keyValid = afImeClearEvent(chiContext_p,signalBuffer_p);
/*清除以后,无效按键组合重新启动*//* AFCE_ZI004*/
if (keyValid == TRUE)
{
for (i=0; i<10; i++)
{
chiContext_p->invalidSEkeyTable[i] = 0;
}
}
}
else
{
/*假如没有刷新完屏幕,就不再处理以下的按键信号,防止刷新屏幕慢的问题*/
if (chiContext_p->updateCompleted!=TRUE)
{
return;
}
switch (eventInd_p->event)
{
case AG_SELECT_EVENT: /*press "OK", here take it as "select"*/
/*选择以后,无效按键组合重新启动*//* AFCE_ZI004*/
for (i=0; i<10; i++)
{
chiContext_p->invalidSEkeyTable[i] = 0;
}
keyValid = afImeSelectEvent(chiContext_p,signalBuffer_p);
break;
case AG_SCROLL_UP_EVENT:
keyValid = afImeScrollUpEvent(chiContext_p,signalBuffer_p);
break;
case AG_SCROLL_DOWN_EVENT:
keyValid = afImeScrollDownEvent(chiContext_p,signalBuffer_p);
break;
case AG_SCROLL_LEFT_EVENT:
keyValid = afImeScrollLeftEvent(chiContext_p,signalBuffer_p);
break;
case AG_SCROLL_RIGHT_EVENT:
keyValid = afImeScrollRightEvent(chiContext_p,signalBuffer_p);
break;
/*按了这几个键,退出输入法,并且将keyEvent返回给EDITOR处理*/
case AG_OK_EVENT:
case AG_QUIT_EVENT:
case AG_SIGN_INPUT_EVENT:
case AG_HASH_EVENT:
hzExitDataBody.handlerIsUnloaded = TRUE;
hzExitDataBody.inputChineseFlag = TRUE;
/*afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody); */
afshUnloadHandler(chiContext_p->myHandlerId);
afshSignalHandledFlagSet (FALSE);
break;
default:
keyValid = FALSE;
break;
} /* end switch */
}
}
}
/*记录KEYVALID决定是否刷新*/
chiContext_p->keyValid = keyValid;
/* AFCE_ZI004*/
if (chiContext_p->keyValid == TRUE)
{
chiContext_p->updateCompleted=FALSE;
afshRedisplayFlagSet ();
}
else
{
chiContext_p->updateCompleted=TRUE;
}
/*afChineseInputRefresh (chiContext_p);*/
if(keyValid == FALSE)
{
#if defined (UPGRADE_AUDIO_MANAGER)
keyTone = L1AM_MMI_INVALID;
#else
eventResp = AG_EVENT_INVALID;
#endif
}
if (bDoBeep)
{
#if defined (UPGRADE_AUDIO_MANAGER)
agauPlayTone(keyTone);
#else
agshLoadElement(AG_EVENT_INVALID);
#endif
}
}
/*输入事件的处理,也就是按了数字键*/
static Boolean afImeInputEvents ( chiEditContext *chiContext_p,
AgshEventInd *eventInd_p)
{
Boolean keyValid = TRUE;
Int8 i;
/*如果这个按键已经在无效按键库里,就不要在费时去库里取值了*/
if (chiContext_p->inputSerial >= 1)
{
for (i=0; i<10; i++)
{
if (chiContext_p->invalidSEkeyTable[i] == eventInd_p->event)
{
keyValid = FALSE;
return keyValid;
}
}
}
/*如果处于联想状态,而且必须是有效的数字键,才重新进入输入函数,重新初始化,并重设状态*/
if (chiContext_p->imeState == IME_STATE_ASSOCIATION_SELECT||
chiContext_p->imeState == IME_STATE_PY_HZ_SELECT)
{
//afInitContext(chiContext_p);
//chiContext_p->inputValue[0] = (AgCharCode)eventInd_p->event;
//chiContext_p->inputSerial=1;
for (i=0; i<10; i++)
{
chiContext_p->invalidSEkeyTable[i] = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -