Page 1 of 2

Тест gui элементов

Posted: Sat Jul 18, 2015 2:08 am
by paulcodeman
Здесь буду выслушивать идеи/рекомендации/баги элементов

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 2:21 am
by paulcodeman
?

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 2:36 am
by paulcodeman
инициализация в Си
button b;
b.click = #onMouseClick;
b.up = #onMouseUp;
b.down = #onMouseDown;
b.move = #onMouseMove;
b.caption = "test";
b.style = "width:150;height:20;top:30;left:30;";
b.create();

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 8:04 am
by Pathoswithin
Можешь ещё скрины выкладывать. В меню, в категории разное есть screenShooter.

Posted: Sat Jul 18, 2015 10:54 am
by punk_joker
Внешний вид сейчас не самое критичное, главное архитектурно все сделать правильно. Можешь следующим меню сделать? Я бы начал в деле обкатывать сие творение, во время рвботы над читалкой.

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 1:03 pm
by Yason
Дожили... Простое окно, с простой кнопкой - 8kb весит! :roll:

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 1:17 pm
by paulcodeman
Yason wrote:Дожили... Простое окно, с простой кнопкой - 8kb весит! :roll:
я из исходника лексер не убрал, + парсер css. И еще много чего. И без сжатия kpack

Re: Тест gui элементов

Posted: Sat Jul 18, 2015 10:45 pm
by Leency
Вполне приемлимо.

Re: Тест gui элементов

Posted: Mon Jul 27, 2015 4:07 pm
by Veliant
Дабы не разводить лишние темы, пример реализации контекстного меню. Есть какие-нибудь замечания?

P.S.
Добавил вариант ввиде obj-библиотеки.

Как использовать
1) Вызываем kmenu_init и передаем ей структуру полученную через 48.3 (позже изменю архитектуру)
2) Создаем используя функцию ksubmenu_new нужное количество объектов меню.
3) Создаем и добавляем к меню новые элементы используя ksubmenu_add в паре с kmenuitem_new.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*
4) Для отображения меню вызвать функцию ksubmenu_draw, указав ей какое меню и в каких координатах вывести. Последний параметр всегда 0.

Code: Select all

// код инициализации из примера
kmenu_init(&theme);
	
	menu = ksubmenu_new();
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	submenu1 = ksubmenu_new();
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu1));
	
	submenu2 = ksubmenu_new();
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu2));
Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t

Управление мышкой и клавишами курсора + esc/enter

Re: Тест gui элементов

Posted: Mon Jul 27, 2015 4:22 pm
by Leency
Годно.

Re: Тест gui элементов

Posted: Mon Jul 27, 2015 9:37 pm
by paulcodeman
Veliant wrote:Дабы не разводить лишние темы, пример реализации контекстного меню. Есть какие-нибудь замечания?

P.S.
Добавил вариант ввиде obj-библиотеки.

Как использовать
1) Вызываем kmenu_init и передаем ей структуру полученную через 48.3 (позже изменю архитектуру)
2) Создаем используя функцию ksubmenu_new нужное количество объектов меню.
3) Создаем и добавляем к меню новые элементы используя ksubmenu_add в паре с kmenuitem_new.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*
4) Для отображения меню вызвать функцию ksubmenu_draw, указав ей какое меню и в каких координатах вывести. Последний параметр всегда 0.

Code: Select all

// код инициализации из примера
kmenu_init(&theme);
	
	menu = ksubmenu_new();
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	submenu1 = ksubmenu_new();
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu1));
	
	submenu2 = ksubmenu_new();
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
	ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
	
	ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu2));
Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t

Управление мышкой и клавишами курсора + esc/enter
Не плохо, может лучше меню без создания нового процесса, а с помощью прорисовки?

Re: Тест gui элементов

Posted: Fri Jul 31, 2015 12:37 pm
by Veliant
Попытка реализации главного меню окна

Re: Тест gui элементов

Posted: Fri Jul 31, 2015 1:32 pm
by Leency
Вах! Тоже годно :)

Заголовок мелькает. Неплохо бы текст заголовка окна рисовать в картинку скина.

Re: Тест gui элементов

Posted: Fri Jul 31, 2015 1:48 pm
by Veliant
Для этих целей было бы удобно, чтоб система позволяла создавать окна, которые не отображались бы на панели задач, и не переводили бы фокус на себя. А при потере фокуса происходило бы закрытие окна.
Тогда будет удобно рисовать меню, всплывающие подсказки, выпадающие списки

Re: Тест gui элементов

Posted: Sun Aug 02, 2015 11:57 am
by Nikolai1
pavelyakov wrote:инициализация в Си
button b;
b.click = #onMouseClick;
b.up = #onMouseUp;
b.down = #onMouseDown;
b.move = #onMouseMove;
b.caption = "test";
b.style = "width:150;height:20;top:30;left:30;";
b.create();
где можно найти код этих классов?