static Ret ftk_check_button_on_event(FtkWidget* thiz, FtkEvent* event) { Ret ret = RET_OK; DECL_PRIV0(thiz, priv); switch(event->type) { case FTK_EVT_MOUSE_DOWN: { ftk_widget_set_active(thiz, 1); ftk_window_grab(ftk_widget_toplevel(thiz), thiz); break; } case FTK_EVT_MOUSE_UP: { int x = event->u.mouse.x; int y = event->u.mouse.y; if(ftk_widget_is_active(thiz)) { ftk_widget_set_active(thiz, 0); ftk_window_ungrab(ftk_widget_toplevel(thiz), thiz); if(FTK_POINT_IN_WIDGET(x, y, thiz)) { ret = FTK_CALL_LISTENER(priv->listener, priv->listener_ctx, thiz); ftk_check_button_check(thiz); } } break; } case FTK_EVT_KEY_DOWN: { if(FTK_IS_ACTIVE_KEY(event->u.key.code)) { ftk_widget_set_active(thiz, 1); } break; } case FTK_EVT_KEY_UP: { if(FTK_IS_ACTIVE_KEY(event->u.key.code) && ftk_widget_is_active(thiz)) { ftk_widget_set_active(thiz, 0); ftk_check_button_check(thiz); ret = FTK_CALL_LISTENER(priv->listener, priv->listener_ctx, thiz); } break; } default:break; } return ret; }
static Ret ftk_menu_item_on_event(FtkWidget* thiz, FtkEvent* event) { Ret ret = RET_OK; DECL_PRIV0(thiz, priv); switch(event->type) { case FTK_EVT_MOUSE_DOWN: { ftk_widget_set_active(thiz, 1); ftk_window_grab(ftk_widget_toplevel(thiz), thiz); break; } case FTK_EVT_MOUSE_UP: { ftk_widget_set_active(thiz, 0); ftk_window_ungrab(ftk_widget_toplevel(thiz), thiz); ret = FTK_CALL_LISTENER(priv->listener, priv->listener_ctx, thiz); break; } case FTK_EVT_KEY_DOWN: { if(FTK_IS_ACTIVE_KEY(event->u.key.code)) { ftk_widget_set_active(thiz, 1); } break; } case FTK_EVT_KEY_UP: { if(FTK_IS_ACTIVE_KEY(event->u.key.code) && ftk_widget_is_active(thiz)) { ftk_widget_set_active(thiz, 0); ret = FTK_CALL_LISTENER(priv->listener, priv->listener_ctx, thiz); } break; } default:break; } return ret; }
Ret ftk_scroll_bar_set_value(FtkWidget* thiz, int value) { DECL_PRIV0(thiz, priv); return_val_if_fail(priv != NULL, RET_FAIL); value = value < 0 ? 0 : value; value = (value + priv->page_delta) < priv->max_value ? value : priv->max_value - priv->page_delta; if(value != priv->value) { priv->value = value; ftk_widget_invalidate(thiz); return FTK_CALL_LISTENER(priv->listener, priv->listener_ctx, thiz); } return RET_OK; }