home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / corlib / MgButtonOperation.c < prev    next >
C/C++ Source or Header  |  1994-05-04  |  3KB  |  100 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2. /*        MenuButton é≡Æ╟ë┴ü@1994 ébé`éa    */
  3. /*        ÅCÉ│    1994 5/4 COR.        */
  4.  
  5. #include    <wlib.h>
  6. #include    <parts.h>
  7. #include    "MgButton.h"
  8.  
  9. MgButtonOperation( wp, info, mp )
  10. WindowID    wp;
  11. EventInfo    *info;
  12. MgButton    *mp;
  13. {
  14.     for( mp= mp->next ; mp ; mp= mp->next ){
  15.         if( ClipInner( (ClipClass*)mp, info->x, info->y ) ){
  16.             DrawBuf    dbuf[2];
  17.             int    press= TRUE;
  18.             int    sx, sy, hx, hy;
  19.             WindowGetScreenPosition( wp, &sx, &sy );
  20.             WindowGetHome( wp, &hx, &hy );
  21.             switch( mp->type ){
  22.             case ToggleButton:
  23.                 DrawSetLine( dbuf, mp->x1+1, mp->y1+1,
  24.                         mp->x2-1, mp->y2-1,
  25.                         ShadowDown, OptionShadow );
  26.                 DrawSetLine( dbuf+1, mp->x1+1, mp->y1+1,
  27.                         mp->x2-1, mp->y2-1,
  28.                         1, OptionBox );
  29.                 break;
  30.             case PushButtonSht:
  31.                 DrawSetPut( dbuf, mp->x1, mp->y1,
  32.                         ((MgButtonSht*)mp)->shon );
  33.                 DrawSetPut( dbuf+1, mp->x1, mp->y1,
  34.                         ((MgButtonSht*)mp)->shoff );
  35.                 break;
  36.             case TouchButton:
  37.                 DrawSetLine( dbuf, mp->x1, mp->y1,
  38.                         mp->x2, mp->y2,
  39.                     ColorGray|OptionXor, OptionFill );
  40.                 WindowDraw( wp, dbuf, 1 );
  41.                 DrawSetLine( dbuf, mp->x1, mp->y1,
  42.                         mp->x2, mp->y2,
  43.                     ColorGray|OptionXor, OptionFill );
  44.                 WindowDraw( wp, dbuf, 1 );
  45.                 return    mp->ret;
  46.             default:
  47.                 DrawSetLine( dbuf, mp->x1, mp->y1,
  48.                         mp->x2, mp->y2,
  49.                         ShadowDown, OptionShadow );
  50.                 DrawSetLine( dbuf+1, mp->x1, mp->y1,
  51.                         mp->x2, mp->y2,
  52.                         ShadowUp, OptionShadow );
  53.                 break;
  54.             }
  55.             WindowDraw( wp, dbuf, 1 );    /* ëƒé│éΩé─éóéΘÅ≤æ╘ */
  56.  
  57.             if( mp->type == MenuButton ){
  58.                 /* Æ╟ë┴ü@ébé`éa,  ÅCÉ│ COR. */
  59.                 int    ret= (*((MgButtonMenu*)mp)->
  60.                     exec)( wp, info, mp,
  61.                     ((MgButtonMenu*)mp)->opt );
  62.                 WindowDraw( wp, dbuf+1, 1 );
  63.                 return    ret;
  64.             }
  65.  
  66.             do{
  67.                 WindowGetEventInfo( info );
  68.                 if( ClipInner( (ClipClass*)mp,
  69.                     info->x-sx+hx, info->y-sy+hy ) ){
  70.                     if( !press ){
  71.                         WindowDraw( wp, dbuf, 1 );
  72.                         press= TRUE;
  73.                     }
  74.                 }else{
  75.                     if( press ){
  76.                         WindowDraw( wp, dbuf+1, 1 );
  77.                         press= FALSE;
  78.                     }
  79.                 }
  80.             }while( info->LeftStat || info->RightStat );
  81.             if( press ){
  82.                 if( mp->type == ToggleButton ){
  83.                     DrawSetLine( dbuf, mp->x1, mp->y1,
  84.                         mp->x2, mp->y2,
  85.         (*(((MgButtonTgl*)mp)->sw)= !*(((MgButtonTgl*)mp)->sw))?
  86.                         ShadowDown : ShadowUp,
  87.                         OptionShadow );
  88.                     WindowDraw( wp, dbuf, 2 );
  89.                 }else{
  90.                     WindowDraw( wp, dbuf+1, 1 );
  91.                 }
  92.                 return    mp->ret;
  93.             }
  94.             break;
  95.         }
  96.     }
  97.     return    FALSE;
  98. }
  99.  
  100.