static MoveSashFunc_t circle_near_sash(Object_t *obj, gint x, gint y) { Circle_t *circle = ObjectToCircle(obj); sash_x = x; sash_y = y; if (near_sash(circle->x - circle->r, circle->y - circle->r, x, y) || near_sash(circle->x + circle->r, circle->y - circle->r, x, y) || near_sash(circle->x - circle->r, circle->y + circle->r, x, y) || near_sash(circle->x + circle->r, circle->y + circle->r, x, y)) return move_sash; return NULL; }
static MoveSashFunc_t rectangle_near_sash(Object_t *obj, gint x, gint y) { Rectangle_t *rectangle = ObjectToRectangle(obj); if (near_sash(rectangle->x, rectangle->y, x, y)) return MoveUpperLeftSash; else if (near_sash(rectangle->x + rectangle->width / 2, rectangle->y, x, y)) return MoveUpperSash; else if (near_sash(rectangle->x + rectangle->width, rectangle->y, x, y)) return MoveUpperRightSash; else if (near_sash(rectangle->x, rectangle->y + rectangle->height / 2, x, y)) return MoveLeftSash; else if (near_sash(rectangle->x + rectangle->width, rectangle->y + rectangle->height / 2, x, y)) return MoveRightSash; else if (near_sash(rectangle->x, rectangle->y + rectangle->height, x, y)) return MoveLowerLeftSash; else if (near_sash(rectangle->x + rectangle->width / 2, rectangle->y + rectangle->height, x, y)) return MoveLowerSash; else if (near_sash(rectangle->x + rectangle->width, rectangle->y + rectangle->height, x, y)) return MoveLowerRightSash; return NULL; }