Page 1 of 16

libGUI

Posted: Fri Feb 09, 2007 2:26 am
by andrew_programmer
Я занимаюсь разработкой стандартной библиотеки GUI для KolibriOS.
В результате упорного программирования в течении семи дней я написал два GUI компонента.Это кнопки и скролеры.
Все компоненты могут отображаться в 2-х видах - 2D и 3D.
2D компоненты представляют из себя плоские GUI компоненты.
3D - это объёмные компоненты с красивыми градиентными заливками.
Цвет GUI компонентов зависит от скина.
Наример вот так выглядят 3D компоненты со скином Metal.skn:
http://www.menuetosgame.narod.ru/programs/libGUI_3D.PNG

А вот сама библиотека libGUI с демо-программами.
http://www.menuetosgame.narod.ru/programs/libGUI.7z
При компиляции программ не забудьте прописать путь к DLL-ке в исходниках(путь сделан для моего компьютера).

Хотелось бы ещё и меню сделать,но не знаю,хватит ли у меня на это времени(но всётаки постараюсь).

Высказывайтесь.Может что-то надо изменить,переделать.

Posted: Fri Feb 09, 2007 8:10 am
by Mario79
andrew_programmer
Хорошая вещь, надо будет запихнуть в KFM.

Posted: Fri Feb 09, 2007 12:10 pm
by Heavyiron
Еще один закос под ХРюшу?

Posted: Fri Feb 09, 2007 12:18 pm
by andrew_programmer
Все элементы генерируются МАТЕМАТИЧЕСКИ !
Я посмотрел как сделано в XP - слишком мудрёно.
Посмотрел как сделано в Linux - довольно просто и понятно.За основу я взял идею из LINUX ,а не XP.Плюс ещё добавил свои идеи.Делал,что называется,на глаз.Изменял под свои идеи.

Запустите в XP экранную лупу и сравните элементы XP и мои - общего мало.

Posted: Fri Feb 09, 2007 12:47 pm
by Heavyiron
Однако размерчик демок без сжатия впечатляет: 460 kb. И это только демки...
PS: Не знаю как под экранной лупой, но тот скриншот, что ты привел - один в один ХР.

Posted: Fri Feb 09, 2007 1:05 pm
by andrew_programmer
>PS: Не знаю как под экранной лупой, но тот скриншот, что ты привел - один в один ХР.

В LINUX градиентная заливка начинается с серых тонов и заканчивается белыми, только поэтому они не смахивают на XP.
А у меня градиентная заливка начинается с цвета скина и заканчивается белым.Этот маленький нюанс и дедает похожесть на XP.В остальном алгоритм рисования объёмного прямоугольника во всех ОС ОДИНАКОВ.Разница только в цвете градиентной заливки ,в антианализинге и некоторых мелочах дизайна.


>Однако размерчик демок без сжатия впечатляет: 460 kb. И это только демки...

Я думал ты разбираешься в ассемблере.
В коде есть строка:

Picture:
file 'abc.raw'

abc.raw - это скролируемая картинка,которая подключается к коду программы, увеличивая его размер на 99%.
Размер примера без этой картинки 1.5 килобайта.

Размер скомпилированной DLL 42 килобайта.Но после сжатия упаковщиком(не путать с архиватором) она занимает 6 килобайт, что на 1 килобайт больше сжатой консоли.

Posted: Fri Feb 09, 2007 1:44 pm
by Heavyiron
В исходники я не лазил пока, потому пишу только то, что вижу снаружи. ;) Dll можно паковать и kpack-ом, тогда она занимает 4,78 килобайт. А похожесть на ХР заключается еще и в черточках на полосах прокрутки и во внешнем виде кнопок со стрелками... Копия просто ;). Опять таки в алгоритм я не лазил. Кстати, кнопки со стрелками не работают в примерах.

Posted: Fri Feb 09, 2007 2:32 pm
by YELLOW
Интересно, а что плохого в похожести на ХРюшку. Дизаин дизаином, но по теории юзабилити знакомое наоборот удобнее. Причем скроллеры в ХР не самые плохие. Молодец, andrew_programmer, сегодня посмотреть код и примеры в действии не смогу, уезжаю сейчас, а в понедельник гляну.

Posted: Fri Feb 09, 2007 2:45 pm
by andrew_programmer
> Кстати, кнопки со стрелками не работают в примерах.

Правильно,не работают.Я их не сделал.Пока надобности в кнопках для скролеров - нет(пока и без них сойдёт).
Мне меню нужнее.

> Dll можно паковать и kpack-ом, тогда она занимает 4,78 килобайт.

Я про него и говорил.Только похоже с размером ошибся.

Posted: Fri Feb 09, 2007 2:51 pm
by andrew_programmer
> А похожесть на ХР заключается еще и в черточках.

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

Вообще попробуйте запускать демку с разными скинами в системе.Похожесть на XP будет меньше.

Posted: Fri Feb 09, 2007 3:15 pm
by Mario79
Heavyiron
Почему ты решил, что стиль похожий на XP это плохо? В KDE аж 3 стиля основанных на виндах - и что это повод на них поругаться?
Никто ведь не заставляет тебя использовать эту вещь, не нравиться не используй или напиши свое.

Posted: Fri Feb 09, 2007 6:39 pm
by Heavyiron
но по теории юзабилити знакомое наоборот удобнее
Кому знакомое, а кому и приедается везде одно и то же ;) Хотя это ИМХО.
А так хотел сказать, что начинание хорошее: отсутствие стандартных gui-компонентов сдерживает развитие многих программ.

Posted: Mon Feb 12, 2007 10:57 pm
by Mario79
andrew_programmer
Заметил некоторые глюки:
1) В демках не работают горизонтальные скроллеры.
2) Обе демки невозможно перемещать по экрану.
3) Обе демки не хотят нормально завершиться и подвешивают Тинипад, который их скомпилировал и запустил.
Также неплохо бы разбить библиотеку на отдельные компоненты и чтобы не используемое отсутствовало.

Posted: Mon Feb 12, 2007 11:51 pm
by andrew_programmer
1) Это не глюк.Я хотел сделать и горизонтальную прокрутку,но почему-то у меня не получилось(хотя я уже реализовывал этот алгоритм в ANIMAGE ).Поэтоу в названии файла присутствует слово "vertical".Может дело в том, что я писал это в 3-ем часу ночи.

2)Невозможно перемещать,потомучто окна неперемещаемые.Главный смысл демки в том, чтобы было понятно как пользоваться компонентами программисту.

3)Наконец-то нашёлся ещё один человек,наблюдающий те-же глюки,что и я уже давно наблюдаю.
Это не вина демок.Это вина: то-ли Колибри-FASM-а, то-ли ошибка в работе файловой системы(что мало вероятно), то-ли ещё что-то.

Когда diamond пофиксил этот баг,то я думал что простился с ним навсегда.Запущенные из Тинипад-а программы действительно перестали намертво вешать систему.Теперь они вешают только Тинипад.Причём это происходит не совсеми программами,а только с некоторыми(в числе которых и мои демки).

>Также неплохо бы разбить библиотеку на отдельные компоненты и чтобы не используемое отсутствовало.

Тоесть,чтобы не грузить в память всю DLL, а грузить DLL-ки с отдельными компонентами ?

Единственный выигрыш,который будет получен - это экономия оперативной памяти на 2-10 килобайт(в будущем до 50-ти килобайт).А вот на дискете эти маленькие DLL-ки займут лишние секторы.
К тому-же некоторые компоненты используют общие процедуры(например градиентные заливки).Это приведёт к дублированию части кода в DLL-ах с разными компонентами,что увеличит размер каждой из них на 1-3 килобайта.

Posted: Tue Feb 13, 2007 8:07 am
by Mario79
andrew_programmer
Единственный выигрыш,который будет получен - это экономия оперативной памяти на 2-10 килобайт(в будущем до 50-ти килобайт).А вот на дискете эти маленькие DLL-ки займут лишние секторы.
Если не иметь этой DLL в общей папке дистрибутива, то придется запихивать в отдельную папку для каждой программы, а это увеличит разеры еще больше. Я исходил из этих предпосылок когда писал эту идею.