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

📄 edit.c

📁 EGui是一个开源的图形系统软件,类似于QT/Embedded、GTK-FB、MicroWindow。目标是嵌入式平台整合解 决方案。基于Linux Framebuffer 设备驱动上实现。有完
💻 C
字号:
/******************************************************** * Egui code,LGPL * Function : edit * Author: asmcos@hotmail.com * Data : 2006-03-22 * $Id: edit.c,v 1.3 2006/04/14 20:12:15 hjs Exp $ ********************************************************/#include <Egui.h>#include <widget.h>extern Efont defaultfn;Efont *font;static int count = 0;EGui_Widget * new_edit ( EGui_Widget *pwidget ,short x,short y,short w,short h){  EGui_Widget * edit;  widget_list * list;  EGui_Wfunc  * edit_wfunc;  EGui_Edit   * Edit;  edit = (EGui_Widget *) malloc(sizeof (EGui_Widget));  if (edit == NULL)    {      printf ("malloc new edit failed\n ");      return (EGui_Widget * )NULL;    }  edit_wfunc = (EGui_Wfunc *) malloc (sizeof(EGui_Wfunc));  if (edit_wfunc == NULL)    {      printf ("malloc new edit_wfunc failed\n ");      return (EGui_Widget * )NULL;    }  memset(edit_wfunc,0,sizeof(EGui_Wfunc));  Edit = (EGui_Edit *) malloc (sizeof(EGui_Edit));  if (Edit == NULL)    {      printf ("malloc new Edit failed\n ");      return (EGui_Widget * )NULL;    }  memset(Edit,0,sizeof(EGui_Edit));  memset(Edit->buffer,0,EDIT_MAX+1);  edit->x       = pwidget->x + x;  edit->y       = pwidget->y + y;  edit->width   = edit->x + w;  edit->height  = edit->y + h;  edit->type    = EDIT;  edit->func    = edit_wfunc;  edit->parent  = pwidget;  edit->window  = pwidget->window;  edit->child   = NULL;    pwidget->child  = edit;  edit->wpoint    = Edit;  /* FIXME */  Edit->font      = &defaultfn;  Edit->visual_len= w / Edit->font->width;  edit_init (edit_wfunc);  add_newqueue (edit);      return edit;}void edit_show (EGui_Widget * widget){  widget->status = DISPLAY_ALL;}void edit_draw (EGui_Widget  * widget){  short x,y,w,h;  EGui_Window * window;  EGui_Widget * edit;  edit = widget;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;    if (widget->status == DISPLAY_ALL)    {      Egui_shadow_in (x,y,w,h, window);    }  }voidedit_hide_cursor (EGui_Widget * edit){  short x,y,w,h;  EGui_Window *window;  EGui_Edit * Edit;  Ecolor color;  char ch[2];  int start;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;  Edit   = (EGui_Edit *)edit->wpoint;  if (Edit->cursor_pos >= EDIT_MAX)    return ;  start = Edit->cursor_pos;  if (Edit->cursor_pos >= Edit->visual_len)    start = Edit->visual_len - 1;  start = start * Edit->font->width;  new_color(window,&color,0xFFFFFF);  ch[0]= '_';  ch[1]= 0x0;  Egui_drawstring(x + 1 + start,y + 1,ch,font,&color,window);}voidedit_cursor_display (unsigned int * para){  EGui_Widget * edit;  short x,y,w,h;  EGui_Window *window;  Ecolor color;  EGui_Edit * Edit;  int start;  char ch[2];  edit = (EGui_Widget *)para;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;  Edit   = (EGui_Edit *)edit->wpoint;  if (count == 0)    {      new_color(window,&color,0x0);      count = 1;    }  else    {      new_color(window,&color,0xFFFFFF);      count = 0;    }  ch[0]= '_';  ch[1]= 0x0;  start = Edit->cursor_pos;  if (Edit->cursor_pos >= Edit->visual_len)    start = Edit->visual_len - 1;  start = start * Edit->font->width;  Egui_drawstring(x + 1 + start,y + 1,ch,font,&color,window);  Egui_timer_insert(200,edit_cursor_display,(unsigned int *)edit);}voidedit_click_left (EGui_Widget  * widget){  short x,y,w,h;  EGui_Window *window;  Ecolor color;  EGui_Widget * edit;  edit = widget;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;  if (widget->status == DISPLAY_ALL)    {      Egui_timer_insert(200,edit_cursor_display,(unsigned int *)edit);    }  }voidedit_add_char (EGui_Widget * edit,char ch){  EGui_Edit *Edit;  char *buffer;  Edit = (EGui_Edit *)edit->wpoint;  if (Edit->cursor_pos >= EDIT_MAX)    return ;  buffer = Edit->buffer;  /* first is buffer[0] */  buffer [Edit->cursor_pos] = ch;    Edit->cursor_pos ++;}voidedit_del_char (EGui_Widget * edit,char ch){  EGui_Edit *Edit;  char *buffer;  Edit = (EGui_Edit *)edit->wpoint;  if (Edit->cursor_pos  <= 0)    return ;    Edit->cursor_pos --;}voidedit_del_draw (EGui_Widget * widget){  short x,y,w,h;  EGui_Window *window;  Ecolor color;  EGui_Widget * edit;  EGui_Edit *Edit;  char *buffer;  char ch;  int start;  edit = widget;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;  Edit = (EGui_Edit *)edit->wpoint;  buffer = Edit->buffer; if (Edit->cursor_pos >= Edit->visual_len)   {     Egui_shadow_in (x,y,w,h, window);          start = Edit->cursor_pos - Edit->visual_len;     buffer [Edit->cursor_pos] = 0x0;      buffer = buffer + start;     new_color(window,&color,0x0);     Egui_drawstring(x + 1,y + 1,buffer,Edit->font,&color,window);   } else   {     start = Edit->cursor_pos;     buffer = buffer + start;     start = start * Edit->font->width;     /* write back the delete character by background color */     new_color(window,&color,0xFFFFFF);     Egui_drawstring(x + 1 + start,y + 1,buffer,Edit->font,&color,window);     buffer [0] = 0x0;     }}voidedit_add_draw (EGui_Widget * widget){  short x,y,w,h;  EGui_Window *window;  Ecolor color;  EGui_Widget * edit;  EGui_Edit *Edit;  char *buffer;  char ch;  int start;  edit = widget;  x  = edit->x;  y  = edit->y;  w  = edit->width ;  h  = edit->height ;  window = edit->window;  Edit = (EGui_Edit *)edit->wpoint;  buffer = Edit->buffer; if (Edit->cursor_pos > Edit->visual_len)   {     Egui_shadow_in (x,y,w,h, window);          start = Edit->cursor_pos - Edit->visual_len;     buffer = buffer + start;     start = start * Edit->font->width;          new_color(window,&color,0x0);     Egui_drawstring(x + 1,y + 1,buffer,Edit->font,&color,window);   } else   {     start = Edit->cursor_pos - 1;     buffer = buffer + start;     start = start * Edit->font->width;     new_color(window,&color,0x0);          Egui_drawstring(x + 1 + start,y + 1,buffer,Edit->font,&color,window);   }}voidedit_press_key (EGui_Widget * widget,EGui_Event *event){  EGui_Widget * edit;  unsigned char ch;  edit = widget;  ch = (unsigned char)(event->code);  if (widget->status == DISPLAY_ALL)    {      edit_hide_cursor(edit);      switch (ch)	{	case ' '...'~': 	/* 0x20---0x7E */	  edit_add_char (edit,ch);	  edit_add_draw(edit);	  break;	case 127: 	  	/* backspace and del */	  edit_del_char (edit,ch);	 	  edit_del_draw(edit);	  break;  	default:	  return;	}          }}intedit_init (EGui_Wfunc  * edit_wfunc){    edit_wfunc->show        = edit_show;  edit_wfunc->draw        = edit_draw;  edit_wfunc->click_left  = edit_click_left;  edit_wfunc->press_key   = edit_press_key;  return 0;}

⌨️ 快捷键说明

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