按如下代码修改函数widget_general_pen_object_handler()
static BOOL widget_general_pen_object_handler(
widget_header_struct *h,
mmi_pen_point_struct point,
mmi_pen_event_type_enum pen_event)
{
......
case WIDGET_PAINTBOX_TYPE: //****original code****//
{
//-----add code-----START---//
static mmi_pen_point_struct pre_pos={0,0};
static BOOL scrolling_flag=MMI_FALSE;
mmi_pen_point_struct off_set={0,0};
widget_gadget_bar_struct *bar;
switch(pen_event)
{
case MMI_PEN_EVENT_DOWN:
{
pre_pos.x=point.x;
pre_pos.y=point.y;
break;
}
case MMI_PEN_EVENT_UP:
{
pre_pos.x=0;
pre_pos.y=0;
if (scrolling_flag)
{
pen_event=MMI_PEN_EVENT_ABORT;
}
break;
}
case MMI_PEN_EVENT_MOVE:
{
off_set.x=-(point.x-pre_pos.x);
off_set.y=-(point.y-pre_pos.y);
pre_pos.x=point.x;
pre_pos.y=point.y;
break;
}
}
if (pen_event == MMI_PEN_EVENT_ABORT)
{
scrolling_flag=MMI_FALSE;
}
if (_H(WGUI_CTX->current_vertical_scrollbar)&&((pen_event == MMI_PEN_EVENT_MOVE)))
{
bar = WGUI_CTX->current_vertical_scrollbar;
bar->value+=off_set.y;
if (bar->value<0)
{
bar->value=0;
}
if(bar->value>bar->max_value)
{
bar->value=bar->max_value;
}
WGUI_CTX->vbar.value=bar->value;
wiget_MMI_paintbox_scroll_by_pen(bar->parent,
_H(bar),
bar->value,
KAL_FALSE);
scrolling_flag=MMI_TRUE;
}
if (_H(WGUI_CTX->current_horizontal_scrollbar)&&((pen_event == MMI_PEN_EVENT_MOVE)))
{
bar = WGUI_CTX->current_horizontal_scrollbar;
bar->value+=off_set.x;
if (bar->value<0)
{
bar->value=0;
}
if(bar->value>bar->max_value)
{
bar->value=bar->max_value;
}
WGUI_CTX->hbar.value=bar->value;
wiget_MMI_paintbox_scroll_by_pen(bar->parent,
_H(bar),
bar->value,
KAL_FALSE);
scrolling_flag=MMI_TRUE;
}
//-----Add code-----END-----//
if (pen_event == MMI_PEN_EVENT_DOWN || pen_event == MMI_PEN_EVENT_UP || pen_event ==
MMI_PEN_EVENT_ABORT) /****original code****/
......
......
}
static BOOL widget_general_pen_object_handler(
widget_header_struct *h,
mmi_pen_point_struct point,
mmi_pen_event_type_enum pen_event)
{
......
case WIDGET_PAINTBOX_TYPE: //****original code****//
{
//-----add code-----START---//
static mmi_pen_point_struct pre_pos={0,0};
static BOOL scrolling_flag=MMI_FALSE;
mmi_pen_point_struct off_set={0,0};
widget_gadget_bar_struct *bar;
switch(pen_event)
{
case MMI_PEN_EVENT_DOWN:
{
pre_pos.x=point.x;
pre_pos.y=point.y;
break;
}
case MMI_PEN_EVENT_UP:
{
pre_pos.x=0;
pre_pos.y=0;
if (scrolling_flag)
{
pen_event=MMI_PEN_EVENT_ABORT;
}
break;
}
case MMI_PEN_EVENT_MOVE:
{
off_set.x=-(point.x-pre_pos.x);
off_set.y=-(point.y-pre_pos.y);
pre_pos.x=point.x;
pre_pos.y=point.y;
break;
}
}
if (pen_event == MMI_PEN_EVENT_ABORT)
{
scrolling_flag=MMI_FALSE;
}
if (_H(WGUI_CTX->current_vertical_scrollbar)&&((pen_event == MMI_PEN_EVENT_MOVE)))
{
bar = WGUI_CTX->current_vertical_scrollbar;
bar->value+=off_set.y;
if (bar->value<0)
{
bar->value=0;
}
if(bar->value>bar->max_value)
{
bar->value=bar->max_value;
}
WGUI_CTX->vbar.value=bar->value;
wiget_MMI_paintbox_scroll_by_pen(bar->parent,
_H(bar),
bar->value,
KAL_FALSE);
scrolling_flag=MMI_TRUE;
}
if (_H(WGUI_CTX->current_horizontal_scrollbar)&&((pen_event == MMI_PEN_EVENT_MOVE)))
{
bar = WGUI_CTX->current_horizontal_scrollbar;
bar->value+=off_set.x;
if (bar->value<0)
{
bar->value=0;
}
if(bar->value>bar->max_value)
{
bar->value=bar->max_value;
}
WGUI_CTX->hbar.value=bar->value;
wiget_MMI_paintbox_scroll_by_pen(bar->parent,
_H(bar),
bar->value,
KAL_FALSE);
scrolling_flag=MMI_TRUE;
}
//-----Add code-----END-----//
if (pen_event == MMI_PEN_EVENT_DOWN || pen_event == MMI_PEN_EVENT_UP || pen_event ==
MMI_PEN_EVENT_ABORT) /****original code****/
......
......
}