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

📄 gtkentry.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
		       gint         start_pos,		       gint         end_pos){  gtk_entry_queue_draw (GTK_ENTRY(editable));}static gchar *    gtk_entry_get_chars      (GtkEditable   *editable,			  gint           start_pos,			  gint           end_pos){  GtkEntry *entry;    g_return_val_if_fail (editable != NULL, NULL);  g_return_val_if_fail (GTK_IS_ENTRY (editable), NULL);  entry = GTK_ENTRY (editable);  if (end_pos < 0)    end_pos = entry->text_length;  start_pos = MIN(entry->text_length, start_pos);  end_pos = MIN(entry->text_length, end_pos);  if (start_pos <= end_pos)    {      guchar *mbstr;      if (entry->use_wchar)	{	  GdkWChar ch;	  if (end_pos >= entry->text_size)	    gtk_entry_grow_text(entry);	  ch = entry->text[end_pos];	  entry->text[end_pos] = 0;	  mbstr = gdk_wcstombs (entry->text + start_pos);	  entry->text[end_pos] = ch;	  return (gchar *)mbstr;	}      else	{	  gint i;	  mbstr = g_new (gchar, end_pos - start_pos + 1);	  for (i=0; i<end_pos-start_pos; i++)	    mbstr[i] = entry->text[start_pos + i];	  mbstr[i] = 0;	  return (gchar *)mbstr;	}    }  else    return NULL;}static void gtk_entry_move_cursor (GtkEditable *editable,		       gint         x,		       gint         y){  GtkEntry *entry;  entry = GTK_ENTRY (editable);  /* Horizontal motion */  if ((gint)editable->current_pos < -x)    editable->current_pos = 0;  else if (editable->current_pos + x > entry->text_length)    editable->current_pos = entry->text_length;  else    editable->current_pos += x;  /* Ignore vertical motion */}static voidgtk_move_forward_character (GtkEntry *entry){  gtk_entry_move_cursor (GTK_EDITABLE (entry), 1, 0);}static voidgtk_move_backward_character (GtkEntry *entry){  gtk_entry_move_cursor (GTK_EDITABLE (entry), -1, 0);}static void gtk_entry_move_word (GtkEditable *editable,		     gint         n){  while (n-- > 0)    gtk_move_forward_word (GTK_ENTRY (editable));  while (n++ < 0)    gtk_move_backward_word (GTK_ENTRY (editable));}static voidgtk_move_forward_word (GtkEntry *entry){  GtkEditable *editable;  GdkWChar *text;  gint i;  editable = GTK_EDITABLE (entry);  /* Prevent any leak of information */  if (!editable->visible)    {      editable->current_pos = entry->text_length;      return;    }  if (entry->text && (editable->current_pos < entry->text_length))    {      text = entry->text;      i = editable->current_pos;	        if ((entry->use_wchar) ? (!gdk_iswalnum (text[i])) : (!isalnum (text[i])))	for (; i < entry->text_length; i++)	  {	    if ((entry->use_wchar) ? gdk_iswalnum (text[i]) : isalnum (text[i]))	      break;	  }      for (; i < entry->text_length; i++)	{	  if ((entry->use_wchar) ? (!gdk_iswalnum (text[i])) : (!isalnum (text[i])))	    break;	}      editable->current_pos = i;    }}static voidgtk_move_backward_word (GtkEntry *entry){  GtkEditable *editable;  GdkWChar *text;  gint i;  editable = GTK_EDITABLE (entry);  /* Prevent any leak of information */  if (!editable->visible)    {      editable->current_pos = 0;      return;    }  if (entry->text && editable->current_pos > 0)    {      text = entry->text;      i = editable->current_pos - 1;      if ((entry->use_wchar) ? (!gdk_iswalnum (text[i])) : (!isalnum (text[i])))	for (; i >= 0; i--)	  {	    if ((entry->use_wchar) ? gdk_iswalnum (text[i]) : isalnum (text[i]))	      break;	  }      for (; i >= 0; i--)	{	  if ((entry->use_wchar) ? (!gdk_iswalnum (text[i])) : (!isalnum (text[i])))	    {	      i++;	      break;	    }	}	        if (i < 0)	i = 0;	        editable->current_pos = i;    }}static voidgtk_entry_move_to_column (GtkEditable *editable, gint column){  GtkEntry *entry;  entry = GTK_ENTRY (editable);    if (column < 0 || column > entry->text_length)    editable->current_pos = entry->text_length;  else    editable->current_pos = column;}static voidgtk_move_beginning_of_line (GtkEntry *entry){  gtk_entry_move_to_column (GTK_EDITABLE (entry), 0);}static voidgtk_move_end_of_line (GtkEntry *entry){  gtk_entry_move_to_column (GTK_EDITABLE (entry), -1);}static voidgtk_entry_kill_char (GtkEditable *editable,		     gint         direction){  if (editable->selection_start_pos != editable->selection_end_pos)    gtk_editable_delete_selection (editable);  else    {      gint old_pos = editable->current_pos;      if (direction >= 0)	{	  gtk_entry_move_cursor (editable, 1, 0);	  gtk_editable_delete_text (editable, old_pos, editable->current_pos);	}      else	{	  gtk_entry_move_cursor (editable, -1, 0);	  gtk_editable_delete_text (editable, editable->current_pos, old_pos);	}    }}static voidgtk_delete_forward_character (GtkEntry *entry){  gtk_entry_kill_char (GTK_EDITABLE (entry), 1);}static voidgtk_delete_backward_character (GtkEntry *entry){  gtk_entry_kill_char (GTK_EDITABLE (entry), -1);}static voidgtk_entry_kill_word (GtkEditable *editable,		     gint         direction){  if (editable->selection_start_pos != editable->selection_end_pos)    gtk_editable_delete_selection (editable);  else    {      gint old_pos = editable->current_pos;      if (direction >= 0)	{	  gtk_entry_move_word (editable, 1);	  gtk_editable_delete_text (editable, old_pos, editable->current_pos);	}      else	{	  gtk_entry_move_word (editable, -1);	  gtk_editable_delete_text (editable, editable->current_pos, old_pos);	}    }}static voidgtk_delete_forward_word (GtkEntry *entry){  gtk_entry_kill_word (GTK_EDITABLE (entry), 1);}static voidgtk_delete_backward_word (GtkEntry *entry){  gtk_entry_kill_word (GTK_EDITABLE (entry), -1);}static voidgtk_entry_kill_line (GtkEditable *editable,		     gint         direction){  gint old_pos = editable->current_pos;  if (direction >= 0)    {      gtk_entry_move_to_column (editable, -1);      gtk_editable_delete_text (editable, old_pos, editable->current_pos);    }  else    {      gtk_entry_move_to_column (editable, 0);      gtk_editable_delete_text (editable, editable->current_pos, old_pos);    }}static voidgtk_delete_line (GtkEntry *entry){  gtk_entry_move_to_column (GTK_EDITABLE (entry), 0);  gtk_entry_kill_line (GTK_EDITABLE (entry), 1);}static voidgtk_delete_to_line_end (GtkEntry *entry){  gtk_editable_delete_text (GTK_EDITABLE(entry), GTK_EDITABLE(entry)->current_pos, entry->text_length);}static voidgtk_select_word (GtkEntry *entry,		 guint32   time){  GtkEditable *editable;  gint start_pos;  gint end_pos;  editable = GTK_EDITABLE (entry);  gtk_move_backward_word (entry);  start_pos = editable->current_pos;  gtk_move_forward_word (entry);  end_pos = editable->current_pos;  editable->has_selection = TRUE;  gtk_entry_set_selection (editable, start_pos, end_pos);  gtk_editable_claim_selection (editable, start_pos != end_pos, time);}static voidgtk_select_line (GtkEntry *entry,		 guint32   time){  GtkEditable *editable;  editable = GTK_EDITABLE (entry);  editable->has_selection = TRUE;  gtk_entry_set_selection (editable, 0, entry->text_length);  gtk_editable_claim_selection (editable, entry->text_length != 0, time);  editable->current_pos = editable->selection_end_pos;}static void gtk_entry_set_selection (GtkEditable       *editable,			 gint               start,			 gint               end){  g_return_if_fail (editable != NULL);  g_return_if_fail (GTK_IS_ENTRY (editable));  if (end < 0)    end = GTK_ENTRY (editable)->text_length;    editable->selection_start_pos = start;  editable->selection_end_pos = end;  gtk_entry_queue_draw (GTK_ENTRY (editable));}void       gtk_entry_select_region  (GtkEntry       *entry,			  gint            start,			  gint            end){  gtk_editable_select_region (GTK_EDITABLE (entry), start, end);}voidgtk_entry_set_max_length (GtkEntry     *entry,                          guint16       max){  g_return_if_fail (entry != NULL);  g_return_if_fail (GTK_IS_ENTRY (entry));  if (max && entry->text_length > max)  	gtk_editable_delete_text(GTK_EDITABLE(entry), max, -1);  entry->text_max_length = max;}#ifdef USE_XIMstatic voidgtk_entry_update_ic_attr (GtkWidget *widget){  GtkEditable *editable = (GtkEditable *) widget;  GdkICAttributesType mask = 0;  if (editable->ic == NULL)    return;  gdk_ic_get_attr (editable->ic, editable->ic_attr,		   GDK_IC_PREEDIT_FOREGROUND |		   GDK_IC_PREEDIT_BACKGROUND |		   GDK_IC_PREEDIT_FONTSET);  if (editable->ic_attr->preedit_foreground.pixel !=       widget->style->fg[GTK_STATE_NORMAL].pixel)    {      mask |= GDK_IC_PREEDIT_FOREGROUND;      editable->ic_attr->preedit_foreground	= widget->style->fg[GTK_STATE_NORMAL];    }  if (editable->ic_attr->preedit_background.pixel !=       widget->style->base[GTK_STATE_NORMAL].pixel)    {      mask |= GDK_IC_PREEDIT_BACKGROUND;      editable->ic_attr->preedit_background	= widget->style->base[GTK_STATE_NORMAL];    }  if ((gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION) &&       widget->style->font != NULL &&      widget->style->font->type == GDK_FONT_FONTSET &&      !gdk_font_equal (editable->ic_attr->preedit_fontset,		       widget->style->font))    {      mask |= GDK_IC_PREEDIT_FONTSET;      editable->ic_attr->preedit_fontset = widget->style->font;    }    if (mask)    gdk_ic_set_attr (editable->ic, editable->ic_attr, mask);}#endif /* USE_XIM */    			  static void gtk_entry_style_set	(GtkWidget      *widget,			 GtkStyle       *previous_style){  GtkEntry *entry;  gint scroll_char;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_ENTRY (widget));  if (previous_style && GTK_WIDGET_REALIZED (widget))    {      entry = GTK_ENTRY (widget);        scroll_char = gtk_entry_find_position (entry, entry->scroll_offset);      gtk_entry_recompute_offsets (GTK_ENTRY (widget));      entry->scroll_offset = entry->char_offset[scroll_char];      entry_adjust_scroll (entry);      gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);      gdk_window_set_background (entry->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);#ifdef USE_XIM      gtk_entry_update_ic_attr (widget);#endif    }}static voidgtk_entry_state_changed (GtkWidget      *widget,			 GtkStateType    previous_state){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_ENTRY (widget));  if (GTK_WIDGET_REALIZED (widget))    {      gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);      gdk_window_set_background (GTK_ENTRY (widget)->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);#ifdef USE_XIM      gtk_entry_update_ic_attr (widget);#endif    }  if (GTK_WIDGET_DRAWABLE (widget))    gtk_widget_queue_clear(widget);}

⌨️ 快捷键说明

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