/* Copyright (C) 1998-2002 The gtkmm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 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
 * 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, see <https://www.gnu.org/licenses/>.
 */

#include <gtkmm/widget.h>
#include <gskmm/transform.h>

_DEFS(gtkmm,gtk)
_PINCLUDE(gtkmm/private/widget_p.h)

namespace Gtk
{

/** A container which allows you to position widgets at fixed coordinates.
 *
 * The Gtk::Fixed widget is a container which can place child widgets at fixed positions and with fixed sizes, given in pixels. It performs no automatic layout management.
 * For most applications, you should not use this container, because it will result in truncated text, overlapping widgets, and other display bugs:
 * - Themes may change widget sizes.
 * - Fonts other than the one you used to write the app will of course change the size of widgets containing text; keep in mind that users may use a larger font because of difficulty reading the default, or they may be using Windows or the framebuffer port of GTK+, where different fonts are available.
 * - Translation of text into other languages changes its size. Also, display of non-English text will use a different font in many cases.
 * In addition, the fixed widget can't properly be mirrored in right-to-left languages such as Hebrew and Arabic. i.e. normally GTK+ will flip the interface to put labels to the right of the thing they label, but it can't do that with Gtk::Fixed. So your application will not be usable in right-to-left languages.
 * Finally, fixed positioning makes it kind of annoying to add/remove GUI elements, since you have to reposition all the other elements. This is a long-term maintenance problem for your application.
 * If you know none of these things are an issue for your application, and prefer the simplicity of Gtk::Fixed, by all means use the widget. But you should be aware of the tradeoffs.
 *
 * @ingroup Widgets
 * @ingroup Containers
 */
class GTKMM_API Fixed : public Widget
{
  _CLASS_GTKOBJECT(Fixed, GtkFixed, GTK_FIXED, Gtk::Widget, GtkWidget, , , GTKMM_API)
public:
  _CTOR_DEFAULT

  _WRAP_METHOD(void put(Widget& widget, double x, double y), gtk_fixed_put)
  _WRAP_METHOD(void remove(Widget& widget), gtk_fixed_remove)
  _WRAP_METHOD(void move(Widget& widget, double x, double y), gtk_fixed_move)
  _WRAP_METHOD(void get_child_position(Widget& widget, double& x, double& y) const,
    gtk_fixed_get_child_position)
  // A Gsk::Transform is immutable. There's no significant difference between
  // a Gsk::Transform and a const Gsk::Transform.
  _WRAP_METHOD(void set_child_transform(Widget& widget, const Glib::RefPtr<const Gsk::Transform>& transform),
    gtk_fixed_set_child_transform, newin "4,20")
  _WRAP_METHOD(Glib::RefPtr<Gsk::Transform> get_child_transform(Widget& widget) const,
    gtk_fixed_get_child_transform, refreturn, newin "4,20")
};

} //namespace Gtk
