diff options
Diffstat (limited to 'src/libgamma/Site.java')
-rw-r--r-- | src/libgamma/Site.java | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/libgamma/Site.java b/src/libgamma/Site.java new file mode 100644 index 0000000..9555656 --- /dev/null +++ b/src/libgamma/Site.java @@ -0,0 +1,134 @@ +/** + * jlibgamma — Display server abstraction layer for gamma ramp and Java + * Copyright © 2014 Mattias Andrée (maandree@member.fsf.org) + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +package libgamma; + + +/** + * Site state. + * + * On operating systems that integrate a graphical environment + * there is usually just one site. However, one systems with + * pluggable graphics, like Unix-like systems such as GNU/Linux + * and the BSD:s, there can usually be any (feasible) number of + * sites. In X.org parlance they are called displays. + */ +public class Site +{ + /** + * Constructor. + * + * @param method The adjustmet method. + * @param site The site identifier. + */ + public Site(AdjustmentMethod method, String site) throws LibgammaException + { + this.method = method; + this.site = site; + long[] r = libgamma_site_create(method.value, site); + this.address = r[0]; + this.partitions_available = (int)(r[1]); + if (r[2] != 0) + throw new LibgammaException((int)(r[2])); + } + + + /** + * This field specifies, for the methods if this library, + * which adjustment method (display server and protocol) + * is used to adjust the gamma ramps. + */ + public final AdjustmentMethod method; + + /** + * The site identifier. It can either be {@code null} or + * a string. {@code null} indicates the default site. On + * systems like the Unix-like systems, where the graphics + * are pluggable, this is usually resolved by an environment + * variable, such as "DISPLAY" for X.org. + */ + public final String site; + + /** + * The number of partitions that is available on this site. + * Probably the majority of display server only one partition + * per site. However, X.org can, and traditional used to have + * on multi-headed environments, multiple partitions per site. + * In X.org partitions are called 'screens'. It is not to be + * confused with monitor. A screen is a collection of monitors, + * and the mapping from monitors to screens is a surjection. + * On hardware-level adjustment methods, such as Direct + * Rendering Manager, a partition is a graphics card. + */ + public final int partitions_available; + + /** + * The address of the native object. + */ + final long address; + + + /** + * Release resources. + */ + public void close() + { + libgamma_site_free(this.address); + } + + /** + * Restore the gamma ramps all CRTC:s within the site to the system settings. + */ + public void restore() throws LibgammaException + { + int r = libgamma_site_restore(this.address); + if (r != 0) + throw new LibgammaException(r); + } + + + + + /** + * Create a site state. + * + * @param method The adjustment method (display server and protocol.) + * @param site The site identifier. + * @return Element 0: The value for {@link #address}. + * Element 1: The value for {@link #partitions_available} + * Element 2: Error code, zero on success. + */ + private static native long[] libgamma_site_create(int method, String site); + + /** + * Release all resources held by a site state + * and free the site state pointer. + * + * @param address The site state. + */ + private static native void libgamma_site_free(long address); + + /** + * Restore the gamma ramps all CRTC:s within a site to the system settings. + * + * @param address The site state. + * @return Zero on success, and error code on failure. + */ + private static native int libgamma_site_restore(long address); + +} + |