Установка платформы gtk #gtk# platform setup

Использование GTK+ в других языках программирования

Вы можете использовать инструментарий GTK+ во множестве языков программирования. Чтобы воспользоваться им, вам понадобятся привязки. Привязки (bindings) — это специальные пакеты для определенного языка, которые представляют API GTK+ в форме, понятной этому языку.

Например, я переписал код нашего приложения HelloWorld на языки Python и C#. Чтобы запустить GTK+ c этими языками, в дополнение к системам программирования Python и Mono/.NET вам соответственно понадобятся привязки PyGTK и Gtk# (см. ).

Hello World и PyGTK

В листинге 6 показан код приложения Hello World, переписанный на язык Python.

Листинг 6. Приложение Hello World в PyGTK
import pygtk
pygtk.require('2.0')
import gtk
import random

greetings = 
def choose_greeting (greets):
    return greets

def cb_clicked(button, label):
    label.set_text(choose_greeting(greetings))

window = gtk.Window ()
vbox = gtk.VBox ()
button = gtk.Button("Hello World")
label = gtk.Label (choose_greeting (greetings))

window.add(vbox)
vbox.add(label)
vbox.pack_start(button, False, False)

window.connect("delete-event", lambda a,b: gtk.main_quit())
button.connect("clicked", cb_clicked, label)

window.show_all()
gtk.main()

Благодаря краткости Python, эта версия программы получилась немного короче, чем ее двойник на С. Несмотря на это, выглядит она похоже. Хотя код приложения был переписан с использованием выражений Python, интерфейс программирования (API) остался тот же самый.

Hello World и Gtk#

Код приложения Hello World с использованием привязки Gtk# занимает чуточку больше места, чем его версия на языке С, это связано с тем, что синтаксис выражений в языке С# достаточно длинный. Поэтому, я не поместил здесь полный исходный код, если нужно, его можно посмотреть в архиве. Здесь кратко рассмотрены несколько моментов при переносе приложения из языка C в C#:

  class GtkHello : Gtk.Window
  {

Вместо создания нового окна и описания его параметров, вы создаете подкласс класса и помещаете весь код описания параметров в его конструктор. Этот подход не является характерной чертой Gtk#, он часто используется в С-программах, если нужно создать более одной копии окна. В любом случае, создавать подклассы в C# так просто, что имеет смысл объявить новый класс, даже для одного нового окна, тем более, что структура программ на C# требует от вас объявить хотя бы один класс.

  this.DeleteEvent += new DeleteEventHandler(DeleteCB);
  button.Clicked += new EventHandler(ButtonClickCB);

Как можно видеть, сигналы GTK+ переведены в родную для C# концепцию событий. Имена немного изменены, чтобы лучше следовать соглашениям именования принятым в C#.

Листинг 7. Сигналы GTK+, переведенные в родную для C# концепцию событий
  private void DeleteCB (object o, DeleteEventArgs args)
  {
    Application.Quit ();
    args.RetVal = true;
  }

Из-за особенностей модели событий C# прототип для обработчика немного отличается. Вместо того, чтобы через функцию обратного вызова возвратить значение , нужно передать его через аргументы . Пара функций и заменены соответственно вызовами методов и .

Темы

В GTK+ 2, тема по умолчанию Raleigh, но Arch Linux имеет пользовательский файл настроек , который устанавливает тему по умолчанию Adwaita. В GTK+ 3, тема по умолчанию Adwaita, но также включены темыHighContrast и Raleigh.

Чтобы установить определенную тему, вы можете задать переменные среды.

Для GTK+ 2, используйте переменную среду GTK2_RC_FILES например:

$ GTK2_RC_FILES=/usr/share/themes/Industrial/gtk-2.0/gtkrc gimp
запустит GIMP с Industrial theme.

Для GTK+ 3, используйте переменную среду GTK_THEME например:

$ GTK_THEME=Adwaita:dark gnome-calculator
Будет запущен GNOME Калькулятор с тёмным вариантом темы Adwaita.

Другие темы могут быть установлены из официальных репозиториев или из AUR.

С поддержкой обеих GTK+ 2 и GTK+ 3:

Breeze — GTK+ версия тем виджетов KDE’s по умолчанию.

Deepin — Тема по умолчанию для рабочего стола Deepin.

GNOME Standard Themes — Тема по умолчанию для Рабочего стола GNOME. Включает: Adwaita, HighContrast

MATE Themes — Тема по умолчанию для Рабочего стола MATE. Включает: BlackMATE, BlueMenta, Blue-Submarine, ContrastHigh, ContrastHighInverse, GreenLaguna, Green-Submarine, Menta, TraditionalGreen, TraditionalOk, TraditionalOkTest

MATE Themes Extras — Коллекция GTK2/3 тем для Рабочего стола MATE. Включает: DeLorean-Dark, DeLorean, GnomishBeige

Numix — Плоская и легкая тема с современным видом (GNOME, Openbox, Unity, Xfce).

Arc — Плоская тема с современным дизайном и прозрачными элементами.

Ceti-2 — Тема для GTK 3, GTK 2 и Gnome-Shell.

Clearlooks-Phénix — GTK3 тема визуально близкая к Clearlooks.

Gnome-breeze — Тема GTK создана в соответствии с новой Plasma 5 Breeze.

Greybird — Серая и синяя тема Xfce, используемая по умолчанию в Xubuntu 12.04.

Orion — Современная, светлая тема GTK.

Vertex — Тема для GTK 3, GTK 2, Gnome-Shell и Cinnamon.

Zukitwo — Темы для GTK, gnome-shell и др.

Поддерживается только GTK+ 2:

GTK+ Engines — Движок тем для GTK+ 2. Включает: Clearlooks, Crux, Industrial, Mist, Redmond, ThinIce

Xfce Gtk+ Engine — Xfce Gtk+-2.0 движок и темы

Oxygen-Gtk — Порт стандартных тем KDE виджетов (Oxygen) в GTK2

Aurora Gtk Engine — Последний участник семейства Clearlooks.

Openbox Themes — Различные темы для Оконного менеджера Openbox.

QtCurve — Настраиваемый набор стилей виджетов для KDE и Gtk.

Примечание:

  • Так как GTK+ 3 быстро меняется, GTK+ 3 темы требуют переработки после выпуска GTK+ 3. По этой причине, не все темы GTK+ 3, могут выглядеть как предполагалось при использовании последней GTK + 3 версии.
  • Некоторые темы могут потребовать для правильного отображения, но не все указывают его в качестве зависимости. Попробуйте установить его, если выбранная тема выглядит сломанной.
  • Некоторые темы не могут использоваться для отображения панели «как есть» (

GTK+ и Qt

Если у вас есть GTK+ и Qt (KDE) приложения на рабочем столе, то вы знаете, что их внешность не сочетается/не совпадает.Если вы хотите, чтобы ваши стили GTK+ соответствовали вашим стилям Qt прочитайте Единый внешний вид приложений Qt и GTK.

Подборки

Армейские ПесниКлассика пианиноМузыка из рекламыДетские песни из мультфильмовМузыка для аэробикиСборник песен 70х годовДля любимого человекаКлассика в современной обработкеКлубные миксы русских исполнителей3D ЗвукДальнобойщикиЗарубежный рэп для машиныТоповые Клубные ТрекиМощные БасыДискотека 2000Песни про папуХристианские ПесниЗимняя МузыкаМузыка Для МедитацииРусские Хиты 90ХГрустная МузыкаRomantic SaxophoneТанцевальный хип-хопНовогодние песниЗарубежные хиты 80 — 90Песни про покемонаРомантическая МузыкаМотивация для тренировокМузыка для сексаМузыка в машинуДля силовых тренировокПремия «Grammy 2017»

Саундтреки

Из фильма В центре вниманияИз фильма Ван ХельсингИз сериала Дневники ВампираИз фильма Скауты против зомбииз фильмов ‘Миссия невыполнима’Из фильма Голодные игры: Сойка-пересмешница. Часть 2OST ‘Свет в океане’OST «Большой и добрый великан»из фильма ‘Новогодний корпоратив’из фильма ‘Список Шиндлера’ OST ‘Перевозчик’Из фильма Книга джунглейиз сериала ‘Метод’Из фильма ТелохранительИз сериала Изменыиз фильма Мистериум. Тьма в бутылкеиз фильма ‘Пассажиры’из фильма ТишинаИз сериала Кухня. 6 сезониз фильма ‘Расплата’ Из фильма Человек-муравейиз фильма ПриглашениеИз фильма Бегущий в лабиринте 2из фильма ‘Молот’из фильма ‘Инкарнация’Из фильма Савва. Сердце воинаИз сериала Легко ли быть молодымиз сериала ‘Ольга’Из сериала Хроники ШаннарыИз фильма Самый лучший деньИз фильма Соседи. На тропе войныМузыка из сериала «Остров»Из фильма ЙоганутыеИз фильма ПреступникИз сериала СверхестественноеИз сериала Сладкая жизньИз фильма Голограмма для короляИз фильма Первый мститель: ПротивостояниеИз фильма КостиИз фильма Любовь не по размеруOST ‘Глубоководный горизонт’Из фильма Перепискаиз фильма ‘Призрачная красота’Место встречи изменить нельзяOST «Гений»из фильма ‘Красотка’Из фильма Алиса в ЗазеркальеИз фильма 1+1 (Неприкасаемые)Из фильма До встречи с тобойиз фильма ‘Скрытые фигуры’из фильма Призывиз сериала ‘Мир Дикого Запада’из игр серии ‘Bioshock’ Музыка из аниме «Темный дворецкий»из фильма ‘Американская пастораль’Из фильма Тарзан. ЛегендаИз фильма Красавица и чудовище ‘Искусственный интеллект. Доступ неограничен»Люди в черном 3’из фильма ‘Планетариум’Из фильма ПрогулкаИз сериала ЧужестранкаИз сериала Элементарноиз сериала ‘Обратная сторона Луны’Из фильма ВаркрафтИз фильма Громче, чем бомбыиз мультфильма ‘Зверопой’Из фильма БруклинИз фильма Игра на понижениеИз фильма Зачарованнаяиз фильма РазрушениеOST «Полный расколбас»OST «Свободный штат Джонса»OST И гаснет светИз сериала СолдатыИз сериала Крыша мираИз фильма Неоновый демонИз фильма Москва никогда не спитИз фильма Джейн берет ружьеИз фильма Стражи галактикииз фильма ‘Sos, дед мороз или все сбудется’OST ‘Дом странных детей Мисс Перегрин’Из игры Contact WarsИз Фильма АмелиИз фильма Иллюзия обмана 2OST Ледниковый период 5: Столкновение неизбежноИз фильма Из тьмыИз фильма Колония Дигнидадиз фильма ‘Страна чудес’Музыка из сериала ‘Цвет черёмухи’Из фильма Образцовый самец 2из фильмов про Гарри Поттера Из фильма Дивергент, глава 3: За стеной из мультфильма ‘Монстр в Париже’из мультфильма ‘Аисты’Из фильма КоробкаИз фильма СомнияИз сериала Ходячие мертвецыИз фильма ВыборИз сериала Королек — птичка певчаяДень независимости 2: ВозрождениеИз сериала Великолепный векиз фильма ‘Полтора шпиона’из фильма Светская жизньИз сериала Острые козырьки

Broadway — рендеринг интерфейса GTK3 в браузере (HTML5)

Иногда необходимо предоставить доступ к приложениям которые не всегда есть возможность установить локально, да и не всегда это нужно. Наверное, лучшим выходом тут был бы web интерфейс на JS/PHP и иже с ними. Но возможно есть другие, более простые в некоторых случаях пути? Особенно если приложение должно оставаться портативным, а ещё лучше не делать почти ничего дополнительно в коде для реализации такого функционала.
Такую возможность предоставляет Broadway — уже давно не новый, но остающийся в тени backend для GTK3, позволяющий привнести новые возможности туда, где казалось бы уже все давно протоптано.

Goals

This python script helps you build a full GTK+ library stack for Windows using Visual Studio.

The powershell script was originally developed by the HexChat developers, make sure to check their page for more information about the original script.

HexChat developers decided that their script should focus on their specific needs, this fork tries to be a bit more generic, in particular it pursues the following goals

  1. Build GTK+ 3 — we want to focus on the current version of GTK
  2. Support multiple version of Visual Studio — at the moment we are focusing on VS 2017, but we include projects for other versions and we gladly accept patches
  3. We are pretty liberal about adding more libraries to the script — at some point we will need to make the set of libraries that are built configurable and easily extensible, but right now we are ok with adding libraries that are useful to the users of this script
  4. We try to fetch tarballs from their original locations — if patches are needed we try to fork the project on github and host a patched tarball there
  5. We check sha256 hashes of the downloaded files: if error arise check that the download is not been interrupted: a partial file is likely to miss the hash check. Delete the file and try again.
  6. The download is done using the ssl certificate (handled by the system), in case of error the download is tried again without the certificate.
  7. We try to download also the tools needed and using them from a local directory, without any installation. Actually we use directly, among others, cmake, meson, ninja, nuget and perl.

GObject: основы

Из песочницы

GObject — часть библиотеки GLib, реализующая объекто-ориентированнные расширения для чистого Си. Подобная концепция, помимо самой GLib, используется в таких проектах, как GStreamer, GSettings, ATK, Pango и весь проект GNOME в целом, а также в большом количестве прикладных приложений: GIMP, Inkscape, Geany, Gedit и многих других. Большое количество языков программирования, начиная от таких мейнстримовых, как Python и Java, и заканчивая изысками вроде Haskell или D, имеют привязки к GLib/GTK+, а для значительного количества языков биндинги к GTK+ вообще является единственным способом построения GUI.
В отличие от других схожих проектов, GObject отличают архитектурные особенности, целью которых является лёгкая и прозрачная реализация привязок библиотек, написанных с применением чистого Си и GObject, к другим языкам программирования, в том числе с динамической типизацией и управлением памятью при помощи сборщика мусора. Именно этим объясняется некоторое ощущение переусложнённости, которое может возникнуть у программиста, приступившего к знакомству с GObject API. Тем не менее, эта система очень продуманная и логичная, так что проблем с пониманием всего изложенного ниже у программиста, знакомого с C++ или Java, возникнуть не должно.
Данная статья иллюстрирует самые основы работы с объектной системой типов GLib.

Завершение кода приложения

После подготовки пользовательского интерфейса необходимо реализовать бизнес-логику приложения путем регистрации callback-функций для обработки событий, возникающих в виджетах.

Среда MonoDevelop позволяет назначить одному событию несколько callback-функций, которые будут вызываться последовательно. Технически, с точки зрения языка C#, в этом нет ничего особенного, однако раньше даже дизайнер форм в Microsoft Visual Studio не имел такой возможности.

Согласно требованиям, для линейных уравнений имеют смысл только коэффициенты A и B, поэтому необходимо обеспечить, чтобы при выборе линейных уравнений, пользователь не мог ввести коэффициент C. Для этого при возникновении события Toggled (включен) в виджетах radiobutton1 и radiobutton2 должна вызываться функция typeToggled. Для обоих виджетов можно использовать одну и ту же функцию, так как бизнес-логика в обоих случаях примерно одинаковая. При этом в качестве входного параметра в функцию typeToggled передается объект, в котором возникло событие, так что не составит труда узнать, какой переключатель был активирован.

Листинг 2. Сallback-функция для обработки события Toggled
protected virtual void typeToggled (object sender, System.EventArgs e)
{
  if((sender as RadioButton) == radiobutton1)
  {
    if(radiobutton1.Active == true)
      entry4.Sensitive = false;
  }
  if((sender as RadioButton) == radiobutton2)
  {
    if(radiobutton2.Active == true)
      entry4.Sensitive = true;
  }
}

При запуске программы по умолчанию активируется переключатель “линейное уравнение”, соответственно поле для ввода коэффициента C также должно быть отключено. Для этого при создании пользовательского интерфейса для поля entry4 (поле для ввода коэффициента С) свойство Sensitive необходимо установить в false.

Также необходимо обработать следующие события: нажатия кнопок “Рассчитать” и “Выход”, путем регистрации callback-функции для события Clicked, возникающего при нажатии на кнопку. В листинге 3 показан обработчик события Clicked для кнопки “Выход”:

Листинг 3. Callback-функция для выхода из программы
protected virtual void exitClicked (object sender, System.EventArgs e)
{
  Application.Quit();
}

Callback-функция для обработки события Clicked от кнопки “Рассчитать” содержит большое количество кода, так как выполняет поиск корней уравнения. Поэтому ее можно найти в исходном коде проекта, приложенного к статье.

What about GTK 3?

In the GTK 3 branch we have a simpler pipeline that runs the following jobs:

  • a full Meson debug build on Linux and Windows/MSYS2, for both static and shared libraries artifacts, on the current stable versions of Fedora and Debian
  • a full Meson release build on Linux, which also generates the API reference
  • an Autotools build on Linux and Windows/MSYS2
  • an optional Autotools distcheck build on Linux

The Autotools jobs will be in place for as long as GTK 3 supports Autotools. Ideally, we want to add other jobs for macOS and Windows/MSVC, taking advantage of the Meson build.

Once the GTK 4 CI pipeline reaches a certain level of features and stability, we’re going to backport it to GTK 3, so we can be even more confident that the current stable branch does not regress.

For more information, you can check the GTK repository:

Выбор библиотеки (биндинга) для GUI

Приложение должно было быть кроссплатформенным.
Поэтому должно компилироваться под Windows, GNU/Linux и macOS.
Выбор пал на такие библиотеки:

  • gotk3 (GTK+ 3)
  • therecipe/qt (Qt)
  • zserge/webview (нативный вебвью)

Electron и прочие фреймворки, которые тянут с собой Chromium и node.js, я откинул так как они весят достаточно много, ещё и съедают много ресурсов операционной системы.

Теперь немного о каждой библиотеке.

gotk3

Биндинг библиотеки GTK+ 3. Покрытие далеко не всех возможностей, но всё основное присутсвует.

Компилируется приложение с помощью стандартного . Кроссплатформенная компиляция возможна, за исключением macOS. Только с macOS можно скомпилировать под эту ОС, ну и с macOS можно будет скомпилировать и под Windows + GNU/Linux.

Интерфейс будет выглядить нативно для GNU/Linux, Windows (нужно будет указать специальную тему). Для macOS будет выглядеть не нативно. Выкрутиться можно только разве что страшненькой темой, которая будет эмулирувать нативные элементы macOS.

therecipe/qt

Биндинг библиотеки Qt 5. Поддержка QML, стандартных виджетов. Вообще этот биндинг многие советуют.

Компилируется с помощью специальной команды . Кроме десктопных платформ есть также и мобильные. Кросскомпиляция происходит с помощью . Под операционные системы Apple можно скомпилировать только с .

При желании на Qt можно добиться чтобы интерфейс выглядел нативно на десктопных ОС.

zserge/webview

Библиотека, которая написана изначально на C, автор прикрутил её ко многим языкам, в том числе и к Go. Использывается нативный для отображения: Windows — MSHTML, GNU/Linux — gtk-webkit2, macOS — Cocoa/WebKit. Кроме кода на Go нужно будет и на JS пописать, ну и HTML пригодится.

Компилируется при помощи , кросскомпиляция возможна с помощью xgo.

Выглядеть нативно может настолько насколько позволит стандартный браузер.

Выбор

Почему же я выбрал именно gotk3?

В therecipe/qt мне не понравилась слишком сложная система сборки приложения, даже специальную команду сделали.

zserge/webview вроде бы не плох, весить будет не много, но всё-таки это webview и могут быть стандартные проблемы, которые бывают в таких приложениях: может что-то где-то поехать. И это не Electron, где всегда в комплекте продвинутый Chromium, а в какой-нибудь старой Windows может всё поехать. Да и к тому же придётся ещё и на JS писать.

gotk3 я выбрал как что-то среднее. Можно собирать стандартным , выглядит приемлемо, да и вообще я GTK+ 3 люблю!

В общем я думал, что всё будет просто. И что зря про Go говорят, что в нём проблема с GUI. Но как же я ошибался…

Критика

Наиболее частой критикой GTK является отсутствие обратной совместимости в основных обновлениях, особенно в интерфейсе прикладного программирования (API) и тематике.

Бенджамин Отте объяснил перерывы в совместимости между второстепенными выпусками в ходе цикла разработки GTK 3.x из-за сильного давления на инновации, таких как предоставление функций, которых ожидают современные пользователи, и поддержка все более влиятельного протокола сервера отображения Wayland . С выпуском GTK 4 давление необходимости инноваций исчезнет, ​​и баланс между стабильностью и инновациями изменится в сторону стабильности. Точно так же недавние изменения в тематике специально предназначены для улучшения и стабилизации этой части API, а это означает, что некоторые вложения сейчас должны быть вознаграждены позже.

  • Дирк Хондел, разработчик кода Subsurface и член Центра технологий открытого исходного кода Intel , раскритиковал разработчиков GTK за резкость и игнорирование большинства запросов сообщества.
  • Хонг Джен Йи (Hong Jen Yee), разработчик LXDE (GTK-версия которого была удалена и все усилия были сосредоточены на порте Qt , выразил презрение к версии 3 радикальных изменений API инструментария GTK и увеличению использования памяти, и перенес PCMan File Manager (PCManFM) на Qt . PCManFM разрабатывается одновременно с GTK и с бэкэндом Qt.
  • Audacious музыкальный проигрыватель переехал в Qt в версии 3.6. Причины, указанные разработчиками для этого, включают переход к оформлению окон на стороне клиента, который, по их утверждениям, заставляет приложение выглядеть « GNOME -y и неуместно».
  • Wireshark перешел на Qt из-за отсутствия хорошего опыта кроссплатформенной поддержки GTK.

Signal Details¶

(window)
Signal Name:
Flags: ,
Parameters: window () – The object which received the signal

The signal is a

which gets emitted when the user activates the default widget
of window.

(window)
Signal Name:
Flags: ,
Parameters: window () – The object which received the signal

The signal is a

which gets emitted when the user activates the currently
focused widget of window.

(window, toggle)
Signal Name:
Flags:

,

Parameters:
  • window () – The object which received the signal
  • toggle () – toggle the debugger
Returns:

if the key binding was handled

Return type:

The signal is a
which gets emitted when the user enables or disables interactive
debugging. When toggle is , interactive debugging is toggled
on or off, when it is , the debugger will be pointed at the
widget under the pointer.

The default bindings for this signal are Ctrl-Shift-I
and Ctrl-Shift-D.

(window)
Signal Name:
Flags:
Parameters: window () – The object which received the signal

The signal gets emitted when the set of accelerators
or mnemonics that are associated with window changes.

Архитектура

Основная статья: Список языковых привязок GTK+

GTK+ написана на языке Си, но тем не менее, является объектно-ориентированной. Одной из причин для выбора Си в качестве языка было желание легко строить интерфейсы для других языков программирования.
В результате под GTK+ можно писать на следующих языках программирования:

Язык Название Поддержка
Ada GtkAda Частичная поддержка до 2.18
C GTK+ Встроена
C++ gtkmm Да
C# и другие языки программирования платформы .NET Gtk# Частичная поддержка до 2.20
D gtkD Поддержка GTK2 была gtkD-1.7.4, после — GTK3 (плюс Cairo, Gda, Gl, GStreamer)
Erlang gtkNode Частичная поддержка до 2.16
Fortran gtk-fortran Частичная поддержка до 2.24 / 3.0
Go go-gtk Частичная поддержка (33%)
GOB языки, написанные для системы GObject. Да
Genie языки, написанные для системы GObject. Да
Haskell gtk2hs Да
FreeBASIC GTK+tobac2 Частичная поддержка до 2.22
Free Pascal (header) integrated into the core distribution GTK 2.16 с частичной поддержкой поздних версий
Java java-gnome Частичная поддержка до 2.20 (недоступна на Windows)
JavaScript seed/GJS Да
Lua lgob Поддерживает все версии, начиная с 2.16
Lisp
Lua LuaGtk Частичная поддержка до 2.16
Node.js node-gtk Да
OCaml LablGTK Частичная поддержка до 2.16
Perl perl-Gtk3 Да
PHP PHP-GTK Частичная поддержка до 2.20
PureBasic Gtk2 Да
Python GObject-интроспекция через PyGI, ранее PyGTK Да
R RGtk2 Частичная поддержка до 2.12
Ruby ruby-gtk2 Да
Smalltalk Smalltalk GTK GNU Smalltalk, Smalltalk YX, Squeak
Tcl Gnocl Да
Vala языки, написанные для системы GObject. Да

Собственно GTK+ состоит из двух компонентов: GTK и GDK. Первый содержит набор элементов пользовательского интерфейса, или «виджетов» (таких, как кнопка, список, поле для ввода текста и т. п.) для различных задач. GDK отвечает за вывод на экран и может использовать для этого X Window System, Linux Framebuffer, WinAPI или функции Mac OS X. Начиная с версии 2.8, GDK во многом (но не полностью) заменена на систему отрисовки векторной графики Cairo.

Помимо Cairo, GTK+ зависит от трёх библиотек — GLib, Pango и ATK, — которые разрабатываются вместе с GTK+, но могут использоваться и отдельно.

Интеграция HTML движка в нативное Windows приложение – выбор и архитектура

Как мы перевели работу с HTML в 1С:Предприятии с Internet Explorer на WebKit
Возможность отображать HTML в формах 1С появилась в платформе 1С:Предприятие в 2003 г. версии 8.0. Для работы с HTML в платформе использовался движок браузера Internet Explorer (1С:Предприятие на тот момент работало только под Windows). Движок браузера использовался платформой для утилитарных целей. Например, писать с нуля полноценный элемент для редактирования текста а-ля Word – с возможностью различных цветовых и шрифтовых решений, вставки картинок и т.д. – весьма непростая задача. А если задействовать для этих целей HTML и использовать в качестве средства отображения движок интернет-браузера, то задача сильно упрощается. Также при помощи движка был реализован ряд других механизмов (например, отображение справочной информации) и элементов (например, Планировщик).
Ну а возможность для разработчиков прикладных решений отображать с помощью HTML нестандартный, по меркам мира учетных систем, дизайн позволяла иногда привносить разнообразные приятные изюминки в интерфейс бизнес-приложений.
Время шло, платформа стала поддерживать сначала Linux, а потом и macOS. Для работы с HTML в этих ОС Internet Explorer не подходил по понятным причинам; в Linux нами был задействован WebKitGTK+, а в macOs — библиотека на основе Cocoa. Таким образом, единство кодовой базы для разных ОС (которое мы стараемся поддерживать для клиентского кода на уровне 95%) в этой области было нарушено. Ну и движок IE к этому времени стал источником ряда проблем.

Заключение

В этой, последней статье цикла «Основы GTK+» вы познакомились со многими аспектами создания успешного программного продукта. Вы увидели, как GTK+ поддерживается на разных платформах, как лучше распространить ваше приложение среди пользователей. Узнали пути, которыми вы можете изменить GTK+, чтобы он лучше соответствовал вашим нуждам. В заключение, вы получили краткую справку о будущей версии платформы и информацию о том, где начать ваше большое путешествие с GTK+.

Я надеюсь, что мы скоро встретимся с вами на одном из списков рассылки, или возможно даже в чате. До скорых встреч!

Похожие темы

  • Посетите домашнюю страницу проекта GTK+ GTK.org;
  • Откройте для себя autopackage– систему установки пакетов для многих дистрибутивов Linux;
  • Загрузите Gimp.app, пример пакета программы GTK+ для Mac OS X;
  • Портал SourceForge предоставляет хостинг многим проектам приложений и библиотек GTK+;
  • Посетите репозиторий различных проектов freshmeat, в нем есть и проекты GTK+ ;
  • Посмотрите на систему регистрации ошибок в GNOME и GTK+ GNOME Bugzilla;
  • Ознакомьтесь с проектом freedesktop;
  • Проект Ridley посвящен выводу GTK+ на новый уровень;
  • Посетите сайт developerWorks Opensource, чтобы получить больше информации о методах, средствах и изменениях в проектах для разработки с использованием открытых технологий и их использования с продуктами IBM.
  • Используйте инновации в Вашем следующем открытом проекте с помощью IBM trial software, доступного для загрузки и на DVD.

Вывод картинки

Теперь выведем эту же иконку в виде картинки в окне.

#include <gtk/gtk.h>
#include <cairo.h>
#include <math.h>

void on_draw_event (GtkWidget *widget, cairo_t *cr, gpointer data)
{
cairo_surface_t *image;

image = cairo_image_surface_create_from_png(«home.png»);
cairo_set_source_surface(cr, image, 80, 80);
cairo_paint(cr);
}

int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *darea;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (window), «Домик»);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 300);

//Вывод иконки
gtk_window_set_icon_from_file (GTK_WINDOW(window), «home.png», NULL);

// Вывод картинки
darea = gtk_drawing_area_new();
gtk_container_add(GTK_CONTAINER(window), darea);

g_signal_connect(G_OBJECT(darea), «draw», G_CALLBACK(on_draw_event), NULL);
g_signal_connect(G_OBJECT(window), «destroy», G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);
gtk_main ();

return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#include <gtk/gtk.h>
#include <cairo.h>
#include <math.h>
 

voidon_draw_event(GtkWidget*widget,cairo_t*cr,gpointer data)

{

cairo_surface_t*image;

image=cairo_image_surface_create_from_png(«home.png»);

cairo_set_source_surface(cr,image,80,80);

cairo_paint(cr);

}
 

intmain(intargc,char*argv)

{

GtkWidget*window;

GtkWidget*darea;

gtk_init(&argc,&argv);

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window),»Домик»);

gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);

gtk_window_set_default_size(GTK_WINDOW(window),300,300);

//Вывод иконки

gtk_window_set_icon_from_file(GTK_WINDOW(window),»home.png»,NULL);

// Вывод картинки

darea=gtk_drawing_area_new();

gtk_container_add(GTK_CONTAINER(window),darea);

g_signal_connect(G_OBJECT(darea),»draw»,G_CALLBACK(on_draw_event),NULL);

g_signal_connect(G_OBJECT(window),»destroy»,G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_show_all(window);

gtk_main();

return;

}

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий