Esempio n. 1
0
/*
 * 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);
}   
Esempio n. 2
0
/*
 * 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);
}