home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / gui / precog2_1.lha / Precognition2_1 / src / src.lha / Library / ArrowGadget.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-16  |  4.5 KB  |  180 lines

  1. #include "ArrowGadget.h"
  2. #include "ArrowGadgetClass.h"
  3. #include "BoolGadgetClass.h"
  4. #include "AmigaMem.h"
  5. #ifndef __GNUC__
  6. #include <clib/exec_protos.h>
  7. #include <clib/graphics_protos.h>
  8. #include <clib/intuition_protos.h>
  9. #endif
  10. #ifdef __GNUC__
  11. #include <proto/exec.h>
  12. #include <proto/graphics.h>
  13. #include <proto/intuition.h>
  14. #endif
  15. #ifdef __SASC
  16. #include <proto/exec.h>
  17. #include <proto/graphics.h>
  18. #include <proto/intuition.h>
  19. #endif
  20.  
  21. typedef struct ArrowHead
  22.    {
  23.       Border            ArrowBorder;
  24.       enum ArrowTypes   Direction;
  25.    } ArrowHead;
  26.  
  27.  
  28. ArrowGadget *ArrowGadget_New( ArrowGadget *self )
  29. {
  30.    ArrowGadget *new_agadget = NULL;
  31.    ArrowHead *head = NULL;
  32.    enum ArrowTypes direction = UpArrow;
  33.  
  34.    if( new_agadget = (ArrowGadget *)Amalloc( sizeof( ArrowGadget ) ) )
  35.    {
  36.       head = (ArrowHead *)self->BoxBorder->BottomRight.NextBorder;
  37.       if( head )
  38.          direction = head->Direction;
  39.  
  40.       ArrowGadget_Init(  new_agadget,  self->Location.x, self->Location.y,
  41.                          direction, self->Pens );
  42.    }
  43.    return new_agadget;
  44.  
  45. }
  46.  
  47.  
  48. void ArrowGadget_CleanUp( ArrowGadget *self )
  49. {
  50.    Afree( self->BoxBorder->BottomRight.NextBorder );
  51.    self->BoxBorder->BottomRight.NextBorder = NULL;
  52. }
  53.  
  54.  
  55. tPoint ArrowGadget_size = {16,14};
  56.  
  57. tPoint
  58. ArrowGadget_AskSize( ArrowGadget *self, PIXELS x, PIXELS y )
  59. {
  60.    return ArrowGadget_size;
  61. }
  62.  
  63.  
  64.  
  65. BOOL ArrowGadget_elaborated = FALSE;
  66.  
  67. struct ValuatorClass ArrowGadget_Class;
  68.  
  69. void ArrowGadgetClass_Init( struct ValuatorClass *class )
  70. {
  71.    BoolGadgetClass_Init( class );
  72.    class->isa         = BoolGadgetClass();
  73.    class->ClassName   = "ArrowGadget";
  74.  
  75. /* -------- Commented-out methods are inherited) ----------------*/
  76. /*   class->New         = ArrowGadget_New;*/
  77.    class->CleanUp     = (void(*)(PObject *))ArrowGadget_CleanUp;
  78. /*   class->Location    = ArrowGadget_Location;*/
  79. /*   class->SetLocation = ArrowGadget_SetLocation;*/
  80. /*   class->Size        = ArrowGadget_Size;*/
  81. /*   class->SetSize     = ArrowGadget_SetSize;*/
  82.    class->AskSize     = (Point(*)(GraphicObject *, PIXELS, PIXELS))ArrowGadget_AskSize;
  83.    class->SizeFlags   = GraphicObject_SizeFlagsNone;
  84. /*   class->Render      = NULL;*/
  85. /*   class->FirstGadget = ArrowGadget_FirstGadget;*/
  86. /*   class->nGadgets    = ArrowGadget_nGadgets;*/
  87. /*   class->IDCMPFlags  = ArrowGadget_IDCMPFlags;*/
  88. /*   class->ClaimEvent  = ArrowGadget_ClaimEvent;*/
  89. /*   class->EnableIactor      = ArrowGadget_EnableIactor;*/
  90. /*   class->isEnabled   = ArrowGadget_isEnabled;*/
  91. /*   class->Activate    = NULL;*/
  92. /*   class->isActive    = NULL;*/
  93. }
  94.  
  95.  
  96. struct ValuatorClass *ArrowGadgetClass( void )
  97. {
  98.    if (! ArrowGadget_elaborated)
  99.    {
  100.       ArrowGadgetClass_Init( &ArrowGadget_Class );
  101.       ArrowGadget_elaborated = TRUE;
  102.    }
  103.  
  104.    return &ArrowGadget_Class;
  105. }
  106.  
  107.  
  108. SHORT UpArrowPoints[] =
  109.    { 4,10, 7,3, 8,3, 11,10, 10,10, 8,5, 7,5, 5,10 };
  110.  
  111.  
  112. ArrowHead UpArrowHead =
  113.    { { 0, 0, 0, 0, JAM1, 8, UpArrowPoints, NULL }, UpArrow };
  114.  
  115. SHORT DownArrowPoints[] =
  116.    { 4,3, 7,10, 8,10, 11,3, 10,3, 8,8, 7,8, 5,3 };
  117.  
  118. ArrowHead DownArrowHead =
  119.    { { 0, 0, 0, 0, JAM1, 8, DownArrowPoints, NULL }, DownArrow };
  120.  
  121.  
  122. SHORT LeftArrowPoints[] =
  123.    { 11,3, 4,6, 4,7, 11,10, 11,9, 6,7, 6,6, 11,4 }; /* ArrowPoints */
  124.  
  125. ArrowHead LeftArrowHead =
  126.    { { 0, 0, 0, 0, JAM1, 8, LeftArrowPoints, NULL }, LeftArrow };
  127.  
  128.  
  129. SHORT RightArrowPoints[] =
  130.    { 4,3, 11,6, 11,7, 4,10, 4,9, 9,7, 9,6, 4,4 }; /* ArrowPoints */
  131.  
  132. ArrowHead RightArrowHead =
  133.    { { 0, 0, 0, 0, JAM1, 8, RightArrowPoints, NULL }, RightArrow };
  134.  
  135.  
  136.  
  137. void ArrowGadget_Init( ArrowGadget     *self,
  138.                        PIXELS           LeftEdge,
  139.                        PIXELS           TopEdge,
  140.                        enum ArrowTypes  Direction,
  141.                        pcg_3DPens       Pens )
  142. {
  143.    ArrowHead *Head;
  144.  
  145.    BoolGadget_Init( self, LeftEdge, TopEdge,
  146.       ArrowGadget_size.x, ArrowGadget_size.y,
  147.       Pens, NULL );
  148.  
  149.    self->isa          = ArrowGadgetClass();
  150.    self->g.Activation = GADGDURATION;
  151.  
  152.    if( Head = (ArrowHead *)Acalloc( 1, sizeof( ArrowHead ) ) )
  153.    {
  154.       switch( Direction )
  155.       {
  156.          case UpArrow:
  157.             *Head = UpArrowHead;
  158.             break;
  159.  
  160.          case DownArrow:
  161.             *Head = DownArrowHead;
  162.             break;
  163.  
  164.          case LeftArrow:
  165.             *Head = LeftArrowHead;
  166.             break;
  167.  
  168.          case RightArrow:
  169.             *Head = RightArrowHead;
  170.             break;
  171.       }
  172.  
  173.       self->BoxBorder->BottomRight.NextBorder = (Border *)Head;
  174.       Head->Direction             = Direction;
  175.       Head->ArrowBorder.FrontPen  = Pens.FrontPen;
  176.    }
  177. }
  178.  
  179.  
  180.