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