Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #4
0
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);
}
Пример #5
0
void GUI_ScrollBar::set_slider_position(float percentage)
{
 move_slider((int)((float)track_length * percentage));
}
Пример #6
0
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);
}