/******************************************************************************
 **
 **	C++ Class Library for the Amiga© system software.
 **
 **	Copyright (C) 1994 by Armin Vogt  **  EMail: armin@uni-paderborn.de
 **	All Rights Reserved.
 **
 **	$Source: apphome:APlusPlus/RCS/libsource/AutoDrawArea.cxx,v $
 **	$Revision: 1.5 $
 **	$Date: 1994/05/05 22:03:13 $
 **	$Author: Armin_Vogt $
 **
 ******************************************************************************/


#include <APlusPlus/environment/APPObject.h>
#include <APlusPlus/graphics/AutoDrawArea.h>


volatile static char rcs_id[] = "$Id: AutoDrawArea.cxx,v 1.5 1994/05/05 22:03:13 Armin_Vogt Exp Armin_Vogt $";


AutoDrawArea::AutoDrawArea(GraphicObject *owner,AttrList& attrs) 
	: StdGadget(owner,
		GFLG_GADGHNONE,GACT_IMMEDIATE|GACT_RELVERIFY|GACT_FOLLOWMOUSE,
		GTYP_BOOLGADGET,NULL,NULL,NULL,0L,NULL,0,
		attrs)    
{
	if (Ok())
	{
   GWindow *homeWindow;
   if (NULL != (homeWindow = (GWindow*)findRootOfKind(IOTYPE_GWINDOW)))
   {
      _dout("\tfound root window "<<(APTR)homeWindow<<"\n");
      setGWindow(homeWindow);
      bgFillPen = 0;
      setIOType(IOTYPE_AUTODRAWAREA);
   }
   else _ierror(AUTODRAWAREA_HAS_NO_GWINDOW_ROOT);
   _dout("AutoDrawArea type is "<<status()<<endl);
	}
}

APTR AutoDrawArea::redrawSelf(GWindow *home,ULONG& returnType)
{
   _dout("AutoDrawArea::redrawSelf( )\n");
	
	APTR rv = StdGadget::redrawSelf(home,returnType);
   if (isValid())
   {
      adjustStdClip();
		setStdClip();
		clear();
      drawSelf();
		resetStdClip();
   }
	else cerr << "AutoDrawArea::redrawSelf() : is not valid!\n";
   return rv;
}

ULONG AutoDrawArea::setAttributes(AttrList& attrs)
{        
   return StdGadget::setAttributes(attrs);
}

ULONG AutoDrawArea::getAttribute(Tag tag,ULONG& dataStore)
{
   return StdGadget::getAttribute(tag,dataStore);
}

void AutoDrawArea::clear()
{
	setAPen(bgFillPen);
   setOPen(bgFillPen);
	setDrMd(JAM2);
   rectFill(0,0,iWidth(),iHeight());    // clear draw area
}

void AutoDrawArea::callback(const IntuiMessageC *imsg)
{
	// for all IDCMP events adjust the MouseX,MouseY values relative to the
	// AutoDrawArea view
	((IntuiMessageC*)imsg)->MouseX -= iLeft();
	((IntuiMessageC*)imsg)->MouseY -= iTop();
}