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

📄 gtkrange.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
  xthickness = GTK_WIDGET (range)->style->klass->xthickness;  gtk_range_trough_vdims (range, &top, &bottom);  gdk_window_get_size (range->slider, NULL, &slider_length);  bottom += slider_length;	        if ((x > xthickness) && (y > top))    {      gdk_window_get_size (range->trough, &trough_width, &trough_height);      if ((x < (trough_width - xthickness) && (y < bottom)))	{	  if (jump_perc)	    {	      *jump_perc = ((gdouble) (y - top)) / ((gdouble) (bottom - top));	      return GTK_TROUGH_JUMP;	    }	  	  gdk_window_get_position (range->slider, NULL, &slider_y);	  	  if (y < slider_y)	    return GTK_TROUGH_START;	  else	    return GTK_TROUGH_END;	}    }  return GTK_TROUGH_NONE;}voidgtk_range_default_hmotion (GtkRange *range,			   gint      xdelta,			   gint      ydelta){  gdouble old_value;  gint left, right;  gint slider_x, slider_y;  gint new_pos;  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));  range = GTK_RANGE (range);  gdk_window_get_position (range->slider, &slider_x, &slider_y);  gtk_range_trough_hdims (range, &left, &right);  if (left == right)    return;  new_pos = slider_x + xdelta;  if (new_pos < left)    new_pos = left;  else if (new_pos > right)    new_pos = right;  old_value = range->adjustment->value;  range->adjustment->value = ((range->adjustment->upper -			       range->adjustment->lower -			       range->adjustment->page_size) *			      (new_pos - left) / (right - left) +			      range->adjustment->lower);  if (range->digits >= 0)    {      char buffer[64];      sprintf (buffer, "%0.*f", range->digits, range->adjustment->value);      sscanf (buffer, "%f", &range->adjustment->value);    }  if (old_value != range->adjustment->value)    {      if (range->policy == GTK_UPDATE_CONTINUOUS)	{	  gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	}      else	{	  gtk_range_slider_update (range);	  gtk_range_clear_background (range);	  if (range->policy == GTK_UPDATE_DELAYED)	    {	      gtk_range_remove_timer (range);	      range->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,					      (GtkFunction) RANGE_CLASS (range)->timer,					      (gpointer) range);	    }	}    }}voidgtk_range_default_vmotion (GtkRange *range,			   gint      xdelta,			   gint      ydelta){  gdouble old_value;  gint top, bottom;  gint slider_x, slider_y;  gint new_pos;  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_RANGE (range));  range = GTK_RANGE (range);  gdk_window_get_position (range->slider, &slider_x, &slider_y);  gtk_range_trough_vdims (range, &top, &bottom);  if (bottom == top)    return;  new_pos = slider_y + ydelta;  if (new_pos < top)    new_pos = top;  else if (new_pos > bottom)    new_pos = bottom;  old_value = range->adjustment->value;  range->adjustment->value = ((range->adjustment->upper -			       range->adjustment->lower -			       range->adjustment->page_size) *			      (new_pos - top) / (bottom - top) +			      range->adjustment->lower);  if (range->digits >= 0)    {      char buffer[64];      sprintf (buffer, "%0.*f", range->digits, range->adjustment->value);      sscanf (buffer, "%f", &range->adjustment->value);    }  if (old_value != range->adjustment->value)    {      if (range->policy == GTK_UPDATE_CONTINUOUS)	{	  gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	}      else	{	  gtk_range_slider_update (range);	  gtk_range_clear_background (range);	  if (range->policy == GTK_UPDATE_DELAYED)	    {	      gtk_range_remove_timer (range);	      range->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,					      (GtkFunction) RANGE_CLASS (range)->timer,					      (gpointer) range);	    }	}    }}static voidgtk_range_destroy (GtkObject *object){  GtkRange *range;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_RANGE (object));  range = GTK_RANGE (object);  if (range->adjustment)    gtk_signal_disconnect_by_data (GTK_OBJECT (range->adjustment),				   (gpointer) range);  (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);}static voidgtk_range_finalize (GtkObject *object){  GtkRange *range;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_RANGE (object));  range = GTK_RANGE (object);  if (range->adjustment)    gtk_object_unref (GTK_OBJECT (range->adjustment));  (* GTK_OBJECT_CLASS (parent_class)->finalize) (object);}static voidgtk_range_draw (GtkWidget    *widget,		GdkRectangle *area){  GtkRange *range;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_RANGE (widget));  g_return_if_fail (area != NULL);  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))    {      range = GTK_RANGE (widget);      gtk_range_draw_background (range);      gtk_range_draw_trough (range);      gtk_range_draw_slider (range);      gtk_range_draw_step_forw (range);      gtk_range_draw_step_back (range);    }}static voidgtk_range_draw_focus (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_RANGE (widget));  if (GTK_WIDGET_DRAWABLE (widget))    gtk_range_draw_trough (GTK_RANGE (widget));}static voidgtk_range_unrealize (GtkWidget *widget){  GtkRange *range;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_RANGE (widget));  range = GTK_RANGE (widget);  if (range->slider)    {      gdk_window_set_user_data (range->slider, NULL);      gdk_window_destroy (range->slider);      range->slider = NULL;    }  if (range->trough)    {      gdk_window_set_user_data (range->trough, NULL);      gdk_window_destroy (range->trough);      range->trough = NULL;    }  if (range->step_forw)    {      gdk_window_set_user_data (range->step_forw, NULL);      gdk_window_destroy (range->step_forw);      range->step_forw = NULL;    }  if (range->step_back)    {      gdk_window_set_user_data (range->step_back, NULL);      gdk_window_destroy (range->step_back);      range->step_back = NULL;    }  if (GTK_WIDGET_CLASS (parent_class)->unrealize)    (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);}static gintgtk_range_expose (GtkWidget      *widget,		  GdkEventExpose *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)    {      /* Don't redraw if we are only exposing the literal trough region.       * this may not work correctly if someone overrides the default       * trough-drawing handler. (Probably should really pass another       * argument - the redrawn area to all the drawing functions)       */      gint xt = widget->style->klass->xthickness;      gint yt = widget->style->klass->ythickness;            if (!((event->area.x >= xt) &&	    (event->area.y >= yt) &&	    (event->area.x + event->area.width <= 	     widget->allocation.width - xt) &&	    (event->area.y + event->area.height <= 	     widget->allocation.height - yt)))	gtk_range_draw_trough (range);    }  else if (event->window == widget->window)    {      gtk_range_draw_background (range);     }  else if (event->window == range->slider)    {      gtk_range_draw_slider (range);    }  else if (event->window == range->step_forw)    {      gtk_range_draw_step_forw (range);    }  else if (event->window == range->step_back)    {      gtk_range_draw_step_back (range);    }  return FALSE;}static gintgtk_range_button_press (GtkWidget      *widget,			GdkEventButton *event){  GtkRange *range;  gint trough_part;  gfloat jump_perc;  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);  if (!GTK_WIDGET_HAS_FOCUS (widget))    gtk_widget_grab_focus (widget);  jump_perc = -1;  range = GTK_RANGE (widget);  if (range->button == 0)    {      gtk_grab_add (widget);      range->button = event->button;      range->x_click_point = event->x;      range->y_click_point = event->y;      if (event->window == range->trough)	{	  range->click_child = RANGE_CLASS (range)->trough;	  	  if (range->button == 2)	    trough_part = gtk_range_trough_click (range, event->x, event->y, &jump_perc);	  else	    trough_part = gtk_range_trough_click (range, event->x, event->y, NULL);	  	  range->scroll_type = GTK_SCROLL_NONE;	  if (trough_part == GTK_TROUGH_START)	    range->scroll_type = GTK_SCROLL_PAGE_BACKWARD;	  else if (trough_part == GTK_TROUGH_END)	    range->scroll_type = GTK_SCROLL_PAGE_FORWARD;	  else if (trough_part == GTK_TROUGH_JUMP &&		   jump_perc >= 0 && jump_perc <= 1)	    range->scroll_type = GTK_SCROLL_JUMP;	  	  if (range->scroll_type != GTK_SCROLL_NONE)	    {	      gtk_range_scroll (range, jump_perc);	      gtk_range_add_timer (range);	    }	}      else if (event->window == range->slider)	{	  range->click_child = RANGE_CLASS (range)->slider;	  range->scroll_type = GTK_SCROLL_NONE;	}      else if (event->window == range->step_forw)	{	  range->click_child = RANGE_CLASS (range)->step_forw;	  range->scroll_type = GTK_SCROLL_STEP_FORWARD;	  gtk_range_scroll (range, -1);	  gtk_range_add_timer (range);	  gtk_range_draw_step_forw (range);	}      else if (event->window == range->step_back)	{	  range->click_child = RANGE_CLASS (range)->step_back;	  range->scroll_type = GTK_SCROLL_STEP_BACKWARD;	  gtk_range_scroll (range, -1);	  gtk_range_add_timer (range);	  gtk_range_draw_step_back (range);	}    }  return FALSE;}static gintgtk_range_button_release (GtkWidget      *widget,			  GdkEventButton *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 (range->button == event->button)    {      gtk_grab_remove (widget);      range->button = 0;      range->x_click_point = -1;      range->y_click_point = -1;      if (range->click_child == RANGE_CLASS (range)->slider)	{	  if (range->policy == GTK_UPDATE_DELAYED)	    gtk_range_remove_timer (range);	  if ((range->policy != GTK_UPDATE_CONTINUOUS) &&	      (range->old_value != range->adjustment->value))	    gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	}      else if ((range->click_child == RANGE_CLASS (range)->trough) ||	       (range->click_child == RANGE_CLASS (range)->step_forw) ||	       (range->click_child == RANGE_CLASS (range)->step_back))	{	  gtk_range_remove_timer (range);	  if ((range->policy != GTK_UPDATE_CONTINUOUS) &&	      (range->old_value != range->adjustment->value))	    gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	  if (range->click_child == RANGE_CLASS (range)->step_forw)	    {	      range->click_child = 0;	      gtk_range_draw_step_forw (range);	    }	  else if (range->click_child == RANGE_CLASS (range)->step_back)	    {	      range->click_child = 0;	      gtk_range_draw_step_back (range);	    }	}      range->click_child = 0;    }  return FALSE;}static gintgtk_range_motion_notify (GtkWidget      *widget,			 GdkEventMotion *event){  GtkRange *range;  GdkModifierType mods;  gint x, y, mask;  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 (range->click_child == RANGE_CLASS (range)->slider)    {      x = event->x;      y = event->y;      if (event->is_hint || (event->window != range->slider))	gdk_window_get_pointer (range->slider, &x, &y, &mods);      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;	}      if (mods & mask)	{	  if (RANGE_CLASS (range)->motion)	    (* RANGE_CLASS (range)->motion) (range, x - range->x_click_point, y - range->y_click_point);	}    }  return FALSE;}static gintgtk_range_key_press (GtkWidget   *widget,		     GdkEventKey *event){  GtkRange *range;  gint return_val;  GtkScrollType scroll = GTK_SCROLL_NONE;  GtkTroughType pos = GTK_TROUGH_NONE;  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);  return_val = FALSE;  if (RANGE_CLASS (range)->trough_keys)    return_val = (* RANGE_CLASS (range)->trough_keys) (range, event, &scroll, &pos);  if (return_val)    {      if (scroll != GTK_SCROLL_NONE)	{	  range->scroll_type = scroll;	  gtk_range_scroll (range, -1);	  if (range->old_value != range->adjustment->value)	    {	      gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed");	      switch (range->scroll_type)		{		case GTK_SCROLL_STEP_BACKWARD:		  gtk_range_draw_step_back (range);

⌨️ 快捷键说明

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