/*  GadTools layout toolkit
**
**  Copyright © 1993-1995 by Olaf `Olsen' Barthel
**  Freely distributable.
*/

#include "gtlayout_global.h"

ULONG __regargs
LTP_ImageClassDraw(struct Image *image,struct impDraw *drawMsg,ImageInfo *imageInfo)
{
	LTP_DrawBox(drawMsg -> imp_RPort,drawMsg -> imp_DrInfo,image -> LeftEdge + drawMsg -> imp_Offset . X,image -> TopEdge + drawMsg -> imp_Offset . Y,image -> Width,image -> Height,drawMsg -> imp_State == IDS_SELECTED,drawMsg -> imp_State == IDS_DISABLED,imageInfo);

	return(TRUE);
}


/*****************************************************************************/


ULONG __regargs
LTP_ImageClassErase(struct Image *image,struct impErase *eraseMsg)
{
	LONG left;
	LONG top;

	left	= eraseMsg -> imp_Offset . X + image -> LeftEdge;
	top	= eraseMsg -> imp_Offset . Y + image -> TopEdge;

	EraseRect(eraseMsg -> imp_RPort,left,top,left + image -> Width - 1,top + image -> Height - 1);

	return(TRUE);
}


/*****************************************************************************/

ULONG __regargs
LTP_ImageClassNew(struct IClass *class,Object *object,struct opSet *SetMethod)
{
	struct TagItem *Item;

	if(Item = FindTagItem(IIA_ImageType,SetMethod -> ops_AttrList))
	{
		struct Image *NewImage;

		if(NewImage = (struct Image *)DoSuperMethodA(class,object,(Msg)SetMethod))
		{
			struct ImageInfo	*MoreInfo = INST_DATA(class,NewImage);
			struct TagItem		*List = SetMethod -> ops_AttrList;

			memset(MoreInfo,0,sizeof(struct ImageInfo));

			MoreInfo -> ImageType = Item -> ti_Data;

			while(Item = NextTagItem(&List))
			{
				switch(Item -> ti_Tag)
				{
					case IIA_GlyphWidth:

						MoreInfo -> GlyphWidth = Item -> ti_Data;
						break;

					case IIA_GlyphHeight:

						MoreInfo -> GlyphHeight = Item -> ti_Data;
						break;

					case IIA_Lines:

						MoreInfo -> Lines = (STRPTR *)Item -> ti_Data;
						break;

					case IIA_LineCount:

						MoreInfo -> LineCount = Item -> ti_Data;
						break;

					case IIA_KeyStroke:

						MoreInfo -> KeyStroke = (STRPTR)Item -> ti_Data;
						break;

					case IIA_Emboss:

						MoreInfo -> Emboss = Item -> ti_Data;
						break;

					case IIA_Label:

						MoreInfo -> Label = (STRPTR)Item -> ti_Data;
						break;
				}
			}

			return((ULONG)NewImage);
		}
	}

	return(NULL);
}

ULONG __regargs
LTP_ImageClassGet(Class *class,Object *object,struct opGet *GetMsg)
{
	if(GetMsg -> opg_AttrID == IA_SupportsDisable)
	{
		*GetMsg -> opg_Storage = TRUE;

		return(TRUE);
	}
	else
		return(DoSuperMethodA(class,object,GetMsg));
}

/*****************************************************************************/


ULONG __saveds __asm
LTP_ImageDispatch(register __a0 struct IClass *class,register __a2 Object *object,register __a1 Msg msg)
{
	switch(msg -> MethodID)
	{
		case IM_ERASE:

			return(LTP_ImageClassErase((struct Image *)object,(struct impErase *)msg));

		case IM_DRAW:

			return(LTP_ImageClassDraw((struct Image *)object,(struct impDraw *)msg,(ImageInfo *)INST_DATA(class,object)));

		case OM_NEW:

			return(LTP_ImageClassNew(class,object,(struct opSet *)msg));

		case OM_GET:

			return(LTP_ImageClassGet(class,object,(struct opGet *)msg));

		default:

			return(DoSuperMethodA(class,object,msg));
	}
}
