高分探讨一下,是不是BUIW里面的一个BUG?

jungwen 2009-08-18 03:41:54
以下是关于触摸屏的,框架代码,文件是Qualcomm\BREWUIWidgets_2.0.1\widgettc\src\ButtonTC.c

static boolean ButtonTC_DefHandleEvent(IController *po, AEEEvent evt,
uint16 wParam, uint32 dwParam)
{
ButtonTC *me = CAST(ButtonTC*, po);

if (!MYWIDGET(me))
{
return FALSE;
}


if (EVT_POINTER_DOWN == evt)
{
WExtent we;
IWIDGET_GetExtent(MYWIDGET(me), &we);
SETAEERECT(&me->rc, 0, 0, we.width, we.height);
me->bPressed = TRUE;
(void) IWIDGET_SetCapture(MYWIDGET(me), 1);
(void) IWIDGET_SetSelected(MYWIDGET(me), 1);
return TRUE;
}

if (EVT_POINTER_MOVE == evt)
{
int x = (int16) AEE_POINTER_GET_X((const char*) dwParam);
int y = (int16) AEE_POINTER_GET_Y((const char*) dwParam);
boolean bSelected = PointInRect(&me->rc, x, y);
if (bSelected != me->bSelected)
{
(void) IWIDGET_SetSelected(MYWIDGET(me), bSelected);
me->bSelected = bSelected;
}
return TRUE;
}

if (EVT_POINTER_UP == evt)
{
int x = (int16) AEE_POINTER_GET_X((const char*) dwParam);
int y = (int16) AEE_POINTER_GET_Y((const char*) dwParam);
(void) IWIDGET_SetCapture(MYWIDGET(me), 0);
(void) IWIDGET_SetSelected(MYWIDGET(me), 0);
if (PointInRect(&me->rc, x, y) && me->bPressed)
{
TCBase_NotifyClick(&me->base, WECLTYPE_CLICK, WETYPE_WIDGET_SELF, 0, 1);
}
me->bPressed = FALSE;
return TRUE;
}

return TCBase_DefHandleEvent(po, evt, wParam, dwParam);
}

主要是MOVE事件,如果该ButtonTC对应的按钮按过一次并完成释放,则第一次光标从外部移入时,会将WIDGET的Selected设置
为TRUE,后续从外部移入时,就不设置(正常处理)。
第一次外部移入时,不应该将Selected设置成TRUE的。
哪位高人能帮我看看!谢谢!
...全文
1673 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
都有源码了,你可以随意定制呀
jungwen 2009-08-18
  • 打赏
  • 举报
回复
我认为问题不大,UP事件增加如下处理即可:
if (EVT_POINTER_UP == evt)
{
int x = (int16) AEE_POINTER_GET_X((const char*) dwParam);
int y = (int16) AEE_POINTER_GET_Y((const char*) dwParam);
(void) IWIDGET_SetCapture(MYWIDGET(me), 0);
(void) IWIDGET_SetSelected(MYWIDGET(me), 0);
if (PointInRect(&me->rc, x, y) && me->bPressed)
{
TCBase_NotifyClick(&me->base, WECLTYPE_CLICK, WETYPE_WIDGET_SELF, 0, 1);
}
SETAEERECT(&me->rc, 0, 0, 0, 0);
me->bPressed = FALSE;
return TRUE;
}

主要是MOVE进来后,MOVE OUT没有设置FALSE.
liujie1008_cn 2009-08-18
  • 打赏
  • 举报
回复
buttontc 处理是有点问题,这个问题早碰到过,move 事件处理需要重新考虑下。
lijiangyun 2009-08-18
  • 打赏
  • 举报
回复
ButtonTC一旦收到up消息,一切状态都复位,特别是 IWIDGET_SetCapture(MYWIDGET(me), 0);
将RootContainer的piwCapture置空了,下一次点击再走同样的流程;

至于第一次光标从外部移入时,会将widget的selected设置为TRUE,我想肯定是你操作的原因,在释放
按钮的时候,不是在触摸屏范围内,导致ButtonTC根本就没有收到up消息。。。
jungwen 2009-08-18
  • 打赏
  • 举报
回复
更新以下问题,移入设置成Selected为TRUE是正确的,移出时设置为FALSE。
但是按键后,第一次外部移入时,设置成了TRUE,不过移出时,没有设置成FALSE,我觉得是BUG.

2,851

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧