scx/c/xlib/pixmap.c

97 lines
3.0 KiB
C

/* Copyright 2001-2003 by Norbert Freudemann, David Frese */
#include "xlib.h"
s48_value scx_Create_Pixmap(s48_value display, s48_value drawable, s48_value w,
s48_value h, s48_value depth) {
Pixmap pm = XCreatePixmap(scx_extract_display(display),
scx_extract_drawable(drawable),
(int)s48_extract_integer(w),
(int)s48_extract_integer(h),
(int)s48_extract_integer(depth));
return scx_enter_pixmap(pm);
}
s48_value scx_Free_Pixmap(s48_value display, s48_value pixmap) {
XFreePixmap(scx_extract_display(display), scx_extract_pixmap(pixmap));
return S48_UNSPECIFIC;
}
s48_value scx_Read_Bitmap_File(s48_value display, s48_value drawable,
s48_value filename) {
unsigned width, height;
int res, xhot, yhot;
Pixmap bitmap;
s48_value ret = S48_FALSE;
S48_DECLARE_GC_PROTECT(1);
res = XReadBitmapFile(scx_extract_display(display),
scx_extract_drawable(drawable),
s48_extract_string(filename), &width, &height, &bitmap,
&xhot, &yhot);
if (res != BitmapSuccess)
return s48_enter_integer(res);
S48_GC_PROTECT_1(ret);
ret = s48_cons(s48_enter_integer(yhot), S48_NULL);
ret = s48_cons(s48_enter_integer(xhot), ret);
ret = s48_cons(s48_enter_integer(height), ret);
ret = s48_cons(s48_enter_integer(width), ret);
ret = s48_cons(scx_enter_pixmap(bitmap), ret);
S48_GC_UNPROTECT();
return ret;
}
s48_value scx_Write_Bitmap_File(s48_value display, s48_value filename,
s48_value bitmap, s48_value w, s48_value h,
s48_value x, s48_value y) {
int ret;
ret = XWriteBitmapFile(scx_extract_display(display),
s48_extract_string(filename),
scx_extract_pixmap(bitmap),
(int)s48_extract_integer(w),
(int)s48_extract_integer(h),
(int)s48_extract_integer(x),
(int)s48_extract_integer(y));
return s48_enter_integer(ret);
}
s48_value scx_Create_Bitmap_From_Data(s48_value display, s48_value drawable,
s48_value data, s48_value w,
s48_value h) {
Pixmap pm = XCreateBitmapFromData(scx_extract_display(display),
scx_extract_drawable(drawable),
s48_extract_string(data),
s48_extract_integer(w),
s48_extract_integer(h));
return scx_enter_pixmap(pm);
}
s48_value scx_Create_Pixmap_From_Bitmap_Data(s48_value display,
s48_value drawable,
s48_value data,
s48_value w,s48_value h,
s48_value f, s48_value b,
s48_value depth) {
Pixmap pm = XCreatePixmapFromBitmapData(scx_extract_display(display),
scx_extract_drawable(drawable),
s48_extract_string(data),
(int)s48_extract_integer(w),
(int)s48_extract_integer(h),
scx_extract_pixel(f),
scx_extract_pixel(b),
(int)s48_extract_integer(depth));
return scx_enter_pixmap(pm);
}
void scx_init_pixmap(void) {
S48_EXPORT_FUNCTION(scx_Free_Pixmap);
S48_EXPORT_FUNCTION(scx_Create_Pixmap);
S48_EXPORT_FUNCTION(scx_Read_Bitmap_File);
S48_EXPORT_FUNCTION(scx_Write_Bitmap_File);
S48_EXPORT_FUNCTION(scx_Create_Bitmap_From_Data);
S48_EXPORT_FUNCTION(scx_Create_Pixmap_From_Bitmap_Data);
}