home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
dev
/
gui
/
triton
/
programmer
/
source
/
triton_llib.c
< prev
Wrap
C/C++ Source or Header
|
1994-07-14
|
7KB
|
224 lines
/*
* Triton - The object oriented GUI creation system for the Amiga
* Written by Stefan Zeiger in 1993-1994
*
* (c) 1993-1994 by Stefan Zeiger
* You are hereby allowed to use this source or parts
* of it for creating programs for AmigaOS which use the
* Triton GUI creation system. All other rights reserved.
*
*/
#define TR_NOMACROS
#define TR_NOSUPPORT
#include <dos.h>
#include <utility/hooks.h>
#include <clib/exec_protos.h>
#include <pragmas/exec_pragmas.h>
#include <libraries/triton.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/triton.h>
#include <clib/alib_protos.h>
#include <ctype.h>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////// Support functions //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Library *TritonBase;
struct TR_App *__Triton_Support_App;
/****** triton.lib/TR_OpenTriton ******
*
* NAME
* TR_OpenTriton -- Opens Triton ready to use.
*
* SYNOPSIS
* success = TR_OpenTriton(version, tag1,...)
* D0
*
* BOOL TR_OpenTriton(ULONG, ULONG,...);
*
* FUNCTION
* Opens triton.library with the specified minimum
* version and creates an application.
* The supplied tags are passed as a taglist to
* TR_CreateApp().
*
* RESULT
* success - Was everything opened successful?
*
* SEE ALSO
* TR_CloseTriton(), TR_CreateApp()
*
******/
BOOL __stdargs TR_OpenTriton(ULONG version, ULONG taglist,...)
{
if(!(TritonBase=OpenLibrary(TRITONNAME,version))) return FALSE;
if(!(__Triton_Support_App=TR_CreateApp((struct TagItem *)&taglist))) return FALSE;
return TRUE;
}
/****** triton.lib/TR_CloseTriton ******
*
* NAME
* TR_CloseTriton -- Closes Triton easily.
*
* SYNOPSIS
* TR_CloseTriton()
*
* VOID TR_CloseTriton(VOID);
*
* FUNCTION
* Closes the application created by OpenTriton()
* and closes triton.library.
*
* SEE ALSO
* TR_OpenTriton()
*
******/
VOID __regargs TR_CloseTriton(VOID)
{
if(__Triton_Support_App)
{
TR_DeleteApp(__Triton_Support_App);
__Triton_Support_App=NULL;
}
if(TritonBase)
{
CloseLibrary(TritonBase);
TritonBase=NULL;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////// Stack argument stubs //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct TR_App * __stdargs TR_CreateAppTags(ULONG taglist,...)
{ return TR_CreateApp((struct TagItem *)&taglist); }
struct TR_Project * __stdargs TR_OpenProjectTags(struct TR_App *app, ULONG taglist,...)
{ return TR_OpenProject(app, (struct TagItem *)&taglist); }
ULONG TR_EasyRequestTags(struct TR_App *app, STRPTR bodyfmt, STRPTR gadfmt, ULONG taglist,...)
{ return TR_EasyRequest(app, bodyfmt, gadfmt, (struct TagItem *)&taglist); }
ULONG TR_AutoRequestTags(struct TR_App *app, struct TR_Project *lockproject, ULONG taglist,...)
{ return TR_AutoRequest(app, lockproject, (struct TagItem *)&taglist); }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// BOOPSI image class 'TRLOGO' //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct IClass *TRIM_trLogo;
ULONG __regargs TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg);
ULONG __asm TRIM_trLogo_DispatchBoopsiImage(register __a0 struct IClass *Class, register __a2 Object *Object, register __a1 Msg ObjMsg);
#define ARROWLENGTH 4
#define LANCELENGTH 2
#define CURVELENGTH 15
void __stdargs TR_ScaledPolyDraw(struct RastPort *rport, UWORD len, WORD *array, ULONG orgwid, ULONG orghei, ULONG newwid, ULONG newhei, ULONG left, ULONG top)
{
UWORD i;
for(i=0;i<len;i++)
{
array[i*2]=((array[i*2]*newwid)/orgwid)+left;
array[(i*2)+1]=((array[(i*2)+1]*newhei)/orghei)+top;
}
Move(rport, array[0], array[1]);
PolyDraw(rport, len-1, &array[2]);
}
ULONG __regargs TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg)
{
struct RastPort * RPort = DrawMsg->imp_RPort;
UWORD BackColor = DrawMsg->imp_DrInfo->dri_Pens[BACKGROUNDPEN],
TextColor = DrawMsg->imp_DrInfo->dri_Pens[TEXTPEN];
WORD left = Image->LeftEdge + DrawMsg->imp_Offset.X,
top = Image->TopEdge + DrawMsg->imp_Offset.Y,
width = Image->Width,
height = Image->Height,
Arrow1Array[ARROWLENGTH*2] = {22,6, 30,2, 26,10, 22,6},
Arrow2Array[ARROWLENGTH*2] = {34,18, 42,14, 38,22, 34,18},
Arrow3Array[ARROWLENGTH*2] = {46,30, 54,26, 50,34, 46,30},
LanceArray[LANCELENGTH*2] = {2,54, 36,20},
CurveArray[CURVELENGTH*2] = {24,8, 22,10, 20,14, 19,18, 18,22, 19,26, 20,30, 22,34, 26,36, 30,37, 34,38, 38,37, 42,36, 46,34, 48,32};
// Background
SetAfPt(RPort, NULL, -1);
SetAPen(RPort, BackColor);
SetDrMd(RPort, JAM1);
RectFill(RPort, left, top, left+width-1, top+height-1);
// Adjust size (->square)
if(width>height)
{
left+=((width-height)/2);
width=height;
}
else if(width<height)
{
top+=((height-width)/2);
height=width;
}
// Logo
SetAPen(RPort, TextColor);
TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow1Array,56,56,width,height,left,top);
TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow2Array,56,56,width,height,left,top);
TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow3Array,56,56,width,height,left,top);
TR_ScaledPolyDraw(RPort,LANCELENGTH,LanceArray,56,56,width,height,left,top);
TR_ScaledPolyDraw(RPort,CURVELENGTH,CurveArray,56,56,width,height,left,top);
return(TRUE);
}
ULONG __asm TRIM_trLogo_DispatchBoopsiImage(register __a0 struct IClass *Class, register __a2 Object *Object, register __a1 Msg ObjMsg)
{
ULONG retval;
struct Hook *hook=(struct Hook *)Class;
ULONG tempa4=__builtin_getreg(12);
__builtin_putreg(12,(ULONG)hook->h_Data);
if(ObjMsg->MethodID==IM_DRAW) retval=TRIM_trLogo_DrawBoopsiImage((struct Image *)Object, (struct impDraw *)ObjMsg);
else retval=DoSuperMethodA(Class, Object, ObjMsg);
__builtin_putreg(12,tempa4);
return retval;
}
BOOL __regargs TRIM_trLogo_Init(VOID)
{
if((TRIM_trLogo = MakeClass(NULL, IMAGECLASS, NULL, 0, 0)))
{
TRIM_trLogo->cl_Dispatcher.h_Entry = (HOOKFUNC)TRIM_trLogo_DispatchBoopsiImage;
TRIM_trLogo->cl_Dispatcher.h_Data = (void *) __builtin_getreg(12);
}
return (BOOL)TRIM_trLogo;
}
VOID __regargs TRIM_trLogo_Free(VOID)
{
if(TRIM_trLogo) FreeClass(TRIM_trLogo);
}