Пример #1
0
static gboolean
on_trough_bg_button_press_event (ClutterActor       *actor,
                                 ClutterButtonEvent *event,
                                 MxSlider           *self)
{
  MxSliderPrivate *priv = self->priv;
  ClutterActor *stage;

  if (event->button != 1)
    return FALSE;

  if (mx_widget_get_disabled (MX_WIDGET (actor)))
    return FALSE;


  move_handle (self, event->x, event->y);

  stage = clutter_actor_get_stage (priv->handle);

  /* Turn off picking for motion events */
  clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), FALSE);

  priv->capture_handler =
    g_signal_connect_after (stage,
                            "captured-event",
                            G_CALLBACK (on_handle_capture_event),
                            self);

  return TRUE;
}
Пример #2
0
static gboolean
on_handle_capture_event (ClutterActor *trough,
                         ClutterEvent *event,
                         MxSlider     *bar)
{
  MxSliderPrivate *priv = bar->priv;

  if (clutter_event_type (event) == CLUTTER_MOTION)
    {
      drag_handle (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(priv->trough);

      if (priv->capture_handler)
        {
          g_signal_handler_disconnect (stage, priv->capture_handler);
          priv->capture_handler = 0;

          /* update the handle position */
          mx_slider_allocate_fill_handle (bar, NULL, 0);
          clutter_actor_queue_redraw (CLUTTER_ACTOR (bar));
        }

      clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), TRUE);

      /* 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 != priv->handle)
        {
          mx_stylable_set_style_pseudo_class (MX_STYLABLE (priv->handle),
                                            NULL);
        }

      /* emit the stop signal */
      g_signal_emit (bar, signals[SLIDE_STOP], 0);
    }

  return FALSE;
}
Пример #3
0
static void
stop_scrolling (StScrollBar *bar)
{
  ClutterStage *stage;

  if (!bar->priv->capture_handler)
    return;

  stage = CLUTTER_STAGE (clutter_actor_get_stage (bar->priv->trough));
  g_signal_handler_disconnect (stage, bar->priv->capture_handler);
  bar->priv->capture_handler = 0;

  clutter_stage_set_motion_events_enabled (stage, TRUE);
  g_signal_emit (bar, signals[SCROLL_STOP], 0);
}
Пример #4
0
static gboolean
red_button_cb (ClutterActor *actor,
               ClutterEvent *event,
               gpointer      data)
{
  ClutterActor *stage;

  if (IsMotion)
    IsMotion = FALSE;
  else
    IsMotion = TRUE;

  stage = clutter_actor_get_stage (actor);
  clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage),
                                           IsMotion);

  g_print ("*** Per actor motion events %s ***\n",
           IsMotion ? "enabled" : "disabled");

  return FALSE;
}
Пример #5
0
static gboolean
on_handle_button_press_event (ClutterActor       *actor,
                              ClutterButtonEvent *event,
                              MxSlider           *bar)
{
  MxSliderPrivate *priv = bar->priv;
  ClutterActor *stage;

  if (mx_widget_get_disabled (MX_WIDGET (actor)))
    return FALSE;

  if (event->button != 1)
    return FALSE;

  if (!clutter_actor_transform_stage_point (priv->handle,
                                            event->x,
                                            event->y,
                                            &priv->x_origin,
                                            NULL))
    return FALSE;

  g_signal_emit (bar, signals[SLIDE_START], 0);

  /* Account for the scrollbar-trough-handle nesting. */
  priv->x_origin += clutter_actor_get_x (priv->trough);

  /* Turn off picking for motion events */
  stage = clutter_actor_get_stage (priv->trough);
  clutter_stage_set_motion_events_enabled (CLUTTER_STAGE (stage), FALSE);

  priv->capture_handler =
    g_signal_connect_after (stage,
                            "captured-event",
                            G_CALLBACK (on_handle_capture_event),
                            bar);

  return FALSE;
}
Пример #6
0
static gboolean
handle_button_press_event_cb (ClutterActor       *actor,
                              ClutterButtonEvent *event,
                              StScrollBar        *bar)
{
  ClutterStage *stage;
  StScrollBarPrivate *priv = bar->priv;

  if (event->button != 1)
    return FALSE;

  if (!clutter_actor_transform_stage_point (priv->handle,
                                            event->x,
                                            event->y,
                                            &priv->x_origin,
                                            &priv->y_origin))
    return FALSE;

  /* Account for the scrollbar-trough-handle nesting. */
  priv->x_origin += clutter_actor_get_x (priv->trough);
  priv->y_origin += clutter_actor_get_y (priv->trough);

  stage = CLUTTER_STAGE (clutter_actor_get_stage (bar->priv->trough));

  /* Turn off picking for motion events */
  clutter_stage_set_motion_events_enabled (stage, FALSE);

  priv->capture_handler = g_signal_connect_after (
    clutter_actor_get_stage (priv->trough),
    "captured-event",
    G_CALLBACK (handle_capture_event_cb),
    bar);
  g_signal_emit (bar, signals[SCROLL_START], 0);

  return TRUE;
}