static gboolean handle_capture_event_cb (ClutterActor *trough, ClutterEvent *event, StScrollBar *bar) { if (clutter_event_type (event) == CLUTTER_MOTION) { move_slider (bar, ((ClutterMotionEvent*) event)->x, ((ClutterMotionEvent*) event)->y); } else if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE && ((ClutterButtonEvent*) event)->button == 1) { ClutterActor *stage, *target; stop_scrolling (bar); /* check if the mouse pointer has left the handle during the drag and * remove the hover state if it has */ stage = clutter_actor_get_stage (bar->priv->trough); target = clutter_stage_get_actor_at_pos ((ClutterStage*) stage, CLUTTER_PICK_REACTIVE, ((ClutterButtonEvent*) event)->x, ((ClutterButtonEvent*) event)->y); if (target != bar->priv->handle) { st_widget_remove_style_pseudo_class ((StWidget*) bar->priv->handle, "hover"); } } return TRUE; }
static gboolean handle_motion_event_cb (ClutterActor *trough, ClutterMotionEvent *event, StScrollBar *bar) { if (!bar->priv->grabbed) return FALSE; move_slider (bar, event->x, event->y); return TRUE; }
static gboolean handle_capture_event_cb (ClutterActor *trough, ClutterEvent *event, MxScrollBar *bar) { if (clutter_event_type (event) == CLUTTER_MOTION) { move_slider (bar, ((ClutterMotionEvent*) event)->x, ((ClutterMotionEvent*) event)->y); } else if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE && ((ClutterButtonEvent*) event)->button == 1) { ClutterActor *stage, *target; stage = clutter_actor_get_stage(bar->priv->trough); if (bar->priv->capture_handler) { g_signal_handler_disconnect (stage, bar->priv->capture_handler); bar->priv->capture_handler = 0; } clutter_set_motion_events_enabled (TRUE); g_signal_emit (bar, signals[SCROLL_STOP], 0); /* check if the mouse pointer has left the handle during the drag and * remove the hover state if it has */ target = clutter_stage_get_actor_at_pos ((ClutterStage*) stage, CLUTTER_PICK_REACTIVE, ((ClutterButtonEvent*) event)->x, ((ClutterButtonEvent*) event)->y); if (target != bar->priv->handle) { mx_stylable_set_style_pseudo_class (MX_STYLABLE (bar->priv->handle), NULL); } else { /* allow the release event to continue to the handle for processing */ return FALSE; } } return TRUE; }
GUI_status GUI_ScrollBar::MouseMotion(int x,int y, Uint8 state) { int new_slider_y; if(!drag) return GUI_PASS; new_slider_y = y - slider_click_offset - (area.y + button_height); if(move_slider(new_slider_y)) { send_slider_moved_msg(); } // Redraw(); return (GUI_YUM); }
void GUI_ScrollBar::set_slider_position(float percentage) { move_slider((int)((float)track_length * percentage)); }
void press_slider(GuiObject * slid) { GuiWindow *win; GuiWinThread *win_thread; int position, old_x, old_y; int x, y; int old_position = 0, on_bar = FALSE; check_object(slid, "slid", "press_slider"); win = slid->win; check_window(win, "press_slider"); win_thread = win->win_thread; old_x = slid->x; old_y = slid->y; x = mouse.x - win->x; y = mouse.y - win->y; if ((slid->type == HOR_SLIDER && /* on slider bar? */ x >= slid->x + slid->position && x <= slid->x + slid->position + slid->length) || (slid->type == VERT_SLIDER && y >= slid->y + slid->slider_length - slid->position - slid->length && y <= slid->y + slid->slider_length - slid->position)) { old_x = x; old_y = y - slid->slider_length; old_position = slid->position; on_bar = TRUE; } if (!on_bar && (slid->type == HOR_SLIDER || slid->type == VERT_SLIDER)) { if (slid->type == HOR_SLIDER) { if (x > slid->x + slid->position) move_slider(slid, 2); else move_slider(slid, -2); } if (slid->type == VERT_SLIDER) { if (y > slid->y + slid->slider_length - slid->position) move_slider(slid, -2); else move_slider(slid, +2); } return; } do { usleep(sleep_time); do_window_functions(win_thread); if (GuiGetMessage() == GuiMouseEvent) { move_mouse(); x = mouse.x - win->x; y = mouse.y - win->y; position = old_position; if (slid->type == HOR_SLIDER || slid->type == NICE_HOR_SLIDER) position += x - old_x; else position += slid->slider_length - (y - old_y); if (position > slid->slider_length - slid->length) position = slid->slider_length - slid->length; if (position < 0) position = 0; slid->position = position; show_slider(slid); slid->object_callback(slid, slid->u_data); } } while (GuiMouseGetButton() == GuiMouseLeftButton); /* check for double click on slider bar */ if (on_bar) check_double_click(slid); }