home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / XAP / XFM / XFM-1.3 / XFM-1 / xfm-1.3 / xfm / FmBitmaps.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-03  |  6.6 KB  |  233 lines

  1. /*---------------------------------------------------------------------------
  2.   Module FmBitmaps
  3.  
  4.   (c) Simon Marlow 1990-92
  5.   (c) Albert Graef 1994
  6.   
  7.   Functions & data for handling the bitmaps and cursors.
  8. ---------------------------------------------------------------------------*/
  9.  
  10. #include <X11/Intrinsic.h>
  11. #include <X11/StringDefs.h>
  12. #include <X11/Xmu/Drawing.h>
  13.  
  14. #ifdef XPM
  15. #include <X11/xpm.h>
  16. #endif
  17.  
  18. #include "../bitmaps/xfm_file.xbm"
  19. #include "../bitmaps/xfm_filemsk.xbm"
  20. #include "../bitmaps/xfm_files.xbm"
  21. #include "../bitmaps/xfm_filesmsk.xbm"
  22. #include "../bitmaps/xfm_noentry.xbm"
  23. #include "../bitmaps/xfm_noentrymsk.xbm"
  24. #include "../bitmaps/xfm_dir.xbm"
  25. #include "../bitmaps/xfm_dirmsk.xbm"
  26. #include "../bitmaps/xfm_exec.xbm"
  27. #include "../bitmaps/xfm_execmsk.xbm"
  28. #include "../bitmaps/xfm_watch.xbm"
  29. #include "../bitmaps/xfm_watchmsk.xbm"
  30. #include "../bitmaps/xfm_lline.xbm"
  31. #include "../bitmaps/xfm_tline.xbm"
  32. #include "../bitmaps/xfm_fline.xbm"
  33. #include "../bitmaps/xfm_cline.xbm"
  34. #include "../bitmaps/xfm_larrow.xbm"
  35. #include "../bitmaps/xfm_rarrow.xbm"
  36. #include "../bitmaps/xfm_wavy_arrow.xbm"
  37. #include "../bitmaps/xfm_tick.xbm"
  38. #include "../bitmaps/xfm_notick.xbm"
  39. #include "../bitmaps/xfm_excl.xbm"
  40. #ifndef XPM
  41. #include "../bitmaps/xfm_symlnk.xbm"
  42. #include "../bitmaps/xfm_dirlnk.xbm"
  43. #include "../bitmaps/xfm_execlnk.xbm"
  44. #include "../bitmaps/xfm_blackhole.xbm"
  45. #include "../bitmaps/xfm_icon.xbm"
  46. #include "../bitmaps/xfm_appmgr.xbm"
  47. #else
  48. #include "../pixmaps/xfm_file.xpm"
  49. #include "../pixmaps/xfm_dir.xpm"
  50. #include "../pixmaps/xfm_updir.xpm"
  51. #include "../pixmaps/xfm_exec.xpm"
  52. #include "../pixmaps/xfm_files.xpm"
  53. #include "../pixmaps/xfm_symlnk.xpm"
  54. #include "../pixmaps/xfm_dirlnk.xpm"
  55. #include "../pixmaps/xfm_execlnk.xpm"
  56. #include "../pixmaps/xfm_blackhole.xpm"
  57. #include "../pixmaps/xfm_icon.xpm"
  58. #include "../pixmaps/xfm_appmgr.xpm"
  59. #endif
  60.  
  61. #include "Am.h"
  62. #include "Fm.h"
  63.  
  64. /*-----------------------------------------------------------------------------
  65.   STATIC DATA
  66. -----------------------------------------------------------------------------*/
  67.  
  68. typedef struct {
  69.   char *bits;
  70.   int width, height;
  71. } BitmapRec;
  72.  
  73. #ifdef __GNUC__
  74. #define ICON(x) { x##_bits, x##_width, x##_height }
  75. #else
  76. #define ICON(x) { x/**/_bits, x/**/_width, x/**/_height }
  77. #endif
  78.  
  79. static BitmapRec bitmaps[] = {
  80.   ICON(xfm_file), ICON(xfm_filemsk), ICON(xfm_files), ICON(xfm_filesmsk),
  81.   ICON(xfm_noentry), ICON(xfm_noentrymsk), ICON(xfm_dir), ICON(xfm_dirmsk),
  82.   ICON(xfm_exec), ICON(xfm_execmsk), ICON(xfm_watch), ICON(xfm_watchmsk),
  83.   ICON(xfm_lline), ICON(xfm_tline), ICON(xfm_fline), ICON(xfm_cline),
  84.   ICON(xfm_larrow), ICON(xfm_rarrow), ICON(xfm_wavy_arrow), ICON(xfm_tick),
  85.   ICON(xfm_notick), ICON(xfm_excl),
  86. #ifndef XPM
  87.   ICON(xfm_files), ICON(xfm_dir), ICON(xfm_dir), ICON(xfm_file),
  88.   ICON(xfm_exec), ICON(xfm_symlnk), ICON(xfm_dirlnk), ICON(xfm_execlnk),
  89.   ICON(xfm_blackhole),
  90. #endif
  91. };
  92.  
  93. #ifdef XPM
  94. static char **pixmaps[] = {
  95.   xfm_files_xpm, xfm_dir_xpm, xfm_updir_xpm, xfm_file_xpm,
  96.   xfm_exec_xpm, xfm_symlnk_xpm, xfm_dirlnk_xpm, xfm_execlnk_xpm,
  97.   xfm_blackhole_xpm,
  98. };
  99. #endif
  100.  
  101. typedef struct {
  102.   int source, mask;
  103. } CursorRec;
  104.  
  105. static CursorRec cursors[] = {
  106.   { FILE_CBM, FILEMSK_CBM },
  107.   { FILES_CBM, FILESMSK_CBM },
  108.   { NOENTRY_CBM, NOENTRYMSK_CBM },
  109.   { DIR_CBM, DIRMSK_CBM },
  110.   { EXEC_CBM, EXECMSK_CBM },
  111.   { WATCH_CBM, WATCHMSK_CBM }
  112. };
  113.  
  114. /*-----------------------------------------------------------------------------
  115.   PUBLIC DATA
  116. -----------------------------------------------------------------------------*/
  117.  
  118. Pixmap *bm;
  119. Cursor *curs;
  120.  
  121. /*-----------------------------------------------------------------------------
  122.   PUBLIC FUNCTIONS
  123. -----------------------------------------------------------------------------*/
  124.  
  125. void readBitmaps()
  126. {
  127.   int i;
  128.   Display *dpy;
  129.   int scrn;
  130.   Colormap cmp;
  131.   Window win;
  132.   XColor black, white;
  133. #ifdef XPM
  134.   XpmAttributes xpm_attr;
  135.   static XpmColorSymbol none_color = { NULL, "None", (Pixel)0 };
  136. #endif
  137.  
  138.   dpy = XtDisplay(aw.shell);
  139.   win = DefaultRootWindow(dpy);
  140.   scrn = DefaultScreen(dpy);
  141.   cmp = DefaultColormap(dpy, scrn);
  142.  
  143.   black.pixel = BlackPixel(dpy, scrn);
  144.   XQueryColor(dpy, cmp, &black);
  145.   white.pixel = WhitePixel(dpy, scrn);
  146.   XQueryColor(dpy, cmp, &white);
  147.  
  148.   bm = (Pixmap *) XtMalloc(END_BM * sizeof(Pixmap *));
  149.   curs = (Cursor *) XtMalloc(XtNumber(cursors) * sizeof(Cursor *));
  150.  
  151.   /* create the hardcoded bitmaps */
  152.  
  153.   for (i=0; i<XtNumber(bitmaps); i++)
  154.     bm[i] = XCreateBitmapFromData(dpy, win, bitmaps[i].bits,
  155.                   bitmaps[i].width, bitmaps[i].height);
  156. #ifdef XPM
  157.   xpm_attr.valuemask = XpmReturnPixels|XpmColorSymbols;
  158.   xpm_attr.colorsymbols = &none_color;
  159.   xpm_attr.numsymbols = 1;
  160.   XtVaGetValues(aw.shell, XtNbackground, &none_color.pixel, NULL);
  161.   for (i=XtNumber(bitmaps); i<ICON_BM; i++)
  162.     XpmCreatePixmapFromData(dpy, win, pixmaps[i-XtNumber(bitmaps)], &bm[i],
  163.                 NULL, &xpm_attr);
  164. #endif
  165.  
  166.   /* create the cursors */
  167.  
  168.   for (i=0; i<XtNumber(cursors); i++)
  169.     curs[i] = XCreatePixmapCursor(dpy, bm[cursors[i].source], 
  170.                   bm[cursors[i].mask], &black, &white, 16, 16);
  171.  
  172.   /* create the application icons */
  173.  
  174. #ifdef XPM
  175.   XpmCreatePixmapFromData(dpy, win, xfm_icon_xpm, &bm[ICON_BM],
  176.               &bm[ICONMSK_BM], NULL);
  177.   XpmCreatePixmapFromData(dpy, win, xfm_appmgr_xpm, &bm[APPMGR_BM],
  178.               &bm[APPMGRMSK_BM], NULL);
  179. #else
  180.   bm[ICON_BM] = XCreateBitmapFromData(dpy, win, xfm_icon_bits,
  181.                       xfm_icon_width, xfm_icon_height);
  182.   bm[ICONMSK_BM] = None;
  183.   bm[APPMGR_BM] = XCreateBitmapFromData(dpy, win, xfm_appmgr_bits,
  184.                       xfm_appmgr_width, xfm_appmgr_height);
  185.   bm[APPMGRMSK_BM] = None;
  186. #endif
  187. }
  188.  
  189. Pixmap readIcon(char *name)
  190. {
  191.   Display *dpy = XtDisplay(aw.shell);
  192.   Window win = DefaultRootWindow(dpy);
  193.   Screen *scrn = XtScreen(aw.shell);
  194.   Pixmap icon_bm;
  195.   char fullname[MAXPATHLEN];
  196.   unsigned int w, h;
  197.   int x, y;
  198.  
  199. #ifdef XPM
  200.  
  201.   XpmAttributes xpm_attr;
  202.   static XpmColorSymbol none_color = { NULL, "None", (Pixel)0 };
  203.  
  204.   /* first search for xpm icons: */
  205.  
  206.   xpm_attr.valuemask = XpmReturnPixels|XpmColorSymbols;
  207.   xpm_attr.colorsymbols = &none_color;
  208.   xpm_attr.numsymbols = 1;
  209.   XtVaGetValues(aw.shell, XtNbackground, &none_color.pixel, NULL);
  210.  
  211.   if (XpmReadFileToPixmap(dpy, win,
  212.               searchPath(fullname, resources.pixmap_path, name),
  213.               &icon_bm, NULL, &xpm_attr) == XpmSuccess)
  214.     return icon_bm;
  215. #endif
  216.  
  217.   /* now search bitmap in standard locations (*bitmapFilePath): */
  218.  
  219.   icon_bm = XmuLocateBitmapFile(scrn, name, NULL, 0, (int *)&w, (int *)&h,
  220.                  &x, &y);
  221.   if (icon_bm != None)
  222.     return icon_bm;
  223.  
  224.   /* finally search along *bitmapPath: */
  225.  
  226.   if (XReadBitmapFile(dpy, win,
  227.               searchPath(fullname, resources.bitmap_path, name),
  228.               &w, &h, &icon_bm, &x, &y) == BitmapSuccess)
  229.     return icon_bm;
  230.   return None;
  231. }
  232.  
  233.