home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classsource.lha / ClassSource / BOOPSI / images / images.c next >
Encoding:
C/C++ Source or Header  |  1995-02-12  |  41.4 KB  |  1,575 lines

  1. #include <classes/BOOPSI/images.h>
  2. #include <classes/BOOPSI/boopsilib.h>
  3.  
  4. #pragma -
  5. #include <pragma/utility_lib.h>
  6. #include <clib/alib_protos.h>
  7. #include <pragma/intuition_lib.h>
  8. #include <pragma/graphics_lib.h>
  9. #include <graphics/gfxmacros.h>
  10. #pragma +
  11.  
  12. struct LineiData {
  13.     BOOL vertical;
  14.     BOOL recessed;
  15.     BOOL frametype;
  16. };
  17.  
  18. LineiClass::LineiClass()
  19.     : BoopsiClass(sizeof(struct LineiData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
  20. {
  21. }
  22.  
  23. ULONG LineiClass::dispatcher(Class *cl, Object *o, Msg msg)
  24. {
  25.     struct LineiData *li;
  26.     ULONG retval = FALSE;
  27.     switch (msg->MethodID)
  28.     {
  29.         case OM_NEW:
  30.         {
  31.             Object *object;
  32.             if (object = (Object *) DoSuperMethodA(cl,o,msg))
  33.             {
  34.                 li = (struct LineiData *) INST_DATA(cl,object);
  35.                 li->recessed = TRUE;
  36.                 li->frametype = FRAME_RIDGE;
  37.                 li->vertical = FALSE;
  38.                 TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  39.                 while (!tic.isDone()) {
  40.                     /* register */ ULONG ticData = tic.itemData();
  41.                     switch (tic.itemTag())
  42.                     {
  43.                         case IA_Recessed:
  44.                             li->recessed = (BOOL) ticData;
  45.                             break;
  46.                         case IA_FrameType:
  47.                             li->frametype = (BOOL) ticData;
  48.                             break;
  49.                         case LIA_Vertical:
  50.                             li->vertical = (BOOL) ticData;
  51.                         default:
  52.                             break;
  53.                     };
  54.                     tic.next();
  55.                 };
  56.                 retval = (ULONG) object;
  57.             };
  58.             break;
  59.         };
  60.         case OM_DISPOSE:
  61.         {
  62.             li = (struct LineiData *) INST_DATA(cl,o);
  63.             retval = DoSuperMethodA(cl,o,msg);
  64.             break;
  65.         };
  66.         case OM_GET:
  67.         {
  68.             li = (struct LineiData *) INST_DATA(cl,o);
  69.             switch (((struct opGet *) msg)->opg_AttrID)
  70.             {
  71.                 case IA_Left:
  72.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Image *) o)->LeftEdge;
  73.                     retval = TRUE;
  74.                     break;
  75.                 case IA_Top:
  76.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Image *) o)->TopEdge;
  77.                     retval = TRUE;
  78.                     break;
  79.                 case IA_Width:
  80.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Image *) o)->Width;
  81.                     retval = TRUE;
  82.                     break;
  83.                 case IA_Height:
  84.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Image *) o)->Height;
  85.                     retval = TRUE;
  86.                     break;
  87.                 case LIA_Vertical:
  88.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) li->vertical;
  89.                     retval = TRUE;
  90.                     break;
  91.                 default:
  92.                     retval = DoSuperMethodA(cl,o,msg);
  93.                     break;
  94.             };
  95.             break;
  96.         };
  97.         case OM_SET:
  98.         {
  99.             li = (struct LineiData *) INST_DATA(cl,o);
  100. /*
  101.             TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  102.             while (!tic.isDone()) {
  103.                 ULONG ticData = tic.itemData();
  104.                 switch (tic.itemTag())
  105.                 {
  106.                     default:
  107.                         break;
  108.                 };
  109.                 tic.next();
  110.             };
  111. */
  112.             retval = DoSuperMethodA(cl,o,msg);
  113.             break;
  114.         };
  115.         case IM_DRAW:
  116.         {
  117.             li = (struct LineiData *) INST_DATA(cl,o);
  118.             retval = renderLinei(cl,(struct Image *) o,
  119.                 (struct impDraw *) msg,li);
  120.  
  121.             break;
  122.         };
  123.         default:
  124.         {
  125.             retval = DoSuperMethodA(cl,o,msg);
  126.             break;
  127.         };
  128.     };
  129.     return retval;
  130. }
  131.  
  132. ULONG LineiClass::renderLinei(Class *cl, struct Image *im,
  133.     struct impDraw *msg, struct LineiData *data)
  134. {
  135.     UBYTE shine = 2;
  136.     UBYTE shadow = 1;
  137.     if (msg->imp_DrInfo)
  138.     {
  139.         shine = msg->imp_DrInfo->dri_Pens[SHINEPEN];
  140.         shadow = msg->imp_DrInfo->dri_Pens[SHADOWPEN];
  141.     };
  142.     if (data->recessed)
  143.     {
  144.         UBYTE x = shine;
  145.         shine = shadow;
  146.         shadow = x;
  147.     };
  148.     if (!data->vertical)
  149.     {
  150.         if (im->Height > 0)
  151.         {
  152.             WORD top = im->TopEdge+(im->Height >> 1);
  153.             if (im->Height > 1)
  154.             {
  155.                 SetAPen(msg->imp_RPort,shine);
  156.                 Move(msg->imp_RPort,im->LeftEdge,top-1);
  157.                 Draw(msg->imp_RPort,im->LeftEdge+im->Width,top-1);
  158.             };
  159.             SetAPen(msg->imp_RPort,shadow);
  160.             Move(msg->imp_RPort,im->LeftEdge,top);
  161.             Draw(msg->imp_RPort,im->LeftEdge+im->Width,top);
  162.         };
  163.     }
  164.     else {
  165.         if (im->Width > 0)
  166.         {
  167.             WORD left = im->LeftEdge+(im->Width >> 1);
  168.             if (im->Width > 1)
  169.             {
  170.                 SetAPen(msg->imp_RPort,shine);
  171.                 Move(msg->imp_RPort,left-1,im->TopEdge);
  172.                 Draw(msg->imp_RPort,left-1,im->TopEdge+im->Height);
  173.             };
  174.             SetAPen(msg->imp_RPort,shadow);
  175.             Move(msg->imp_RPort,left,im->TopEdge);
  176.             Draw(msg->imp_RPort,left,im->TopEdge+im->Height);
  177.         };
  178.     };
  179.     return FALSE;
  180. }
  181.  
  182. // *************************************************************
  183.  
  184. LineiClass LineiC::lic;
  185.  
  186. // *************************************************************
  187.  
  188. struct PatterniData {
  189.     ULONG standard;
  190.     BOOL multicolor;
  191.     UBYTE apen;
  192.     UBYTE bpen;
  193. };
  194.  
  195. PatterniClass::PatterniClass()
  196.     : BoopsiClass(sizeof(struct PatterniData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
  197. {
  198. }
  199.  
  200. ULONG PatterniClass::dispatcher(Class *cl, Object *o, Msg msg)
  201. {
  202.     struct PatterniData *data;
  203.     ULONG retval = FALSE;
  204.     switch (msg->MethodID)
  205.     {
  206.         case OM_NEW:
  207.         {
  208.             Object *object;
  209.             if (object = (Object *) DoSuperMethodA(cl,o,msg))
  210.             {
  211.                 data = (struct PatterniData *) INST_DATA(cl,object);
  212.                 data->standard = 0;
  213.                 data->multicolor = FALSE;
  214.                 data->apen = TEXTPEN;
  215.                 data->bpen = BACKGROUNDPEN;
  216.                 TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  217.                 while (!tic.isDone()) {
  218.                     /* register */ ULONG ticData = tic.itemData();
  219.                     switch (tic.itemTag())
  220.                     {
  221.                         case PIA_Standard:
  222.                             data->standard = (ULONG) ticData;
  223.                             break;
  224. /*
  225.                         case PIA_Multicolor:
  226.                             data->multicolor = (BOOL) ticData;
  227.                             break;
  228. */
  229.                         case IA_FGPen:
  230.                             data->apen = (UBYTE) ticData;
  231.                             break;
  232.                         case IA_BGPen:
  233.                             data->bpen = (UBYTE) ticData;
  234.                             break;
  235.                         default:
  236.                             break;
  237.                     };
  238.                     tic.next();
  239.                 };
  240.                 retval = (ULONG) object;
  241.             };
  242.             break;
  243.         };
  244.         case OM_DISPOSE:
  245.         {
  246.             data = (struct PatterniData *) INST_DATA(cl,o);
  247.             retval = DoSuperMethodA(cl,o,msg);
  248.             break;
  249.         };
  250.         case OM_GET:
  251.         {
  252.             data = (struct PatterniData *) INST_DATA(cl,o);
  253.             switch (((struct opGet *) msg)->opg_AttrID)
  254.             {
  255.                 case IA_Left:
  256.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
  257.                     retval = TRUE;
  258.                     break;
  259.                 case IA_Top:
  260.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
  261.                     retval = TRUE;
  262.                     break;
  263.                 case IA_Width:
  264.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
  265.                     retval = TRUE;
  266.                     break;
  267.                 case IA_Height:
  268.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
  269.                     retval = TRUE;
  270.                     break;
  271.                 case PIA_Standard:
  272.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->standard;
  273.                     retval = TRUE;
  274.                     break;
  275. /*
  276.                 case PIA_Multicolor:
  277.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->multicolor;
  278.                     retval = TRUE;
  279.                     break;
  280. */
  281.                 default:
  282.                     retval = DoSuperMethodA(cl,o,msg);
  283.                     break;
  284.             };
  285.             break;
  286.         };
  287.         case OM_SET:
  288.         {
  289.             data = (struct PatterniData *) INST_DATA(cl,o);
  290.             TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  291.             while (!tic.isDone()) {
  292.                 /* register */ ULONG ticData = tic.itemData();
  293.                 switch (tic.itemTag())
  294.                 {
  295.                     case PIA_Standard:
  296.                         data->standard = ticData;
  297.                         break;
  298.                     case IA_FGPen:
  299.                         data->apen = (UBYTE) ticData;
  300.                         break;
  301.                     case IA_BGPen:
  302.                         data->bpen = (UBYTE) ticData;
  303.                         break;
  304.                     default:
  305.                         break;
  306.                 };
  307.                 tic.next();
  308.             };
  309.             retval = DoSuperMethodA(cl,o,msg);
  310.             break;
  311.         };
  312.         case IM_DRAW:
  313.         {
  314.             data = (struct PatterniData *) INST_DATA(cl,o);
  315.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  316.             break;
  317.         };
  318. /*
  319.         case IM_HITTEST:
  320.         {
  321.             retval = TRUE;
  322.             break;
  323.         };
  324.         case IM_ERASE:
  325.         {
  326.             data = (struct PatterniData *) INST_DATA(cl,o);
  327.             break;
  328.         };
  329.         case IM_DRAWFRAME:
  330.         {
  331.             data = (struct PatterniData *) INST_DATA(cl,o);
  332.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  333.             break;
  334.         };
  335.         case IM_HITFRAME:
  336.         {
  337.             retval = TRUE;
  338.             break;
  339.         };
  340.         case IM_ERASEFRAME:
  341.         {
  342.             data = (struct PatterniData *) INST_DATA(cl,o);
  343.             break;
  344.         };
  345.         case IM_FRAMEBOX:
  346.         {
  347.             data = (struct PatterniData *) INST_DATA(cl,o);
  348.             break;
  349.         };
  350. */
  351.         default:
  352.         {
  353.             retval = DoSuperMethodA(cl,o,msg);
  354.             break;
  355.         };
  356.     };
  357.     return retval;
  358. }
  359.  
  360. ULONG PatterniClass::render(Class *cl, struct Image *im,
  361.     struct impDraw *msg, struct PatterniData *data)
  362. {
  363.     static struct { UWORD s; UWORD data[16]; } standard[] = {
  364.         { 1, { 0x0000,0x0000 } },
  365.         { 1, { 0x5555,0xaaaa } },
  366.         { 1, { 0x1111,0x4444 } },
  367.         { 3, { 0x8888,0x5454,0x2222,0x1515,0x8888,0x5151,0x2222,0x4545    } },
  368.         { 2, { 0x0000,0x2222,0x0000,0x8888 } },
  369.         { 1, { 0x0000,0xAAAA } },
  370.         { 3, { 0xBBBB,0xFFFF,0xEEEE,0xFFFF,0xBBBB,0xFFFF,0xEEEE,0xFFFF } },
  371.         { 3, { 0x0808,0x1010,0x0000,0x0101,0x8080,0x4040,0x0000,0x0404 } },
  372.         { 3, { 0x0303,0x6363,0x6C6C,0x0C0C,0xC0C0,0xD8D8,0x1919,0x0000 } },
  373.         { 3, { 0x1F1F,0x1F1F,0xEEEE,0x3131,0xF1F1,0xF1F1,0xEEEE,0x1313 } },
  374.         { 3, { 0xA0A0,0x1F1F,0x0404,0x0404,0x0A0A,0xF1F1,0x4040,0x4040 } },
  375.         { 3, { 0x0808,0x1010,0x2020,0x4040,0x8080,0x0101,0x0202,0x0404 } },
  376.         { 3, { 0x0C0C,0x1818,0x3030,0x6060,0xC0C0,0x8181,0x0303,0x0606 } },
  377.         { 3, { 0x8080,0x0000,0x0202,0x0404,0x0808,0x1010,0x2020,0x4040 } },
  378.         { 3, { 0x1111,0xAAAA,0x4444,0xAAAA,0x1111,0xAAAA,0x4444,0xAAAA } },
  379.         { 3, { 0x1111,0x0A0A,0x0404,0x0808,0x1010,0x2020,0x4040,0xA0A0 } },
  380.         { 3, { 0x1E1E,0x1E1E,0x1E1E,0x1E1E,0xE1E1,0xE1E1,0xE1E1,0xE1E1 } },
  381.         { 3, { 0xFFFF,0x4040,0x4040,0x4040,0xFFFF,0x0404,0x0404,0x0404 } },
  382.         { 3, { 0x4444,0x2828,0x1111,0x0000,0x5555,0x0000,0x1111,0x8282 } },
  383.         { 4, { 0xFFFF,0x8000,0xB006,0xB006,0x8000,0x8000,0x8000,0x8000,
  384.                0x8000,0x8000,0x8000,0x8000,0x8000,0xB006,0xB006,0x8000 } },
  385.         { 3, { 0x1111,0x0000,0x0101,0x0000,0x5555,0x0000,0x0101,0x0000 } },
  386.         { 3, { 0x4040,0x4040,0xFFFF,0x4040,0x4040,0x4040,0x4040,0x4040 } },
  387.         { 3, { 0x4444,0xFFFF,0x2222,0x4444,0x8888,0xFFFF,0x1111,0x8888 } },
  388.         { 3, { 0x5555,0xBBBB,0x5555,0xEEEE,0x5555,0xBBBB,0x5555,0xEEEE } },
  389.         { 4, { 0x0100,0x0100,0x0100,0x1FF8,0x1008,0x1008,0x1008,0xF00F,
  390.                0x1008,0x1008,0x1008,0x1FF8,0x0100,0x0100,0x0100,0x0100 } },
  391.         { 3, { 0x0000,0x7777,0x7777,0x7777,0x0000,0x7777,0x7777,0x7777 } },
  392.         { 3, { 0x1010,0x0808,0x0404,0x0202,0x0101,0x8080,0x4040,0x2020 } },
  393.         { 3, { 0x8888,0x5050,0x2020,0x1010,0x0808,0x0404,0x0202,0x0505 } },
  394.         { 3, { 0xF8F8,0x7474,0x2222,0x1717,0x8F8F,0x5F5F,0x3E3E,0x7D7D } },
  395.         { 3, { 0x3030,0x1818,0x0C0C,0x0606,0x0303,0x8181,0xC0C0,0x6060 } },
  396.         { 3, { 0x0101,0x0000,0x4040,0x2020,0x1010,0x0808,0x0404,0x0202 } }
  397.     };
  398.     WORD x = msg->imp_Offset.X + im->LeftEdge;
  399.     WORD y = msg->imp_Offset.Y + im->TopEdge;
  400.     if (data->standard >= 0 && data->standard <= 29)
  401.         SetAfPt(msg->imp_RPort,standard[data->standard].data,
  402.             standard[data->standard].s)
  403.     else
  404.         SetAfPt(msg->imp_RPort,standard[0].data,standard[0].s);
  405.     SetDrMd(msg->imp_RPort,JAM2);
  406.     SetAPen(msg->imp_RPort,msg->imp_DrInfo->dri_Pens[data->apen]);
  407.     SetBPen(msg->imp_RPort,msg->imp_DrInfo->dri_Pens[data->bpen]);
  408.     RectFill(msg->imp_RPort,x,y,x + im->Width - 1, y + im->Height - 1);
  409.     return FALSE;
  410. }
  411.  
  412. // *************************************************************
  413.  
  414. PatterniClass PatterniC::pic;
  415.  
  416. // *************************************************************
  417.  
  418. struct TapeImagesData {
  419.     ULONG number;
  420.     BOOL recessed;
  421.     BOOL plane;
  422.     BOOL outline;
  423. };
  424.  
  425. TapeImagesClass::TapeImagesClass()
  426.     : BoopsiClass(sizeof(struct TapeImagesData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
  427. {
  428. }
  429.  
  430. ULONG TapeImagesClass::dispatcher(Class *cl, Object *o, Msg msg)
  431. {
  432.     struct TapeImagesData *data;
  433.     ULONG retval = FALSE;
  434.     switch (msg->MethodID)
  435.     {
  436.         case OM_NEW:
  437.         {
  438.             Object *object;
  439.             if (object = (Object *) DoSuperMethodA(cl,o,msg))
  440.             {
  441.                 data = (struct TapeImagesData *) INST_DATA(cl,object);
  442.                 data->number = 0;
  443.                 data->recessed = FALSE;
  444.                 data->plane = FALSE;
  445.                 data->outline = TRUE;
  446.                 TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  447.                 while (!tic.isDone()) {
  448.                     /* register */ ULONG ticData = tic.itemData();
  449.                     switch (tic.itemTag())
  450.                     {
  451.                         case TAPEIA_Number:
  452.                             data->number = (ULONG) ticData;
  453.                             break;
  454.                         case TAPEIA_Plane:
  455.                             data->plane = (BOOL) ticData;
  456.                             break;
  457.                         case TAPEIA_Outline:
  458.                             data->outline = (BOOL) ticData;
  459.                             break;
  460.                         case IA_Recessed:
  461.                             data->recessed = (BOOL) ticData;
  462.                             break;
  463.                         default:
  464.                             break;
  465.                     };
  466.                     tic.next();
  467.                 };
  468.                 retval = (ULONG) object;
  469.             };
  470.             break;
  471.         };
  472.         case OM_DISPOSE:
  473.         {
  474.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  475.             retval = DoSuperMethodA(cl,o,msg);
  476.             break;
  477.         };
  478.         case OM_GET:
  479.         {
  480.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  481.             switch (((struct opGet *) msg)->opg_AttrID)
  482.             {
  483.                 case IA_Left:
  484.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
  485.                     retval = TRUE;
  486.                     break;
  487.                 case IA_Top:
  488.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
  489.                     retval = TRUE;
  490.                     break;
  491.                 case IA_Width:
  492.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
  493.                     retval = TRUE;
  494.                     break;
  495.                 case IA_Height:
  496.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
  497.                     retval = TRUE;
  498.                     break;
  499.                 case TAPEIA_Number:
  500.                     *(((struct opGet *) msg)->opg_Storage) = data->number;
  501.                     retval = TRUE;
  502.                     break;
  503.                 case TAPEIA_Plane:
  504.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->plane;
  505.                     retval = TRUE;
  506.                     break;
  507.                 case TAPEIA_Outline:
  508.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->outline;
  509.                     retval = TRUE;
  510.                     break;
  511.                 case IA_Recessed:
  512.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->recessed;
  513.                     retval = TRUE;
  514.                     break;
  515.                 default:
  516.                     retval = DoSuperMethodA(cl,o,msg);
  517.                     break;
  518.             };
  519.             break;
  520.         };
  521.         case OM_SET:
  522.         {
  523.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  524.             TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  525.             while (!tic.isDone()) {
  526.                 /* register */ ULONG ticData = tic.itemData();
  527.                 switch (tic.itemTag())
  528.                 {
  529.                     case TAPEIA_Number:
  530.                         data->number = ticData;
  531.                         break;
  532.                     case TAPEIA_Plane:
  533.                         data->plane = (BOOL) ticData;
  534.                         break;
  535.                     case TAPEIA_Outline:
  536.                         data->outline = (BOOL) ticData;
  537.                         break;
  538.                     case IA_Recessed:
  539.                         data->recessed = (BOOL) ticData;
  540.                         break;
  541.                     default:
  542.                         break;
  543.                 };
  544.                 tic.next();
  545.             };
  546.             retval = DoSuperMethodA(cl,o,msg);
  547.             break;
  548.         };
  549.         case IM_DRAW:
  550.         {
  551.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  552.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  553.             break;
  554.         };
  555. /*
  556.         case IM_HITTEST:
  557.         {
  558.             retval = TRUE;
  559.             break;
  560.         };
  561.         case IM_ERASE:
  562.         {
  563.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  564.             break;
  565.         };
  566.         case IM_DRAWFRAME:
  567.         {
  568.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  569.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  570.             break;
  571.         };
  572.         case IM_HITFRAME:
  573.         {
  574.             retval = TRUE;
  575.             break;
  576.         };
  577.         case IM_ERASEFRAME:
  578.         {
  579.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  580.             break;
  581.         };
  582.         case IM_FRAMEBOX:
  583.         {
  584.             data = (struct TapeImagesData *) INST_DATA(cl,o);
  585.             break;
  586.         };
  587. */
  588.         default:
  589.         {
  590.             retval = DoSuperMethodA(cl,o,msg);
  591.             break;
  592.         };
  593.     };
  594.     return retval;
  595. }
  596.  
  597. ULONG TapeImagesClass::render(Class *cl, struct Image *im,
  598.     struct impDraw *msg, struct TapeImagesData *data)
  599. {
  600.     static struct DrawData playData[] = {
  601.         { DRAWCMD_Move, { 0,0 }},
  602.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  603.         { DRAWCMD_Draw, { 16383,8191 }},
  604.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  605.         { DRAWCMD_Draw, { 0,16383 }},
  606.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  607.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  608.         { DRAWCMD_End }
  609.     };
  610.     static struct DrawData windData[] = {
  611.         { DRAWCMD_Move, { 0,0 }},
  612.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  613.         { DRAWCMD_Draw, { 8191,8191 }},
  614.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  615.         { DRAWCMD_Draw, { 0,16383 }},
  616.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  617.         { DRAWCMD_Move, { 8192,0 }},
  618.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  619.         { DRAWCMD_Draw, { 16383,8191 }},
  620.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  621.         { DRAWCMD_Draw, { 8192,16383 }},
  622.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  623.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  624.         { DRAWCMD_End }
  625.     };
  626.     static struct DrawData rewindData[] = {
  627.         { DRAWCMD_Move, { 8191,0 }},
  628.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  629.         { DRAWCMD_Draw, { 0,8191 }},
  630.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  631.         { DRAWCMD_Draw, { 8191,16383 }},
  632.         { DRAWCMD_Move, { 16383,0 }},
  633.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  634.         { DRAWCMD_Draw, { 8192,8191 }},
  635.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  636.         { DRAWCMD_Draw, { 16383,16383 }},
  637.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  638.         { DRAWCMD_End }
  639.     };
  640.     static struct DrawData stopData[] = {
  641.         { DRAWCMD_Move, { 0,0 }},
  642.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  643.         { DRAWCMD_Draw, { 16383,0 }},
  644.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  645.         { DRAWCMD_Draw, { 16383,16383 }},
  646.         { DRAWCMD_Draw, { 0,16383 }},
  647.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  648.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  649.         { DRAWCMD_End }
  650.     };
  651.     static struct DrawData pauseData[] = {
  652.         { DRAWCMD_Move, { 0,0 }},
  653.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  654.         { DRAWCMD_Draw, { 6144,0 }},
  655.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  656.         { DRAWCMD_Draw, { 6144,16383 }},
  657.         { DRAWCMD_Draw, { 0,16383 }},
  658.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  659.         { DRAWCMD_Move, { 10239,0 }},
  660.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  661.         { DRAWCMD_Draw, { 16383,0 }},
  662.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  663.         { DRAWCMD_Draw, { 16383,16383 }},
  664.         { DRAWCMD_Draw, { 10239,16383 }},
  665.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  666.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  667.         { DRAWCMD_End }
  668.     };
  669.     static struct DrawData recordData[] = {
  670.         { DRAWCMD_Move, { 8192,0 }},
  671.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  672.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  673.         { DRAWCMD_Draw, { 16383,8191 }},
  674.         { DRAWCMD_Draw, { 8192,16383 }},
  675.         { DRAWCMD_Draw, { 0,8192 }},
  676.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  677.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  678.         { DRAWCMD_End }
  679.     };
  680.     static struct DrawData playbackData[] = {
  681.         { DRAWCMD_Move, { 16383,0 }},
  682.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  683.         { DRAWCMD_Draw, { 0,8191 }},
  684.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  685.         { DRAWCMD_Draw, { 16383,16383 }},
  686.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  687.         { DRAWCMD_End }
  688.     };
  689.     static struct DrawData beginningData[] = {
  690.         { DRAWCMD_Move, { 0,0 }},
  691.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  692.         { DRAWCMD_Draw, { 6143,0 }},
  693.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  694.         { DRAWCMD_Draw, { 6143,16383 }},
  695.         { DRAWCMD_Draw, { 0,16383 }},
  696.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  697.         { DRAWCMD_Move, { 16383,0 }},
  698.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  699.         { DRAWCMD_Draw, { 6144,8191 }},
  700.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  701.         { DRAWCMD_Draw, { 16383,16383 }},
  702.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  703.         { DRAWCMD_End }
  704.     };
  705.     static struct DrawData endData[] = {
  706.         { DRAWCMD_Move, { 10240,0 }},
  707.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  708.         { DRAWCMD_Draw, { 16383,0 }},
  709.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  710.         { DRAWCMD_Draw, { 16383,16383 }},
  711.         { DRAWCMD_Draw, { 10240,16383 }},
  712.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  713.         { DRAWCMD_Move, { 0,0 }},
  714.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  715.         { DRAWCMD_Draw, { 10239,8191 }},
  716.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  717.         { DRAWCMD_Draw, { 0,16383 }},
  718.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  719.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  720.         { DRAWCMD_End }
  721.     };
  722.     static struct DrawData repeatData[] = {
  723.         { DRAWCMD_Move, { 9216, 2048 }},
  724.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  725.         { DRAWCMD_Draw, { 16383,2048 }},
  726.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  727.         { DRAWCMD_Draw, { 16383,16383 }},
  728.         { DRAWCMD_Draw, { 0,16383 }},
  729.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  730.         { DRAWCMD_Draw, { 0,2048 }},
  731.         { DRAWCMD_Draw, { 5120,2048 }},
  732.         { DRAWCMD_Draw, { 5120,0 }},
  733.         { DRAWCMD_Draw, { 9215,4096 }},
  734.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  735.         { DRAWCMD_Draw, { 5120,8192 }},
  736.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  737.         { DRAWCMD_Draw, { 5120,6144 }},
  738.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  739.         { DRAWCMD_Draw, { 4096,6144 }},
  740.         { DRAWCMD_Draw, { 4096,12287 }},
  741.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  742.         { DRAWCMD_Draw, { 12287,12287 }},
  743.         { DRAWCMD_Draw, { 12287,6144 }},
  744.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  745.         { DRAWCMD_Draw, { 9216,6144 }},
  746.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  747.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  748.         { DRAWCMD_End }
  749.     };
  750.     WORD x = msg->imp_Offset.X + im->LeftEdge;
  751.     WORD y = msg->imp_Offset.Y + im->TopEdge;
  752.     struct DrawData *v;
  753.     switch (data->number)
  754.     {
  755.         case TAPEIC_Play:
  756.             v = playData;
  757.             break;
  758.         case TAPEIC_Wind:
  759.             v = windData;
  760.             break;
  761.         case TAPEIC_Rewind:
  762.             v = rewindData;
  763.             break;
  764.         case TAPEIC_Stop:
  765.             v = stopData;
  766.             break;
  767.         case TAPEIC_Pause:
  768.             v = pauseData;
  769.             break;
  770.         case TAPEIC_Record:
  771.             v = recordData;
  772.             break;
  773.         case TAPEIC_PlayBackward:
  774.             v = playbackData;
  775.             break;
  776.         case TAPEIC_Beginning:
  777.             v = beginningData;
  778.             break;
  779.         case TAPEIC_End:
  780.             v = endData;
  781.             break;
  782.         case TAPEIC_Repeat:
  783.             v = repeatData;
  784.             break;
  785.         default:
  786.             v = NULL;
  787.             break;
  788.     }
  789.     drawOutlineImage(msg->imp_RPort,v,x,y,im->Width,im->Height,msg->imp_DrInfo,
  790.         data->outline,data->plane,data->recessed,msg->imp_State);
  791.     return FALSE;
  792. }
  793.  
  794. // *************************************************************
  795.  
  796. TapeImagesClass TapeImagesC::tic;
  797.  
  798. // *************************************************************
  799.  
  800. struct KeyboardImagesData {
  801.     ULONG number;
  802.     BOOL recessed;
  803.     BOOL plane;
  804.     BOOL outline;
  805. };
  806.  
  807. KeyboardImagesClass::KeyboardImagesClass()
  808.     : BoopsiClass(sizeof(struct KeyboardImagesData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
  809. {
  810. }
  811.  
  812. ULONG KeyboardImagesClass::dispatcher(Class *cl, Object *o, Msg msg)
  813. {
  814.     struct KeyboardImagesData *data;
  815.     ULONG retval = FALSE;
  816.     switch (msg->MethodID)
  817.     {
  818.         case OM_NEW:
  819.         {
  820.             Object *object;
  821.             if (object = (Object *) DoSuperMethodA(cl,o,msg))
  822.             {
  823.                 data = (struct KeyboardImagesData *) INST_DATA(cl,object);
  824.                 data->number = 0;
  825.                 data->recessed = FALSE;
  826.                 data->plane = FALSE;
  827.                 data->outline = TRUE;
  828.                 TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  829.                 while (!tic.isDone()) {
  830.                     /* register */ ULONG ticData = tic.itemData();
  831.                     switch (tic.itemTag())
  832.                     {
  833.                         case KEYIA_Number:
  834.                             data->number = (ULONG) ticData;
  835.                             break;
  836.                         case KEYIA_Plane:
  837.                             data->plane = (BOOL) ticData;
  838.                             break;
  839.                         case KEYIA_Outline:
  840.                             data->outline = (BOOL) ticData;
  841.                             break;
  842.                         case IA_Recessed:
  843.                             data->recessed = (BOOL) ticData;
  844.                             break;
  845.                         default:
  846.                             break;
  847.                     };
  848.                     tic.next();
  849.                 };
  850.                 retval = (ULONG) object;
  851.             };
  852.             break;
  853.         };
  854.         case OM_DISPOSE:
  855.         {
  856.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  857.             retval = DoSuperMethodA(cl,o,msg);
  858.             break;
  859.         };
  860.         case OM_GET:
  861.         {
  862.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  863.             switch (((struct opGet *) msg)->opg_AttrID)
  864.             {
  865.                 case IA_Left:
  866.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
  867.                     retval = TRUE;
  868.                     break;
  869.                 case IA_Top:
  870.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
  871.                     retval = TRUE;
  872.                     break;
  873.                 case IA_Width:
  874.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
  875.                     retval = TRUE;
  876.                     break;
  877.                 case IA_Height:
  878.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
  879.                     retval = TRUE;
  880.                     break;
  881.                 case KEYIA_Number:
  882.                     *(((struct opGet *) msg)->opg_Storage) = data->number;
  883.                     retval = TRUE;
  884.                     break;
  885.                 case KEYIA_Plane:
  886.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->plane;
  887.                     retval = TRUE;
  888.                     break;
  889.                 case KEYIA_Outline:
  890.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->outline;
  891.                     retval = TRUE;
  892.                     break;
  893.                 case IA_Recessed:
  894.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->recessed;
  895.                     retval = TRUE;
  896.                     break;
  897.                 default:
  898.                     retval = DoSuperMethodA(cl,o,msg);
  899.                     break;
  900.             };
  901.             break;
  902.         };
  903.         case OM_SET:
  904.         {
  905.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  906.             TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  907.             while (!tic.isDone()) {
  908.                 /* register */ ULONG ticData = tic.itemData();
  909.                 switch (tic.itemTag())
  910.                 {
  911.                     case KEYIA_Number:
  912.                         data->number = ticData;
  913.                         break;
  914.                     case KEYIA_Plane:
  915.                         data->plane = (BOOL) ticData;
  916.                         break;
  917.                     case KEYIA_Outline:
  918.                         data->outline = (BOOL) ticData;
  919.                         break;
  920.                     case IA_Recessed:
  921.                         data->recessed = (BOOL) ticData;
  922.                         break;
  923.                     default:
  924.                         break;
  925.                 };
  926.                 tic.next();
  927.             };
  928.             retval = DoSuperMethodA(cl,o,msg);
  929.             break;
  930.         };
  931.         case IM_DRAW:
  932.         {
  933.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  934.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  935.             break;
  936.         };
  937. /*
  938.         case IM_HITTEST:
  939.         {
  940.             retval = TRUE;
  941.             break;
  942.         };
  943.         case IM_ERASE:
  944.         {
  945.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  946.             break;
  947.         };
  948.         case IM_DRAWFRAME:
  949.         {
  950.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  951.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  952.             break;
  953.         };
  954.         case IM_HITFRAME:
  955.         {
  956.             retval = TRUE;
  957.             break;
  958.         };
  959.         case IM_ERASEFRAME:
  960.         {
  961.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  962.             break;
  963.         };
  964.         case IM_FRAMEBOX:
  965.         {
  966.             data = (struct KeyboardImagesData *) INST_DATA(cl,o);
  967.             break;
  968.         };
  969. */
  970.         default:
  971.         {
  972.             retval = DoSuperMethodA(cl,o,msg);
  973.             break;
  974.         };
  975.     };
  976.     return retval;
  977. }
  978.  
  979. ULONG KeyboardImagesClass::render(Class *cl, struct Image *im,
  980.     struct impDraw *msg, struct KeyboardImagesData *data)
  981. {
  982.     static struct DrawData lamigaData[] = {
  983.         { DRAWCMD_Move, { 0,15248 }},
  984.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  985.         { DRAWCMD_Draw, { 955,15248 }},
  986.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  987.         { DRAWCMD_Draw, { 2321,14472 }},
  988.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  989.         { DRAWCMD_Draw, { 15564,0 }},
  990.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  991.         { DRAWCMD_Draw, { 16383,0 }},
  992.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  993.         { DRAWCMD_Draw, { 15291,14609 }},
  994.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  995.         { DRAWCMD_Draw, { 15837,15428 }},
  996.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  997.         { DRAWCMD_Draw, { 16383,15428 }},
  998.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  999.         { DRAWCMD_Draw, { 16383,16383 }},
  1000.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1001.         { DRAWCMD_Draw, { 10240,16383 }},
  1002.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1003.         { DRAWCMD_Draw, { 10240,15564 }},
  1004.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1005.         { DRAWCMD_Draw, { 11741,15291 }},
  1006.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1007.         { DRAWCMD_Draw, { 12424,14472 }},
  1008.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1009.         { DRAWCMD_Draw, { 12697,11059 }},
  1010.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1011.         { DRAWCMD_Draw, { 6826,11059 }},
  1012.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1013.         { DRAWCMD_Draw, { 3822,14609 }},
  1014.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1015.         { DRAWCMD_Draw, { 3822,15291 }},
  1016.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1017.         { DRAWCMD_Draw, { 4915,15564 }},
  1018.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1019.         { DRAWCMD_Draw, { 4778,16383 }},
  1020.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1021.         { DRAWCMD_Draw, { 0,16383 }},
  1022.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1023.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1024.  
  1025.         { DRAWCMD_Move, { 8055,9830 }},
  1026.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1027.         { DRAWCMD_Draw, { 13380,3959 }},
  1028.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1029.         { DRAWCMD_Draw, { 12834,9830 }},
  1030.         { DRAWCMD_Fill, { BACKGROUNDPEN, BACKGROUNDPEN }},
  1031.  
  1032.         { DRAWCMD_End }
  1033.     };
  1034.     static struct DrawData ramigaData[] = {
  1035.         { DRAWCMD_Move, { 0,15248 }},
  1036.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1037.         { DRAWCMD_Draw, { 955,15248 }},
  1038.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1039.         { DRAWCMD_Draw, { 2321,14472 }},
  1040.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1041.         { DRAWCMD_Draw, { 15564,0 }},
  1042.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1043.         { DRAWCMD_Draw, { 16383,0 }},
  1044.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1045.         { DRAWCMD_Draw, { 15291,14609 }},
  1046.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1047.         { DRAWCMD_Draw, { 15837,15428 }},
  1048.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1049.         { DRAWCMD_Draw, { 16383,15428 }},
  1050.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1051.         { DRAWCMD_Draw, { 16383,16383 }},
  1052.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1053.         { DRAWCMD_Draw, { 10240,16383 }},
  1054.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1055.         { DRAWCMD_Draw, { 10240,15564 }},
  1056.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1057.         { DRAWCMD_Draw, { 11741,15291 }},
  1058.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1059.         { DRAWCMD_Draw, { 12424,14472 }},
  1060.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1061.         { DRAWCMD_Draw, { 12697,11059 }},
  1062.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1063.         { DRAWCMD_Draw, { 6826,11059 }},
  1064.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1065.         { DRAWCMD_Draw, { 3822,14609 }},
  1066.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1067.         { DRAWCMD_Draw, { 3822,15291 }},
  1068.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1069.         { DRAWCMD_Draw, { 4915,15564 }},
  1070.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1071.         { DRAWCMD_Draw, { 4778,16383 }},
  1072.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1073.         { DRAWCMD_Draw, { 0,16383 }},
  1074.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1075.         { DRAWCMD_Fill, { BACKGROUNDPEN, BACKGROUNDPEN }},
  1076.  
  1077.         { DRAWCMD_Move, { 8055,9830 }},
  1078.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1079.         { DRAWCMD_Draw, { 13380,3959 }},
  1080.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1081.         { DRAWCMD_Draw, { 12834,9830 }},
  1082.         { DRAWCMD_Fill, { BACKGROUNDPEN, BACKGROUNDPEN }},
  1083.  
  1084.         { DRAWCMD_End }
  1085.     };
  1086.     static struct DrawData tabData[] = {
  1087.         { DRAWCMD_Move, { 0,0 }},
  1088.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1089.         { DRAWCMD_Draw, { 1023,0 }},
  1090.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1091.         { DRAWCMD_Draw, { 1023,16383 }},
  1092.         { DRAWCMD_Draw, { 0,16383 }},
  1093.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1094.         { DRAWCMD_Move, { 1023,8191 }},
  1095.         { DRAWCMD_Draw, { 8191,0 }},
  1096.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1097.         { DRAWCMD_Draw, { 8191,7168 }},
  1098.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1099.         { DRAWCMD_Draw, { 16383,7168 }},
  1100.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1101.         { DRAWCMD_Draw, { 16383,9216 }},
  1102.         { DRAWCMD_Draw, { 8191,9216 }},
  1103.         { DRAWCMD_Draw, { 8191,16383 }},
  1104.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1105.         { DRAWCMD_End }
  1106.     };
  1107.     static struct DrawData stabData[] = {
  1108.         { DRAWCMD_Move, { 15359,0 }},
  1109.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1110.         { DRAWCMD_Draw, { 16383,0 }},
  1111.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1112.         { DRAWCMD_Draw, { 16383,16383 }},
  1113.         { DRAWCMD_Draw, { 15359,16383 }},
  1114.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1115.         { DRAWCMD_Move, { 15359,8191 }},
  1116.         { DRAWCMD_Draw, { 8192,0 }},
  1117.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1118.         { DRAWCMD_Draw, { 8192,7168 }},
  1119.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1120.         { DRAWCMD_Draw, { 0,7168 }},
  1121.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1122.         { DRAWCMD_Draw, { 0,9216 }},
  1123.         { DRAWCMD_Draw, { 8192,9216 }},
  1124.         { DRAWCMD_Draw, { 8192,16383 }},
  1125.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1126.         { DRAWCMD_End }
  1127.     };
  1128.     static struct DrawData backspaceData[] = {
  1129.         { DRAWCMD_Move, { 0,8191 }},
  1130.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1131.         { DRAWCMD_Draw, { 6143,0 }},
  1132.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1133.         { DRAWCMD_Draw, { 6143,7168 }},
  1134.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1135.         { DRAWCMD_Draw, { 16383,7168 }},
  1136.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1137.         { DRAWCMD_Draw, { 16383,9216 }},
  1138.         { DRAWCMD_Draw, { 6143,9216 }},
  1139.         { DRAWCMD_Draw, { 6143,16383 }},
  1140.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1141.         { DRAWCMD_End }
  1142.     };
  1143.     static struct DrawData leftData[] = {
  1144.         { DRAWCMD_Move, { 0,8191 }},
  1145.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1146.         { DRAWCMD_Draw, { 6143,0 }},
  1147.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1148.         { DRAWCMD_Draw, { 6143,7168 }},
  1149.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1150.         { DRAWCMD_Draw, { 16383,7168 }},
  1151.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1152.         { DRAWCMD_Draw, { 16383,9216 }},
  1153.         { DRAWCMD_Draw, { 6143,9216 }},
  1154.         { DRAWCMD_Draw, { 6143,16383 }},
  1155.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1156.         { DRAWCMD_End }
  1157.     };
  1158.     static struct DrawData rightData[] = {
  1159.         { DRAWCMD_Move, { 16383,8191 }},
  1160.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1161.         { DRAWCMD_Draw, { 10240,0 }},
  1162.         { DRAWCMD_Draw, { 10240,7168 }},
  1163.         { DRAWCMD_Draw, { 0,7168 }},
  1164.         { DRAWCMD_Draw, { 0,9216 }},
  1165.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1166.         { DRAWCMD_Draw, { 10240,9216 }},
  1167.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1168.         { DRAWCMD_Draw, { 10240,16383 }},
  1169.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1170.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1171.         { DRAWCMD_End }
  1172.     };
  1173.     static struct DrawData upData[] = {
  1174.         { DRAWCMD_Move, { 8191,0 }},
  1175.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1176.         { DRAWCMD_Draw, { 0,6143 }},
  1177.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1178.         { DRAWCMD_Draw, { 7168,6143 }},
  1179.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1180.         { DRAWCMD_Draw, { 7168,16383 }},
  1181.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1182.         { DRAWCMD_Draw, { 9216,16383 }},
  1183.         { DRAWCMD_Draw, { 9216,6143 }},
  1184.         { DRAWCMD_Draw, { 16383,6143 }},
  1185.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1186.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1187.         { DRAWCMD_End }
  1188.     };
  1189.     static struct DrawData downData[] = {
  1190.         { DRAWCMD_Move, { 8191,16383 }},
  1191.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1192.         { DRAWCMD_Draw, { 0,10240 }},
  1193.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1194.         { DRAWCMD_Draw, { 7168,10240 }},
  1195.         { DRAWCMD_Draw, { 7168,0 }},
  1196.         { DRAWCMD_Draw, { 9216,0 }},
  1197.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1198.         { DRAWCMD_Draw, { 9216,10240 }},
  1199.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1200.         { DRAWCMD_Draw, { 16383,10240 }},
  1201.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1202.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1203.         { DRAWCMD_End }
  1204.     };
  1205.     static struct DrawData returnData[] = {
  1206.         { DRAWCMD_Move, { 0,12288 }},
  1207.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1208.         { DRAWCMD_Draw, { 6143,8192 }},
  1209.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1210.         { DRAWCMD_Draw, { 6143,11264 }},
  1211.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1212.         { DRAWCMD_Draw, { 14336,11264 }},
  1213.         { DRAWCMD_Draw, { 14336,0 }},
  1214.         { DRAWCMD_Draw, { 16383,0 }},
  1215.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1216.         { DRAWCMD_Draw, { 16383,13312 }},
  1217.         { DRAWCMD_Draw, { 6143,13312 }},
  1218.         { DRAWCMD_Draw, { 6143,16383 }},
  1219.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1220.         { DRAWCMD_End }
  1221.     };
  1222.     static struct DrawData shiftData[] = {
  1223.         { DRAWCMD_Move, { 0,10239 }},
  1224.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1225.         { DRAWCMD_Draw, { 8191,0 }},
  1226.         { DRAWCMD_Draw, { 16383,10239 }},
  1227.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1228.         { DRAWCMD_Draw, { 12287,10239 }},
  1229.         { DRAWCMD_Draw, { 12287,16383 }},
  1230.         { DRAWCMD_Draw, { 4096,16383 }},
  1231.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1232.         { DRAWCMD_Draw, { 4096,10239 }},
  1233.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1234.         { DRAWCMD_Fill, { BACKGROUNDPEN, BACKGROUNDPEN }},
  1235.         { DRAWCMD_End }
  1236.     };
  1237.     WORD x = msg->imp_Offset.X + im->LeftEdge;
  1238.     WORD y = msg->imp_Offset.Y + im->TopEdge;
  1239.     struct DrawData *v;
  1240.     switch (data->number)
  1241.     {
  1242.         case KEYIC_LeftAmiga:
  1243.             v = lamigaData;
  1244.             break;
  1245.         case KEYIC_RightAmiga:
  1246.             v = ramigaData;
  1247.             break;
  1248.         case KEYIC_Tab:
  1249.             v = tabData;
  1250.             break;
  1251.         case KEYIC_ShiftTab:
  1252.             v = stabData;
  1253.             break;
  1254.         case KEYIC_Backspace:
  1255.             v = backspaceData;
  1256.             break;
  1257.         case KEYIC_CursorLeft:
  1258.             v = leftData;
  1259.             break;
  1260.         case KEYIC_CursorRight:
  1261.             v = rightData;
  1262.             break;
  1263.         case KEYIC_CursorUp:
  1264.             v = upData;
  1265.             break;
  1266.         case KEYIC_CursorDown:
  1267.             v = downData;
  1268.             break;
  1269.         case KEYIC_Return:
  1270.             v = returnData;
  1271.             break;
  1272.         case KEYIC_Shift:
  1273.             v = shiftData;
  1274.             break;
  1275.         default:
  1276.             v = NULL;
  1277.             break;
  1278.     }
  1279.     drawOutlineImage(msg->imp_RPort,v,x,y,im->Width,im->Height,msg->imp_DrInfo,
  1280.         data->outline,data->plane,data->recessed,msg->imp_State);
  1281.     return FALSE;
  1282. }
  1283.  
  1284. // *************************************************************
  1285.  
  1286. KeyboardImagesClass KeyboardImagesC::kic;
  1287.  
  1288. // *************************************************************
  1289.  
  1290. struct GUIImagesData {
  1291.     ULONG number;
  1292.     BOOL recessed;
  1293.     BOOL plane;
  1294.     BOOL outline;
  1295. };
  1296.  
  1297. GUIImagesClass::GUIImagesClass()
  1298.     : BoopsiClass(sizeof(struct GUIImagesData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
  1299. {
  1300. }
  1301.  
  1302. ULONG GUIImagesClass::dispatcher(Class *cl, Object *o, Msg msg)
  1303. {
  1304.     struct GUIImagesData *data;
  1305.     ULONG retval = FALSE;
  1306.     switch (msg->MethodID)
  1307.     {
  1308.         case OM_NEW:
  1309.         {
  1310.             Object *object;
  1311.             if (object = (Object *) DoSuperMethodA(cl,o,msg))
  1312.             {
  1313.                 data = (struct GUIImagesData *) INST_DATA(cl,object);
  1314.                 data->number = 0;
  1315.                 data->recessed = FALSE;
  1316.                 data->plane = FALSE;
  1317.                 data->outline = TRUE;
  1318.                 TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  1319.                 while (!tic.isDone()) {
  1320.                     /* register */ ULONG ticData = tic.itemData();
  1321.                     switch (tic.itemTag())
  1322.                     {
  1323.                         case GUIIA_Number:
  1324.                             data->number = (ULONG) ticData;
  1325.                             break;
  1326.                         case GUIIA_Plane:
  1327.                             data->plane = (BOOL) ticData;
  1328.                             break;
  1329.                         case GUIIA_Outline:
  1330.                             data->outline = (BOOL) ticData;
  1331.                             break;
  1332.                         case IA_Recessed:
  1333.                             data->recessed = (BOOL) ticData;
  1334.                             break;
  1335.                         default:
  1336.                             break;
  1337.                     };
  1338.                     tic.next();
  1339.                 };
  1340.                 retval = (ULONG) object;
  1341.             };
  1342.             break;
  1343.         };
  1344.         case OM_DISPOSE:
  1345.         {
  1346.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1347.             retval = DoSuperMethodA(cl,o,msg);
  1348.             break;
  1349.         };
  1350.         case OM_GET:
  1351.         {
  1352.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1353.             switch (((struct opGet *) msg)->opg_AttrID)
  1354.             {
  1355.                 case IA_Left:
  1356.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
  1357.                     retval = TRUE;
  1358.                     break;
  1359.                 case IA_Top:
  1360.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
  1361.                     retval = TRUE;
  1362.                     break;
  1363.                 case IA_Width:
  1364.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
  1365.                     retval = TRUE;
  1366.                     break;
  1367.                 case IA_Height:
  1368.                     *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
  1369.                     retval = TRUE;
  1370.                     break;
  1371.                 case GUIIA_Number:
  1372.                     *(((struct opGet *) msg)->opg_Storage) = data->number;
  1373.                     retval = TRUE;
  1374.                     break;
  1375.                 case GUIIA_Plane:
  1376.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->plane;
  1377.                     retval = TRUE;
  1378.                     break;
  1379.                 case GUIIA_Outline:
  1380.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->outline;
  1381.                     retval = TRUE;
  1382.                     break;
  1383.                 case IA_Recessed:
  1384.                     *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->recessed;
  1385.                     retval = TRUE;
  1386.                     break;
  1387.                 default:
  1388.                     retval = DoSuperMethodA(cl,o,msg);
  1389.                     break;
  1390.             };
  1391.             break;
  1392.         };
  1393.         case OM_SET:
  1394.         {
  1395.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1396.             TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
  1397.             while (!tic.isDone()) {
  1398.                 /* register */ ULONG ticData = tic.itemData();
  1399.                 switch (tic.itemTag())
  1400.                 {
  1401.                     case GUIIA_Number:
  1402.                         data->number = ticData;
  1403.                         break;
  1404.                     case GUIIA_Plane:
  1405.                         data->plane = (BOOL) ticData;
  1406.                         break;
  1407.                     case GUIIA_Outline:
  1408.                         data->outline = (BOOL) ticData;
  1409.                         break;
  1410.                     case IA_Recessed:
  1411.                         data->recessed = (BOOL) ticData;
  1412.                         break;
  1413.                     default:
  1414.                         break;
  1415.                 };
  1416.                 tic.next();
  1417.             };
  1418.             retval = DoSuperMethodA(cl,o,msg);
  1419.             break;
  1420.         };
  1421.         case IM_DRAW:
  1422.         {
  1423.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1424.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  1425.             break;
  1426.         };
  1427. /*
  1428.         case IM_HITTEST:
  1429.         {
  1430.             retval = TRUE;
  1431.             break;
  1432.         };
  1433.         case IM_ERASE:
  1434.         {
  1435.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1436.             break;
  1437.         };
  1438.         case IM_DRAWFRAME:
  1439.         {
  1440.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1441.             render(cl,(struct Image *) o, (struct impDraw *) msg, data);
  1442.             break;
  1443.         };
  1444.         case IM_HITFRAME:
  1445.         {
  1446.             retval = TRUE;
  1447.             break;
  1448.         };
  1449.         case IM_ERASEFRAME:
  1450.         {
  1451.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1452.             break;
  1453.         };
  1454.         case IM_FRAMEBOX:
  1455.         {
  1456.             data = (struct GUIImagesData *) INST_DATA(cl,o);
  1457.             break;
  1458.         };
  1459. */
  1460.         default:
  1461.         {
  1462.             retval = DoSuperMethodA(cl,o,msg);
  1463.             break;
  1464.         };
  1465.     };
  1466.     return retval;
  1467. }
  1468.  
  1469. ULONG GUIImagesClass::render(Class *cl, struct Image *im,
  1470.     struct impDraw *msg, struct GUIImagesData *data)
  1471. {
  1472.     static struct DrawData fileselect[] = {
  1473.         { DRAWCMD_Move, { 0,0 }},
  1474.         { DRAWCMD_Attr, { SHINEPEN,TEXTPEN }},
  1475.         { DRAWCMD_Draw, { 0,16383 }},
  1476.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1477.         { DRAWCMD_Draw, { 16383,16383 }},
  1478.         { DRAWCMD_Draw, { 16383,6144 }},
  1479.         { DRAWCMD_Draw, { 10239,0 }},
  1480.         { DRAWCMD_Attr, { SHINEPEN,TEXTPEN }},
  1481.         { DRAWCMD_Fill, { FILLPEN,BACKGROUNDPEN }},
  1482.         { DRAWCMD_Move, { 10239,0 }},
  1483.         { DRAWCMD_Attr, { SHINEPEN,TEXTPEN }},
  1484.         { DRAWCMD_Draw, { 10239,6144 }},
  1485.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1486.         { DRAWCMD_Draw, { 16383,6144 }},
  1487.         { DRAWCMD_Fill, { FILLPEN,BACKGROUNDPEN }},
  1488.         { DRAWCMD_End }
  1489.     };
  1490.     static struct DrawData popupmenu[] = {
  1491.         { DRAWCMD_Move, { 0,0 }},
  1492.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1493.         { DRAWCMD_Draw, { 16383,8191 }},
  1494.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1495.         { DRAWCMD_Draw, { 0,16383 }},
  1496.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1497.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1498.         { DRAWCMD_End }
  1499.     };
  1500.     static struct DrawData popupselect[] = {
  1501.         { DRAWCMD_Move, { 0,16383 }},
  1502.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1503.         { DRAWCMD_Draw, { 0,14335 }},
  1504.         { DRAWCMD_Draw, { 16383,14335 }},
  1505.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1506.         { DRAWCMD_Draw, { 16383,16383 }},
  1507.         { DRAWCMD_Move, { 8191,14335 }},
  1508.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1509.         { DRAWCMD_Draw, { 0,8192 }},
  1510.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1511.         { DRAWCMD_Draw, { 6144,8192 }},
  1512.         { DRAWCMD_Draw, { 6144,0 }},
  1513.         { DRAWCMD_Draw, { 10240,0 }},
  1514.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1515.         { DRAWCMD_Draw, { 10240,8192 }},
  1516.         { DRAWCMD_Attr, { SHINEPEN,TEXTPEN }},
  1517.         { DRAWCMD_Draw, { 16383,8192 }},
  1518.         { DRAWCMD_Attr, { SHADOWPEN,TEXTPEN }},
  1519.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1520.         { DRAWCMD_End }
  1521.     };
  1522.     static struct DrawData ok[] = {
  1523.         { DRAWCMD_Move, { 0,12288 }},
  1524.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1525.         { DRAWCMD_Draw, { 6143,8192 }},
  1526.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1527.         { DRAWCMD_Draw, { 6143,11264 }},
  1528.         { DRAWCMD_Attr, { SHINEPEN, TEXTPEN }},
  1529.         { DRAWCMD_Draw, { 14336,11264 }},
  1530.         { DRAWCMD_Draw, { 14336,0 }},
  1531.         { DRAWCMD_Draw, { 16383,0 }},
  1532.         { DRAWCMD_Attr, { SHADOWPEN, TEXTPEN }},
  1533.         { DRAWCMD_Draw, { 16383,13312 }},
  1534.         { DRAWCMD_Draw, { 6143,13312 }},
  1535.         { DRAWCMD_Draw, { 6143,16383 }},
  1536.         { DRAWCMD_Fill, { FILLPEN, TEXTPEN }},
  1537.         { DRAWCMD_End }
  1538.     };
  1539.     static struct DrawData cancel[] = {
  1540.     };
  1541.     WORD x = msg->imp_Offset.X + im->LeftEdge;
  1542.     WORD y = msg->imp_Offset.Y + im->TopEdge;
  1543.     struct DrawData *v = NULL;
  1544.     switch (data->number)
  1545.     {
  1546.         case GUIIC_FileSelect:
  1547.             v = fileselect;
  1548.             break;
  1549.         case GUIIC_PopupMenu:
  1550.             v = popupmenu;
  1551.             break;
  1552.         case GUIIC_PopupSelect:
  1553.             v = popupselect;
  1554.             break;
  1555.         case GUIIC_Ok:
  1556.             v = ok;
  1557.             break;
  1558.         case GUIIC_Cancel:
  1559.             break;
  1560.         default:
  1561.             v = NULL;
  1562.             break;
  1563.     }
  1564.     drawOutlineImage(msg->imp_RPort,v,x,y,im->Width,im->Height,msg->imp_DrInfo,
  1565.         data->outline,data->plane,data->recessed,msg->imp_State);
  1566.     return FALSE;
  1567. }
  1568.  
  1569. // *************************************************************
  1570.  
  1571. GUIImagesClass GUIImagesC::kic;
  1572.  
  1573. // *************************************************************
  1574.  
  1575.