OberonCore
https://forum.oberoncore.ru/

DIA: BlackBox Component Builder 1.6 + GTK2
https://forum.oberoncore.ru/viewtopic.php?f=134&t=3535
Страница 1 из 6

Автор:  Иван Денисов [ Понедельник, 15 Август, 2011 12:10 ]
Заголовок сообщения:  DIA: BlackBox Component Builder 1.6 + GTK2

Описания предложения к совместному творчеству:
Портирование большей части BB под Ubuntu через GTK2 на основе существующих наработок. Проект имеет комфортный метод разработки из под Ubuntu и полностью рабочий компилятор из самой Версии для Линукс. Среда содержит многие наработки касающиеся каркаса, также модуль для TCP от Trurl.

В среде много ошибок, предлагаю улучшать постепенно совместными силами.

Для работы над проектом создан репозиторий git.
Загружать среду себе на ПК такой командой:
Код:
git clone ssh://USERNAME@git.molpit.ru/home/git/linproj YOURFOLDER
Имена пользователей и пароли высланы личными сообщениями, благо человек не много.

Небольшая справка по GIT, обсуждения тут:
Вывести историю коммитов и их ключей
Код:
git log

Откатиться (например) до первой итерации на момент создания этого сообщения
Код:
git reset --hard 9ae7c523def41e270223a2d40e4e6805e748dc9d

Перед этим желателно создать новую ветку
Код:
git branch iter0
git checkout iter0


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

Эта версия ББ содежит рабочее ядро для линукс, не требует пускача и т.п. поскольку использует не DevElfLinker, а LinLinker!

Вложения:
bblin.png
bblin.png [ 314.39 КБ | Просмотров: 8172 ]

Автор:  Евгений Темиргалеев [ Понедельник, 15 Август, 2011 14:00 ]
Заголовок сообщения:  Re: Первая итерация

Иван Денисов писал(а):
Я попробую поработать над HostMenus.Loop чтобы 100% проц не загружался.
Вы ведёте журнал изменений?

Автор:  Иван Денисов [ Понедельник, 15 Август, 2011 19:17 ]
Заголовок сообщения:  Re: Первая итерация

Евгений Темиргалеев писал(а):
Вы ведёте журнал изменений?
Стараюсь цветом выделять правки, и добавляю комментарии, когда чувствую, что это необходимо, но журнал не веду. Там цветом выделено много от старых правщиков, также. Могу вести вверху писать, что и когда сделал, думаю Вы правы, так будет удобнее, если процесс пойдет.

Автор:  Иван Денисов [ Среда, 17 Август, 2011 08:56 ]
Заголовок сообщения:  Итерация 2

Сделал петлю, но она не очень работала из-за неточного системного времени в LinLibc.clock(), вернул как было, НО починил сборку мусора! там кто-то убрал DEC(gc).

Обнаружил, когда возникают ошибки при нажатии клавиш, это
Код:
HostMenus.OpenApp gtk_key_snooper_install()
как то неверно работает обработчик нажатия клавиш. После его комментирования проблема пропала, вьюшки сохраняются, документы, проект можно создавать, компилировать и выполнять полностью в версии Линукс теперь, также работает вырезать вставить, но из-за отсутствия обработки клавиши CTRL этим сложно пользоваться!

Выяснил, что Pango сделан но не до конца, не хватает хедров в Gtk2Gtk и рисуются сейчас шрифты неправильно, просто какой-то шрифт по умолчанию.
Каким образом делали эти хедеры Gtk2? Вопрос автоматической хедерогенерации открыт.

Сделал запуск графического приложения при запуске, в качестве демо вьюшки :)

Текущая версия репозитория доступна в случае каких либо дальнейших коммитов так:
Код:
git clone ssh://USERNAME@git.molpit.ru/home/git/linproj YOURFOLDER
cd YOURFOLDER
git reset --hard bb5a8bed8fcb0fe879a4f9ff6544fb2d8147284d


Вложения:
Iteration2.png
Iteration2.png [ 236.56 КБ | Просмотров: 8142 ]
iteration2.png
iteration2.png [ 396.21 КБ | Просмотров: 8141 ]

Автор:  Info21 [ Среда, 17 Август, 2011 09:47 ]
Заголовок сообщения:  Re: Итерации

Бурный прогресс :)

Это кто ж такой редиска сборщик мусора поломал?

Автор:  Иван Денисов [ Среда, 17 Август, 2011 17:27 ]
Заголовок сообщения:  Re: Итерации

Info21 писал(а):
Это кто ж такой редиска сборщик мусора поломал?
Я бы тоже хотел знать кто автор релиза BlackBox_Linux_V20050512_gtk2, который Вы мне прислали. Там самый свежий порт хедров GTK2 на КП, поэтому хотелось бы знать как это делают люди знающие?

Автор:  Евгений Темиргалеев [ Среда, 17 Август, 2011 19:48 ]
Заголовок сообщения:  Re: Итерации

Иван Денисов писал(а):
Там самый свежий порт хедров GTK2 на КП, поэтому хотелось бы знать как это делают люди знающие?
По-моему, качественное портирование хедеров --- дело ручное. Везде свой стиль, на сях извратиться по-всякому можно. Но под конкретный стиль --- можно подстроиться:
- во-первых, использовать полуавтоматику (если надо --- есть перевод enum-ов)
- во-вторых, если сишные заголовки генерятся автоматом (вроде на форуме это говорили про Gtk-е), то их точно можно автоматом и конвертировать.

Автор:  Евгений Темиргалеев [ Четверг, 18 Август, 2011 10:27 ]
Заголовок сообщения:  Re: Итерация 2

Иван Денисов писал(а):
НО починил сборку мусора! там кто-то убрал DEC(gc).
"там" это где? Хотелось бы посмотреть это место Kernel в нашей ветке.

Автор:  Иван Денисов [ Четверг, 18 Август, 2011 15:18 ]
Заголовок сообщения:  Re: Итерация 2

Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
НО починил сборку мусора! там кто-то убрал DEC(gc).
"там" это где? Хотелось бы посмотреть это место Kernel в нашей ветке.

Это место находится в HostMenus.Loop, там есть переменная gc и она никак не уменьшается в петле, хотя должна. И из-за этого не вызывается Kernell.Collect и сборки мусора не происходит.

Автор:  Info21 [ Четверг, 18 Август, 2011 15:28 ]
Заголовок сообщения:  Re: Итерации

Иван Денисов писал(а):
Я бы тоже хотел знать кто автор релиза BlackBox_Linux_V20050512_gtk2, который Вы мне прислали. Там самый свежий порт хедров GTK2 на КП, поэтому хотелось бы знать как это делают люди знающие?
Мне Оминк выдали нечто, потом руку чуть-чуть приложил Трурль, но что он мог бы испортить сборку мусора -- совершенно невероятно.

Автор:  Евгений Темиргалеев [ Четверг, 18 Август, 2011 16:28 ]
Заголовок сообщения:  Re: Итерация 2

Иван Денисов писал(а):
Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
НО починил сборку мусора! там кто-то убрал DEC(gc).
"там" это где? Хотелось бы посмотреть это место Kernel в нашей ветке.
Это место находится в HostMenus.Loop, там есть переменная gc и она никак не уменьшается в петле, хотя должна. И из-за этого не вызывается Kernell.Collect и сборки мусора не происходит.
Это не поломка сборщика мусора. Наверное, при описании сделанного не стоит сильно спешить. :) Лучше помедленее, но подробнее.

P.S. Ещё одно подтверждение необходимости (для коллективной работы) подробного описания изменений в сопровождаем/дорабатываемом стороннем коде от на каждый чих вида: зачем? где? что?

Автор:  Иван Денисов [ Четверг, 18 Август, 2011 17:00 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Да, может Омник специально убрали это на время, откуда знать, просто теперь этот сборщик (который был в исправности), вызывается, а раньше не вызывался. Так будет правильнее сказать. Собственно работа над проблемным местом — Loop.

Автор:  Евгений Темиргалеев [ Четверг, 18 Август, 2011 20:20 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Иван Денисов писал(а):
Собственно работа над проблемным местом — Loop.
А нельзя ли этот Loop распилить и убрать, раз он для Gtk не естественен? Виндовый схематично:
Код:
WHILE ОжидатьИПолучитьСобытие(событие) DO
  Обработать(событие)
END
Какие события: клавиатура, мышь, таймер и вроде всё. У GLUT как и Gtk свой главный цикл. Для отработки событий там задаются их обработчики, т.е. для GLUT можно было бы попробовать так:
Код:
PROCEDURE ОбработчикМыши (x, y: INTEGER; ....);
  VAR событие: Событие
BEGIN
  Сформировать событие от мыши
  Обработать(событие)
END Обработчик Мыши;
PROCEDURE ОбрабочикКлавиатуры ...
PROCEDURE ОбработчикТаймера ...
Loop соответственно GLUT-й крутится. Или в ББ-м Loop кроме обработки событий ещё какие-то нюансы?

Автор:  Иван Денисов [ Четверг, 18 Август, 2011 23:52 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Хорошая идея, попробовать вклиниться в петлю Gtk, сейчас она не вызывается и процесс крутится блэкбоксом самим.
Недостатки:
А. В серверной версии так же проблема и она не решена...
Б. Хотелось бы, чтобы и без гуя GTK среда крутила ServicesActions и собирала мусор

Автор:  Иван Денисов [ Пятница, 19 Август, 2011 00:00 ]
Заголовок сообщения:  commit a7e4ad3224aec43137c516a8f38f865c347161de

Резюме правок:
    1. Теперь ББ рисует TrueType шрифтами и русскими буквами, помог модуль для работы с Utf строками, я скопировал одну функцию из него. Панго надо кормить именно UTF8 строками.
    2. исправлен HostDialog.GetOK и HostDialog.Close
    3. Добавлена загрузка HostMechanisms и теперь работает конструктор форм

Предлагаемые сейчас независимые направления совместной работы:
    1. Поправить метрику шрифтов HostNewFont, HostFonts, HostPorts.DrawString
    2. HostMenus.Loop, задача придумать организацию прерываний или любой другой вариант, но не зависящий от GTK
    3. Обработка нажатий клавиш HostMenus
    4. Обработка мыши HostMenus
    5. Доработка radioButton HostCFrames

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

Вложения:
PangoWorksFixMetrics.png
PangoWorksFixMetrics.png [ 348.79 КБ | Просмотров: 8105 ]

Автор:  Trurl [ Пятница, 19 Август, 2011 08:09 ]
Заголовок сообщения:  Re: Итерация 2

Евгений Темиргалеев писал(а):
P.S. Ещё одно подтверждение необходимости (для коллективной работы) подробного описания изменений в сопровождаем/дорабатываемом стороннем коде от на каждый чих вида: зачем? где? что?

А еще хорошо бы иметь описание, как оно ваще работает.
Иван Денисов писал(а):
Это место находится в HostMenus.Loop, там есть переменная gc и она никак не уменьшается в петле, хотя должна. И из-за этого не вызывается Kernell.Collect и сборки мусора не происходит.

1. Вообще, вызывать Kernell.Collect из главного цикла необходимости нет. Это - некая эвристика, попытка сместить сборку мусора в периоды ожидания действий пользователя.
2. Обратите внимание на процудуру MenuSelect.;)
3. Если вставить DEC(gc) в HostMenus.Loop, сборщик мусора будет вызываться каждые 100 нажатий на клавишу/движений мышкой, что мне лично представляется несколько излишним.

Автор:  Trurl [ Пятница, 19 Август, 2011 08:21 ]
Заголовок сообщения:  Re: Итерация 2

Иван Денисов писал(а):
рисуются сейчас шрифты неправильно, просто какой-то шрифт по умолчанию.

Deja vu ;)
Trurl писал(а):
GTK2 несколько разочаровал. Вроде, под виндовсом кое-как заработало. Попробовал запустить это дело на линухе - все тексты рисуются одним шрифтом. На FreeBSD - та же петрушка.
После некоторых экспериментов выяснил, что gdk_font_from_description возвращает один и тот же указатель. Еще через некоторое время догадался заглянуть в исходники.
Код:
GdkFont *
gdk_font_from_description_for_display (GdkDisplay  *display,PangoFontDescription *font_desc)
{
  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
  g_return_val_if_fail (font_desc != NULL, NULL);

  return gdk_font_load_for_display (display, "fixed");
}

Это у них называется "an approximation of the Pango font". :?

Автор:  Иван Денисов [ Пятница, 19 Август, 2011 18:07 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Trurl писал(а):
. Вообще, вызывать Kernell.Collect из главного цикла необходимости нет. Это - некая эвристика, попытка сместить сборку мусора в периоды ожидания действий пользователя.
3. Если вставить DEC(gc) в HostMenus.Loop, сборщик мусора будет вызываться каждые 100 нажатий на клавишу/движений мышкой, что мне лично представляется несколько излишним.
Тут вы немного неправы, сейчас HostMenus.Loop - главная петля в каркасе, она вызывается только один раз и крутит все в том числе сборку мусора, но сделана она через WHILE без прерываний и поэтому молотит 100% проц.
Trurl писал(а):
Обратите внимание на процудуру MenuSelect.;)
Вот за это спасибо. От туда ее можно запросто убрать, она там теперь не имеет смысла, а gcCycles увеличить до 1000 или 10000 чтобы пореже очистка происходила, сейчас она работает в режиме почти непрерывного времени.

Про панго шрифты. Да Вы правы, описания шрифтов требуется делать на панго полностью не используя Gdk и Gtk про это они и в документации пишут.

Автор:  Иван Денисов [ Четверг, 01 Сентябрь, 2011 02:04 ]
Заголовок сообщения:  commit: 2bda4870f9682013aee9d4d47702e1aeb552c1a0

В ядро Lin версии добавлен Call и Signature из BB1.6rc6 что позволило заменить полностью старый Meta на Meta из BB1.6rc6, и убрать зависимость от старой подсистемы Std, теперь Std полностью из версии 1.6rc6.

Итак Lin версия сейчас заключена в подсистемах:
Host
Lin
Gtk2
System

Все остальное от bb1.6rc6.7z с сайта оберонкора без изменений абсолютно.

Свои изменения я пишу в секции DONE в начале модуля и сами правки выделяю синим цветом.

Автор:  Иван Денисов [ Воскресенье, 11 Сентябрь, 2011 10:29 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Кто-то делал клон?

Если нет, то причина в том, что нужно выложить в SNV на oberoncore проект (нет возможности/желания/времени использовать git) или никто не нашел для себя задачи, которую хотел бы решить, чтобы сделать вклад в перенос?

Есть ли желающие работать вместе над проблемой переноса дальше?

Страница 1 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/