/*
 * PAINT.C
 * GizmoBar Version 1.00, March 1993
 *
 * Contains any code related to GizmoBar visuals, primarily
 * the WM_PAINT handler.
 *
 * Copyright (c)1992 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Software Design Engineer
 * Microsoft Systems Developer Relations
 *
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */

#ifdef WIN32
#define _INC_OLE
#define __RPC_H__
#endif


#define STRICT
#include <windows.h>
#include "gizmoint.h"


//In GIZMO.C
extern TOOLDISPLAYDATA tdd;


/*
 * GizmoBarPaint
 *
 * Purpose:
 *  Handles all WM_PAINT messages for the control and paints either the
 *  entire thing or just one GizmoBar button if pGB->pGizmoPaint is non-NULL.
 *
 * Parameters:
 *  hWnd            HWND Handle to the control.
 *  pGB             PGIZMOBAR control data pointer.
 *
 * Return Value:
 *  None
 */

void GizmoBarPaint(HWND hWnd, PGIZMOBAR pGB)
	{
	PAINTSTRUCT ps;
	RECT        rc;
	HDC         hDC;
	HBRUSH      hBr=NULL;
	HPEN        hPen=NULL;


	hDC=BeginPaint(hWnd, &ps);
	GetClientRect(hWnd, &rc);

	/*
	 * The only part of the frame we need to draw is the bottom line,
	 * so we inflate the rectangle such that all other parts are outside
	 * the visible region.
	 */
	hBr =CreateSolidBrush(GetSysColor(COLOR_BTNFACE));

	if (NULL!=hBr)
		SelectObject(hDC, hBr);

	hPen=CreatePen(PS_SOLID, 1, GetSysColor(COLOR_WINDOWFRAME));

	if (NULL!=hPen)
		SelectObject(hDC, hPen);

	Rectangle(hDC, rc.left-1, rc.top-1, rc.right+1, rc.bottom);


	/*
	 * All that we have to do to draw the controls is start through the
	 * list, ignoring anything but buttons, and calling BTTNCUR's
	 * UIToolButtonDraw for buttons.  Since we don't even have to track
	 * positions of things, we can just use an enum.
	 */
	GizmoPEnum(&pGB->pGizmos, FEnumPaintGizmos, (DWORD)(LPSTR)&ps);

	//Clean up
	EndPaint(hWnd, &ps);

	if (NULL!=hBr)
		DeleteObject(hBr);

	if (NULL!=hPen)
		DeleteObject(hPen);

	return;
	}





/*
 * FEnumPaintGizmos
 *
 * Purpose:
 *  Enumeration callback for all the gizmos we know about in order to
 *  draw them.
 *
 * Parameters:
 *  pGizmo          PGIZMO to draw.
 *  iGizmo          UINT index on the GizmoBar of this gizmo.
 *  dw              DWORD extra data passed to GizmoPEnum, in our case
 *                  a pointer to the PAINTSTRUCT.
 *
 * Return Value:
 *  BOOL            TRUE to continue the enumeration, FALSE otherwise.
 */

BOOL FAR PASCAL FEnumPaintGizmos(PGIZMO pGizmo, UINT iGizmo, DWORD dw)
	{
	LPPAINTSTRUCT   pps=(LPPAINTSTRUCT)dw;
	RECT            rc, rcI;

	//Only draw those marked for repaint.
	if ((GIZMOTYPE_DRAWN & pGizmo->iType))
		{
		SetRect(&rc, pGizmo->x, pGizmo->y, pGizmo->x+pGizmo->dx, pGizmo->y+pGizmo->dy);

		//Only draw gizmos in the repaint area
		if (IntersectRect(&rcI, &rc, &pps->rcPaint))
			{
			UIToolButtonDrawTDD(pps->hdc, pGizmo->x, pGizmo->y
				, pGizmo->dx, pGizmo->dy, pGizmo->hBmp, pGizmo->cxImage
				, pGizmo->cyImage, pGizmo->iBmp, (UINT)pGizmo->uState, &tdd);
			}
		}

	return TRUE;
	}
