Cambios en gtkmm 3

gtkmm-3.0 es una versión nueva de la API gtkmm que se instala en paralelo con la API gtkmm-2.4, más vieja. La última versión de la API gtkmm-2.4 fue gtkmm 2.24. gtkmm 3 no tiene diferencias fundamentales importantes con respecto a gtkmm 2, pero hace varios cambios pequeños que no fueron posibles mientras se mantenía la compatibilidad de los binarios. Si nunca ha usado la API gtkmm-2.4, entonces puede ignorar con seguridad este capítulo.

La biblioteca de gtkmm 3 se llama libgtkmm-3.0, en vez de libgtkmm-2.4 e instala sus archivos de cabecera en una carpeta versionada similarmente, por lo que su verificación pkg-config debería buscar gtkmm-3.0 en vez de gtkmm-2.4.

gtkmm 3 añadió algunas clases nuevas:

  1. Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog permiten al usuario seleccionar una aplicación instalada para abrir un determinado tipo de contenido.

  2. Gtk::Grid es un widget contenedor nuevo que eventualmente remplazará a Gtk::Box. Ordena a sus hijos de acuerdo a sus propiedades en lugar de sus propios detalles de disposición.

  3. Gtk::Switch muestra los estados Encendido/Apagado más explícitamente que Gtk::CheckBox. Puede ser útil, por ejemplo, al permitir a los usuarios activar hardware.

gtkmm 3 también hizo varios cambios pequeños a la API, que probablemente encontrará cuando porte código que usaba gtkmm-2.4. Aquí hay una lista corta:

  1. Gtk::CellLayout, usada por Gtk::IconView, Gtk::TreeView::Column y Gtk::ComboBox ahora tiene una Gtk::CellArea, que puede usarse para especificar más detalles acerca de cómo las CellRenderer se ordenan y alinean.

  2. Gtk::ComboBox ahora deriva de CellLayout, permitiendo una disposición y alineación más fácil de sus Gtk::CellRenderer.

  3. Gtk::Adjustment, IconSet y Gdk::Cursor se usan ahora a través de Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar y Gtk::Separator ahora derivan de Gtk::Orientable, permitiendo especificar su orientación (vertical u horizontal) sin requerir el uso de una clase derivada como Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView y otros widgets derivan de Scrollable en vez de tener sus propios métodos como get_vadjustment() y su propia señal set_scroll_adjustments.

  6. Gtk::Style y Gtk::Rc se quitaron y se reemplazaron por Gtk::StyleContext, y Gtk::StyleProvider, así como Gtk::CssProvider.

  7. Widget::on_expose_event() se reemplazó por Widget::on_draw(), que asume que cairomm se usa para dibujar, a través del Cairo::Context provisto y no requiere que llame a Cairo::Context::clip().

  8. Gdk::RGBA reemplaza a Color, añadiendo un componente alfa para la opacidad. Colormap se eliminó, junto con su molesto uso para asignar colores.

  9. Gdk::Pixmap y Gdk::Bitmap se eliminaron en favor de Gdk::Pixbuf.

  10. Gdk::Drawable se quitó, y sus métodos se movieron a Gdk::Window.

  11. Ahora se usa std::vector en muchos métodos en vez de los tipos intermedios *Handle para hacer a la API más clara.

Toda la API obsoleta se quitó en gtkmm 3.0, sin embargo, se marcarán más partes como obsoletas en versiones futuras.

Como un primer paso para portar su código fuente a gtkmm-3.0, probablemente deba asegurarse de que su aplicación se construye con la API obsoleta gtkmm-2.4 desactivada, definiendo una macro como GTK_DISABLE_DEPRECATED. Hay algunas macros de autotools que le pueden ayudar con esto mediante su definición opcional en tiempo de construcción. Consulte la página de la wiki de portar de gtkmm 3 para obtener más detalles.