📄 drawing.c
字号:
x+WidDiv3*2,y+HeiDiv2, x+Width,y+HeiDiv2); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+Width-WidDiv4,y+HeiDiv2-1,"D",1); /* output : running */ gdk_draw_line(DrawPixmap, (Timer->OutputRunning)?DynaGcOn:DynaGcOff, x+WidDiv3*2,y+HeiDiv2+Height, x+Width,y+HeiDiv2+Height); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+Width-WidDiv4,y+HeiDiv2-1+Height,"R",1); /* Timer Number */ sprintf(BufTxt,"T%d",Element.VarNum); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv2-Width,y+HeiDiv4-2,BufTxt,strlen(BufTxt)); /* Current Value */ if (!EditDatas.ModeEdit) { sprintf(BufTxt,Timer->DisplayFormat,(float)Timer->Value/(float)Timer->Base); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv2-2-Width,y+Height,BufTxt,strlen(BufTxt)); } break; case ELE_MONOSTABLE: if (DrawForToolBar) break; Monostable = &MonostableArray[Element.VarNum]; /* the box */ gdk_draw_rectangle(DrawPixmap, drawing_area->style->white_gc, TRUE, x+WidDiv3-Width, y+HeiDiv3, Width+1*WidDiv3, Height+1*HeiDiv3); gdk_draw_rectangle(DrawPixmap, DynaGcOff, FALSE, x+WidDiv3-Width, y+HeiDiv3, Width+1*WidDiv3, Height+1*HeiDiv3); /* input */ gdk_draw_line(DrawPixmap, (Monostable->Input)?DynaGcOn:DynaGcOff, x-Width,y+HeiDiv2, x-Width+WidDiv3,y+HeiDiv2); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x-Width,y+HeiDiv2-1,"I^",2); /* output : running */ gdk_draw_line(DrawPixmap, (Monostable->OutputRunning)?DynaGcOn:DynaGcOff, x+WidDiv3*2,y+HeiDiv2, x+Width,y+HeiDiv2); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+Width-WidDiv4,y+HeiDiv2-1,"R",1); /* Monostable Number */ sprintf(BufTxt,"M%d",Element.VarNum); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv2-Width,y+HeiDiv4-2,BufTxt,strlen(BufTxt)); /* Current Value */ if (!EditDatas.ModeEdit) { sprintf(BufTxt,Monostable->DisplayFormat,(float)Monostable->Value/(float)Monostable->Base); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv2-2-Width,y+Height,BufTxt,strlen(BufTxt)); } break; case ELE_COMPAR: if (DrawForToolBar) break; /* the box */ gdk_draw_rectangle(DrawPixmap, drawing_area->style->white_gc, TRUE, x+WidDiv3-(Width*2), y+HeiDiv4, Width*2+1*WidDiv3, 2*HeiDiv4); gdk_draw_rectangle(DrawPixmap, DynaGcOff, FALSE, x+WidDiv3-(Width*2), y+HeiDiv4, Width*2+1*WidDiv3, 2*HeiDiv4); /* input */ gdk_draw_line(DrawPixmap, TheGc, x-Width*2,y+HeiDiv2, x-Width*2+WidDiv3,y+HeiDiv2); /* output */ gdk_draw_line(DrawPixmap, TheGc, x+WidDiv3*2,y+HeiDiv2, x+Width,y+HeiDiv2); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv4-(Width*2)+3,y+HeiDiv4-1,"COMPARE",strlen("COMPARE")); /* arithmetic expression */ if (!EditDatas.ModeEdit) strcpy(BufTxt,DisplayArithmExpr(ArithmExpr[Element.VarNum].Expr,(Width*2+1*WidDiv3)/8)); else strcpy(BufTxt,DisplayArithmExpr(EditArithmExpr[Element.VarNum],(Width*2+1*WidDiv3)/8)); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv3-(Width*2)+2,y+HeiDiv2+4,BufTxt,strlen(BufTxt)); break; case ELE_OUTPUT_OPERATE: if (DrawForToolBar) break; /* the box */ gdk_draw_rectangle(DrawPixmap, drawing_area->style->white_gc, TRUE, x+WidDiv3-(Width*2), y+HeiDiv4, Width*2+1*WidDiv3, 2*HeiDiv4); gdk_draw_rectangle(DrawPixmap, DynaGcOff, FALSE, x+WidDiv3-(Width*2), y+HeiDiv4, Width*2+1*WidDiv3, 2*HeiDiv4); /* input */ gdk_draw_line(DrawPixmap, TheGc, x-Width*2,y+HeiDiv2, x-Width*2+WidDiv3,y+HeiDiv2); /* output */ gdk_draw_line(DrawPixmap, TheGc, x+WidDiv3*2,y+HeiDiv2, x+Width,y+HeiDiv2); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv4-(Width*2)+3,y+HeiDiv4-1,"OPERATE",strlen("OPERATE")); /* arithmetic expression */ if (!EditDatas.ModeEdit) strcpy(BufTxt,DisplayArithmExpr(ArithmExpr[Element.VarNum].Expr,(Width*2+1*WidDiv3)/8)); else strcpy(BufTxt,DisplayArithmExpr(EditArithmExpr[Element.VarNum],(Width*2+1*WidDiv3)/8)); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv3-(Width*2)+2,y+HeiDiv2+4,BufTxt,strlen(BufTxt)); break; } /* Drawing Var */ if (!DrawForToolBar) { switch(Element.Type) { case ELE_INPUT: case ELE_INPUT_NOT: case ELE_RISING_INPUT: case ELE_FALLING_INPUT: case ELE_OUTPUT: case ELE_OUTPUT_NOT: case ELE_OUTPUT_SET: case ELE_OUTPUT_RESET: strcpy(BufTxt,DisplayInfo(Element.VarType,Element.VarNum)); gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+WidDiv4,y+HeiDiv4-2,BufTxt,strlen(BufTxt)); break; case ELE_OUTPUT_JUMP: gdk_draw_text(DrawPixmap, drawing_area->style->font, drawing_area->style->black_gc, x+1,y+HeiDiv4-2,RungArray[Element.VarNum].Label, strlen(RungArray[Element.VarNum].Label)); break; } } /* Drawing cnx with top */ if (Element.ConnectedWithTop) { if (Element.DynamicInput) gdk_draw_line(DrawPixmap, DynaGcOn, x,y+HeiDiv2, x,y-HeiDiv2); else gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x,y+HeiDiv2, x,y-HeiDiv2); } /* specials used for Editor */ if (DrawForToolBar) { switch(Element.Type) { case EDIT_POINTER: gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x+WidDiv4,y+HeiDiv4, x+Width-WidDiv4,y+Height-HeiDiv4); /* \ */ gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x+WidDiv4,y+HeiDiv4, x+WidDiv3,y+HeiDiv2); /* | */ gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x+WidDiv4,y+HeiDiv4, x+WidDiv2,y+HeiDiv3); /* _ */ gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x+WidDiv3,y+HeiDiv2, x+WidDiv2,y+HeiDiv3); break; case EDIT_CNX_WITH_TOP: gdk_draw_line(DrawPixmap, drawing_area->style->black_gc, x+WidDiv2,y+HeiDiv4, x+WidDiv2,y+Height-HeiDiv4); break; case EDIT_LONG_CONNECTION: gdk_draw_line(DrawPixmap, TheGc, x,y+HeiDiv2, x+Width-1,y+HeiDiv2); gdk_draw_line(DrawPixmap, TheGc, x+3*WidDiv4-1,y+HeiDiv4, x+Width-1,y+HeiDiv2); gdk_draw_line(DrawPixmap, TheGc, x+3*WidDiv4-1,y+3*HeiDiv4, x+Width-1,y+HeiDiv2); gdk_draw_line(DrawPixmap, TheGc, x+3*WidDiv4-1,y+HeiDiv4, x+3*WidDiv4 +3,y+HeiDiv2); gdk_draw_line(DrawPixmap, TheGc, x+3*WidDiv4 +3,y+HeiDiv2, x+3*WidDiv4-1,y+3*HeiDiv4); break; /* little display used for the toolbar */ case ELE_TIMER: gdk_draw_rectangle(DrawPixmap, drawing_area->style->black_gc, FALSE, x+WidDiv4, y+HeiDiv4, Width-2*WidDiv4, Height-2*HeiDiv4); gdk_draw_text(DrawPixmap, drawing_area->style->font, TheGc, x+WidDiv3+2,y+HeiDiv3*2,"T",1); break; case ELE_MONOSTABLE: gdk_draw_rectangle(DrawPixmap, drawing_area->style->black_gc, FALSE, x+WidDiv4, y+HeiDiv4, Width-2*WidDiv4, Height-2*HeiDiv4); gdk_draw_text(DrawPixmap, drawing_area->style->font, TheGc, x+WidDiv3+2,y+HeiDiv3*2,"M",1); break; case ELE_COMPAR: gdk_draw_rectangle(DrawPixmap, drawing_area->style->black_gc, FALSE, x+WidDiv4, y+HeiDiv4, Width-2*WidDiv4, Height-2*HeiDiv4); gdk_draw_text(DrawPixmap, drawing_area->style->font, TheGc, x+WidDiv3+2,y+HeiDiv3*2,">",1); break; case ELE_OUTPUT_OPERATE: gdk_draw_rectangle(DrawPixmap, drawing_area->style->black_gc, FALSE, x+WidDiv4, y+HeiDiv4, Width-2*WidDiv4, Height-2*HeiDiv4); gdk_draw_text(DrawPixmap, drawing_area->style->font, TheGc, x+WidDiv3+2,y+HeiDiv3*2,"=",1); break; } } if (!EditDatas.ModeEdit) gdk_gc_unref(DynaGcOn);}void DrawBars(){ gdk_draw_rectangle(pixmap, drawing_area->style->black_gc, TRUE, 1, 1, 3, BlockHeight*RUNG_HEIGHT); gdk_draw_rectangle(pixmap, drawing_area->style->black_gc, TRUE, BlockWidth*RUNG_WIDTH+OFFSET_X, 1, 3, BlockHeight*RUNG_HEIGHT);}void DrawGrid(){ int x,y; GdkColor DynaGdkColor; GdkGC * DynaGcOn; DynaGdkColor.pixel = 0xF4F4F4; DynaGdkColor.red = 0xF4; DynaGdkColor.green = 0xF4; DynaGdkColor.blue = 0xF4; DynaGcOn = gdk_gc_new(pixmap); gdk_gc_set_foreground(DynaGcOn,&DynaGdkColor); for(x=BlockWidth; x<RUNG_WIDTH*BlockWidth; x=x+BlockWidth) { gdk_draw_line(pixmap, DynaGcOn, x+OFFSET_X, OFFSET_Y, x+OFFSET_X, RUNG_HEIGHT*BlockHeight+OFFSET_Y); } for(y=BlockHeight; y<RUNG_HEIGHT*BlockHeight; y=y+BlockHeight) { gdk_draw_line(pixmap, DynaGcOn, OFFSET_X, y+OFFSET_Y, RUNG_WIDTH*BlockWidth+OFFSET_X, y+OFFSET_Y); } gdk_gc_unref(DynaGcOn);}void DrawRung(StrRung * Rung,char CleanBefore){ int x,y; GdkRectangle update_rect; BlockWidth = BlockHeight = (GTK_WIDGET(drawing_area)->allocation.width - OFFSET_X -5) / RUNG_WIDTH; #ifndef THICK_LINE_ELE_ACTIVATED if (CleanBefore) #endif { gdk_draw_rectangle(pixmap, drawing_area->style->white_gc, TRUE, 0, 0, BlockWidth*RUNG_WIDTH+50, BlockHeight*RUNG_HEIGHT+50); } /* grid for edit mode */ if (EditDatas.ModeEdit) DrawGrid(); DrawBars(); for (y=0;y<RUNG_HEIGHT;y++) { for(x=0;x<RUNG_WIDTH;x++) { DrawElement(pixmap,x*BlockWidth+OFFSET_X,y*BlockHeight+OFFSET_Y,BlockWidth,BlockHeight,Rung->Element[x][y],FALSE); } } update_rect.x = 0; update_rect.y = 0; update_rect.width = GTK_WIDGET(drawing_area)->allocation.width; update_rect.height = GTK_WIDGET(drawing_area)->allocation.height; gtk_widget_draw (drawing_area, &update_rect);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -