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

Everything you can't fit into other forums
  • ?
    Attachments
    example (7.93 KiB)
    Как вам такая кнопка и события?
    Downloaded 227 times
    Технологии меняют мир, а я - меняю технологии.
  • инициализация в Си
    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();
    Технологии меняют мир, а я - меняю технологии.
  • Можешь ещё скрины выкладывать. В меню, в категории разное есть screenShooter.
  • Внешний вид сейчас не самое критичное, главное архитектурно все сделать правильно. Можешь следующим меню сделать? Я бы начал в деле обкатывать сие творение, во время рвботы над читалкой.
    to infinity and beyond
  • Дожили... Простое окно, с простой кнопкой - 8kb весит! :roll:
    Attachments
    Screenshot.png
    Screenshot.png (20.18 KiB)
    Viewed 7364 times
  • Yason wrote:Дожили... Простое окно, с простой кнопкой - 8kb весит! :roll:
    я из исходника лексер не убрал, + парсер css. И еще много чего. И без сжатия kpack
    Технологии меняют мир, а я - меняю технологии.
  • Вполне приемлимо.
    Из хаоса в космос
  • Дабы не разводить лишние темы, пример реализации контекстного меню. Есть какие-нибудь замечания?

    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
    Attachments
    libkmenu.zip (7.91 KiB)
    Downloaded 209 times
    menu (25 KiB)
    Downloaded 203 times
    Last edited by Veliant on Mon Jul 27, 2015 6:29 pm, edited 6 times in total.
  • Годно.
    Из хаоса в космос
  • 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
    Не плохо, может лучше меню без создания нового процесса, а с помощью прорисовки?
    Технологии меняют мир, а я - меняю технологии.
  • Попытка реализации главного меню окна
    Attachments
    menu (29 KiB)
    Downloaded 206 times
  • Вах! Тоже годно :)

    Заголовок мелькает. Неплохо бы текст заголовка окна рисовать в картинку скина.
    Из хаоса в космос
  • Для этих целей было бы удобно, чтоб система позволяла создавать окна, которые не отображались бы на панели задач, и не переводили бы фокус на себя. А при потере фокуса происходило бы закрытие окна.
    Тогда будет удобно рисовать меню, всплывающие подсказки, выпадающие списки
  • 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();
    где можно найти код этих классов?
    Чудеса случаются! Это вам любой программист скажет! :)
  • Who is online

    Users browsing this forum: Bing [Bot] and 5 guests