linux应用程序_1_文本浏览器_8_输入设备_5_触摸屏滑动翻页

 linux应用程序_1_文本浏览器_8_输入设备_5_触摸屏滑动翻页

 

 

本篇在线程机制的基础上,为触摸屏输入添加滑动翻页功能,并将退出控制移动到右上角

 

主要修改触摸屏获取事件接口:

1、读取数据,没有数据则休眠

2、记录第一次按下的数据

3、记录松开的数据

4、判断离开点是否在屏幕右上角40像素长宽的正方形中,若是则退出

5、判断松开点与第一次按下点的x坐标差值,据此记录翻页事件

6、若5中不满足翻页条件,判断松开点位置,据此记录翻页事件

(设定的滑动距离比较小,因此6中按下点与松开点的x坐标相差不会太大)

#define PRESS   0
#define RELEASE 1
static int TsInputGetEvent(PT_InputEventOpr ptInputEventOpr)
{
	static struct timeval tPreTime;
	
	static struct ts_sample tSampPress, tSampRelease;

	static int iFlag = RELEASE;
	int iTimeOut, iSlip;

	struct ts_sample tSamp;	


	if(ts_read(g_ptTs, &tSamp, 1) < 0)
			return -1;
	
	if(iFlag == RELEASE)
	{
		if(tSamp.pressure == 1)
		{
			iFlag = PRESS;
			tSampPress = tSamp;			
		}
	}
	else
	{


		if(tSamp.pressure == 0)
		{
			iFlag = RELEASE;
			
			tSampRelease = tSamp;

			if((tSampRelease.x >= (g_iXres - 40)) && (tSampRelease.y <= 40))
			{
				ptInputEventOpr->iVal  = INPUT_VAL_EXIT;
				return 0;
			}
					
			iSlip = XSlipDirt(tSampPress.x, tSampRelease.x);
			switch(iSlip)
			{
				case SLIP_NO    : 
				{				
					ptInputEventOpr->iVal  = INPUT_VAL_UNKNOWN;
					break;
				}
				case SLIP_LEFT  :
				{
					ptInputEventOpr->iVal  = INPUT_VAL_PRE;
					return 0;
				}
				case SLIP_RIGHT :
				{
					ptInputEventOpr->iVal  = INPUT_VAL_NEXT;
					return 0;
				}
			}

			iTimeOut = IsOutOf100ms(&tPreTime, &tSampRelease.tv);
			if(iTimeOut)
			{
				if(tSampRelease.x < (g_iXres / 3))			
					ptInputEventOpr->iVal  = INPUT_VAL_PRE;
				else if(tSampRelease.x > (g_iXres * 2 / 3))
					ptInputEventOpr->iVal  = INPUT_VAL_NEXT;
				else 
					ptInputEventOpr->iVal  = INPUT_VAL_UNKNOWN;
				
				return 0;
			}

		}
	}

	return -1;
}

添加滑动方向判断

#define SLIP_LEFT	1
#define SLIP_RIGHT	2
#define SLIP_NO		-1

static int XSlipDirt(int iPressX, int iReleaseX)
{
	int iDelta = iReleaseX - iPressX;

	if(iDelta > (g_iXres / 12))
		return SLIP_RIGHT;

	else if(iDelta < (0 - g_iXres / 12))
		return SLIP_LEFT;

	return SLIP_NO;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值