📄 natwindow.cc
字号:
/* Copyright (C) 2000 Free Software Foundation This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License. Please consult the file "LIBGCJ_LICENSE" fordetails. */// Needed to avoid linking in libstdc++#ifndef __STL_USE_EXCEPTIONS# include <java/lang/OutOfMemoryError.h># define __THROW_BAD_ALLOC throw new java::lang::OutOfMemoryError()#endif#include <vector>#include <X11/Xlib.h>#include <gcj/cni.h>#include <java/awt/Rectangle.h>#include <gnu/gcj/xlib/Display.h>#include <gnu/gcj/xlib/Window.h>#include <gnu/gcj/xlib/WindowAttributes.h>#include <gnu/gcj/xlib/Visual.h>#include <gnu/gcj/xlib/XException.h>jint gnu::gcj::xlib::Window::createChildXID(java::awt::Rectangle* bounds, jint borderWidth, WindowAttributes* attributes, jint windowIOClass, Visual* visual){ ::Window parentXID = xid; int x = bounds->x; int y = bounds->y; int width = bounds->width; int height = bounds->height; long mask = attributes->mask; XSetWindowAttributes* attr = (XSetWindowAttributes*) attributes->getXSetWindowAttributesStructure(); ::Visual* vis = CopyFromParent; int depth = CopyFromParent; if (visual != 0) { vis = (::Visual*) visual->getVisualStructure(); depth = visual->getDepth(); } ::Window childXID = XCreateWindow((::Display*) (display->display), parentXID, x, y, width, height, borderWidth, depth, windowIOClass, vis, mask, attr); // no fast fail return childXID;}void gnu::gcj::xlib::Window::destroy(){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; XDestroyWindow(dpy, window); // no fast fail}void gnu::gcj::xlib::Window::setAttributes(WindowAttributes* attributes){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; ::XSetWindowAttributes* attr = (::XSetWindowAttributes*) attributes->getXSetWindowAttributesStructure(); XChangeWindowAttributes(dpy, window, attributes->mask, attr); // no fast fail}void gnu::gcj::xlib::Window::toBack(){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; XLowerWindow(dpy, window);}void gnu::gcj::xlib::Window::toFront(){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; XRaiseWindow(dpy, window);}void gnu::gcj::xlib::Window::map(){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; XMapWindow(dpy, window); // no fast fail}void gnu::gcj::xlib::Window::unmap(){ ::Display* dpy = (::Display*) (display->display); ::Window window = xid; XUnmapWindow(dpy, window); // no fast fail}void gnu::gcj::xlib::Window::setProperty(jint nameAtom, jint typeAtom, jbyteArray data){ ::Display* dpy = (::Display*) (display->display); int format = 8; int mode = PropModeReplace; unsigned char* pData = (unsigned char*) elements(data); int len = data->length; XChangeProperty(dpy, xid, nameAtom, typeAtom, format, mode, pData, len); // no fast fail}void gnu::gcj::xlib::Window::setWMProtocols(jintArray atoms){ ::Display* dpy = (::Display*) (display->display); size_t length = atoms->length; jint* atomsBegin = elements(atoms); jint* atomsEnd = atomsBegin + length; // Avoid confusion between Xlib.h and Atom.java "Atom" types. typedef ::Atom XLibAtom; std::vector<XLibAtom> atomVector(atomsBegin, atomsEnd); XLibAtom* atomsArray = &(atomVector.front()); XSetWMProtocols(dpy, xid, atomsArray, length); // no fail fast}jintArray gnu::gcj::xlib::Window::getWMProtocols(){ ::Display* dpy = (::Display*) (display->display); ::Atom* protocolsReturn; int countReturn; Status success = XGetWMProtocols(dpy, xid, &protocolsReturn, &countReturn); if (!success) throw new XException(JvNewStringLatin1("cannot get " "WM protocols ")); jintArray atoms; try { ::Atom* protocolsBegin = protocolsReturn; ::Atom* protocolsEnd = protocolsBegin + countReturn; atoms = JvNewIntArray(countReturn); jint* atomsBegin = elements(atoms); std::copy(protocolsBegin, protocolsEnd, atomsBegin); } catch (...) { XFree(protocolsReturn); throw; } XFree(protocolsReturn); return atoms;}void gnu::gcj::xlib::Window::setBounds(jint x, jint y, jint width, jint height){ ::Display* dpy = (::Display*) (display->display); XMoveResizeWindow(dpy, xid, x, y, width, height); // no fast fail}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -