1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gdk.Color;
26 
27 private import gdk.c.functions;
28 public  import gdk.c.types;
29 private import glib.MemorySlice;
30 private import glib.Str;
31 private import gobject.ObjectG;
32 public  import gtkc.gdktypes;
33 private import gtkd.Loader;
34 
35 
36 /**
37  * A #GdkColor is used to describe a color,
38  * similar to the XColor struct used in the X11 drawing API.
39  * 
40  * Deprecated: Use #GdkRGBA
41  */
42 public final class Color
43 {
44 	/** the main Gtk struct */
45 	protected GdkColor* gdkColor;
46 	protected bool ownedRef;
47 
48 	/** Get the main Gtk struct */
49 	public GdkColor* getColorStruct(bool transferOwnership = false)
50 	{
51 		if (transferOwnership)
52 			ownedRef = false;
53 		return gdkColor;
54 	}
55 
56 	/** the main Gtk struct as a void* */
57 	protected void* getStruct()
58 	{
59 		return cast(void*)gdkColor;
60 	}
61 
62 	/**
63 	 * Sets our main struct and passes it to the parent class.
64 	 */
65 	public this (GdkColor* gdkColor, bool ownedRef = false)
66 	{
67 		this.gdkColor = gdkColor;
68 		this.ownedRef = ownedRef;
69 	}
70 
71 	~this ()
72 	{
73 		if ( Linker.isLoaded(LIBRARY_GDK) && ownedRef )
74 			gdk_color_free(gdkColor);
75 	}
76 
77 	/**
78 	 * Creates a new Color
79 	 */
80 	this()
81 	{
82 		GdkColor color;
83 
84 		this(gdk_color_copy(&color));
85 	}
86 
87 	/** ditto */
88 	this(ubyte red, ubyte green, ubyte blue)
89 	{
90 		GdkColor color;
91 
92 		color.red = cast(ushort)(red * 257);
93 		color.green = cast(ushort)(green * 257);
94 		color.blue = cast(ushort)(blue * 257);
95 
96 		this(gdk_color_copy(&color));
97 	}
98 
99 	/** ditto */
100 	this(ushort red, ushort green, ushort blue)
101 	{
102 		GdkColor color;
103 
104 		color.red = red;
105 		color.green = green;
106 		color.blue = blue;
107 
108 		this(gdk_color_copy(&color));
109 	}
110 
111 	private void updatePixel()
112 	{
113 		gdkColor.pixel = (gdkColor.red&0xFF00 << 8) | (gdkColor.green&0xFF00) | (gdkColor.blue >> 8) ;
114 	}
115 
116 	/**
117 	 */
118 
119 	/**
120 	 * For allocated colors, the pixel value used to
121 	 * draw this color on the screen. Not used anymore.
122 	 */
123 	public @property uint pixel()
124 	{
125 		return gdkColor.pixel;
126 	}
127 
128 	/** Ditto */
129 	public @property void pixel(uint value)
130 	{
131 		gdkColor.pixel = value;
132 	}
133 
134 	/**
135 	 * The red component of the color. This is
136 	 * a value between 0 and 65535, with 65535 indicating
137 	 * full intensity
138 	 */
139 	public @property ushort red()
140 	{
141 		return gdkColor.red;
142 	}
143 
144 	/** Ditto */
145 	public @property void red(ushort value)
146 	{
147 		gdkColor.red = value;
148 	}
149 
150 	/**
151 	 * The green component of the color
152 	 */
153 	public @property ushort green()
154 	{
155 		return gdkColor.green;
156 	}
157 
158 	/** Ditto */
159 	public @property void green(ushort value)
160 	{
161 		gdkColor.green = value;
162 	}
163 
164 	/**
165 	 * The blue component of the color
166 	 */
167 	public @property ushort blue()
168 	{
169 		return gdkColor.blue;
170 	}
171 
172 	/** Ditto */
173 	public @property void blue(ushort value)
174 	{
175 		gdkColor.blue = value;
176 	}
177 
178 	/** */
179 	public static GType getType()
180 	{
181 		return gdk_color_get_type();
182 	}
183 
184 	/**
185 	 * Makes a copy of a #GdkColor.
186 	 *
187 	 * The result must be freed using gdk_color_free().
188 	 *
189 	 * Deprecated: Use #GdkRGBA
190 	 *
191 	 * Returns: a copy of @color
192 	 */
193 	public Color copy()
194 	{
195 		auto p = gdk_color_copy(gdkColor);
196 
197 		if(p is null)
198 		{
199 			return null;
200 		}
201 
202 		return ObjectG.getDObject!(Color)(cast(GdkColor*) p, true);
203 	}
204 
205 	/**
206 	 * Compares two colors.
207 	 *
208 	 * Deprecated: Use #GdkRGBA
209 	 *
210 	 * Params:
211 	 *     colorb = another #GdkColor
212 	 *
213 	 * Returns: %TRUE if the two colors compare equal
214 	 */
215 	public bool equal(Color colorb)
216 	{
217 		return gdk_color_equal(gdkColor, (colorb is null) ? null : colorb.getColorStruct()) != 0;
218 	}
219 
220 	/**
221 	 * Frees a #GdkColor created with gdk_color_copy().
222 	 *
223 	 * Deprecated: Use #GdkRGBA
224 	 */
225 	public void free()
226 	{
227 		gdk_color_free(gdkColor);
228 		ownedRef = false;
229 	}
230 
231 	/**
232 	 * A hash function suitable for using for a hash
233 	 * table that stores #GdkColors.
234 	 *
235 	 * Deprecated: Use #GdkRGBA
236 	 *
237 	 * Returns: The hash function applied to @color
238 	 */
239 	public uint hash()
240 	{
241 		return gdk_color_hash(gdkColor);
242 	}
243 
244 	/**
245 	 * Returns a textual specification of @color in the hexadecimal
246 	 * form “\#rrrrggggbbbb” where “r”, “g” and “b” are hex digits
247 	 * representing the red, green and blue components respectively.
248 	 *
249 	 * The returned string can be parsed by gdk_color_parse().
250 	 *
251 	 * Deprecated: Use #GdkRGBA
252 	 *
253 	 * Returns: a newly-allocated text string
254 	 *
255 	 * Since: 2.12
256 	 */
257 	public override string toString()
258 	{
259 		auto retStr = gdk_color_to_string(gdkColor);
260 
261 		scope(exit) Str.freeString(retStr);
262 		return Str.toString(retStr);
263 	}
264 
265 	/**
266 	 * Parses a textual specification of a color and fill in the
267 	 * @red, @green, and @blue fields of a #GdkColor.
268 	 *
269 	 * The string can either one of a large set of standard names
270 	 * (taken from the X11 `rgb.txt` file), or it can be a hexadecimal
271 	 * value in the form “\#rgb” “\#rrggbb”, “\#rrrgggbbb” or
272 	 * “\#rrrrggggbbbb” where “r”, “g” and “b” are hex digits of
273 	 * the red, green, and blue components of the color, respectively.
274 	 * (White in the four forms is “\#fff”, “\#ffffff”, “\#fffffffff”
275 	 * and “\#ffffffffffff”).
276 	 *
277 	 * Deprecated: Use #GdkRGBA
278 	 *
279 	 * Params:
280 	 *     spec = the string specifying the color
281 	 *     color = the #GdkColor to fill in
282 	 *
283 	 * Returns: %TRUE if the parsing succeeded
284 	 */
285 	public static bool parse(string spec, out Color color)
286 	{
287 		GdkColor* outcolor = sliceNew!GdkColor();
288 
289 		auto p = gdk_color_parse(Str.toStringz(spec), outcolor) != 0;
290 
291 		color = ObjectG.getDObject!(Color)(outcolor, true);
292 
293 		return p;
294 	}
295 }