📄 window.c.bm
字号:
if (ev.xany.window == win->boardwin) { switch (ev.type) { case ButtonPress: button_pressed(&ev, win); break; case ButtonRelease: button_released(&ev, win); break; case Expose: /* Redraw... */ win_redraw(win, &ev); break; case 0: case NoExpose: break; default: fprintf(stderr, "Bad event type %d\n", ev.type); exit(1); } } else if (ev.xany.window == win->wclockwin) { switch (ev.type) { case Expose: clock_draw(win, WHITE); break; case 0: case NoExpose: break; default: fprintf(stderr, "Bad event type %d\n", ev.type); exit(1); } } else if (ev.xany.window == win->bclockwin) { switch (ev.type) { case Expose: clock_draw(win, BLACK); break; case 0: case NoExpose: break; default: fprintf(stderr, "Bad event type %d\n", ev.type); exit(1); } } else if (ev.xany.window == win->jailwin) { switch (ev.type) { case Expose: jail_draw(win); break; case 0: case NoExpose: break; default: fprintf(stderr, "Bad event type %d\n", ev.type); exit(1); } } else if (ev.xany.window == win->buttonwin) { switch (ev.type) { case ButtonPress: button_service(win, &ev); break; case Expose: button_draw(win); break; case 0: case NoExpose: break; default: fprintf(stderr, "Bad event type %d\n", ev.type); exit(1); } } else if (ev.xany.window == win->icon) { icon_refresh(win); } else if (ev.xany.window == win->basewin) { message_send(win, &ev); } else { fprintf(stderr, "Internal Error: service: bad win\n"); fprintf(stderr, "window = %d, event = %d\n", ev.xany.window, ev.type); } } return;}voidwin_redraw(win, event) windata *win; XEvent *event;{ XExposeEvent *ev = &event->xexpose; int x1, y1, x2, y2, i, j; drawgrid(win); if (ev) { x1 = ev->x / (SQUARE_WIDTH + BORDER_WIDTH); y1 = ev->y / (SQUARE_HEIGHT + BORDER_WIDTH); x2 = (ev->x + ev->width) / (SQUARE_WIDTH + BORDER_WIDTH); y2 = (ev->y + ev->height) / (SQUARE_HEIGHT + BORDER_WIDTH); } else { x1 = 0; y1 = 0; x2 = SIZE - 1; y2 = SIZE - 1; } if (x1 < 0) x1 = 0; if (y1 < 0) y1 = 0; if (x2 < 0) x2 = 0; if (y2 < 0) y2 = 0; if (x1 > SIZE - 1) x1 = SIZE - 1; if (y1 > SIZE - 1) y1 = SIZE - 1; if (x2 > SIZE - 1) x2 = SIZE - 1; if (y2 > SIZE - 1) y2 = SIZE - 1; if (win->flipped) { y1 = SIZE - y2 - 1; y2 = SIZE - y1 - 1; x1 = SIZE - x2 - 1; x2 = SIZE - x1 - 1; } for (i = x1; i <= x2; i++) for (j = y1; j <= y2; j++) { if (chessboard->square[j][i].color == NONE) win_erasepiece(j, i, WHITE); else win_drawpiece(&chessboard->square[j][i], j, i, WHITE); if (!oneboard) { if (chessboard->square[j][i].color == NONE) win_erasepiece(j, i, BLACK); else win_drawpiece(&chessboard->square[j][i], j, i, BLACK); } } return;}static boolsetup(dispname, win) char *dispname; windata *win;{ char buf[BSIZE], *s; Pixmap bm, bmask; Cursor cur; extern char *program, *recfile; if (!(win->display = XOpenDisplay(dispname))) return (false); /* Now get boolean defaults... */ if ((s = XGetDefault(win->display, program, "noisy")) && eq(s, "on")) noisyflag = true; if ((s = XGetDefault(win->display, program, "savemoves")) && eq(s, "on")) saveflag = true; if ((s = XGetDefault(win->display, program, "algebraic")) && eq(s, "on")) record_english = false; if ((s = XGetDefault(win->display, program, "blackandwhite")) && eq(s, "on")) bnwflag = true; if ((s = XGetDefault(win->display, program, "quickrestore")) && eq(s, "on")) quickflag = true; if ((s = XGetDefault(win->display, program, "flash")) && eq(s, "on")) win_flashmove = true; /* ... numeric variables ... */ if (s = XGetDefault(win->display, program, "numflashes")) num_flashes = atoi(s); if (s = XGetDefault(win->display, program, "flashsize")) flash_size = atoi(s); /* ... and strings. */ if (s = XGetDefault(win->display, program, "progname")) progname = s; if (s = XGetDefault(win->display, program, "proghost")) proghost = s; if (s = XGetDefault(win->display, program, "recordfile")) recfile = s; if (s = XGetDefault(win->display, program, "blackpiece")) black_piece_color = s; if (s = XGetDefault(win->display, program, "whitepiece")) white_piece_color = s; if (s = XGetDefault(win->display, program, "blacksquare")) black_square_color = s; if (s = XGetDefault(win->display, program, "whitesquare")) white_square_color = s; if (s = XGetDefault(win->display, program, "bordercolor")) border_color = s; if (s = XGetDefault(win->display, program, "textcolor")) text_color = s; if (s = XGetDefault(win->display, program, "textback")) text_back = s; if (s = XGetDefault(win->display, program, "errortext")) error_text = s; if (s = XGetDefault(win->display, program, "playertext")) player_text = s; if (s = XGetDefault(win->display, program, "cursorcolor")) cursor_color = s; if ((DisplayPlanes(win->display, 0) == 1) || bnwflag) win->bnw = true; /* Allocate colors... */ if (win->bnw) { win->blackpiece.pixel = BlackPixel (win->display, 0); win->whitepiece.pixel = WhitePixel (win->display, 0); win->blacksquare.pixel = BlackPixel (win->display, 0); win->whitesquare.pixel = WhitePixel (win->display, 0); win->border.pixel = BlackPixel (win->display, 0); win->textcolor.pixel = BlackPixel (win->display, 0); win->textback.pixel = WhitePixel (win->display, 0); win->playertext.pixel = BlackPixel (win->display, 0); win->errortext.pixel = BlackPixel (win->display, 0); win->cursorcolor.pixel = BlackPixel (win->display, 0) ; } else { if (!XParseColor(win->display, DefaultColormap(win->display, 0), black_piece_color, &win->blackpiece) || !XParseColor(win->display, DefaultColormap(win->display, 0), white_piece_color, &win->whitepiece) || !XParseColor(win->display, DefaultColormap(win->display, 0), black_square_color, &win->blacksquare) || !XParseColor(win->display, DefaultColormap(win->display, 0), white_square_color, &win->whitesquare) || !XParseColor(win->display, DefaultColormap(win->display, 0), border_color, &win->border) || !XParseColor(win->display, DefaultColormap(win->display, 0), text_color, &win->textcolor) || !XParseColor(win->display, DefaultColormap(win->display, 0), text_back, &win->textback) || !XParseColor(win->display, DefaultColormap(win->display, 0), error_text, &win->errortext) || !XParseColor(win->display, DefaultColormap(win->display, 0), player_text, &win->playertext) || !XParseColor(win->display, DefaultColormap(win->display, 0), cursor_color, &win->cursorcolor) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->blackpiece) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->whitepiece) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->blacksquare) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->whitesquare) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->border) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->textcolor) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->textback) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->errortext) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->playertext) || !XAllocColor(win->display, DefaultColormap(win->display, 0), &win->cursorcolor)) fprintf(stderr, "Can't get color...\n"); } /* Get fonts... */ win->small = XLoadQueryFont(win->display,SMALL_FONT); win->medium = XLoadQueryFont(win->display,MEDIUM_FONT); win->large = XLoadQueryFont(win->display,LARGE_FONT); /* Create the windows... */ win->basewin = XCreateSimpleWindow(win->display,DefaultRootWindow(win->display), BASE_XPOS, BASE_YPOS, BASE_WIDTH, BASE_HEIGHT, 0, BlackPixel(win->display, 0), WhitePixel(win->display, 0)); win->boardwin = XCreateSimpleWindow(win->display,win->basewin, BOARD_XPOS, BOARD_YPOS, BOARD_WIDTH, BOARD_HEIGHT, BORDER_WIDTH, win->border.pixel, WhitePixel(win->display, 0)); win->recwin = XCreateSimpleWindow(win->display,win->basewin, RECORD_XPOS, RECORD_YPOS, RECORD_WIDTH, RECORD_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); win->jailwin = XCreateSimpleWindow(win->display,win->basewin, JAIL_XPOS, JAIL_YPOS, JAIL_WIDTH, JAIL_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); win->wclockwin = XCreateSimpleWindow(win->display,win->basewin, WCLOCK_XPOS, WCLOCK_YPOS, CLOCK_WIDTH, CLOCK_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); win->bclockwin = XCreateSimpleWindow(win->display,win->basewin, BCLOCK_XPOS, BCLOCK_YPOS, CLOCK_WIDTH, CLOCK_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); win->messagewin = XCreateSimpleWindow(win->display,win->basewin, MESS_XPOS, MESS_YPOS, MESS_WIDTH, MESS_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); win->buttonwin = XCreateSimpleWindow(win->display,win->basewin, BUTTON_XPOS, BUTTON_YPOS, BUTTON_WIDTH, BUTTON_HEIGHT, BORDER_WIDTH, win->border.pixel, win->textback.pixel); /* Let's define an icon... */ win->iconpixmap = XCreatePixmapFromBitmapData(win->display, win->basewin, icon_bits, icon_width, icon_height, win->blacksquare.pixel, win->whitesquare.pixel, 1); bm = XCreateBitmapFromData(win->display, win->basewin, xchess_bits, xchess_width, xchess_height); bmask = XCreateBitmapFromData(win->display, win->basewin, xchess_mask_bits, xchess_width, xchess_height); cur = XCreatePixmapCursor(win->display, bm, bmask, &win->cursorcolor, &WhitePixel(win->display, 0), xchess_x_hot, xchess_y_hot); XFreePixmap(win->display, bm); XFreePixmap(win->display, bmask); XDefineCursor(win->display,win->basewin, cur); XMapSubwindows(win->display,win->basewin); XMapRaised(win->display,win->basewin); XSelectInput(win->display,win->basewin, KeyPressMask); XSelectInput(win->display,win->boardwin, ButtonPressMask | ButtonReleaseMask | ExposureMask); XSelectInput(win->display,win->recwin, ButtonReleaseMask | ExposureMask); XSelectInput(win->display,win->jailwin, ExposureMask); XSelectInput(win->display,win->wclockwin, ExposureMask); XSelectInput(win->display,win->bclockwin, ExposureMask); XSelectInput(win->display,win->messagewin, ButtonReleaseMask | ExposureMask); XSelectInput(win->display,win->buttonwin, ButtonPressMask | ExposureMask); message_init(win); record_init(win); button_draw(win); jail_init(win); clock_init(win, WHITE); clock_init(win, BLACK); if (timeunit) { if (timeunit > 1800) sprintf(buf, "%d moves every %.2lg hours.\n", movesperunit, ((double) timeunit) / 3600); else if (timeunit > 30) sprintf(buf, "%d moves every %.2lg minutes.\n", movesperunit, ((double) timeunit) / 60); else sprintf(buf, "%d moves every %d seconds.\n", movesperunit, timeunit); message_add(win, buf, false); } return (true);}static voiddrawgrid(win) windata *win;{ int i; XGCValues gc; gc.function = GXcopy; gc.plane_mask = AllPlanes; gc.foreground = win->border.pixel; gc.line_width = 0; gc.line_style = LineSolid; XChangeGC(win->display, DefaultGC(win->display, 0), GCFunction | GCPlaneMask | GCForeground | GCLineWidth | GCLineStyle, &gc); /* Draw the lines... horizontal, */ for (i = 1; i < SIZE; i++) XDrawLine(win->display, win->boardwin, DefaultGC(win->display, 0), 0, i * (SQUARE_WIDTH + BORDER_WIDTH) - BORDER_WIDTH / 2, SIZE * (SQUARE_WIDTH + BORDER_WIDTH), i * (SQUARE_WIDTH + BORDER_WIDTH) - BORDER_WIDTH / 2); /* and vertical... */ for (i = 1; i < SIZE; i++) XDrawLine(win->display, win->boardwin, DefaultGC(win->display, 0), i * (SQUARE_WIDTH + BORDER_WIDTH) - BORDER_WIDTH / 2, 0, i * (SQUARE_WIDTH + BORDER_WIDTH) - BORDER_WIDTH / 2, SIZE * (SQUARE_WIDTH + BORDER_WIDTH)); return;}voidwin_restart(){ win1->flipped = false; win_redraw(win1, (XEvent *) NULL); if (!oneboard) { win2->flipped = true; win_redraw(win2, (XEvent *) NULL); } return;}static voidicon_refresh(win) windata *win;{ XCopyArea(win->display, win->iconpixmap, win->icon, DefaultGC(win->display, 0), 0, 0, icon_width, icon_height, 0, 0); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -