⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkrange.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
		  break;		case GTK_SCROLL_STEP_FORWARD:		  gtk_range_draw_step_forw (range);		  break;		}	    }	}      if (pos != GTK_TROUGH_NONE)	{	  if (pos == GTK_TROUGH_START)	    range->adjustment->value = range->adjustment->lower;	  else if (pos == GTK_TROUGH_END)	    range->adjustment->value =	      range->adjustment->upper - range->adjustment->page_size;	  if (range->old_value != range->adjustment->value)	    {	      gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment),				       "value_changed");	      gtk_range_slider_update (range);	      gtk_range_clear_background (range);	    }	}    }  return return_val;}static gintgtk_range_enter_notify (GtkWidget        *widget,			GdkEventCrossing *event){  GtkRange *range;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  range = GTK_RANGE (widget);  if (event->window == range->trough)    {      range->in_child = RANGE_CLASS (range)->trough;    }  else if (event->window == range->slider)    {      range->in_child = RANGE_CLASS (range)->slider;      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_slider (range);    }  else if (event->window == range->step_forw)    {      range->in_child = RANGE_CLASS (range)->step_forw;      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_step_forw (range);    }  else if (event->window == range->step_back)    {      range->in_child = RANGE_CLASS (range)->step_back;      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_step_back (range);    }  return FALSE;}static gintgtk_range_leave_notify (GtkWidget        *widget,			GdkEventCrossing *event){  GtkRange *range;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  range = GTK_RANGE (widget);  range->in_child = 0;  if (event->window == range->trough)    {    }  else if (event->window == range->slider)    {      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_slider (range);    }  else if (event->window == range->step_forw)    {      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_step_forw (range);    }  else if (event->window == range->step_back)    {      if ((range->click_child == 0) ||	  (range->click_child == RANGE_CLASS (range)->trough))	gtk_range_draw_step_back (range);    }  return FALSE;}static gintgtk_range_focus_in (GtkWidget     *widget,		    GdkEventFocus *event){  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);  gtk_widget_draw_focus (widget);  return FALSE;}static gintgtk_range_focus_out (GtkWidget     *widget,		     GdkEventFocus *event){  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);  gtk_widget_draw_focus (widget);  return FALSE;}static voidgtk_real_range_draw_trough (GtkRange *range){  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));  if (range->trough)     {	gtk_paint_box (GTK_WIDGET (range)->style, range->trough,		       GTK_STATE_ACTIVE, GTK_SHADOW_IN,		       NULL, GTK_WIDGET(range), "trough",		       0, 0, -1, -1);	if (GTK_WIDGET_HAS_FOCUS (range))	  gtk_paint_focus (GTK_WIDGET (range)->style,			  range->trough,			   NULL, GTK_WIDGET(range), "trough",			  0, 0, -1, -1);    }}static voidgtk_real_range_draw_slider (GtkRange *range){  GtkStateType state_type;     g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));     if (range->slider)    {      if ((range->in_child == RANGE_CLASS (range)->slider) ||	  (range->click_child == RANGE_CLASS (range)->slider))	state_type = GTK_STATE_PRELIGHT;      else	state_type = GTK_STATE_NORMAL;      gtk_paint_box (GTK_WIDGET (range)->style, range->slider,		     state_type, GTK_SHADOW_OUT,		     NULL, GTK_WIDGET (range), "slider",		     0, 0, -1, -1);    }}static gintgtk_real_range_timer (GtkRange *range){  gint return_val;  GDK_THREADS_ENTER ();  return_val = TRUE;  if (range->click_child == RANGE_CLASS (range)->slider)    {      if (range->policy == GTK_UPDATE_DELAYED)	gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");      return_val = FALSE;    }  else    {      GdkModifierType mods, mask;      if (!range->timer)	{	  return_val = FALSE;	  if (range->need_timer)	    range->timer = gtk_timeout_add (SCROLL_TIMER_LENGTH,					    (GtkFunction) RANGE_CLASS (range)->timer,					    (gpointer) range);	  else	    {	      GDK_THREADS_LEAVE ();	      return FALSE;	    }	  range->need_timer = FALSE;	}      switch (range->button)	{	case 1:	  mask = GDK_BUTTON1_MASK;	  break;	case 2:	  mask = GDK_BUTTON2_MASK;	  break;	case 3:	  mask = GDK_BUTTON3_MASK;	  break;	default:	  mask = 0;	  break;	}      gdk_window_get_pointer (range->slider, NULL, NULL, &mods);      if (mods & mask)	return_val = gtk_range_scroll (range, -1);    }  GDK_THREADS_LEAVE ();  return return_val;}static gintgtk_range_scroll (GtkRange *range,		  gfloat    jump_perc){  gfloat new_value;  gint return_val;  g_return_val_if_fail (range != NULL, FALSE);  g_return_val_if_fail (GTK_IS_RANGE (range), FALSE);  new_value = range->adjustment->value;  return_val = TRUE;  switch (range->scroll_type)    {    case GTK_SCROLL_NONE:      break;          case GTK_SCROLL_JUMP:      if (jump_perc >= 0 && jump_perc <= 1)	{	  new_value = (range->adjustment->lower +		       (range->adjustment->upper - range->adjustment->page_size -			range->adjustment->lower) * jump_perc);	}      break;          case GTK_SCROLL_STEP_BACKWARD:      new_value -= range->adjustment->step_increment;      if (new_value <= range->adjustment->lower)	{	  new_value = range->adjustment->lower;	  return_val = FALSE;	  range->timer = 0;	}      break;    case GTK_SCROLL_STEP_FORWARD:      new_value += range->adjustment->step_increment;      if (new_value >= (range->adjustment->upper - range->adjustment->page_size))	{	  new_value = range->adjustment->upper - range->adjustment->page_size;	  return_val = FALSE;	  range->timer = 0;	}      break;    case GTK_SCROLL_PAGE_BACKWARD:      new_value -= range->adjustment->page_increment;      if (new_value <= range->adjustment->lower)	{	  new_value = range->adjustment->lower;	  return_val = FALSE;	  range->timer = 0;	}      break;    case GTK_SCROLL_PAGE_FORWARD:      new_value += range->adjustment->page_increment;      if (new_value >= (range->adjustment->upper - range->adjustment->page_size))	{	  new_value = range->adjustment->upper - range->adjustment->page_size;	  return_val = FALSE;	  range->timer = 0;	}      break;    }  if (new_value != range->adjustment->value)    {      range->adjustment->value = new_value;      if ((range->policy == GTK_UPDATE_CONTINUOUS) ||	  (!return_val && (range->policy == GTK_UPDATE_DELAYED)))	{	  gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	}      else	{	  gtk_range_slider_update (range);	  gtk_range_clear_background (range);	}    }  return return_val;}static voidgtk_range_add_timer (GtkRange *range){  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));  if (!range->timer)    {      range->need_timer = TRUE;      range->timer = gtk_timeout_add (SCROLL_INITIAL_DELAY,				      (GtkFunction) RANGE_CLASS (range)->timer,				      (gpointer) range);    }}static voidgtk_range_remove_timer (GtkRange *range){  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));  if (range->timer)    {      gtk_timeout_remove (range->timer);      range->timer = 0;    }  range->need_timer = FALSE;}static voidgtk_range_adjustment_changed (GtkAdjustment *adjustment,			      gpointer       data){  GtkRange *range;  g_return_if_fail (adjustment != NULL);  g_return_if_fail (data != NULL);  range = GTK_RANGE (data);  if (((range->old_lower != adjustment->lower) ||       (range->old_upper != adjustment->upper) ||       (range->old_page_size != adjustment->page_size)) &&      (range->old_value == adjustment->value))    {      if ((adjustment->lower == adjustment->upper) ||	  (range->old_lower == (range->old_upper - range->old_page_size)))	{	  adjustment->value = adjustment->lower;	  gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed");	}    }  if ((range->old_value != adjustment->value) ||      (range->old_lower != adjustment->lower) ||      (range->old_upper != adjustment->upper) ||      (range->old_page_size != adjustment->page_size))    {      gtk_range_slider_update (range);      gtk_range_clear_background (range);      range->old_value = adjustment->value;      range->old_lower = adjustment->lower;      range->old_upper = adjustment->upper;      range->old_page_size = adjustment->page_size;    }}static voidgtk_range_adjustment_value_changed (GtkAdjustment *adjustment,				    gpointer       data){  GtkRange *range;  g_return_if_fail (adjustment != NULL);  g_return_if_fail (data != NULL);  range = GTK_RANGE (data);  if (range->old_value != adjustment->value)    {      gtk_range_slider_update (range);      gtk_range_clear_background (range);      range->old_value = adjustment->value;    }}static voidgtk_range_trough_hdims (GtkRange *range,			gint     *left,			gint     *right){  gint trough_width;  gint slider_length;  gint tmp_width;  gint tleft;  gint tright;  g_return_if_fail (range != NULL);  gdk_window_get_size (range->trough, &trough_width, NULL);  gdk_window_get_size (range->slider, &slider_length, NULL);  tleft = GTK_WIDGET (range)->style->klass->xthickness;  tright = trough_width - slider_length - GTK_WIDGET (range)->style->klass->xthickness;  if (range->step_back)    {      gdk_window_get_size (range->step_back, &tmp_width, NULL);      tleft += (tmp_width + RANGE_CLASS (range)->stepper_slider_spacing);    }  if (range->step_forw)    {      gdk_window_get_size (range->step_forw, &tmp_width, NULL);      tright -= (tmp_width + RANGE_CLASS (range)->stepper_slider_spacing);    }  if (left)    *left = tleft;  if (right)    *right = tright;}static voidgtk_range_trough_vdims (GtkRange *range,			gint     *top,			gint     *bottom){  gint trough_height;  gint slider_length;  gint tmp_height;  gint ttop;  gint tbottom;  g_return_if_fail (range != NULL);  gdk_window_get_size (range->trough, NULL, &trough_height);  gdk_window_get_size (range->slider, NULL, &slider_length);  ttop = GTK_WIDGET (range)->style->klass->ythickness;  tbottom = trough_height - slider_length - GTK_WIDGET (range)->style->klass->ythickness;  if (range->step_back)    {      gdk_window_get_size (range->step_back, NULL, &tmp_height);      ttop += (tmp_height + RANGE_CLASS (range)->stepper_slider_spacing);    }  if (range->step_forw)    {      gdk_window_get_size (range->step_forw, NULL, &tmp_height);      tbottom -= (tmp_height + RANGE_CLASS (range)->stepper_slider_spacing);    }  if (top)    *top = ttop;  if (bottom)    *bottom = tbottom;}static voidgtk_range_style_set (GtkWidget *widget,		      GtkStyle  *previous_style){  GtkRange *range;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_RANGE (widget));  range = GTK_RANGE (widget);  if (GTK_WIDGET_REALIZED (widget))    {      if (range->trough)	gtk_style_set_background (widget->style, range->trough, GTK_STATE_ACTIVE);      if (range->slider)	gtk_style_set_background (widget->style, range->slider, GTK_STATE_NORMAL);            /* The backgrounds of the step_forw and step_back never actually       * get drawn in draw calls, so we call gdk_window_clear() here       * so they get the correct colors. This is a hack. OWT.       */      if (range->step_forw)	{	  gtk_style_set_background (widget->style, range->step_forw, GTK_STATE_ACTIVE);	  gdk_window_clear (range->step_forw);	}      if (range->step_back)	{	  gtk_style_set_background (widget->style, range->step_back, GTK_STATE_ACTIVE);	  gdk_window_clear (range->step_back);	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -