home *** CD-ROM | disk | FTP | other *** search
- /* ==========================================================================
- **
- ** HScroller.c
- **
- ** ©1991 WILLISoft
- **
- ** ==========================================================================
- */
-
- #include "parms.h" /* Added for proper prototyping -- EDB */
-
- #include <string.h>
- #include "HScroller.h"
- #include "minmax.h"
- #include "HScrollerClass.h"
- #include "EmbossedGadgetClass.h"
- #ifndef __GNUC__
- #include <clib/exec_protos.h>
- #endif
- #ifdef __GNUC__
- #include <proto/exec.h>
- #endif
- #ifdef __SASC
- #include <proto/exec.h>
- #endif
- #include "amigamem.h"
- /* Additions for prototypes -- EDB */
- #include "Positioner.h"
- #include "PositionerClass.h"
-
-
- tPoint HScroller_SetLocation( HScroller *self,
- PIXELS LeftEdge,
- PIXELS TopEdge )
- {
-
- Point Left_size, Slider_size;
- Point Left_pos, Right_pos;
-
-
- Left_size = Size( (GraphicObject *)&self->leftarrow );
- Slider_size = Size( (GraphicObject *)&self->hslider );
-
- SetLocation( (GraphicObject *)&self->hslider, LeftEdge, TopEdge );
-
- Left_pos.x = LeftEdge + Slider_size.x;
- Left_pos.y = TopEdge;
- SetLocation( (GraphicObject *)&self->leftarrow, Left_pos.x, Left_pos.y );
-
- Right_pos.x = Left_pos.x + Left_size.x;
- Right_pos.y = TopEdge;
- SetLocation( (GraphicObject *)&self->rightarrow, Right_pos.x, Right_pos.y );
-
- self->posr.Location.x = LeftEdge;
- self->posr.Location.y = TopEdge;
-
- return Location( (GraphicObject *)self );
- }
-
-
- tPoint HScroller_private_AskSize( HScroller *self,
- PIXELS Width,
- PIXELS Height,
- Point *Left_size,
- Point *Right_size,
- Point *Slider_size )
- {
- Point size;
-
- *Left_size = AskSize( (GraphicObject *)&self->leftarrow, 0, 0 );
- *Right_size = AskSize( (GraphicObject *)&self->rightarrow, 0, 0 );
-
- Slider_size->x = Width - (Left_size->x + Right_size->x);
- Slider_size->y = MAX( Left_size->y, Right_size->y );
-
- *Slider_size = AskSize( (GraphicObject *)&self->hslider, Slider_size->x, Slider_size->y );
-
- size.x = Slider_size->x + Left_size->x + Right_size->x;
- size.y = Slider_size->y;
-
- return size;
- }
-
-
- tPoint HScroller_AskSize( HScroller *self,
- PIXELS Width,
- PIXELS Height )
- {
- Point Left_size, Right_size, Slider_size, size;
-
- size = HScroller_private_AskSize( self, Width, Height,
- &Left_size, &Right_size, &Slider_size );
-
- return size;
- }
-
-
- tPoint HScroller_SetSize( HScroller *self,
- PIXELS Width,
- PIXELS Height )
- {
-
- tPoint Left_size, Right_size, Slider_size, size;
- tPoint pos;
-
- size = HScroller_private_AskSize( self, Width, Height,
- &Left_size, &Right_size, &Slider_size );
-
- SetSize( (GraphicObject *)&self->leftarrow, Left_size.x, Left_size.y );
- SetSize( (GraphicObject *)&self->rightarrow, Right_size.x, Right_size.y );
- SetSize( (GraphicObject *)&self->hslider, Slider_size.x, Slider_size.y );
-
- /* Now must fix the positions of leftarrow, down arrow. */
-
- pos = Location( (GraphicObject *)self );
- SetLocation( (GraphicObject *)self, pos.x, pos.y );
- self->posr.Size = size;
-
- return size;
- }
-
-
-
-
- BOOL HScroller_elaborated = FALSE;
-
- struct PositionerClass HScroller_Class;
-
- #include "VScrollerClass.h"
-
- void HScrollerClass_Init( struct PositionerClass *class )
- {
- PositionerClass_Init( class );
- class->isa = PositionerClass();
- class->ClassName = "HScroller";
- class->CleanUp = (void(*)(PObject *))VScroller_CleanUp;
- class->SetLocation = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_SetLocation;
- class->AskSize = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_AskSize;
- class->SetSize = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_SetSize;
- class->SizeFlags = GraphicObject_SizeFlagsX;
- class->Render = (void(*)(GraphicObject *, RastPort *))VScroller_Render;
- class->SetInteractorWindow = (void(*)(Interactor *, struct pcgWindow *))VScroller_SetInteractorWindow;
- class->FirstGadget = (Gadget*(*)(Interactor *))VScroller_FirstGadget;
- class->nGadgets = (USHORT(*)(Interactor *))VScroller_nGadgets;
- class->IDCMPFlags = (ULONG(*)(Interactor *))VScroller_IDCMPFlags;
- class->ClaimEvent = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_ClaimEvent;
- class->Respond = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_Respond;
- class->Refresh = (void(*)(Interactor *))VScroller_Refresh;
- class->EnableIactor = (BOOL(*)(Interactor *, BOOL))VScroller_EnableIactor;
- class->isEnabled = (BOOL(*)(Interactor *))EmbossedGadget_isEnabled;
- class->Activate = NULL;
- class->isActive = NULL;
- class->SetKnobSize = (USHORT(*)(Positioner *, USHORT))VScroller_SetKnobSize;
- class->SetValue = (LONG(*)(Valuator *, LONG))VScroller_SetValue;
- class->KnobSize = (USHORT(*)(Positioner *))VScroller_KnobSize;
- class->Value = (LONG(*)(Valuator *))VScroller_Value;
- class->Title = (char*(*)(GraphicObject *))VScroller_Title;
- class->DefaultFont = (TextAttr*(*)(GraphicObject *))VScroller_DefaultFont;
- class->SetDefaultFont = (BOOL(*)(GraphicObject *, TextAttr *))VScroller_SetDefaultFont;
- class->TextAlignment = (AlignInfo*(*)(GraphicObject *))VScroller_TextAlignment;
- class->SetTitle = (BOOL(*)(GraphicObject *, char * ))VScroller_SetTitle;
- class->SetTextAlignment = (BOOL(*)(GraphicObject *, UBYTE, BYTE, BYTE))VScroller_SetTextAlignment;
-
- }
-
-
- struct PositionerClass *HScrollerClass( void )
- {
- if( ! HScroller_elaborated )
- {
- HScrollerClass_Init( &HScroller_Class );
- HScroller_elaborated = TRUE;
- }
-
- return &HScroller_Class;
- }
-
-
-
-
- void HScroller_Init( HScroller *self,
- PIXELS LeftEdge,
- PIXELS TopEdge,
- PIXELS Width,
- pcg_3DPens Pens,
- char *label )
- {
- Gadget *g;
-
- Positioner_Init( (Positioner *)self );
-
- self->posr.isa = HScrollerClass();
- self->posr.Location.x = LeftEdge;
- self->posr.Location.y = TopEdge;
- self->Pens = Pens;
-
- /*
- ** Initialize objects with dumb values, just so that they are now
- ** proper objects.
- */
-
- ArrowGadget_Init( &self->leftarrow, LeftEdge, TopEdge,
- LeftArrow, Pens );
- ArrowGadget_Init( &self->rightarrow, LeftEdge, TopEdge,
- RightArrow, Pens );
- HSlider_Init( &self->hslider, LeftEdge, TopEdge, 0, 0, Pens, NULL );
- self->hslider.eg.Next = &self->leftarrow;
- self->leftarrow.Next = &self->rightarrow;
-
- SetSize( (GraphicObject *)self, Width, 0 );
-
- /* Chain the gadgets together. */
- g = FirstGadget( (Interactor *)self );
- ChainGadgets( g, FirstGadget( (Interactor *)&self->leftarrow ) );
- ChainGadgets( g, FirstGadget( (Interactor *)&self->rightarrow ) );
-
- SetTitle( (GraphicObject *)self, label );
- SetTextAlignment( (GraphicObject *)self, tx_OUTSIDE | tx_LEFT | tx_YCENTER,
- STD_XPAD, STD_YPAD );
-
- }
-