📄 drawboard.c
字号:
#include<gtk/gtk.h>#include"main.h"#include"drawboard.h"extern GdkPixbuf* image;static GdkColor bgcolor;static GdkColor fgcolor;static gboolean color_initialed=FALSE;static voidinitial_drawboards(){ int i,j; if(color_initialed) return; fgcolor.red=0; fgcolor.green=0; fgcolor.blue =13056; bgcolor.red=0; bgcolor.blue=0; bgcolor.green=0; color_initialed=TRUE; for(i=0;i<COLUMN1;i++){ board1_old[i]=&_board1_old[i*ROW1]; mark_board1[i]=&_mark_board1[i*ROW1]; } for(i=0;i<COLUMN2;i++){ board2_old[i]=&_board2_old[i*ROW2]; } for(i=0;i<COLUMN1;i++){ for(j=0;j<ROW1;j++){ board1_old[i][j]=0; mark_board1[i][j]=FALSE; } } for(i=0;i<COLUMN2;i++){ for(j=0;j<ROW2;j++){ board2_old[i][j]=0; } } }gbooleandrawboard_init(GtkWidget* widget, gint column, gint row, gint block_width, gint drawboardID){ p2dbi temp; gint i,j; initial_drawboards(); temp=dbi+drawboardID-1; temp->gc=gdk_gc_new(widget->window); temp->column=column; temp->row=row; temp->width=block_width*column; temp->height=block_width*row; temp->block_width=block_width; temp->pixmap=gdk_pixmap_new(widget->window, block_width*column, block_width*row, -1); if(1==drawboardID){ temp->resource=gdk_pixmap_new(widget->window, block_width*3, block_width*6, -1); gdk_pixbuf_render_to_drawable(image, temp->resource, temp->gc, 0,0,0,0, block_width*3, block_width*6, GDK_RGB_DITHER_NORMAL, 0,0); }else if(2==drawboardID){ temp->resource=gdk_pixmap_new(widget->window, block_width*3, block_width*3, -1); gdk_pixbuf_render_to_drawable(image, temp->resource, temp->gc, block_width/2*3, block_width*3, 0,0, block_width*3, block_width*3, GDK_RGB_DITHER_NORMAL, 0,0); } gdk_gc_set_rgb_fg_color(temp->gc,&fgcolor); gdk_gc_set_rgb_bg_color(temp->gc,&bgcolor); gdk_draw_rectangle(temp->pixmap, temp->gc, TRUE,0,0, block_width*column, block_width*row); for(i=0;i<column;i++){ gdk_draw_line(temp->pixmap, widget->style->black_gc, i*block_width,0, i*block_width, row*block_width); } for(i=0;i<row;i++){ gdk_draw_line(temp->pixmap, widget->style->black_gc, 0,i*block_width, column*block_width, i*block_width); } return TRUE;}gbooleandrawboard_expose(GtkWidget* widget, gint drawboardID, gpointer data){ p2dbi temp; temp=dbi+drawboardID-1; gdk_draw_drawable(widget->window, temp->gc, temp->pixmap, 0,0,0,0, widget->allocation.width, widget->allocation.height); return TRUE;}gbooleandrawboard_draw(GtkWidget* widget, gint** array, gint column, gint row, gint id){ GdkGC* gc; GdkPixmap* pixmap; GdkPixmap* resource; gint width; p2dbi this_dbi; gint** board_old; gint i,j; const gint MENU_WIDTH=30; this_dbi=&dbi[id-1]; gc=this_dbi->gc; pixmap=this_dbi->pixmap; resource=this_dbi->resource; width=this_dbi->block_width; if(1==id){ board_old=board1_old; }else if(2==id){ board_old=board2_old; } for(i=0;i<column;i++){ for(j=0;j<row;j++){ if(board_old[i][j]==array[i][j]){ continue; } board_old[i][j]=array[i][j]; if(0==array[i][j]){ gdk_draw_rectangle(pixmap, gc, TRUE, i*width, j*width, width,width); gdk_draw_line(pixmap, widget->style->black_gc, i*width,j*width, i*width,j*width+width); gdk_draw_line(pixmap, widget->style->black_gc, i*width,j*width, i*width+width,j*width); gtk_widget_queue_draw_area(widget, i*width-10,j*width+MENU_WIDTH-10,//************ width+20,width+20); continue; } else{ gint xtem; gint ytem; if(array[i][j]>0){ xtem=array[i][j]-1; ytem=0; ytem=xtem/3; xtem%=3; }else{ g_print("0000000000\n"); xtem=array[i][j]+1; xtem=ABS(xtem); ytem=5; ytem-=xtem/3; xtem%=3; } gdk_draw_drawable(pixmap, gc, resource, xtem*width, ytem*width, i*width, j*width, width, width); if(1==id){// gtk_widget_queue_draw(widget); gtk_widget_queue_draw_area(widget, i*width,j*width+MENU_WIDTH,//**************** width,width); } continue; } } } if(2==id){ gtk_widget_queue_draw(widget); } return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -