diff options
Diffstat (limited to 'libgamma/Site.java')
-rw-r--r-- | libgamma/Site.java | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/libgamma/Site.java b/libgamma/Site.java new file mode 100644 index 0000000..6ce2ad4 --- /dev/null +++ b/libgamma/Site.java @@ -0,0 +1,133 @@ +/* See LICENSE file for copyright and license details. */ +package libgamma; + + +/** + * Site state + * <p> + * 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 +{ + /** + * Type initialiser + */ + static + { + Libgamma.initialise(); + } + + + /** + * 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); + } + + + /** + * {@inheritDoc} + */ + public String toString() + { + return "<Site: method = " + this.method.toString() + ", " + + "site = " + (this.site == null ? "(null)" : this.site) + ", " + + "partitions_available = " + Integer.toString(this.partitions_available) + ">"; + } + + /** + * 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}<br> + * Element 1: The value for {@link #partitions_available}<br> + * 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); +} |