aboutsummaryrefslogtreecommitdiffstats
path: root/src/libgamma/Partition.java
blob: 740bc11559fb43787ab5f7931db8e97f8ddee2b8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
 * 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;


/**
 * Partition state.
 * 
 * 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 class Partition
{
    /**
     * Type initialiser.
     */
    static
    {
	Libgamma.initialise();
    }
    
    
    
    /**
     * Constructor.
     * 
     * @param  site       The site this partition belongs to.
     * @param  partition  The index of the partition.
     */
    public Partition(Site site, int partition) throws LibgammaException
    {
	this.site = site;
	this.partition = partition;
	long[] r = libgamma_partition_create(site.address, partition);
	this.address = r[0];
	this.crtcs_available = (int)(r[1]);
	if (r[2] != 0)
	    throw new LibgammaException((int)(r[2]));
    }
    
    
    /**
     * The site this partition belongs to.
     */
    public final Site site;
    
    /**
     * The index of the partition.
     */
    public final int partition;
    
    /**
     * The number of CRTC:s that are available under this
     * partition. Note that the CRTC:s are not necessarily
     * online.
     */
    public final int crtcs_available;
    
    /**
     * The address of the native object.
     */
    final long address;
    
    
    /**
     * Release resources.
     */
    public void close()
    {
	libgamma_partition_free(this.address);
    }
    
    /**
     * Restore the gamma ramps all CRTC:s within the partition to the system settings.
     */
    public void restore() throws LibgammaException
    {
	int r = libgamma_partition_restore(this.address);
	if (r != 0)
	    throw new LibgammaException(r);
    }
    
    
    /**
     * {@inheritDoc}
     */
    public String toString()
    {
	return "<Partition: site = " + this.site.toString() + ", " +
	              "partition = " + Integer.toString(this.partition) + ", " +
	        "crtcs_available = " + Integer.toString(this.crtcs_available) + ">";
    }
    
    
    
    /**
     * Create a partition state.
     * 
     * @param   site       The site state for the site that the partition belongs to.
     * @param   partition  The index of the partition within the site.
     * @return             Element 0:  The value for {@link #address}.
     *                     Element 1:  The value for {@link #crtcs_available}
     *                     Element 2:  Error code, zero on success.
     */
    private static native long[] libgamma_partition_create(long site, int partition);
    
    /**
     * Release all resources held by a partition state
     * and free the partition state pointer.
     * 
     * @param  address  The partition state.
     */
    private static native void libgamma_partition_free(long address);
    
    /**
     * Restore the gamma ramps all CRTC:s within a partition to the system settings.
     * 
     * @param   address  The partition state.
     * @return           Zero on success, and error code on failure.
     */
    private static native int libgamma_partition_restore(long address);
    
}