/* See LICENSE file for copyright and license details. */ 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 { /** * 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 ""; } /** * 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); }