home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / ImageLib / Image_lib / lib_source / Draw3DBox.c < prev    next >
C/C++ Source or Header  |  1999-05-27  |  3KB  |  126 lines

  1. /* Draw3DBox.c © Paweî Marciniak <pmarciniak@lodz.home.pl>*/
  2. #include <string.h>
  3. #include <exec/types.h>
  4. #include <graphics/text.h>
  5. #include <utility/tagitem.h>
  6. #include <proto/graphics.h>
  7. #include <proto/dos.h>
  8. #include <proto/exec.h>
  9. #include <proto/utility.h>
  10. #include "/include/libraries/image.h"
  11.  
  12. #define DrawLine(x,y,x2,y2) Move( rp, x , y); \
  13.         Draw( rp, x2, y2 )
  14.  
  15. /**Draw3DBox************************************************************/
  16.  
  17. /* Draw3DBox() (c) 1997 Paweî Marciniak
  18.   Modify date  |  Version  |  Comment
  19. ---------------+-----------+------------------------------
  20. 15-03-97 15:23 |  1.0      |
  21. 18-08-97 9:25  |  2.0      |
  22. 12-09-97 20:45 |  2.1      |
  23. 25-10-98 21:31 |  2.2      | little bug in drawing bright edges when align is center
  24. 11-02-99 17:14 |  2.3      | little bug in drawing bright edges
  25. */
  26. void __saveds __asm Draw3DBoxA(
  27.   register __a0 struct  RastPort *rp_reg,
  28.   register __a1 struct TextFont *TxFont_reg,
  29.   register __a2 struct TagItem *Tags)
  30. {
  31.   struct RastPort *rp = rp_reg;
  32.   struct TextFont *TxFont = TxFont_reg;
  33.   UWORD  xpos,  ypos,  xsize, ysize, txtlen;
  34.   UWORD  dark_pen=1;
  35.   UWORD  bright_pen=2;
  36.   UWORD  align=ALIGN_LEFT;
  37.   STRPTR text;
  38.   struct TagItem *ti, *TagsTmp = Tags;
  39.  
  40.  
  41. /* Tags */
  42.   while ( ti = NextTagItem( &TagsTmp ) )
  43.   {
  44.     switch ( ti->ti_Tag )
  45.     {
  46.       case DBA_PosX:
  47.         xpos = ( UWORD )ti->ti_Data;
  48.       break;
  49.  
  50.       case DBA_PosY:
  51.         ypos = ( UWORD )ti->ti_Data;
  52.       break;
  53.  
  54.       case DBA_Width:
  55.         xsize = ( UWORD )ti->ti_Data - 1;
  56.       break;
  57.  
  58.       case DBA_Height:
  59.         ysize = ( UWORD )ti->ti_Data - 1;
  60.       break;
  61.  
  62.       case DBA_BrightEdge:
  63.         bright_pen = ( UWORD )ti->ti_Data;
  64.       break;
  65.  
  66.       case DBA_DarkEdge:
  67.         dark_pen = ( UWORD )ti->ti_Data;
  68.       break;
  69.  
  70.       case DBA_Align:
  71.         align = ( UWORD )ti->ti_Data;
  72.       break;
  73.  
  74.       case DBA_Text:
  75.         text = ( STRPTR )ti->ti_Data;
  76.       break;
  77.       
  78.       default:
  79.       break;
  80.     }
  81.   }
  82.  
  83.   SetFont( rp, TxFont );
  84.   SetAPen( rp, 1);
  85.   SetBPen( rp, 0);
  86.   SetDrMd( rp, JAM1 );
  87.  
  88.   txtlen=TextLength( rp, text, strlen(text));      //dîugoôê tekstu
  89.   if(align==ALIGN_CENTER)
  90.     Move( rp, xpos+(xsize/2)-(txtlen/2), ypos+(TxFont->tf_YSize/2)-(TxFont->tf_YSize-TxFont->tf_Baseline));  //rp -RastPort , pozycja x, pozycja y
  91.   else
  92.     Move( rp, xpos+10, ypos+(TxFont->tf_YSize/2)-(TxFont->tf_YSize-TxFont->tf_Baseline));
  93.   Text( rp, text, (ULONG)strlen(text) );
  94.  
  95.   SetAPen( rp, dark_pen );
  96.   if(align==ALIGN_CENTER)
  97.   {
  98.     DrawLine( xpos, ypos, xpos+(xsize/2)-(txtlen/2), ypos );
  99.     DrawLine( xpos+(xsize/2)+(txtlen/2), ypos, xpos+xsize, ypos );
  100.   }
  101.   else
  102.   {
  103.     DrawLine( xpos, ypos, xpos+10, ypos );
  104.     DrawLine( xpos+10+txtlen, ypos, xpos+xsize, ypos );
  105.   }
  106.   DrawLine( xpos+xsize, ypos, xpos+xsize, ypos+ysize );
  107.   DrawLine( xpos+xsize, ypos+ysize, xpos, ypos+ysize );
  108.   DrawLine( xpos, ypos+ysize, xpos, ypos );
  109.  
  110.   SetAPen( rp, bright_pen );
  111.   if(align==ALIGN_CENTER)
  112.   {
  113.     DrawLine( xpos+1, ypos+1, xpos+(xsize/2)-(txtlen/2)-1, ypos+1 );
  114.     DrawLine( xpos+(xsize/2)+(txtlen/2), ypos+1, xpos+xsize+1, ypos+1 );
  115.   }
  116.   else
  117.   {
  118.     DrawLine( xpos+1, ypos+1, xpos+9, ypos+1 );
  119.     DrawLine( xpos+10+txtlen, ypos+1, xpos+xsize+1, ypos+1 );
  120.   }
  121.   DrawLine( xpos+xsize+1, ypos+1, xpos+xsize+1, ypos+ysize+1 );
  122.   DrawLine( xpos+xsize+1, ypos+ysize+1, xpos+1, ypos+ysize+1 );
  123.   DrawLine( xpos+1, ypos+ysize+1, xpos+1, ypos+1 );
  124.   SetAPen( rp, 0 );
  125. }
  126.