Esempio n. 1
0
static void scroll_v_action( 	GtkWidget 	*w,
				gpointer 	data)
{
  FlowWidgetGtk *floww = (FlowWidgetGtk *)data;

  if ( floww->scroll_v_ignore) {
    floww->scroll_v_ignore = 0;
    return;
  }
    
  FlowCtx *ctx = (FlowCtx *) floww->flow_ctx;
  gdouble value;
  value = gtk_range_get_value( GTK_RANGE(floww->scroll_v));

  if ( value == 0 && fabs( floww->scroll_v_value) > 2) {
    // Probably a resize that seems to set value to zero, set old value
    ctx->change_scrollbar();
    return;
  }
  floww->scroll_v_value = value;

  flow_scroll_vertical( ctx, int(value), 0);
}
Esempio n. 2
0
static void scroll_v_action( 	Widget 		w,
				XtPointer 	client_data,
				XtPointer 	call_data)
{

  XmScrollBarCallbackStruct *cbs = (XmScrollBarCallbackStruct *) call_data;
  FlowCtx *ctx = (FlowCtx *) ((FlowWidget) client_data)->flow.flow_ctx;
  Arg 		arg[20];
  int		i;
  int		maximum, slider, value, bottom;


  // Calculate if position is bottom
  i = 0;
  XtSetArg( arg[i], XmNmaximum, &maximum);i++;
  XtSetArg( arg[i], XmNsliderSize, &slider);i++;
  XtSetArg( arg[i], XmNvalue, &value);i++;
  XtGetValues( w, arg, i);
  if ( slider + value == maximum)
    bottom = 1;
  else
    bottom = 0;

  switch( cbs->reason)
  {
    case XmCR_DRAG:
    case XmCR_VALUE_CHANGED:
    case XmCR_INCREMENT:
    case XmCR_DECREMENT:
    case XmCR_PAGE_INCREMENT:
    case XmCR_PAGE_DECREMENT:
    case XmCR_TO_TOP:
    case XmCR_TO_BOTTOM:
      flow_scroll_vertical( ctx, cbs->value, bottom);
      break;
  }
}