<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>www.gnome.org.ru - Разработка/МежплатформенныйGTK</title>
<link>http://gnome.org.ru/wacko/Разработка/МежплатформенныйGTK</link>
<description>Изменения страницы http://gnome.org.ru/wacko/Разработка/МежплатформенныйGTK</description>
<language>en-us</language>
<item>
<title>2008-02-14 18:04:23</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2008-02-14+18%3A04%3A23</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".razrabotka.mezhplatformennyjjgtk" href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-14+18%3A04%3A23">2008-02-14 18:04:23&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK">2008-02-18 10:57:58&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h751-1">&lt;/a>&lt;h2>Межплатформенные приложения GTK+: взгляд новичка&lt;/h2>
Исходная статья по&amp;nbsp;адресу: &lt;a href="http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective&lt;/a>&lt;br />
4 марта 2007, Джон Рамсдел (John D. Ramsdell) &lt;br />
&lt;br />
В&amp;nbsp;своей статье Джон Рамсдел (John D. Ramsdell) рассказывает об&amp;nbsp;опыте разработки межплатформенного приложения GTK+. &lt;br />
&lt;a name="h751-2">&lt;/a>&lt;h3>Введение&lt;/h3>
Чтобы отточить свои навыки программирования, я&amp;nbsp;решил написать игру с&amp;nbsp;использованием графического инструментария, с&amp;nbsp;которым я&amp;nbsp;ранее не&amp;nbsp;был знаком, а&amp;nbsp;затем портировать ее&amp;nbsp;на несколько платформ. В&amp;nbsp;качестве графического инструментария я&amp;nbsp;выбрал &lt;a href="http://www.gtk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GIMP Toolkit&lt;/a>,  а&amp;nbsp;в качестве игры &amp;ndash; полпулярную головоломку Судоку, поэтому своё приложение я&amp;nbsp;назвал &lt;a href="http://luaforge.net/projects/gtksudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GTK Sudoku&lt;/a>. В&amp;nbsp;этой статье я&amp;nbsp;описал путь, которым я&amp;nbsp;пришел к&amp;nbsp;использованию этого замечательного инструментария.&lt;br />
&lt;a name="h751-3">&lt;/a>&lt;h3>Требования к&amp;nbsp;графическому инструментарию&lt;/h3>
При&amp;nbsp;выборе графического инструментария я&amp;nbsp;пользовался четырьмя критериями:&lt;br />
&lt;ol type="1">&lt;li> инструментарий должен поддерживать межплатформенную разработку;
&lt;/li>&lt;li> инструментарий должен быть одним из&amp;nbsp;тех, которые я&amp;nbsp;не использовал. Это&amp;nbsp;исключает &lt;a href="http://www.fltk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />FLTK&lt;/a> и&amp;nbsp;&lt;a href="http://www.wxwidgets.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />WxWidgets&lt;/a>;
&lt;/li>&lt;li> на&amp;nbsp;мой взгляд С&amp;nbsp;лучше, чем&amp;nbsp;C++;
&lt;/li>&lt;li> я&amp;nbsp;хотел, чтобы GTK&amp;nbsp;Sudoku был&amp;nbsp;масштабируем, в&amp;nbsp;плане того, чтобы шрифт, а&amp;nbsp;не размеры экрана, определял размеры окон и&amp;nbsp;виджетов. Конечно, в&amp;nbsp;этом плане &lt;a href="http://cairographics.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />векторная графическая библиотека Cairo&lt;/a> вне&amp;nbsp;конкуренции. &lt;/li>&lt;/ol>
Решение &lt;a href="http://ru.wikipedia.org/wiki/Sudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />логической головоломки Sudoku&lt;/a> заключается в&amp;nbsp;том, чтобы заполнить цифрами все&amp;nbsp;клетки доски, причем каждая строка, колонка и&amp;nbsp;квадрат 3х3 должны содержать все&amp;nbsp;цифры от&amp;nbsp;1 до&amp;nbsp;9. GTK&amp;nbsp;Sudoku позволяет исключить большинство трудностей при&amp;nbsp;решении головоломки. От&amp;nbsp;большинства подобных программ GTK&amp;nbsp;Sudoku отличает то, что&amp;nbsp;пользователь задает правило, которое объясняет каждое изменение на&amp;nbsp;доске Sudoku. Программа не&amp;nbsp;сможет применить правило, если отсутствуют предпосылки его&amp;nbsp;выполнения, это&amp;nbsp;помогает рано обнаруживать ошибки. &lt;br />
&lt;a name="h751-4">&lt;/a>&lt;h3>Lua, GTK+, &lt;!--notypo-->Import/Export&lt;!--/notypo--> ... ё моё!&lt;/h3>
Прежде чем&amp;nbsp;рассказывать об&amp;nbsp;уроках, полученных мной при&amp;nbsp;выполнении этого проекта, немного предыстории. GTK&amp;nbsp;Sudoku создавалась как&amp;nbsp;графическая оболочка консольной программы, написанной на&amp;nbsp;Lua. Lua&amp;nbsp;– это&amp;nbsp;популярный среди разработчиков игр&amp;nbsp;не&amp;nbsp;сложный и&amp;nbsp;легко встраиваемый скриптовый язык. Существует версия интерпретатора Lua&amp;nbsp;в&amp;nbsp;виде отдельного приложения, в&amp;nbsp;котором пользователи могут работать со&amp;nbsp;скриптами в&amp;nbsp;цикле загрузка-выполнение-вывод. Я&amp;nbsp;игрался со&amp;nbsp;своим скриптом Sudoku больше года, однако,  кроме меня, не&amp;nbsp;нашлось желающих вводить функции Lua&amp;nbsp;в&amp;nbsp;интерпретатор, чтобы сыграть партию Sudoku. Поэтому, чтобы сделать игру более доступной,  я&amp;nbsp;решил сделать к&amp;nbsp;ней графическую оболочку. &lt;br />
&lt;br />
Встраивание Lua-скрипта прошло быстро и&amp;nbsp;без проблем. Он&amp;nbsp;естественным образом инкапсулировался в&amp;nbsp;C-модуль, который экспортирует 4 функции и&amp;nbsp;3 импортирует. Основное изменение в&amp;nbsp;Lua-скрипте заключалось в&amp;nbsp;добавлении справочной системы, которая была просто не&amp;nbsp;нужна, когда я&amp;nbsp;был единственным пользователем. &lt;br />
&lt;br />
Наиболее сложным местом, при&amp;nbsp;создании графической оболочки, оказалось отображение игровой доски. Игровая доска Sudoku представляет собой поле 9x9 клеток, на&amp;nbsp;котором выделены в&amp;nbsp;группы квадраты 3х3. Наилучший способ представления такой доски заключается в&amp;nbsp;отрисовке линий по&amp;nbsp;краям каждой клетки, а&amp;nbsp;затем поднятии квадратов 3х3 более толстой линией. &lt;br />
&lt;br />
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;!--notypo-->GtkTable&lt;!--/notypo--> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;!--notypo-->GtkDrawingArea&lt;!--/notypo-->. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc/html. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
&lt;a name="h751-5">&lt;/a>&lt;h3>Портирование GTK&amp;nbsp;Sudoku&lt;/h3>
GTK&amp;nbsp;Sudoku собран с&amp;nbsp;использованием &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GNU Build Tools&lt;/a> (еще известными как&amp;nbsp;Autotools). Все, что&amp;nbsp;необходимо сделать, чтобы проверить наличие GTK+ в&amp;nbsp;системе, &amp;ndash; это&amp;nbsp;добавить в&amp;nbsp;файл configure.ac строку &lt;br />
&lt;div class="indent">AM_PATH_GTK_2_0(2.8.0,, [AC_MSG_ERROR([Cannot find GTK+])])&lt;/div>
и&amp;nbsp;еще строку &lt;br />
&lt;div class="indent">@GTK_CFLAGS@ and&amp;nbsp;@GTK_LIBS@&lt;/div>
в&amp;nbsp;файл &lt;!--notypo-->Makefile.am&lt;!--/notypo-->.&lt;br />
&lt;br />
Использование GNU&amp;nbsp;Build Tools  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;!--notypo-->DarwinPorts&lt;!--/notypo-->, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
&lt;div class="indent">depends_lib port:gtk2&lt;/div>
&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;a href="http://www.mingw.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MinGW&lt;/a> и&amp;nbsp;&lt;a href="http://www.mingw.org/msys.shtml" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MSYS&lt;/a> отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;!--notypo-->MinGW&lt;!--/notypo--> и&amp;nbsp;MSYS. &lt;br />
&lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную &lt;a href="http://www.gimp.org/~tml/gimp/win32/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />Тором Лилквистом&lt;/a> (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;!--notypo-->WxWindows&lt;!--/notypo-->. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;br />
&lt;br />
Самой большой оказалась проблема создания инсталлятора  для&amp;nbsp;GTK Sudoku под&amp;nbsp;Windows. Для&amp;nbsp;GTK+ 2.8.18 существует инсталлятор исполняемой среды под&amp;nbsp;Windows. Но&amp;nbsp;вот незадача,  последняя версия окружения разработчика поставляется с&amp;nbsp;GTK+ 2.8.20. Тем&amp;nbsp;не&amp;nbsp;менее, можно извернуться и&amp;nbsp;запустить GTK&amp;nbsp;Sudoku, собранный с&amp;nbsp;GTK+ 2.8.20, в&amp;nbsp;исполняемой среде GTK+ 2.8.18, добавив определение функции g_type_register_static_simple, которая была добавлена после выхода 2.8.18. Чем&amp;nbsp;не&amp;nbsp;хак?&lt;br />
&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;a href="http://luaforge.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />LuaForge&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;br />
&lt;br />
Один раз&amp;nbsp;поместив исполняемую среду в&amp;nbsp;инсталлятор, можно смело менять её компоненты. Так, чтобы решить проблему компоновки, Тор&amp;nbsp;Лилквист посоветовал мне&amp;nbsp;обновить библиотеку Glib до&amp;nbsp;версии 2.12.&lt;br />
&lt;a name="h751-6">&lt;/a>&lt;h3>Заключение&lt;/h3>
В&amp;nbsp;общем, я&amp;nbsp;был впечатлён возможностями GTK+ и&amp;nbsp;в особенности Cairo. Тем&amp;nbsp;не&amp;nbsp;менее, портирование приложений под&amp;nbsp;Windows хотя и&amp;nbsp;не является не&amp;nbsp;возможным, требует дополнительных усилий. В&amp;nbsp;общем, надо проявить лишь чуточку упорства и&amp;nbsp;все получиться.&lt;br />
&lt;br />
&lt;br />&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">[URL=&lt;a href="http://groups.msn.com/buy-soma]buy" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://groups.msn.com/buy-soma]buy&lt;/a> soma[/URL]&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-02-12 19:50:22</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2008-02-12+19%3A50%3A22</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-12+19%3A50%3A22">2008-02-12 19:50:22&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-14+18%3A04%3A23">2008-02-14 18:04:23&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">[URL=&lt;a href="http://groups.msn.com/buy-soma]buy" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://groups.msn.com/buy-soma]buy&lt;/a> soma[/URL]&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h751-1">&lt;/a>&lt;h2>Межплатформенные приложения GTK+: взгляд новичка&lt;/h2>
Исходная статья по&amp;nbsp;адресу: &lt;a href="http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective&lt;/a>&lt;br />
4 марта 2007, Джон Рамсдел (John D. Ramsdell) &lt;br />
&lt;br />
В&amp;nbsp;своей статье Джон Рамсдел (John D. Ramsdell) рассказывает об&amp;nbsp;опыте разработки межплатформенного приложения GTK+. &lt;br />
&lt;a name="h751-2">&lt;/a>&lt;h3>Введение&lt;/h3>
Чтобы отточить свои навыки программирования, я&amp;nbsp;решил написать игру с&amp;nbsp;использованием графического инструментария, с&amp;nbsp;которым я&amp;nbsp;ранее не&amp;nbsp;был знаком, а&amp;nbsp;затем портировать ее&amp;nbsp;на несколько платформ. В&amp;nbsp;качестве графического инструментария я&amp;nbsp;выбрал &lt;a href="http://www.gtk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GIMP Toolkit&lt;/a>,  а&amp;nbsp;в качестве игры &amp;ndash; полпулярную головоломку Судоку, поэтому своё приложение я&amp;nbsp;назвал &lt;a href="http://luaforge.net/projects/gtksudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GTK Sudoku&lt;/a>. В&amp;nbsp;этой статье я&amp;nbsp;описал путь, которым я&amp;nbsp;пришел к&amp;nbsp;использованию этого замечательного инструментария.&lt;br />
&lt;a name="h751-3">&lt;/a>&lt;h3>Требования к&amp;nbsp;графическому инструментарию&lt;/h3>
При&amp;nbsp;выборе графического инструментария я&amp;nbsp;пользовался четырьмя критериями:&lt;br />
&lt;ol type="1">&lt;li> инструментарий должен поддерживать межплатформенную разработку;
&lt;/li>&lt;li> инструментарий должен быть одним из&amp;nbsp;тех, которые я&amp;nbsp;не использовал. Это&amp;nbsp;исключает &lt;a href="http://www.fltk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />FLTK&lt;/a> и&amp;nbsp;&lt;a href="http://www.wxwidgets.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />WxWidgets&lt;/a>;
&lt;/li>&lt;li> на&amp;nbsp;мой взгляд С&amp;nbsp;лучше, чем&amp;nbsp;C++;
&lt;/li>&lt;li> я&amp;nbsp;хотел, чтобы GTK&amp;nbsp;Sudoku был&amp;nbsp;масштабируем, в&amp;nbsp;плане того, чтобы шрифт, а&amp;nbsp;не размеры экрана, определял размеры окон и&amp;nbsp;виджетов. Конечно, в&amp;nbsp;этом плане &lt;a href="http://cairographics.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />векторная графическая библиотека Cairo&lt;/a> вне&amp;nbsp;конкуренции. &lt;/li>&lt;/ol>
Решение &lt;a href="http://ru.wikipedia.org/wiki/Sudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />логической головоломки Sudoku&lt;/a> заключается в&amp;nbsp;том, чтобы заполнить цифрами все&amp;nbsp;клетки доски, причем каждая строка, колонка и&amp;nbsp;квадрат 3х3 должны содержать все&amp;nbsp;цифры от&amp;nbsp;1 до&amp;nbsp;9. GTK&amp;nbsp;Sudoku позволяет исключить большинство трудностей при&amp;nbsp;решении головоломки. От&amp;nbsp;большинства подобных программ GTK&amp;nbsp;Sudoku отличает то, что&amp;nbsp;пользователь задает правило, которое объясняет каждое изменение на&amp;nbsp;доске Sudoku. Программа не&amp;nbsp;сможет применить правило, если отсутствуют предпосылки его&amp;nbsp;выполнения, это&amp;nbsp;помогает рано обнаруживать ошибки. &lt;br />
&lt;a name="h751-4">&lt;/a>&lt;h3>Lua, GTK+, &lt;!--notypo-->Import/Export&lt;!--/notypo--> ... ё моё!&lt;/h3>
Прежде чем&amp;nbsp;рассказывать об&amp;nbsp;уроках, полученных мной при&amp;nbsp;выполнении этого проекта, немного предыстории. GTK&amp;nbsp;Sudoku создавалась как&amp;nbsp;графическая оболочка консольной программы, написанной на&amp;nbsp;Lua. Lua&amp;nbsp;– это&amp;nbsp;популярный среди разработчиков игр&amp;nbsp;не&amp;nbsp;сложный и&amp;nbsp;легко встраиваемый скриптовый язык. Существует версия интерпретатора Lua&amp;nbsp;в&amp;nbsp;виде отдельного приложения, в&amp;nbsp;котором пользователи могут работать со&amp;nbsp;скриптами в&amp;nbsp;цикле загрузка-выполнение-вывод. Я&amp;nbsp;игрался со&amp;nbsp;своим скриптом Sudoku больше года, однако,  кроме меня, не&amp;nbsp;нашлось желающих вводить функции Lua&amp;nbsp;в&amp;nbsp;интерпретатор, чтобы сыграть партию Sudoku. Поэтому, чтобы сделать игру более доступной,  я&amp;nbsp;решил сделать к&amp;nbsp;ней графическую оболочку. &lt;br />
&lt;br />
Встраивание Lua-скрипта прошло быстро и&amp;nbsp;без проблем. Он&amp;nbsp;естественным образом инкапсулировался в&amp;nbsp;C-модуль, который экспортирует 4 функции и&amp;nbsp;3 импортирует. Основное изменение в&amp;nbsp;Lua-скрипте заключалось в&amp;nbsp;добавлении справочной системы, которая была просто не&amp;nbsp;нужна, когда я&amp;nbsp;был единственным пользователем. &lt;br />
&lt;br />
Наиболее сложным местом, при&amp;nbsp;создании графической оболочки, оказалось отображение игровой доски. Игровая доска Sudoku представляет собой поле 9x9 клеток, на&amp;nbsp;котором выделены в&amp;nbsp;группы квадраты 3х3. Наилучший способ представления такой доски заключается в&amp;nbsp;отрисовке линий по&amp;nbsp;краям каждой клетки, а&amp;nbsp;затем поднятии квадратов 3х3 более толстой линией. &lt;br />
&lt;br />
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;!--notypo-->GtkTable&lt;!--/notypo--> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;!--notypo-->GtkDrawingArea&lt;!--/notypo-->. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc/html. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
&lt;a name="h751-5">&lt;/a>&lt;h3>Портирование GTK&amp;nbsp;Sudoku&lt;/h3>
GTK&amp;nbsp;Sudoku собран с&amp;nbsp;использованием &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GNU Build Tools&lt;/a> (еще известными как&amp;nbsp;Autotools). Все, что&amp;nbsp;необходимо сделать, чтобы проверить наличие GTK+ в&amp;nbsp;системе, &amp;ndash; это&amp;nbsp;добавить в&amp;nbsp;файл configure.ac строку &lt;br />
&lt;div class="indent">AM_PATH_GTK_2_0(2.8.0,, [AC_MSG_ERROR([Cannot find GTK+])])&lt;/div>
и&amp;nbsp;еще строку &lt;br />
&lt;div class="indent">@GTK_CFLAGS@ and&amp;nbsp;@GTK_LIBS@&lt;/div>
в&amp;nbsp;файл &lt;!--notypo-->Makefile.am&lt;!--/notypo-->.&lt;br />
&lt;br />
Использование GNU&amp;nbsp;Build Tools  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;!--notypo-->DarwinPorts&lt;!--/notypo-->, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
&lt;div class="indent">depends_lib port:gtk2&lt;/div>
&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;a href="http://www.mingw.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MinGW&lt;/a> и&amp;nbsp;&lt;a href="http://www.mingw.org/msys.shtml" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MSYS&lt;/a> отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;!--notypo-->MinGW&lt;!--/notypo--> и&amp;nbsp;MSYS. &lt;br />
&lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную &lt;a href="http://www.gimp.org/~tml/gimp/win32/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />Тором Лилквистом&lt;/a> (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;!--notypo-->WxWindows&lt;!--/notypo-->. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;br />
&lt;br />
Самой большой оказалась проблема создания инсталлятора  для&amp;nbsp;GTK Sudoku под&amp;nbsp;Windows. Для&amp;nbsp;GTK+ 2.8.18 существует инсталлятор исполняемой среды под&amp;nbsp;Windows. Но&amp;nbsp;вот незадача,  последняя версия окружения разработчика поставляется с&amp;nbsp;GTK+ 2.8.20. Тем&amp;nbsp;не&amp;nbsp;менее, можно извернуться и&amp;nbsp;запустить GTK&amp;nbsp;Sudoku, собранный с&amp;nbsp;GTK+ 2.8.20, в&amp;nbsp;исполняемой среде GTK+ 2.8.18, добавив определение функции g_type_register_static_simple, которая была добавлена после выхода 2.8.18. Чем&amp;nbsp;не&amp;nbsp;хак?&lt;br />
&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;a href="http://luaforge.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />LuaForge&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;br />
&lt;br />
Один раз&amp;nbsp;поместив исполняемую среду в&amp;nbsp;инсталлятор, можно смело менять её компоненты. Так, чтобы решить проблему компоновки, Тор&amp;nbsp;Лилквист посоветовал мне&amp;nbsp;обновить библиотеку Glib до&amp;nbsp;версии 2.12.&lt;br />
&lt;a name="h751-6">&lt;/a>&lt;h3>Заключение&lt;/h3>
В&amp;nbsp;общем, я&amp;nbsp;был впечатлён возможностями GTK+ и&amp;nbsp;в особенности Cairo. Тем&amp;nbsp;не&amp;nbsp;менее, портирование приложений под&amp;nbsp;Windows хотя и&amp;nbsp;не является не&amp;nbsp;возможным, требует дополнительных усилий. В&amp;nbsp;общем, надо проявить лишь чуточку упорства и&amp;nbsp;все получиться.&lt;br />
&lt;br />
&lt;br />&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-02-12 12:14:23</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2008-02-12+12%3A14%3A23</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-12+12%3A14%3A23">2008-02-12 12:14:23&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-12+19%3A50%3A22">2008-02-12 19:50:22&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h751-1">&lt;/a>&lt;h2>Межплатформенные приложения GTK+: взгляд новичка&lt;/h2>
Исходная статья по&amp;nbsp;адресу: &lt;a href="http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective&lt;/a>&lt;br />
4 марта 2007, Джон Рамсдел (John D. Ramsdell) &lt;br />
&lt;br />
В&amp;nbsp;своей статье Джон Рамсдел (John D. Ramsdell) рассказывает об&amp;nbsp;опыте разработки межплатформенного приложения GTK+. &lt;br />
&lt;a name="h751-2">&lt;/a>&lt;h3>Введение&lt;/h3>
Чтобы отточить свои навыки программирования, я&amp;nbsp;решил написать игру с&amp;nbsp;использованием графического инструментария, с&amp;nbsp;которым я&amp;nbsp;ранее не&amp;nbsp;был знаком, а&amp;nbsp;затем портировать ее&amp;nbsp;на несколько платформ. В&amp;nbsp;качестве графического инструментария я&amp;nbsp;выбрал &lt;a href="http://www.gtk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GIMP Toolkit&lt;/a>,  а&amp;nbsp;в качестве игры &amp;ndash; полпулярную головоломку Судоку, поэтому своё приложение я&amp;nbsp;назвал &lt;a href="http://luaforge.net/projects/gtksudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GTK Sudoku&lt;/a>. В&amp;nbsp;этой статье я&amp;nbsp;описал путь, которым я&amp;nbsp;пришел к&amp;nbsp;использованию этого замечательного инструментария.&lt;br />
&lt;a name="h751-3">&lt;/a>&lt;h3>Требования к&amp;nbsp;графическому инструментарию&lt;/h3>
При&amp;nbsp;выборе графического инструментария я&amp;nbsp;пользовался четырьмя критериями:&lt;br />
&lt;ol type="1">&lt;li> инструментарий должен поддерживать межплатформенную разработку;
&lt;/li>&lt;li> инструментарий должен быть одним из&amp;nbsp;тех, которые я&amp;nbsp;не использовал. Это&amp;nbsp;исключает &lt;a href="http://www.fltk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />FLTK&lt;/a> и&amp;nbsp;&lt;a href="http://www.wxwidgets.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />WxWidgets&lt;/a>;
&lt;/li>&lt;li> на&amp;nbsp;мой взгляд С&amp;nbsp;лучше, чем&amp;nbsp;C++;
&lt;/li>&lt;li> я&amp;nbsp;хотел, чтобы GTK&amp;nbsp;Sudoku был&amp;nbsp;масштабируем, в&amp;nbsp;плане того, чтобы шрифт, а&amp;nbsp;не размеры экрана, определял размеры окон и&amp;nbsp;виджетов. Конечно, в&amp;nbsp;этом плане &lt;a href="http://cairographics.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />векторная графическая библиотека Cairo&lt;/a> вне&amp;nbsp;конкуренции. &lt;/li>&lt;/ol>
Решение &lt;a href="http://ru.wikipedia.org/wiki/Sudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />логической головоломки Sudoku&lt;/a> заключается в&amp;nbsp;том, чтобы заполнить цифрами все&amp;nbsp;клетки доски, причем каждая строка, колонка и&amp;nbsp;квадрат 3х3 должны содержать все&amp;nbsp;цифры от&amp;nbsp;1 до&amp;nbsp;9. GTK&amp;nbsp;Sudoku позволяет исключить большинство трудностей при&amp;nbsp;решении головоломки. От&amp;nbsp;большинства подобных программ GTK&amp;nbsp;Sudoku отличает то, что&amp;nbsp;пользователь задает правило, которое объясняет каждое изменение на&amp;nbsp;доске Sudoku. Программа не&amp;nbsp;сможет применить правило, если отсутствуют предпосылки его&amp;nbsp;выполнения, это&amp;nbsp;помогает рано обнаруживать ошибки. &lt;br />
&lt;a name="h751-4">&lt;/a>&lt;h3>Lua, GTK+, &lt;!--notypo-->Import/Export&lt;!--/notypo--> ... ё моё!&lt;/h3>
Прежде чем&amp;nbsp;рассказывать об&amp;nbsp;уроках, полученных мной при&amp;nbsp;выполнении этого проекта, немного предыстории. GTK&amp;nbsp;Sudoku создавалась как&amp;nbsp;графическая оболочка консольной программы, написанной на&amp;nbsp;Lua. Lua&amp;nbsp;– это&amp;nbsp;популярный среди разработчиков игр&amp;nbsp;не&amp;nbsp;сложный и&amp;nbsp;легко встраиваемый скриптовый язык. Существует версия интерпретатора Lua&amp;nbsp;в&amp;nbsp;виде отдельного приложения, в&amp;nbsp;котором пользователи могут работать со&amp;nbsp;скриптами в&amp;nbsp;цикле загрузка-выполнение-вывод. Я&amp;nbsp;игрался со&amp;nbsp;своим скриптом Sudoku больше года, однако,  кроме меня, не&amp;nbsp;нашлось желающих вводить функции Lua&amp;nbsp;в&amp;nbsp;интерпретатор, чтобы сыграть партию Sudoku. Поэтому, чтобы сделать игру более доступной,  я&amp;nbsp;решил сделать к&amp;nbsp;ней графическую оболочку. &lt;br />
&lt;br />
Встраивание Lua-скрипта прошло быстро и&amp;nbsp;без проблем. Он&amp;nbsp;естественным образом инкапсулировался в&amp;nbsp;C-модуль, который экспортирует 4 функции и&amp;nbsp;3 импортирует. Основное изменение в&amp;nbsp;Lua-скрипте заключалось в&amp;nbsp;добавлении справочной системы, которая была просто не&amp;nbsp;нужна, когда я&amp;nbsp;был единственным пользователем. &lt;br />
&lt;br />
Наиболее сложным местом, при&amp;nbsp;создании графической оболочки, оказалось отображение игровой доски. Игровая доска Sudoku представляет собой поле 9x9 клеток, на&amp;nbsp;котором выделены в&amp;nbsp;группы квадраты 3х3. Наилучший способ представления такой доски заключается в&amp;nbsp;отрисовке линий по&amp;nbsp;краям каждой клетки, а&amp;nbsp;затем поднятии квадратов 3х3 более толстой линией. &lt;br />
&lt;br />
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;!--notypo-->GtkTable&lt;!--/notypo--> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;!--notypo-->GtkDrawingArea&lt;!--/notypo-->. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc/html. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
&lt;a name="h751-5">&lt;/a>&lt;h3>Портирование GTK&amp;nbsp;Sudoku&lt;/h3>
GTK&amp;nbsp;Sudoku собран с&amp;nbsp;использованием &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GNU Build Tools&lt;/a> (еще известными как&amp;nbsp;Autotools). Все, что&amp;nbsp;необходимо сделать, чтобы проверить наличие GTK+ в&amp;nbsp;системе, &amp;ndash; это&amp;nbsp;добавить в&amp;nbsp;файл configure.ac строку &lt;br />
&lt;div class="indent">AM_PATH_GTK_2_0(2.8.0,, [AC_MSG_ERROR([Cannot find GTK+])])&lt;/div>
и&amp;nbsp;еще строку &lt;br />
&lt;div class="indent">@GTK_CFLAGS@ and&amp;nbsp;@GTK_LIBS@&lt;/div>
в&amp;nbsp;файл &lt;!--notypo-->Makefile.am&lt;!--/notypo-->.&lt;br />
&lt;br />
Использование GNU&amp;nbsp;Build Tools  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;!--notypo-->DarwinPorts&lt;!--/notypo-->, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
&lt;div class="indent">depends_lib port:gtk2&lt;/div>
&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;a href="http://www.mingw.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MinGW&lt;/a> и&amp;nbsp;&lt;a href="http://www.mingw.org/msys.shtml" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MSYS&lt;/a> отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;!--notypo-->MinGW&lt;!--/notypo--> и&amp;nbsp;MSYS. &lt;br />
&lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную &lt;a href="http://www.gimp.org/~tml/gimp/win32/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />Тором Лилквистом&lt;/a> (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;!--notypo-->WxWindows&lt;!--/notypo-->. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;br />
&lt;br />
Самой большой оказалась проблема создания инсталлятора  для&amp;nbsp;GTK Sudoku под&amp;nbsp;Windows. Для&amp;nbsp;GTK+ 2.8.18 существует инсталлятор исполняемой среды под&amp;nbsp;Windows. Но&amp;nbsp;вот незадача,  последняя версия окружения разработчика поставляется с&amp;nbsp;GTK+ 2.8.20. Тем&amp;nbsp;не&amp;nbsp;менее, можно извернуться и&amp;nbsp;запустить GTK&amp;nbsp;Sudoku, собранный с&amp;nbsp;GTK+ 2.8.20, в&amp;nbsp;исполняемой среде GTK+ 2.8.18, добавив определение функции g_type_register_static_simple, которая была добавлена после выхода 2.8.18. Чем&amp;nbsp;не&amp;nbsp;хак?&lt;br />
&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;a href="http://luaforge.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />LuaForge&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;br />
&lt;br />
Один раз&amp;nbsp;поместив исполняемую среду в&amp;nbsp;инсталлятор, можно смело менять её компоненты. Так, чтобы решить проблему компоновки, Тор&amp;nbsp;Лилквист посоветовал мне&amp;nbsp;обновить библиотеку Glib до&amp;nbsp;версии 2.12.&lt;br />
&lt;a name="h751-6">&lt;/a>&lt;h3>Заключение&lt;/h3>
В&amp;nbsp;общем, я&amp;nbsp;был впечатлён возможностями GTK+ и&amp;nbsp;в особенности Cairo. Тем&amp;nbsp;не&amp;nbsp;менее, портирование приложений под&amp;nbsp;Windows хотя и&amp;nbsp;не является не&amp;nbsp;возможным, требует дополнительных усилий. В&amp;nbsp;общем, надо проявить лишь чуточку упорства и&amp;nbsp;все получиться.&lt;br />
&lt;br />
&lt;br />&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&amp;lt;a href="http://groups.msn.com/buy-soma"&amp;gt;buy soma&amp;lt;/a&amp;gt;&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-24 13:33:14</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2007-03-24+13%3A33%3A14</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A33%3A14">2007-03-24 13:33:14&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2008-02-12+12%3A14%3A23">2008-02-12 12:14:23&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&amp;lt;a href="http://groups.msn.com/buy-soma"&amp;gt;buy soma&amp;lt;/a&amp;gt;&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h751-1">&lt;/a>&lt;h2>Межплатформенные приложения GTK+: взгляд новичка&lt;/h2>
Исходная статья по&amp;nbsp;адресу: &lt;a href="http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />http://www.gnomejournal.org/article/53/cross-platform-gtk-applications-a-newcomers-perspective&lt;/a>&lt;br />
4 марта 2007, Джон Рамсдел (John D. Ramsdell) &lt;br />
&lt;br />
В&amp;nbsp;своей статье Джон Рамсдел (John D. Ramsdell) рассказывает об&amp;nbsp;опыте разработки межплатформенного приложения GTK+. &lt;br />
&lt;a name="h751-2">&lt;/a>&lt;h3>Введение&lt;/h3>
Чтобы отточить свои навыки программирования, я&amp;nbsp;решил написать игру с&amp;nbsp;использованием графического инструментария, с&amp;nbsp;которым я&amp;nbsp;ранее не&amp;nbsp;был знаком, а&amp;nbsp;затем портировать ее&amp;nbsp;на несколько платформ. В&amp;nbsp;качестве графического инструментария я&amp;nbsp;выбрал &lt;a href="http://www.gtk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GIMP Toolkit&lt;/a>,  а&amp;nbsp;в качестве игры &amp;ndash; полпулярную головоломку Судоку, поэтому своё приложение я&amp;nbsp;назвал &lt;a href="http://luaforge.net/projects/gtksudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GTK Sudoku&lt;/a>. В&amp;nbsp;этой статье я&amp;nbsp;описал путь, которым я&amp;nbsp;пришел к&amp;nbsp;использованию этого замечательного инструментария.&lt;br />
&lt;a name="h751-3">&lt;/a>&lt;h3>Требования к&amp;nbsp;графическому инструментарию&lt;/h3>
При&amp;nbsp;выборе графического инструментария я&amp;nbsp;пользовался четырьмя критериями:&lt;br />
&lt;ol type="1">&lt;li> инструментарий должен поддерживать межплатформенную разработку;
&lt;/li>&lt;li> инструментарий должен быть одним из&amp;nbsp;тех, которые я&amp;nbsp;не использовал. Это&amp;nbsp;исключает &lt;a href="http://www.fltk.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />FLTK&lt;/a> и&amp;nbsp;&lt;a href="http://www.wxwidgets.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />WxWidgets&lt;/a>;
&lt;/li>&lt;li> на&amp;nbsp;мой взгляд С&amp;nbsp;лучше, чем&amp;nbsp;C++;
&lt;/li>&lt;li> я&amp;nbsp;хотел, чтобы GTK&amp;nbsp;Sudoku был&amp;nbsp;масштабируем, в&amp;nbsp;плане того, чтобы шрифт, а&amp;nbsp;не размеры экрана, определял размеры окон и&amp;nbsp;виджетов. Конечно, в&amp;nbsp;этом плане &lt;a href="http://cairographics.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />векторная графическая библиотека Cairo&lt;/a> вне&amp;nbsp;конкуренции. &lt;/li>&lt;/ol>
Решение &lt;a href="http://ru.wikipedia.org/wiki/Sudoku" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />логической головоломки Sudoku&lt;/a> заключается в&amp;nbsp;том, чтобы заполнить цифрами все&amp;nbsp;клетки доски, причем каждая строка, колонка и&amp;nbsp;квадрат 3х3 должны содержать все&amp;nbsp;цифры от&amp;nbsp;1 до&amp;nbsp;9. GTK&amp;nbsp;Sudoku позволяет исключить большинство трудностей при&amp;nbsp;решении головоломки. От&amp;nbsp;большинства подобных программ GTK&amp;nbsp;Sudoku отличает то, что&amp;nbsp;пользователь задает правило, которое объясняет каждое изменение на&amp;nbsp;доске Sudoku. Программа не&amp;nbsp;сможет применить правило, если отсутствуют предпосылки его&amp;nbsp;выполнения, это&amp;nbsp;помогает рано обнаруживать ошибки. &lt;br />
&lt;a name="h751-4">&lt;/a>&lt;h3>Lua, GTK+, &lt;!--notypo-->Import/Export&lt;!--/notypo--> ... ё моё!&lt;/h3>
Прежде чем&amp;nbsp;рассказывать об&amp;nbsp;уроках, полученных мной при&amp;nbsp;выполнении этого проекта, немного предыстории. GTK&amp;nbsp;Sudoku создавалась как&amp;nbsp;графическая оболочка консольной программы, написанной на&amp;nbsp;Lua. Lua&amp;nbsp;– это&amp;nbsp;популярный среди разработчиков игр&amp;nbsp;не&amp;nbsp;сложный и&amp;nbsp;легко встраиваемый скриптовый язык. Существует версия интерпретатора Lua&amp;nbsp;в&amp;nbsp;виде отдельного приложения, в&amp;nbsp;котором пользователи могут работать со&amp;nbsp;скриптами в&amp;nbsp;цикле загрузка-выполнение-вывод. Я&amp;nbsp;игрался со&amp;nbsp;своим скриптом Sudoku больше года, однако,  кроме меня, не&amp;nbsp;нашлось желающих вводить функции Lua&amp;nbsp;в&amp;nbsp;интерпретатор, чтобы сыграть партию Sudoku. Поэтому, чтобы сделать игру более доступной,  я&amp;nbsp;решил сделать к&amp;nbsp;ней графическую оболочку. &lt;br />
&lt;br />
Встраивание Lua-скрипта прошло быстро и&amp;nbsp;без проблем. Он&amp;nbsp;естественным образом инкапсулировался в&amp;nbsp;C-модуль, который экспортирует 4 функции и&amp;nbsp;3 импортирует. Основное изменение в&amp;nbsp;Lua-скрипте заключалось в&amp;nbsp;добавлении справочной системы, которая была просто не&amp;nbsp;нужна, когда я&amp;nbsp;был единственным пользователем. &lt;br />
&lt;br />
Наиболее сложным местом, при&amp;nbsp;создании графической оболочки, оказалось отображение игровой доски. Игровая доска Sudoku представляет собой поле 9x9 клеток, на&amp;nbsp;котором выделены в&amp;nbsp;группы квадраты 3х3. Наилучший способ представления такой доски заключается в&amp;nbsp;отрисовке линий по&amp;nbsp;краям каждой клетки, а&amp;nbsp;затем поднятии квадратов 3х3 более толстой линией. &lt;br />
&lt;br />
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;!--notypo-->GtkTable&lt;!--/notypo--> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;!--notypo-->GtkDrawingArea&lt;!--/notypo-->. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc/html. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
&lt;a name="h751-5">&lt;/a>&lt;h3>Портирование GTK&amp;nbsp;Sudoku&lt;/h3>
GTK&amp;nbsp;Sudoku собран с&amp;nbsp;использованием &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GNU Build Tools&lt;/a> (еще известными как&amp;nbsp;Autotools). Все, что&amp;nbsp;необходимо сделать, чтобы проверить наличие GTK+ в&amp;nbsp;системе, &amp;ndash; это&amp;nbsp;добавить в&amp;nbsp;файл configure.ac строку &lt;br />
&lt;div class="indent">AM_PATH_GTK_2_0(2.8.0,, [AC_MSG_ERROR([Cannot find GTK+])])&lt;/div>
и&amp;nbsp;еще строку &lt;br />
&lt;div class="indent">@GTK_CFLAGS@ and&amp;nbsp;@GTK_LIBS@&lt;/div>
в&amp;nbsp;файл &lt;!--notypo-->Makefile.am&lt;!--/notypo-->.&lt;br />
&lt;br />
Использование GNU&amp;nbsp;Build Tools  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;!--notypo-->DarwinPorts&lt;!--/notypo-->, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
&lt;div class="indent">depends_lib port:gtk2&lt;/div>
&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;a href="http://www.mingw.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MinGW&lt;/a> и&amp;nbsp;&lt;a href="http://www.mingw.org/msys.shtml" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MSYS&lt;/a> отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;!--notypo-->MinGW&lt;!--/notypo--> и&amp;nbsp;MSYS. &lt;br />
&lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную &lt;a href="http://www.gimp.org/~tml/gimp/win32/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />Тором Лилквистом&lt;/a> (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;!--notypo-->WxWindows&lt;!--/notypo-->. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;br />
&lt;br />
Самой большой оказалась проблема создания инсталлятора  для&amp;nbsp;GTK Sudoku под&amp;nbsp;Windows. Для&amp;nbsp;GTK+ 2.8.18 существует инсталлятор исполняемой среды под&amp;nbsp;Windows. Но&amp;nbsp;вот незадача,  последняя версия окружения разработчика поставляется с&amp;nbsp;GTK+ 2.8.20. Тем&amp;nbsp;не&amp;nbsp;менее, можно извернуться и&amp;nbsp;запустить GTK&amp;nbsp;Sudoku, собранный с&amp;nbsp;GTK+ 2.8.20, в&amp;nbsp;исполняемой среде GTK+ 2.8.18, добавив определение функции g_type_register_static_simple, которая была добавлена после выхода 2.8.18. Чем&amp;nbsp;не&amp;nbsp;хак?&lt;br />
&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;a href="http://luaforge.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />LuaForge&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;br />
&lt;br />
Один раз&amp;nbsp;поместив исполняемую среду в&amp;nbsp;инсталлятор, можно смело менять её компоненты. Так, чтобы решить проблему компоновки, Тор&amp;nbsp;Лилквист посоветовал мне&amp;nbsp;обновить библиотеку Glib до&amp;nbsp;версии 2.12.&lt;br />
&lt;a name="h751-6">&lt;/a>&lt;h3>Заключение&lt;/h3>
В&amp;nbsp;общем, я&amp;nbsp;был впечатлён возможностями GTK+ и&amp;nbsp;в особенности Cairo. Тем&amp;nbsp;не&amp;nbsp;менее, портирование приложений под&amp;nbsp;Windows хотя и&amp;nbsp;не является не&amp;nbsp;возможным, требует дополнительных усилий. В&amp;nbsp;общем, надо проявить лишь чуточку упорства и&amp;nbsp;все получиться.&lt;br />
&lt;br />
&lt;br />&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-24 13:31:21</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2007-03-24+13%3A31%3A21</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A31%3A21">2007-03-24 13:31:21&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A33%3A14">2007-03-24 13:33:14&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc/html. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;!--notypo-->WxWindows&lt;!--/notypo-->. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Windows&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWindows/edit?add=1" title="Создать эту страницу">?&lt;/a>. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-24 13:25:35</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2007-03-24+13%3A25%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A25%3A35">2007-03-24 13:25:35&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A31%3A21">2007-03-24 13:31:21&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">AM_PATH_GTK_2_0(2.8.0,, [AC_MSG_ERROR([Cannot find GTK+])])&lt;br />
@GTK_CFLAGS@ and&amp;nbsp;@GTK_LIBS@&lt;/div>
в&amp;nbsp;файл &lt;!--notypo-->Makefile.am&lt;!--/notypo-->.&lt;br />
Использование GNU&amp;nbsp;Build Tools  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;!--notypo-->DarwinPorts&lt;!--/notypo-->, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
&lt;div class="indent">depends_lib port:gtk2&lt;/div>
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;a href="http://www.mingw.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MinGW&lt;/a> и&amp;nbsp;&lt;a href="http://www.mingw.org/msys.shtml" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />MSYS&lt;/a> отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;!--notypo-->MinGW&lt;!--/notypo--> и&amp;nbsp;MSYS. &lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную &lt;a href="http://www.gimp.org/~tml/gimp/win32/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />Тором Лилквистом&lt;/a> (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Windows&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWindows/edit?add=1" title="Создать эту страницу">?&lt;/a>. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;!--notypo-->WxWidgets&lt;!--/notypo-->, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл /usr/local/lib/pkgconfig/gdk-2.0.pc.&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;a href="http://luaforge.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />LuaForge&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">в&amp;nbsp;файл &lt;span class="missingpage">Makefile.am&lt;/span>&lt;a href="http://gnome.org.ru/wacko/Makefile/am/edit?add=1" title="Создать эту страницу">?&lt;/a>.&lt;br />
Использование GNU&amp;nbsp;&lt;span class="missingpage">Build&amp;nbsp;Tools&lt;/span>&lt;a href="http://gnome.org.ru/wacko/BuildTools/edit?add=1" title="Создать эту страницу">?&lt;/a>  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;span class="missingpage">Darwin&amp;nbsp;Ports&lt;/span>&lt;a href="http://gnome.org.ru/wacko/DarwinPorts/edit?add=1" title="Создать эту страницу">?&lt;/a>, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
depends_lib port:gtk2&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;span class="missingpage">Min&amp;nbsp;GW&lt;/span>&lt;a href="http://gnome.org.ru/wacko/MinGW/edit?add=1" title="Создать эту страницу">?&lt;/a> и&amp;nbsp;MSYS отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;span class="missingpage">Min&amp;nbsp;GW&lt;/span>&lt;a href="http://gnome.org.ru/wacko/MinGW/edit?add=1" title="Создать эту страницу">?&lt;/a> и&amp;nbsp;MSYS. &lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную Тором Лилквистом (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Windows&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWindows/edit?add=1" title="Создать эту страницу">?&lt;/a>. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Widgets&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWidgets/edit?add=1" title="Создать эту страницу">?&lt;/a>, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл &lt;br />
/usr/...&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;span class="missingpage">Lua&amp;nbsp;Forge&lt;/span>&lt;a href="http://gnome.org.ru/wacko/LuaForge/edit?add=1" title="Создать эту страницу">?&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-24 13:14:05</title>
<link>http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK/show?time=2007-03-24+13%3A14%3A05</link>
<description>&lt;div class="pageBefore">&lt;img src="http://gnome.org.ru/wacko/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK" class="">/Разработка&amp;nbsp;/&amp;nbsp;Межплатформенный&amp;nbsp;GTK&lt;/a> за &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A14%3A05">2007-03-24 13:14:05&lt;/a> и &lt;a href="http://gnome.org.ru/wacko/Razrabotka/MezhplatformennyjjGTK?time=2007-03-24+13%3A25%3A35">2007-03-24 13:25:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h751-1">&lt;/a>&lt;h3>Lua, GTK+, &lt;!--notypo-->Import/Export&lt;!--/notypo--> ... ё моё!&lt;/h3>
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;!--notypo-->GtkTable&lt;!--/notypo--> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;!--notypo-->GtkDrawingArea&lt;!--/notypo-->. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал &lt;a href="http://gnome.org.ru/wacko/Razrabotka/VidzhetyCairo" target="_blank" title="" class="outerlink">статью Дэвида Мадэли&lt;/a> о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;a name="h751-2">&lt;/a>&lt;h3>Портирование GTK&amp;nbsp;Sudoku&lt;/h3>
GTK&amp;nbsp;Sudoku собран с&amp;nbsp;использованием &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://gnome.org.ru/wacko/themes/gnome/icons/web.gif" alt="" border="0" />GNU Build Tools&lt;/a> (еще известными как&amp;nbsp;Autotools). Все, что&amp;nbsp;необходимо сделать, чтобы проверить наличие GTK+ в&amp;nbsp;системе, &amp;ndash; это&amp;nbsp;добавить в&amp;nbsp;файл configure.ac строку &lt;br />
и&amp;nbsp;еще строку &lt;br />
в&amp;nbsp;файл &lt;span class="missingpage">Makefile.am&lt;/span>&lt;a href="http://gnome.org.ru/wacko/Makefile/am/edit?add=1" title="Создать эту страницу">?&lt;/a>.&lt;br />
Использование GNU&amp;nbsp;&lt;span class="missingpage">Build&amp;nbsp;Tools&lt;/span>&lt;a href="http://gnome.org.ru/wacko/BuildTools/edit?add=1" title="Создать эту страницу">?&lt;/a>  делает перенос GTK&amp;nbsp;Sudoku на&amp;nbsp;различные GNU/Linux дистрибутивы тривиальной  задачей. Что&amp;nbsp;касается Mac'ов, я&amp;nbsp;установил версию X11, которая поставлялась с&amp;nbsp;машиной, и&amp;nbsp;использовал &lt;span class="missingpage">Darwin&amp;nbsp;Ports&lt;/span>&lt;a href="http://gnome.org.ru/wacko/DarwinPorts/edit?add=1" title="Создать эту страницу">?&lt;/a>, чтобы установить GTK. После этого GTK&amp;nbsp;Sudoku скомпилировался так, как&amp;nbsp;будто это&amp;nbsp;был GNU/Linux. Создание собственного port-файла не&amp;nbsp;было сложной задачей. Единственное, что&amp;nbsp;пришлось добавить при&amp;nbsp;заполнении полей это:&lt;br />
depends_lib port:gtk2&lt;br />
В&amp;nbsp;отличии от&amp;nbsp;Linux и&amp;nbsp;Mac, портирование GTK&amp;nbsp;Sudoku на&amp;nbsp;Windows представляло собой сложную задачу. Создание окружения разработчика на&amp;nbsp;основе &lt;span class="missingpage">Min&amp;nbsp;GW&lt;/span>&lt;a href="http://gnome.org.ru/wacko/MinGW/edit?add=1" title="Создать эту страницу">?&lt;/a> и&amp;nbsp;MSYS отличалось от&amp;nbsp;того, как&amp;nbsp;это делалось для&amp;nbsp;других графических инструментариев, которые я&amp;nbsp;раньше использовал. Например, используя FLTK любой может загрузить исходники, а&amp;nbsp;затем легко скомпилировать и&amp;nbsp;установить инструментарий. В&amp;nbsp;отличии от&amp;nbsp;этого, GTK+ зависит от&amp;nbsp;большого числа пакетов, которые не&amp;nbsp;входят в&amp;nbsp;стандартные дистрибутивы &lt;span class="missingpage">Min&amp;nbsp;GW&lt;/span>&lt;a href="http://gnome.org.ru/wacko/MinGW/edit?add=1" title="Создать эту страницу">?&lt;/a> и&amp;nbsp;MSYS. &lt;br />
Установить окружение разработчика из&amp;nbsp;предварительно скомпилированных файлов достаточно сложно и&amp;nbsp;может отпугнуть любого, кто&amp;nbsp;собирается использовать исходники. Дополнительно существует ряд&amp;nbsp;технических причин, которые значительно усложняют сборку окружения, допускающего статическую компоновку приложений GTK+. В&amp;nbsp;результате многие разработчики предпочитают использовать коллекцию архивов, любезно предоставленную Тором Лилквистом (Tor Lillqvist). Этот дистрибутив здорово подходит новичкам, за&amp;nbsp;что я&amp;nbsp;особенно благодарен Тору. Были трудности и&amp;nbsp;при использовании этого дистрибутива, но&amp;nbsp;они все&amp;nbsp;преодолимы. &lt;br />
При&amp;nbsp;переносе приложения на&amp;nbsp;Windows  портировать приложение GTK+ немного сложнее, чем&amp;nbsp;приложение FLTK или&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Windows&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWindows/edit?add=1" title="Создать эту страницу">?&lt;/a>. Если следовать рекомендациям из&amp;nbsp;документации по&amp;nbsp;FLTK и&amp;nbsp;&lt;span class="missingpage">Wx&amp;nbsp;Widgets&lt;/span>&lt;a href="http://gnome.org.ru/wacko/WxWidgets/edit?add=1" title="Создать эту страницу">?&lt;/a>, ваша система сборки  будет работать без&amp;nbsp;изменений на&amp;nbsp;всех системах, включая MSYS. При&amp;nbsp;использовании MSYS компоновщику обычно указывают опцию -mwindows, которая добавляется к&amp;nbsp;конфигурационным скриптам графического инструментария; в&amp;nbsp;то же&amp;nbsp;время скрипт конфигурирования GTK+ игнорирует эту&amp;nbsp;опцию. Я&amp;nbsp;поборол эту&amp;nbsp;проблему, добавив этот флаг в&amp;nbsp;файл &lt;br />
/usr/...&lt;br />
Самой большой оказалась проблема создания инсталлятора  для&amp;nbsp;GTK Sudoku под&amp;nbsp;Windows. Для&amp;nbsp;GTK+ 2.8.18 существует инсталлятор исполняемой среды под&amp;nbsp;Windows. Но&amp;nbsp;вот незадача,  последняя версия окружения разработчика поставляется с&amp;nbsp;GTK+ 2.8.20. Тем&amp;nbsp;не&amp;nbsp;менее, можно извернуться и&amp;nbsp;запустить GTK&amp;nbsp;Sudoku, собранный с&amp;nbsp;GTK+ 2.8.20, в&amp;nbsp;исполняемой среде GTK+ 2.8.18, добавив определение функции g_type_register_static_simple, которая была добавлена после выхода 2.8.18. Чем&amp;nbsp;не&amp;nbsp;хак?&lt;br />
Инсталлятор GTK&amp;nbsp;Sudoku получился близок к&amp;nbsp;десятимегабайтному ограничению &lt;span class="missingpage">Lua&amp;nbsp;Forge&lt;/span>&lt;a href="http://gnome.org.ru/wacko/LuaForge/edit?add=1" title="Создать эту страницу">?&lt;/a> по&amp;nbsp;размеру файла. А&amp;nbsp;все потому, что&amp;nbsp;пришлось включить почти все&amp;nbsp;файлы из&amp;nbsp;инсталлятора  GTK+ 2.8.18 в&amp;nbsp;инсталлятор GTK&amp;nbsp;Sudoku. Если установить  GTK+ 2.8.18 в&amp;nbsp;общий каталог, некоторые другие приложения GTK+, например, Gaim, могут перестать работать.&lt;br />
Один раз&amp;nbsp;поместив исполняемую среду в&amp;nbsp;инсталлятор, можно смело менять её компоненты. Так, чтобы решить проблему компоновки, Тор&amp;nbsp;Лилквист посоветовал мне&amp;nbsp;обновить библиотеку Glib до&amp;nbsp;версии 2.12.&lt;a name="h751-3">&lt;/a>&lt;h3>Заключение&lt;/h3>
В&amp;nbsp;общем, я&amp;nbsp;был впечатлён возможностями GTK+ и&amp;nbsp;в особенности Cairo. Тем&amp;nbsp;не&amp;nbsp;менее, портирование приложений под&amp;nbsp;Windows хотя и&amp;nbsp;не является не&amp;nbsp;возможным, требует дополнительных усилий. В&amp;nbsp;общем, надо проявить лишь чуточку упорства и&amp;nbsp;все получиться.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h751-1">&lt;/a>&lt;h3>Lua, GTK+, &lt;span class="missingpage">Import&amp;nbsp;/&amp;nbsp;Export&lt;/span>&lt;a href="http://gnome.org.ru/wacko/Import/Export/edit?add=1" title="Создать эту страницу">?&lt;/a> ... ё моё!&lt;/h3>
Игровую доску я&amp;nbsp;реализовал как&amp;nbsp;виджет, потомок &lt;span class="missingpage">Gtk&amp;nbsp;Table&lt;/span>&lt;a href="http://gnome.org.ru/wacko/GtkTable/edit?add=1" title="Создать эту страницу">?&lt;/a> с&amp;nbsp;таблицей 9х9 ячеек. В&amp;nbsp;каждой ячейке находится другой виджет, наследующий свойства &lt;span class="missingpage">Gtk&amp;nbsp;Drawing&amp;nbsp;Area&lt;/span>&lt;a href="http://gnome.org.ru/wacko/GtkDrawingArea/edit?add=1" title="Создать эту страницу">?&lt;/a>. Виджет игровой доски отвечает за&amp;nbsp;то, что&amp;nbsp;между виджетами клеток нет&amp;nbsp;расстояния и&amp;nbsp;что все&amp;nbsp;клетки имеют одинаковый размер. Cairo используется при&amp;nbsp;отрисовке линий и&amp;nbsp;чтобы сделать все&amp;nbsp;клетки динамически расширяемыми. Граничные линии каждой клетки отрисовываются в&amp;nbsp;зависимости от&amp;nbsp;её местоположения. Прежде чем&amp;nbsp;прийти к&amp;nbsp;такому решению, я&amp;nbsp;исследовал несколько вариантов.&lt;br />
Первой проблемой для&amp;nbsp;меня стал поиск документации, по&amp;nbsp;использованию Cairo в&amp;nbsp;GTK+. Чтобы разрешить её, я&amp;nbsp;предпринял несколько шагов. Во-первых, я&amp;nbsp;отыскал и&amp;nbsp;проштудировал статью Дэвида Мэдли о&amp;nbsp;создании виджетов с&amp;nbsp;использованием Cairo. Во-вторых, я&amp;nbsp;сделал закладку и&amp;nbsp;часто обращался к&amp;nbsp;HTML-документам в&amp;nbsp;папке /usr/share/gtk-doc. И&amp;nbsp;самое главное, я&amp;nbsp;распаковал 3 архива с&amp;nbsp;исходниками GTK+ и&amp;nbsp;создал файл с&amp;nbsp;тегами Emacs для&amp;nbsp;всех файлов с&amp;nbsp;исходниками и&amp;nbsp;заголовками. Я&amp;nbsp;нахожу исходники наиболее полезными, а&amp;nbsp;единый стиль форматирования кода, которому они&amp;nbsp;следуют, облегчает навигацию по&amp;nbsp;ним.&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
