| /* Copyright (C) 2000 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| #include <X11/Xlib.h> |
| |
| #include <gcj/cni.h> |
| #include <gnu/gcj/RawData.h> |
| |
| #include <gnu/gcj/xlib/XException.h> |
| #include <gnu/gcj/xlib/Display.h> |
| #include <gnu/gcj/xlib/Drawable.h> |
| #include <gnu/gcj/xlib/XImage.h> |
| |
| #include <java/awt/Rectangle.h> |
| |
| jboolean gnu::gcj::xlib::Drawable::copyIntoXImageImpl(XImage* image, |
| jint x, jint y, |
| jint width, jint height, |
| jint destX, jint destY) |
| { |
| ::Display* dpy = (::Display*) (getDisplay()->display); |
| ::XImage* ximage = (::XImage*) image->structure; |
| int format = image->getFormat(); |
| int xid = getXID(); |
| |
| ::XImage* result = XGetSubImage(dpy, xid, |
| x, y, width, height, |
| ~0, // plane mask |
| format, |
| ximage, |
| destX, destY); |
| if (result == 0) |
| return false; |
| |
| if (result != ximage) |
| throw new XException(MSG_XGETSUBIMAGE_FAILED); |
| |
| return true; |
| } |
| |
| jint gnu::gcj::xlib::Drawable::getDepth () |
| { |
| ::Display* dpy = (::Display*) (getDisplay ()->display); |
| ::Window root; |
| int x, y; |
| unsigned int w, h, bw, depth; |
| |
| Status status = XGetGeometry (dpy, getXID(), &root, |
| &x, &y, &w, &h, |
| &bw, &depth); |
| switch (status) |
| { |
| case BadDrawable: |
| throw new XException (display, status); |
| default: |
| ; // All OK, NOP. |
| } |
| return (jint)depth; |
| } |
| |
| java::awt::Rectangle* |
| gnu::gcj::xlib::Drawable::getBounds(java::awt::Rectangle* rv) |
| { |
| ::Display* dpy = (::Display*) (getDisplay()->display); |
| |
| ::Window root; |
| int x, y; |
| unsigned int w, h, bw, depth; |
| |
| Status status = XGetGeometry(dpy, getXID(), &root, |
| &x, &y, &w, &h, |
| &bw, &depth); |
| |
| switch (status) |
| { |
| case BadDrawable: |
| throw new XException(display, status); |
| default: |
| ; // All OK, NOP. |
| } |
| |
| if (rv == 0) |
| { |
| rv = new java::awt::Rectangle(x, y, w, h); |
| } |
| else |
| { |
| rv->x = x; |
| rv->y = y; |
| rv->width = w; |
| rv->height = h; |
| } |
| return rv; |
| } |