📄 mmi_touchpanel.c
字号:
y0 = pos[0].y-((int32)gTarget[0].y)*TP_SCALE_VALUE/dY;
SCI_TRACE_LOW("TPCalibrationHandler: x0(%ld) y0(%ld) dX(%ld) dY(%ld)", x0, y0, dX, dY);
TPSetCalibration(x0, y0, dX, dY, TP_SCALE_VALUE);
value[0] = x0;
value[1] = y0;
value[2] = dX;
value[3] = dY;
}
break;
default:
break;
}
if (is_ivalid)
s_curTarget++;
else
s_curTarget = 0;
if (s_curTarget < sizeof(gTarget)/sizeof(gTarget[0]))
MMK_PostMsg(win_id, MSG_FULL_PAINT, NULL, 0);
else
{
MMK_CloseWin(win_id);
}
}
else
{
SCI_TRACE_LOW("TPCalibrationHandler: MSG_TP_DOWN/MSG_TP_MOVE");
}
break;
default:
result = MMI_RESULT_FALSE;
if (msg_id >= MSG_APP_PHONE && msg_id <= MSG_APP_MAX)
result = MMI_RESULT_TRUE;
break;
}
return result;
}
/*****************************************************************************/
// Description : Touch Panel的绘制窗口
// Global resource dependence :
// Author: hongbing
// Note:
/*****************************************************************************/
LOCAL MMI_RESULT_E TP_PaintHandler (
MMI_WINDOW_ID_E win_id, // 窗口的ID
MMI_MESSAGE_ID_E msg_id, // 窗口的内部消息ID
DPARAM param // 相应消息的参数
)
{
MMI_RESULT_E result = MMI_RESULT_TRUE;
GUI_POINT_T *cur_point = (GUI_POINT_T*)param;
static GUI_POINT_T old_point;
switch (msg_id)
{
case MSG_OPEN_WINDOW:
SCI_TRACE_LOW("TP_PaintHandler: MSG_OPEN_WINDOW");
break;
case MSG_APP_OK:
case MSG_FULL_PAINT:
SCI_TRACE_LOW("TP_PaintHandler: MSG_FULL_PAINT");
GUI_DisplayStaticBmp(MAIN_LCD_ID, 0, 0, IMAGE_SYSSET_CALIBRATION_BG);
break;
// case MSG_LOSE_FOCUS:
// case MSG_CLOSE_WINDOW:
case MSG_APP_RED:
SCI_TRACE_LOW("TP_PaintHandler: MSG_CLOSE_WINDOW");
MMK_CloseWin(win_id);
break;
case MSG_TP_DOWN:
old_point = *cur_point;
// TP_DrawPoint(*cur_point);
break;
case MSG_TP_MOVE:
case MSG_TP_UP:
// SCI_TRACE_LOW("TP_PaintHandler: MSG_TP_XXXX cur_point(%d, %d)...", cur_point->x, cur_point->y);
// SCI_TRACE_LOW("TP_PaintHandler: MSG_TP_XXXX old_point(%d, %d)...", old_point.x, old_point.y);
TP_DrawLine(*cur_point, old_point);
TP_DrawPoint(*cur_point);
TP_DrawPoint(old_point);
old_point = *cur_point;
break;
default:
result = MMI_RESULT_FALSE;
break;
}
return MMI_RESULT_FALSE;
}
LOCAL void TP_DrawPoint (GUI_POINT_T point_pos)
{
uint16 x, y;
x = point_pos.x-1;
if(x > point_pos.x)
{
x = point_pos.x;
}
y = point_pos.y-1;
if(y > point_pos.y)
{
y = point_pos.y;
}
LCD_DrawHLine(MAIN_LCD_ID,x, point_pos.y, point_pos.x +1, MMI_DARK_RED_COLOR );
LCD_DrawVLine(MAIN_LCD_ID,point_pos.x, y, point_pos.y +1, MMI_DARK_RED_COLOR );
}
LOCAL void TP_DrawLine(GUI_POINT_T point_pos, GUI_POINT_T old_point)
{
LCD_DrawLine(
MAIN_LCD_ID,
point_pos.x,
point_pos.y,
old_point.x,
old_point.y,
MMI_DARK_BLUE_COLOR
);
}
/*****************************************************************************/
// Description : 是否正在Touch Panel校准窗口
// Global resource dependence :
// Author: liukaizan
// Note:
/*****************************************************************************/
PUBLIC BOOLEAN MMI_IsTpCalibration()
{
return (BOOLEAN)(MMK_GetFocusWinId() == TOUCH_PANEL_CALIBRATION_WIN_ID);
}
/*****************************************************************************/
// Description : 进行Touch Panel校准
// Global resource dependence :
// Author: liukaizan
// Note:
/*****************************************************************************/
LOCAL void MMI_TPCalibrationSub(BOOLEAN bForce)
{
int32 x0, y0, dX, dY;
if (!MMI_GetIsTouchPanel())
return ;
TPSampleCallBackSet(TP_SendPoint);
if(bForce || !MMI_LoadTPCalibration(&x0, &y0, &dX, &dY)) //需要重新校准??
{
MMK_CreateWin((uint32*)TOUCH_PANEL_CALIBRATION_WIN_TAB, (ADD_DATA)bForce);
for ( ;MMI_IsTpCalibration(); )
{
MMI_ProcessMsg();
}
}
else
{
TPSetCalibration(x0, y0, dX, dY, TP_SCALE_VALUE);
}
}
/*****************************************************************************/
// Description : 进行Touch Panel校准
// Global resource dependence :
// Author: liukaizan
// Note:
/*****************************************************************************/
PUBLIC void MMI_TPCalibration()
{
BOOLEAN RM_GetCalibrationPostMode(void);
#ifdef WIN32
MMI_SaveTPCalibration(0,0,1,1);
#endif
//xiezhuxin20070617 if( !MMI_IsPCBAVersion())
if(!RM_GetCalibrationPostMode())
MMI_TPCalibrationSub(FALSE);
}
/*****************************************************************************/
// Description : 强制进行Touch Panel校准
// Global resource dependence :
// Author: liukaizan
// Note:
/*****************************************************************************/
PUBLIC void MMI_TPCalibrationForce()
{
MMI_TPCalibrationSub(TRUE);
//MMK_CreateWin((uint32*)TOUCH_PANEL_PAINT_WIN_TAB, PNULL);
}
extern MmiSignalS *MMI_PeekSignal(MmiSignalS **signal);
BOOLEAN MMI_SendPoint(int16 x, int16 y, uint32 TPMsg)
{
MmiSignalS *sendSignal;
if (!MMI_IsTpCalibration())
{
//MMI_HandleStatusTPMsg(x, y, TPMsg);
y -= LCD_STATUS_H;
}
MmiCreateSignal(TPMsg, sizeof(uint32), &sendSignal);
sendSignal->send = TPSVR;
*((uint32*)(&sendSignal->sig)) = (x << 16)+(y & 0xffff);
MmiSendSignal(TASK_FL_ID, sendSignal);
return TRUE;
}
#define HWTP_SEND_POINT_TO_MMI_INTERVAL 1000
#define INVALID_MMI_COORD_X 0x7FFF
#define INVALID_MMI_COORD_Y 0x7FFF
BOOLEAN TP_SendPoint(int16 x, int16 y, uint8 state)
{
static uint16 s_lastX, s_lastY;
static BOOLEAN s_bTPDown = FALSE;
static BOOLEAN s_bDelalyProcess = FALSE;
static BOOLEAN s_bDelayMove = FALSE;
static uint16 s_DelayDownX, s_DelayDownY;
static uint16 s_DelayMoveX, s_DelayMoveY;
static uint32 s_tick = 0;
uint32 cur_tick = 0;
uint32 TPMsg;
uint8 bTPDown;
if (SCI_NULL != MMI_PeekSignal(NULL))
{
return FALSE;
}
bTPDown = state;
if (!bTPDown && !s_bTPDown)
{
SCI_TRACE_LOW("TP_SendPoint: Touch Panel error!");
return TRUE;
}
else if (!bTPDown)
{
TPMsg = MSG_TP_UP;
s_bTPDown = FALSE;
x = s_lastX;
y = s_lastY;
}
else if (!s_bTPDown)
{
TPMsg = MSG_TP_DOWN;
s_bTPDown = TRUE;
s_lastX = x;
s_lastY = y;
}
else
{
TPMsg = MSG_TP_MOVE;
s_lastX = x;
s_lastY = y;
}
switch (HWTP_SendPoint(x, y, TPMsg))
{
case POINT_PROCESSED:
if (s_bDelalyProcess)
{
MMI_SendPoint(INVALID_MMI_COORD_X, INVALID_MMI_COORD_Y, MSG_TP_DOWN);
s_bDelalyProcess = FALSE;
s_tick = SCI_GetTickCount();
}
cur_tick = SCI_GetTickCount();
if (MSG_TP_DOWN == TPMsg || MSG_TP_UP == TPMsg || cur_tick - s_tick >= HWTP_SEND_POINT_TO_MMI_INTERVAL)
{
s_tick = cur_tick;
MMI_SendPoint(INVALID_MMI_COORD_X, INVALID_MMI_COORD_Y, TPMsg);
}
break;
case POINT_UNPROCESSED:
if (s_bDelalyProcess)
{
MMI_SendPoint(s_DelayDownX, s_DelayDownY, MSG_TP_DOWN);
s_bDelalyProcess = FALSE;
if (s_bDelayMove)
{
s_bDelayMove = FALSE;
MMI_SendPoint(s_DelayMoveX, s_DelayMoveY, MSG_TP_MOVE);
}
}
return MMI_SendPoint(x, y, TPMsg);
break;
case POINT_DELAY_PROCESS:
if (FALSE == s_bDelalyProcess)
{
s_bDelalyProcess = TRUE;
s_DelayDownX = x;
s_DelayDownY = y;
}
else if (MSG_TP_MOVE == TPMsg)
{
s_bDelayMove = TRUE;
s_DelayMoveX = x;
s_DelayMoveY = y;
}
break;
case POINT_DISCARD:
break;
default:
SCI_ASSERT(FALSE);
break;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -