* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
-#include "gtkorientable.h"
+#include "gtkorientableprivate.h"
#include "gtkprivate.h"
+#include "gtktypebuiltins.h"
#include "gtkintl.h"
-#include "gtkalias.h"
-static void gtk_orientable_base_init (GtkOrientableIface *iface);
+/**
+ * SECTION:gtkorientable
+ * @Short_description: An interface for flippable widgets
+ * @Title: GtkOrientable
+ *
+ * The #GtkOrientable interface is implemented by all widgets that can be
+ * oriented horizontally or vertically. Historically, such widgets have been
+ * realized as subclasses of a common base class (e.g #GtkBox/#GtkHBox/#GtkVBox
+ * or #GtkScale/#GtkHScale/#GtkVScale). #GtkOrientable is more flexible in that
+ * it allows the orientation to be changed at runtime, allowing the widgets
+ * to 'flip'.
+ *
+ * #GtkOrientable was introduced in GTK+ 2.16.
+ */
-GType
-gtk_orientable_get_type (void)
-{
- static GType orientable_type = 0;
-
- if (! orientable_type)
- {
- const GTypeInfo orientable_info =
- {
- sizeof (GtkOrientableIface),
- (GBaseInitFunc) gtk_orientable_base_init,
- (GBaseFinalizeFunc) NULL,
- };
-
- orientable_type = g_type_register_static (G_TYPE_INTERFACE,
- I_("GtkOrientable"),
- &orientable_info, 0);
- }
-
- return orientable_type;
-}
+typedef GtkOrientableIface GtkOrientableInterface;
+G_DEFINE_INTERFACE (GtkOrientable, gtk_orientable, G_TYPE_OBJECT)
static void
-gtk_orientable_base_init (GtkOrientableIface *iface)
+gtk_orientable_default_init (GtkOrientableInterface *iface)
{
- static gboolean initialized = FALSE;
-
- if (initialized)
- return;
-
/**
* GtkOrientable:orientation:
*
GTK_TYPE_ORIENTATION,
GTK_ORIENTATION_HORIZONTAL,
GTK_PARAM_READWRITE));
-
- initialized = TRUE;
}
/**
g_object_set (orientable,
"orientation", orientation,
NULL);
+
+ if (GTK_IS_WIDGET (orientable))
+ _gtk_orientable_set_style_classes (orientable);
}
/**
return orientation;
}
-#define __GTK_ORIENTABLE_C__
-#include "gtkaliasdef.c"
+void
+_gtk_orientable_set_style_classes (GtkOrientable *orientable)
+{
+ GtkStyleContext *context;
+ GtkOrientation orientation;
+
+ g_return_if_fail (GTK_IS_ORIENTABLE (orientable));
+ g_return_if_fail (GTK_IS_WIDGET (orientable));
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (orientable));
+ orientation = gtk_orientable_get_orientation (orientable);
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+ }
+ else
+ {
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+ }
+}