[comp.windows.x] Please show me some applications by "XPM" utility.

urushima@secom.co.jp (Kenji Urushima) (08/08/90)

Dear Xperts,

        Some XPM file utilities by GROUPE BULL was posted 
      in this news group before. 
      
      XPM Read/Write Package for XPM file format:
        - int    XWritePixmapFile(dpy, cmap, filename, pixmap, w, h);  
        - int    XReadPixmapFile(dpy, d, cmap, filename, w,h, depth,pixmap);
        - Pixmap XCreatePixmapFromData(dpy, d, cmap, w, h,
	                               depth, n, c, col, pix);


	So, I'm trying to make a application program which 
      shows XPM file on display, but this doesn't work.
      
      The source code is below.
      Something wrong with this program ?

      Would you show me any ideas you have, 
      or show me any XPM application program ?
      

			Thanks in advance,

				Kenji.

-----
Kenji Urushima				urushima@secom.co.jp		(Japan)
SECOM, 6-11-23 Shimorenjaku, Mitaka-si	urushima%secom.co.jp@uunet.uu.net (USA)
Tokyo 181 Japan. TEL +81-422-44-9912	urushima%secom.co.jp@mcvax.uucp(Europe)

--------------- cut here ------------ xshowpixmap.c -------------------------
/*
 * xshowpixmap - show pixmap file
 *
% cc xpm.c xshowpixmap.c -o xshowpixmap -lXaw -lXt -lX11
 *
 *   xpm.c - Read/Write Pixmap File Utility
 */
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>

void
main(argc, argv)
int argc;
char **argv;
{
  Widget toplevel, w;
  Arg args[10];

  Pixmap iconPixmap;
  unsigned int iconWidth, iconHeight;
  int iconXhot, iconYhot;

  toplevel = XtInitialize(NULL,  "Bitmap", NULL, 0, &argc,
			  argv);

  if( argc != 2) {
    fprintf(stderr, "Usage: %s  bitmap_file\n", argv[0]);
    exit(1);
  }

  XReadPixmapFile(XtDisplay(toplevel),
                  XtWindow(toplevel), 
		  DefaultColormap(XtDisplay(toplevel), XtWindow(toplevel)),
                  argv[1],
                  &iconWidth, &iconHeight,
		  (int)DefaultDepth(XtDisplay(toplevel), XtWindow(toplevel)),
                  &iconPixmap);
                 
  XtSetArg( args[0], XtNbackgroundPixmap, iconPixmap );
  XtSetArg( args[1], XtNwidth, iconWidth );
  XtSetArg( args[2], XtNheight, iconHeight );

  w = XtCreateManagedWidget(argv[0], widgetClass, toplevel, args, 
	3);

  XtRealizeWidget(toplevel);

  XtMainLoop();
}

daniel@osf.org (Daniel Dardailler) (08/09/90)

>      Something wrong with this program ?
First you are trying to access the window of toplevel before it is
realized.
Second you are using a window instead of a screen in your call
to XReadPixmapFile.

Hope this helps.

        Daniel Dardailler          |          OSF/Motif Team  
     Open Software Foundation      |      Email : daniel@osf.org           
       11 Cambridge Center         |      Phone : (617) 621 8840    
       CAMBRIDGE, MA 02142         |      Fax   : (617) 621 0584

rune.johansen%odin.re.nta.uninett@NAC.NO (Rune Henning Johansen) (08/09/90)

 > From: urushima@secom.co.jp (Kenji Urushima)
 > Newsgroups: comp.windows.x

 >         So, I'm trying to make a application program which
 >    shows XPM file on display, but this doesn't work.
 >
 >    Something wrong with this program ?

Try the version below!

 - Rune.

--------------- cut here ------------ xshowpixmap.c -------------------------
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include "xpm.h"

void
main(argc, argv)
int argc;
char **argv;
{
  Widget toplevel, w;
  Arg args[10];
  Display *display;
  Window root;
  int screen;

  Pixmap iconPixmap;
  unsigned int iconWidth, iconHeight;

  toplevel = XtInitialize(NULL,  "Bitmap", NULL, 0, &argc, argv);

  if( argc != 2) {
    (void)fprintf(stderr, "Usage: %s  bitmap_file\n", argv[0]);
    exit(1);
  }

  display = XtDisplay(toplevel);
  screen = DefaultScreen(display);
  root = RootWindow(display, screen);
  if (XReadPixmapFile(display,root,
                      XDefaultColormap(display,screen),
                      argv[1],
                      &iconWidth, &iconHeight,
                      XDefaultDepth(display,screen),
                      &iconPixmap))
  {
    (void)fprintf(stderr, "%s:  unable to read Pixmap... [ %s ]\n",
                    argv[0], argv[1]);
    exit(1);
  }


  XtSetArg( args[0], XtNbackgroundPixmap, iconPixmap );
  XtSetArg( args[1], XtNwidth, iconWidth );
  XtSetArg( args[2], XtNheight, iconHeight );

  (void)XtCreateManagedWidget(argv[0], widgetClass, toplevel, args, 3);

  XtRealizeWidget(toplevel);

  XtMainLoop();
}