1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * gtkorientable.c
5 * Copyright (C) 2008 Imendio AB
6 * Contact: Michael Natterer <mitch@imendio.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include "config.h"
23
24 #include "gtkorientable.h"
25
26 #include "gtkprivate.h"
27 #include "gtkwidgetprivate.h"
28 #include "gtktypebuiltins.h"
29 #include "gtkintl.h"
30
31
32 /**
33 * GtkOrientable:
34 *
35 * The `GtkOrientable` interface is implemented by all widgets that can be
36 * oriented horizontally or vertically.
37 *
38 * `GtkOrientable` is more flexible in that it allows the orientation to be
39 * changed at runtime, allowing the widgets to “flip”.
40 */
41
42
43 typedef GtkOrientableIface GtkOrientableInterface;
G_DEFINE_INTERFACE(GtkOrientable,gtk_orientable,G_TYPE_OBJECT)44 G_DEFINE_INTERFACE (GtkOrientable, gtk_orientable, G_TYPE_OBJECT)
45
46 static void
47 gtk_orientable_default_init (GtkOrientableInterface *iface)
48 {
49 /**
50 * GtkOrientable:orientation: (attributes org.gtk.Property.get=gtk_orientable_get_orientation org.gtk.Property.set=gtk_orientable_set_orientation)
51 *
52 * The orientation of the orientable.
53 **/
54 g_object_interface_install_property (iface,
55 g_param_spec_enum ("orientation",
56 P_("Orientation"),
57 P_("The orientation of the orientable"),
58 GTK_TYPE_ORIENTATION,
59 GTK_ORIENTATION_HORIZONTAL,
60 GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
61 }
62
63 /**
64 * gtk_orientable_set_orientation: (attributes org.gtk.Method.set_property=orientation)
65 * @orientable: a `GtkOrientable`
66 * @orientation: the orientable’s new orientation
67 *
68 * Sets the orientation of the @orientable.
69 */
70 void
gtk_orientable_set_orientation(GtkOrientable * orientable,GtkOrientation orientation)71 gtk_orientable_set_orientation (GtkOrientable *orientable,
72 GtkOrientation orientation)
73 {
74 g_return_if_fail (GTK_IS_ORIENTABLE (orientable));
75
76 g_object_set (orientable,
77 "orientation", orientation,
78 NULL);
79
80 if (GTK_IS_WIDGET (orientable))
81 gtk_widget_update_orientation (GTK_WIDGET (orientable), orientation);
82 }
83
84 /**
85 * gtk_orientable_get_orientation: (attributes org.gtk.Method.get_property=orientation)
86 * @orientable: a `GtkOrientable`
87 *
88 * Retrieves the orientation of the @orientable.
89 *
90 * Returns: the orientation of the @orientable
91 */
92 GtkOrientation
gtk_orientable_get_orientation(GtkOrientable * orientable)93 gtk_orientable_get_orientation (GtkOrientable *orientable)
94 {
95 GtkOrientation orientation;
96
97 g_return_val_if_fail (GTK_IS_ORIENTABLE (orientable),
98 GTK_ORIENTATION_HORIZONTAL);
99
100 g_object_get (orientable,
101 "orientation", &orientation,
102 NULL);
103
104 return orientation;
105 }
106