/*++

Copyright (c) 1996-1999  Microsoft Corporation

Module Name:

    brush.h

Abstract:

    Brush object header file

Environment:

        Windows NT Unidrv driver

Revision History:

    05/14/96 -amandan-
        Created

--*/

#ifndef _BRUSH_H_
#define _BRUSH_H_

#define DBCACHE_INC                 16
#define DBCACHE_MAX                 256

#define DITHERED_COLOR             -1
#define BLACK_COLOR_CMD_INDEX       0
#define MAX_COLOR_SELECTION         8
#define CMD_COLORSELECTION_FIRST    CMD_SELECTBLACKCOLOR

#define BRUSH_BLKWHITE              1
#define BRUSH_SHADING               2
#define BRUSH_CROSSHATCH            3
#define BRUSH_USERPATTERN           4
#define BRUSH_PROGCOLOR             5
#define BRUSH_NONPROGCOLOR          6

typedef struct _RECTW {
    WORD    l;
    WORD    t;
    WORD    r;
    WORD    b;
    } RECTW, *PRECTW;

BOOL
Download1BPPHTPattern(
    PDEV    *pPDev,
    SURFOBJ *pso,
    DWORD   dwPatID
    );

WORD
GetBMPChecksum(
    SURFOBJ *pso,
    PRECTW  prcw
    );

LONG
FindCachedHTPattern(
    PDEV    *pPDev,
    WORD    wChecksum
    );

BOOL
BFoundCachedBrush(
    PDEV    *pPDev,
    PDEVBRUSH pDevBrush
    );

//
// The following macro return a density value from 1 to 100 where 1 is the
// lightest and 100 is darkest, it will never return 0 (WHITE) because we
// using 23r + 66g + 10b = 99w
//

#define GET_SHADING_PERCENT(dw)    (BYTE)(100-((((DWORD)RED_VALUE(dw)  * 23) + \
                                             ((DWORD)GREEN_VALUE(dw)* 66) + \
                                             ((DWORD)BLUE_VALUE(dw) * 10) + \
                                             127) / 255))

#define CACHE_CURRENT_BRUSH(pPDev, pDevBrush) \
    pPDev->GState.CurrentBrush.dwBrushType = pDevBrush->dwBrushType; \
    pPDev->GState.CurrentBrush.iColor = pDevBrush->iColor;  \



#endif // _STATE_H_