📄 edit.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 + -