📄 world.cc
字号:
2*radius,2*radius, 0,360*64); gdk_threads_leave();}void gui_drawLight(int x, int y, int radius){ gdk_threads_enter(); gdk_gc_set_foreground(pen_simArea, pal_simArea[GUI_YELLOW] ); gdk_draw_arc(bg_simArea, pen_simArea, 0, x-radius,y-radius, 2*radius,2*radius, 0,360*64); gdk_threads_leave();}void gui_redrawWorld(void){ sem_post(&simArea_S); sem_wait(&simAreaUpdate_S);}void gui_drawBG(){ gdk_threads_enter(); gdk_draw_pixmap(bb_simArea, blit_simArea, bg_simArea, 0,0,0,0, sim_area_x_size,sim_area_y_size); gdk_threads_leave();}void gui_clearSensor(void){ /* if(sensorAreaVisible){ tgiSetCurrent(sensorArea); tgiClear(GUI_WHITE); tgiSetCurrent(simArea); }*/}void gui_drawSensor(int sensor, int time, double value, int color){ /* int offset; if(sensorAreaVisible){ value = value * 0.9; if(sensor >= 0 && sensor < 8){ tgiSetCurrent(sensorArea); tgiSetColour(GUI_WHITE); offset=(int)((sensor+1)*sensorHeight); gdk_draw_line(bb_simArea,pen_simArea,time,offset,time,(int)(offset-sensorHeight)); tgiSetColour(color%GUI_COLORS + 1); gdk_draw_line(bb_simArea,pen_simArea,time,offset,time,(int)(offset-sensorHeight*value)); tgiSetCurrent(simArea); } }*/}void gui_drawSensorMarker(int time){ /* if(sensorAreaVisible){ tgiSetCurrent(sensorArea); tgiSetColour(GUI_WHITE); gdk_draw_line(bb_simArea,pen_simArea,time,0,time,nrOfSensors*sensorHeight); tgiSetCurrent(simArea); }*/}void gui_redrawSensors(void){ /*if(sensorAreaVisible){ tgiSetCurrent(sensorArea); tgiShow(); tgiSetCurrent(simArea); }*/}/* Simple primitives for drawing to the screen */static struct Window *_windowList = 0;void gui_on_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer window){ Window *win; win = (Window*)window; g_assert(win != NULL); printf("%d,%d \n",win->w,win->h); gdk_draw_pixmap(GTK_WIDGET(win->da)->window, win->pen, win->bb, 0,0, 0,0, -1,-1);}Window *gui_window_new(gint width, gint height,const gchar *title){ Window *cur; GtkWidget *box; static gint boxId=0; gchar nbox[10]; g_return_val_if_fail((width > 0 && height > 0),NULL); if(!_windowList){ _windowList = (Window*) g_malloc(sizeof(Window)); g_assert(_windowList != NULL); _windowList->next = NULL; cur = _windowList; } else{ cur = _windowList; while(cur->next) cur = cur->next; /* cur->next points at last window */ cur->next = (Window*)g_malloc(sizeof(Window)); g_assert(cur->next != NULL); cur = cur->next; cur->next = NULL; } cur->w = width; cur->h = height; cur->bb = NULL; gdk_threads_enter(); cur->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(cur->window),title); gtk_window_set_policy(GTK_WINDOW(cur->window), FALSE, FALSE, TRUE); box = gtk_hbox_new(TRUE,0); gtk_widget_ref(box); gtk_container_add(GTK_CONTAINER(cur->window),box); g_snprintf(nbox,10,"hbox%d",boxId++); gtk_object_set_data_full(GTK_OBJECT(cur->window), nbox, box, (GtkDestroyNotify)gtk_widget_unref); gtk_widget_show(box); cur->da = GTK_DRAWING_AREA(gtk_drawing_area_new()); gtk_widget_ref(GTK_WIDGET(cur->da)); gtk_drawing_area_size(cur->da, width,height); gtk_object_set_data_full(GTK_OBJECT(cur->window), title, cur->da, (GtkDestroyNotify)gtk_widget_unref); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(cur->da), TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(cur->da), "expose_event", GTK_SIGNAL_FUNC(gui_on_expose_event), (gpointer)cur ); gtk_widget_show(GTK_WIDGET(cur->da)); gtk_widget_show(cur->window); cur->bb = gdk_pixmap_new(GTK_WIDGET(cur->da)->window, width,height, -1 ); cur->bb = gdk_pixmap_ref(cur->bb); cur->cm = gdk_window_get_colormap(GTK_WIDGET(cur->da)->window); cur->palette = (GdkColor**) g_malloc(sizeof(GdkColor*)*256); for(int i=0; i < 256; i++){ cur->palette[i] = (GdkColor*)g_malloc(sizeof(GdkColor)); cur->palette[i]->red = 0x0101 * i; cur->palette[i]->green = 0x0101 * i; cur->palette[i]->blue = 0x0101 * i; gdk_colormap_alloc_color(cur->cm, cur->palette[i], 1, /* writeable -> private */ 1);/* bestmatch */ } cur->pen = gdk_gc_new((GdkWindow*)cur->bb); cur->pen = gdk_gc_ref(cur->pen); gdk_gc_set_foreground(cur->pen, cur->palette[255]); gdk_threads_leave(); return(cur);}void gui_window_palette_change(Window *win, gint color, guint red, guint green, guint blue){ g_assert(color > -1 && color < 256); win->palette[color]->red = red; win->palette[color]->green = green; win->palette[color]->blue = blue; gdk_threads_enter(); gdk_color_change(win->cm, win->palette[color]); gdk_threads_leave();}void gui_window_set_color(Window *win, gint color){ g_assert(color > -1 && color < 256); gdk_threads_enter(); gdk_gc_set_foreground(win->pen, win->palette[color]); gdk_threads_leave();}void gui_window_line(Window *win, gint x1, gint y1, gint x2, gint y2){ gdk_threads_enter(); gdk_draw_line(win->bb, win->pen, x1,y1, x2,y2); gdk_threads_leave();}void gui_window_plot(Window *win, gint x, gint y){ gdk_threads_enter(); gdk_draw_point(win->bb, win->pen, x,y); gdk_threads_leave();}void gui_window_circle(Window *win, gint x, gint y, gint radius, gint filled){ gdk_threads_enter(); gdk_draw_arc(win->bb, win->pen, filled, x-radius,y-radius, radius << 1, radius << 1, 0, 64 * 360); gdk_threads_leave();}void gui_window_arc(Window *win, gint x, gint y, gint radius, gint filled, gint startAngle, gint endAngle){ gdk_threads_enter(); gdk_draw_arc(win->bb, win->pen, filled, x-radius,y-radius, radius << 1, radius << 1, startAngle << 6, endAngle << 6); gdk_threads_leave();}void gui_window_rectangle(Window *win, gint x1, gint y1, gint x2, gint y2, gint filled){ if(x1 > x2){ x1 ^= x2; x2 ^= x1; x1 ^= x2; } if(y1 > y2){ y1 ^= y2; y2 ^= y1; y1 ^= y2; } gdk_threads_enter(); gdk_draw_rectangle(win->bb, win->pen, filled, x1,y1, x2-x1,y2-y1); gdk_threads_leave();}void gui_window_clear(Window *win, gint color){ gui_window_set_color(win,color); gui_window_rectangle(win, 0,0, win->w,win->h, 1);}void gui_window_flush(Window *win){ gdk_threads_enter(); gtk_widget_draw(GTK_WIDGET(win->da),NULL); gdk_threads_leave();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -