home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / precg105.lha / source / ArrowGadget.c < prev    next >
C/C++ Source or Header  |  1992-12-24  |  4KB  |  166 lines

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