/** * 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 . */ 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 "" : 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}. * 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); }