home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Heaven Sunny 2 / APPARE2.BIN / oh_towns / art2 / src.lzh / IMGBOX.C < prev    next >
C/C++ Source or Header  |  1995-06-17  |  3KB  |  118 lines

  1. /*====================================================
  2.                       ARTemis
  3.                    (version 1.3)
  4.              FM-TOWNS 用ペイントツール
  5.  
  6.                  by 松内 良介 1994
  7. ====================================================*/
  8.  
  9. /*
  10.     IMGBOX.C  :  IMGBOX(イメージボックス)型部品・実現モジュール
  11.     
  12.     外部関数:
  13.         int MMI_initImageBox(void)
  14. */
  15.  
  16. #define    MODULE_IMGBOX
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include <winb.h>
  22. #include <te.h>
  23. #include <fntb.h>
  24. #include <gui.h>
  25. #include "art.h"
  26.  
  27. int        MJ_IMGBOX = -1;
  28.  
  29. /*    表示処理    */
  30.  
  31.     static int ML_IMGBOXdisp(kobj, messId, argc)
  32.     int        kobj ;
  33.     int        messId ;
  34.     int        argc ;
  35.     {
  36.         register IMGBOX *plbl ;  IMGBOX lbl ;
  37.         lbl = *(plbl = ((IMGBOX *)(TL_getObjectPtr(kobj)->data))) ;
  38.         if (lbl.func == (int(*)())NULL)
  39.             return NOERR;
  40.       /* 部品の位置を得る */
  41.         MG_CorrectPositionL40(&(lbl.fr), (HYPER *)plbl) ;
  42.       /* 最描画する必要があるか? */
  43.         if (MMI_CheckUpdateFrame(&(lbl.fr)))
  44.         {
  45.             POINT new,old;
  46.             MG_mosDisp(2) ;
  47.             new.x = new.y = 0;
  48.             MG_PushOrigin(&new, &old);
  49.             (*lbl.func)(kobj, MM_SHOW, 0);
  50.             MG_PopOrigin(&old);
  51.             MG_mosDisp(3) ;
  52.         }
  53.       /* おわり */
  54.         return NOERR ;
  55.     }
  56.     
  57. /*    再描画関数の登録 */
  58.     
  59.     static int ML_IMGBOXsetexec(kobj, messId, argc, func)
  60.     int        kobj ;
  61.     int        messId ;
  62.     int        argc ;
  63.     int        (*func)();
  64.     {
  65.         IMGBOX *plbl ;
  66.         plbl = (IMGBOX *) ( TL_getObjectPtr(kobj) -> data ) ;
  67.         plbl->func = func ;
  68.         return NOERR ;
  69.     }
  70.  
  71. /* メッセージに対する関数の対応 */
  72.  
  73.     #define    NMET_IMGBOX    2
  74.     
  75.     static int (*MF_IMGBOXmethod[NMET_IMGBOX])() = {
  76.         ML_IMGBOXdisp,
  77.         ML_IMGBOXsetexec
  78.     } ;
  79.     
  80.     static char *MM_IMGBOXmessage[NMET_IMGBOX] = {
  81.         MT_SHOW,
  82.         MT_SETEXEC
  83.     };
  84.  
  85. /* 初期化関数 */
  86.  
  87.     int MMI_initImageBox(void)
  88.     {
  89.         MJ_IMGBOX = MMI_AddType(MJ_HYPER, NMET_IMGBOX,
  90.                                 sizeof(IMGBOX),
  91.                                 MF_IMGBOXmethod,
  92.                                 MM_IMGBOXmessage) ;
  93.         if (MJ_IMGBOX < NOERR)
  94.             return MJ_IMGBOX ;
  95.         return NOERR ;
  96.     }
  97.  
  98. /* 部品のひな型を作る関数 */
  99.  
  100.     #define ALIGN    4
  101.     #define OFFSET(type) \
  102.             (sizeof(MMIPACKET) + (sizeof(type)+ALIGN-1)/ALIGN*ALIGN)
  103.  
  104.     int IMGBOX_makePrototype(int *objId)
  105.     {
  106.         static int tempId;
  107.         static MMIINIT initDataIMGBOX = { "MmiInit",   1, 0 } ;
  108.         static MMIPACKET d001 = { &tempId, NULL, &MJ_IMGBOX,
  109.                                   OFFSET(IMGBOX), MS_NONE };
  110.         static IMGBOX    d001d = {    MS_DSPONLYL40, 0,0,47,47, 0,0,0,
  111.                                     MS_NONEL40, (int(*)())NULL };
  112.         int ret;
  113.         if ((ret = MMI_Init(&initDataIMGBOX)) < NOERR)
  114.             return ret ;
  115.         *objId = tempId;
  116.         return NOERR;
  117.     }
  118.