home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tkisrc04.zip / tk / os2 / ximage.c < prev    next >
C/C++ Source or Header  |  1998-08-07  |  3KB  |  116 lines

  1. /* 
  2.  * ximage.c --
  3.  *
  4.  *    X bitmap and image routines.
  5.  *
  6.  * Copyright (c) 1995 Sun Microsystems, Inc.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * SCCS: @(#) ximage.c 1.5 96/02/15 18:55:44
  12.  */
  13.  
  14. #include "tkInt.h"
  15.  
  16.  
  17. /*
  18.  *----------------------------------------------------------------------
  19.  *
  20.  * XCreateBitmapFromData --
  21.  *
  22.  *    Construct a single plane pixmap from bitmap data.
  23.  *
  24.  * Results:
  25.  *    Returns a new Pixmap.
  26.  *
  27.  * Side effects:
  28.  *    Allocates a new bitmap and drawable.
  29.  *
  30.  *----------------------------------------------------------------------
  31.  */
  32.  
  33. Pixmap
  34. XCreateBitmapFromData(display, d, data, width, height)
  35.     Display* display;
  36.     Drawable d;
  37.     _Xconst char* data;
  38.     unsigned int width;
  39.     unsigned int height;
  40. {
  41.     XImage ximage;
  42.     GC gc;
  43.     Pixmap pix;
  44.  
  45.     pix = XCreatePixmap(display, d, width, height, 1);
  46.     gc = XCreateGC(display, pix, 0, NULL);
  47.     if (gc == NULL) {
  48.     return None;
  49.     }
  50.     ximage.height = height;
  51.     ximage.width = width;
  52.     ximage.depth = 1;
  53.     ximage.bits_per_pixel = 1;
  54.     ximage.xoffset = 0;
  55.     ximage.format = XYBitmap;
  56.     ximage.data = (char *)data;
  57.     ximage.byte_order = LSBFirst;
  58.     ximage.bitmap_unit = 8;
  59.     ximage.bitmap_bit_order = LSBFirst;
  60.     ximage.bitmap_pad = 8;
  61.     ximage.bytes_per_line = (width+7)/8;
  62.  
  63.     TkPutImage(NULL, 0, display, pix, gc, &ximage, 0, 0, 0, 0, width, height);
  64.     XFreeGC(display, gc);
  65.     return pix;
  66. }
  67.  
  68. /*
  69.  *----------------------------------------------------------------------
  70.  *
  71.  * XReadBitmapFile --
  72.  *
  73.  *    Loads a bitmap image in X bitmap format into the specified
  74.  *    drawable.
  75.  *
  76.  * Results:
  77.  *    Sets the size, hotspot, and bitmap on success.
  78.  *
  79.  * Side effects:
  80.  *    Creates a new bitmap from the file data.
  81.  *
  82.  *----------------------------------------------------------------------
  83.  */
  84.  
  85. int
  86. XReadBitmapFile(display, d, filename, width_return, height_return,
  87.     bitmap_return, x_hot_return, y_hot_return) 
  88.     Display* display;
  89.     Drawable d;
  90.     _Xconst char* filename;
  91.     unsigned int* width_return;
  92.     unsigned int* height_return;
  93.     Pixmap* bitmap_return;
  94.     int* x_hot_return;
  95.     int* y_hot_return;
  96. {
  97.     Tcl_Interp *dummy;
  98.     char *data;
  99.  
  100.     dummy = Tcl_CreateInterp();
  101.  
  102.     data = TkGetBitmapData(dummy, NULL, (char *) filename,
  103.         (int *) width_return, (int *) height_return, x_hot_return,
  104.         y_hot_return);
  105.     if (data == NULL) {
  106.     return BitmapFileInvalid;
  107.     }
  108.  
  109.     *bitmap_return = XCreateBitmapFromData(display, d, data, *width_return,
  110.         *height_return);
  111.  
  112.     Tcl_DeleteInterp(dummy);
  113.     ckfree(data);
  114.     return BitmapSuccess;
  115. }
  116.