/* * BoardDraw: Draw board on given hdc. */ void BoardDraw(HDC hdc, Board *b) { int i, j, piece, color, index, mode; RECT rect; if (!b->valid) { rect.left = 0; rect.top = 0; rect.right = BOARD_WIDTH * b->square_size; rect.bottom = BOARD_HEIGHT * b->square_size; FillRect(hdc, &rect, (HBRUSH) GetStockObject(LTGRAY_BRUSH)); return; } SelectPalette(hdc, c->hPal, FALSE); // Turn off color interpolation mode = GetStretchBltMode(hdc); SetStretchBltMode(hdc, STRETCH_DELETESCANS); for (i=0; i < BOARD_HEIGHT; i++) for (j=0; j < BOARD_WIDTH; j++) { if ((i + j) % 2 == 0) index = WHITE_INDEX; else index = BLACK_INDEX; // Draw highlight if square selected if (move_started && move_pos1.x == j && move_pos1.y == i) index = select_index; rect.left = j * b->square_size; rect.top = i * b->square_size; rect.right = rect.left + b->square_size; rect.bottom = rect.top + b->square_size; piece = b->squares[i][j].piece; color = b->squares[i][j].color; if (piece == NONE) { OffscreenWindowColor(b->square_size, b->square_size, index); OffscreenCopy(hdc, rect.left, rect.top, b->square_size, b->square_size, 0, 0); } else { OffscreenWindowColor(PIECE_WIDTH, PIECE_HEIGHT, index); OffscreenStretchBlt(hdc, rect.left, rect.top, b->square_size, b->square_size, piece_bitmaps[color][piece - 1].bmap.bits, 0, 0, PIECE_WIDTH, PIECE_HEIGHT, OBB_TRANSPARENT | OBB_FLIP | OBB_COPY); } } SetStretchBltMode(hdc, mode); }
/* * InventoryDrawSingleItem: Draw given inventory item, at given row and col * in relative coordinates. */ void InventoryDrawSingleItem(InvItem *item, int row, int col) { HDC hdc; AREA area, obj_area; char temp[MAXAMOUNT + 1]; Bool draw_cursor; area.x = col * INVENTORY_BOX_WIDTH; area.y = row * INVENTORY_BOX_HEIGHT; area.cx = INVENTORY_BOX_WIDTH; area.cy = INVENTORY_BOX_HEIGHT; obj_area.x = area.x + INVENTORY_OBJECT_BORDER; obj_area.y = area.y + INVENTORY_OBJECT_BORDER; obj_area.cx = INVENTORY_OBJECT_WIDTH - 1; obj_area.cy = INVENTORY_OBJECT_HEIGHT - 1; hdc = GetDC(hwndInv); // See if we should draw cursor here draw_cursor = (GetFocus() == hwndInv && row == cursor_row - top_row && col == cursor_col); if (draw_cursor) OffscreenBitBlt(hdc, 0, 0, INVENTORY_BOX_WIDTH, INVENTORY_BOX_HEIGHT, cursor_bits, 0, 0, INVENTORY_BOX_WIDTH, OBB_FLIP); else OffscreenWindowBackground(&inventory_bkgnd, inventory_area.x + area.x, inventory_area.y + area.y, INVENTORY_BOX_WIDTH, INVENTORY_BOX_HEIGHT); if (item->is_using) OffscreenBitBlt(hdc, INVENTORY_OBJECT_BORDER, INVENTORY_OBJECT_BORDER, INVENTORY_OBJECT_WIDTH, INVENTORY_OBJECT_HEIGHT, inuse_bits, 0, 0, INVENTORY_OBJECT_WIDTH, OBB_FLIP | OBB_TRANSPARENT); DrawObject(hdc, item->obj, item->obj->animate->group, True, &obj_area, NULL, INVENTORY_OBJECT_BORDER, INVENTORY_OBJECT_BORDER, 0, False); OffscreenCopy(hdc, area.x, area.y, INVENTORY_BOX_WIDTH, INVENTORY_BOX_HEIGHT, 0, 0); // Draw numbers for number items if (IsNumberObj(item->obj->id) && cinfo->config->inventory_num) { sprintf(temp, "%d", item->obj->amount); SetBkMode(hdc, TRANSPARENT); SelectObject(hdc, GetFont(FONT_STATNUM)); SetTextColor(hdc, GetColor(COLOR_INVNUMBGD)); TextOut(hdc, obj_area.x + 1, obj_area.y + 1, temp, strlen(temp)); SetTextColor(hdc, GetColor(COLOR_INVNUMFGD)); TextOut(hdc, obj_area.x, obj_area.y, temp, strlen(temp)); } // Draw border around area to clear previous cursor (if any) if (!draw_cursor) { DrawWindowBackgroundBorder(&inventory_bkgnd, hdc, &obj_area, INVENTORY_OBJECT_BORDER, inventory_area.x + obj_area.x, inventory_area.y + obj_area.y, -1, NULL); } ReleaseDC(hwndInv, hdc); }