Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Программирование с использованием gtkmm 3. Изменения в gtkmm 3

Оригинал: Programming with gtkmm 3
Автор(ы): Murray Cumming, Bernhard Rieder, Jonathon Jongsma, Ole Laursen, Marko Anastasov, Daniel Elstner, Chris Vine, David King, Pedro Ferreira, Kjell Ahlstedt
Перевод: А.Панин

4. Изменения в gtkmm 3

gtkmm-3.0 является новой версией API gtkmm, которая может быть установлена параллельно с более старой версией API gtkmm-2.4. Последней версией API gtkmm-2.4 была версия gtkmm 2.24. В gtkmm версии 3 не содержится фундаментальных отличий от gtkmm версии 2, но присутствует несколько небольших изменений, которые было бы невозможно реализовать с сохранением бинарной совместимости. В том случае, если вы никогда не использовали API gtkmm-2.4, вы можете смело проигнорировать оставшуюся часть данной главы.

Библиотека с реализацией gtkmm 3 носит имя libgtkmm-3.0 вместо libgtkmm-2.4 и ее заголовочные файлы располагаются в директории с соответствующим номером версии, поэтому при работе с инструментом pkg-config должно использоваться название программного компонента gtkmm-3.0 вместо gtkmm-2.4.

В gtkmm 3 были добавлены некоторые новые классы:
  1. Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog позволяют пользователю выбрать установленное приложение для открытия файла с данными определенного типа.
  2. Gtk::Grid представляет новый контейнерный виджет, который в конечном счете заменит виджет Gtk::Box. Данный контейнерный виджет выравнивает дочерние виджеты в соответствии с параметрами этих виджетов, а не в соответствии с собственными параметрами размещения.
  3. Виджет, представленный классом Gtk::Switch, позволяет демонстрировать состояние включено/выключено более четко, чем виджет, представленный классом, Gtk::CheckBox. Он может быть полезен, к примеру, в том случае, когда у пользователей есть возможность активации какого-либо аппаратного обеспечения.
Также в рамках gtkmm 3 были внесены небольшие изменения в API, с которыми вы, скорее всего, столкнулись в ходе портирования кода, использующего gtkmm-2.4. Ниже приведен краткий список этих изменений:
  1. Класс Gtk::CellLayout, используемый классами Gtk::IconView, Gtk::TreeView::Column и Gtk::ComboBox теперь имеет подкласс Gtk::CellArea, который может использоваться для более точной установки параметров размещения и выравнивания виджетов, осуществляющих прорисовку ячеек (представленных классом Gtk::CellRenderers).
  2. Класс Gtk::ComboBox теперь наследуется от класса Gtk::CellLayout, что позволяет проще осуществлять размещение и выравнивание виджетов, осуществляющих прорисовку элементов меню (также представленных классом Gtk::CellRenderer).
  3. Экземпляры классов Gtk::Adjustment, Gtk::IconSet и Gtk::Cursor теперь используются посредством указателя Glib::RefPtr.
  4. Классы Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::Scrollbar и Gtk::Separator теперь наследуются от класса Gtk::Orientable, что позволяет указывать ориентацию соответствующих виджетов (вертикальную или горизонтальную) без необходимости использования такого дочернего класса, как Gtk::HBox.
  5. Классы виджетов Gtk::IconView, Gtk::TextView, Gtk::TreeView, а также другие классы виджетов теперь наследуются от класса Gtk:Scrollable вместо предоставления таких собственных методов, как get_adjustment() и собственного сигнала set_scroll_adjustments.
  6. Классы Gtk::Style и Gtk::Rc были удалены и заменены на классы Gtk::StyleContext, а также такие дочерние классы класса Gtk::StyleProvider, как Gtk::CssProvider.
  7. Событие Widget::on_expose_event() было заменено на событие Widget::on_draw(), которое предусматривает работу с программным компонентом cairomm для рисования путем использования предоставляемого контекста Cairo::Context без необходимости вызова метода Cairo::Context::clip().
  8. Класс Gdk::RGBA заменил класс Gdk::Color, причем был добавлен альфа-компонент для указания степени прозрачности. Класс Gdk::Colormap был удален вместе с неудачным механизмом резервирования цветов.
  9. Классы Gdk::Pixmap и Gdk::Bitmap были удалены; на их замену пришел класс Gdk::Pixbuf.
  10. Класс Gdk::Drawable был удален; его методы были перемещены в класс Gdk::Window.
  11. В настоящий момент в нескольких методах используется класс std::vector вместо промежуточных классов *Handle для реализации более прозрачного API.

Все API, помеченные как устаревшие, были удалены из gtkmm 3.0, причем в будущем список устаревших классов также будет расширяться.

На первом шаге процесса портирования вашего исходного кода для работы с gtkmm-3.0 вам, вероятнее всего, следует убедиться в том, что ваше приложение собирается с отключенной поддержкой устаревших API в gtkmm-2.4 путем использования такого макроса, как GTK_DISABLE_DEPRECATED. Существуют некоторые специфичные макросы системы autotools, которые могут помочь в этом случае, причем достаточно лишь установить их при необходимости в процессе сборки приложения. Обратитесь к странице wiki о портировании приложений для работы с gtkmm 3 для получения более подробной информации.


Следующий раздел : 5. Виджеты кнопок.