Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Jul 23, 2019 6:10 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 240 posts ]  Go to page Previous 1 2 3 4 516 Next
Author Message
 Post subject:
PostPosted: Tue Feb 13, 2007 8:32 am 
Offline

Joined: Wed Jul 05, 2006 9:00 am
Posts: 81
Mario79
Эту DLL можно было как раз и включить в общую папку дистрибутива.


Top
   
 Post subject:
PostPosted: Tue Feb 13, 2007 10:52 am 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
andrew_programmer
Насколько это понял я, тебе предложили засунуть все компоненты в одну DLL, а не делать отдельную DLL для каждого из них (что было бы маразмом)


Top
   
 Post subject:
PostPosted: Tue Feb 13, 2007 1:03 pm 
mike.dld
Этот маразм предложил я, а не он.


Top
   
 Post subject:
PostPosted: Wed Feb 21, 2007 5:40 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Внимание!
Объявление.

Пре6длагаю ВСЕМ разработчикам GUI объединить свои наработки и усилия в одну единую, стандартную DLL.А имеено в libGUI.Естествеено с сохранением всех авторских прав программистов.

Зачем объединять в одну DLL, а не делать каждый свою ?

А дело в том,что совместными усилиями мы сделаем оптимальную GUI библиотеку и программистам не придётся перестраиваться под GUI наработки разных разработчиков.


Я дошёл до того момента, когда мне нужно писать под Колибри приложения с УДОБНЫМ и СТАНДАРТНЫМ интерфейсом.Поэтому я продолжаю свои наработки по GUI прямо во время учебного семестра.Потомучто мне для моей научной программы( spektr ) необходим удобный интерфейс.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 8:43 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Это правильное решение и я поддреживаю эту идею :))) Необходимо завести на svn ветку libGUI. Я перемещу туда все свои наработки.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 9:09 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
andrew_programmer
Если делать общую ДЛЛ то надо стандартизировать интерфейс к контролам, т.е. чтобы все функции для работы с ними были похожи - создание, удаление, установка размеров, перерисовка и т.п.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 9:14 am 
Offline

Joined: Wed Jul 05, 2006 9:00 am
Posts: 81
andrew_programmer
Я за.
Serge
Согласен.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 9:54 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Для такой библиотеки своя malloc понадобится чтобы память под контролы выделять. Я скоро доделаю dlmalloc для приложений можно будет её включить в библиотеку.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 11:10 am 
Offline

Joined: Wed Jul 05, 2006 9:00 am
Posts: 81
Serge
А я выделяю в своих библиотеках память функцией 68.12. Чем плох такой подход?


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 11:27 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
YELLOW
Она выделяет память страничными блоками. Если надо выделить немного то будет большой перерасход. Это как VirualAlloc() в Win, если надо выделить много то в самый раз а как замена new и malloc нет. malloc будет запрашивать блок у системы через 68.12 и дальше отщипывать у него. Если блок освободится она вернёт его ядру.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 12:05 pm 
Offline

Joined: Wed Jul 05, 2006 9:00 am
Posts: 81
В этом отношении не спорю. В одной из процедур мне нужен блок в 54 байта а выделяется 4к, что конечно многовато.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 1:29 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
>Если делать общую ДЛЛ то надо стандартизировать интерфейс к контролам, т.е. чтобы все функции для работы с ними были похожи - создание, удаление, установка размеров, перерисовка и т.п.

Serge, ты предугадал мою первую тему для обсуждения. :)

Итак, начинаем.

Параметры компоненту можно передавать ввиде указателя на структуру.Структура специфична для каждого вида компонентов.Я предлагаю передавать указатель на структуру через стек.

1)Создание компонента.

В моих наработках по скролерам и кнопкам инициализация происходит при первом вызове контрола.Через стек передаётся указатель на структуру.Происходит инициализация компонента и устанавливается флаг о том, что контрол был инициализирован(флаг храниться в структуре пердаваемой контролу).Во время инициализации компонент перерисовывается полностью.

Можно инициализировать как делал я, а можно для каждого GUI компонента сделать отдельную функцию для инициализации.

Как посткпим с инициализацией ?

2)Удаление.

Можно возложить эту роль на сам компонент, а можно сделать отдельную функцию для каждого компонента.

3)Установка размеров.
Мой вариант.
Установка размеров компонента происходит во время инициализации компонента, когда в структуру, специфичную для каждого GUI компонента происходит занесение информации.А потом эта структура передаётся самому компоненту, который и производит инициализацию.
А какой вариант предлагаете вы ?

4)Перерисовка компонента.

Как это реализовано у меня.
Вся информация о сотоянии компонента: его инициализации, активности или не активности, разрешение на перерисовку, и т.д. храниться в специальном байте, находящимся в структуре, передаваемой компоненту.
При изменении состояний мыши в этом байте устанавливаются соответствующие биты и происходит вызов компонента.По сотоянию битов и координат мыши компонент судит о том, нужно ли производить перерисовку или нет.И нужно ли во время перерисовки компонента перерисовавать его полностью, а не только активную часть.

А что предлагаете вы ?

Обсуждаем.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 2:03 pm 
Offline

Joined: Wed Jul 05, 2006 9:00 am
Posts: 81
andrew_programmer
1) Отдельная функция для инициализации каждого вида компонентов или одного компонента. Поясни, пожайлуста, а то имхо не совсем понятно. Передачу параметров лучше реализовать через стек чтобы можно было использовать STDCALL.

2) Лучше отдельную функцию.

3) Нормальный вариант. Надо только будет сделать функцию изменения размера компонента после его создания.

4) Тоже вполне логично.

Еще надо подумать над тем, как прозрачно реализовать создание большого числа компонентов. Например реализовать массив структур, т.е. при создании компонента создается необходимая структура, а пользователю возвращается только указатель на нее и дальнейшее взаимодействие с компонентом происходит через указатель.

Serge
Что мешает программисту создавать и использовать собственные сообщения в программе. Ведь без этого управлять многокомпонентной системой будет сложно.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 2:15 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
> Отдельная функция для инициализации каждого вида компонентов или одного компонента. Поясни, пожайлуста, а то имхо не совсем понятно.

Лучше забыть про этот вариант.Он негодиться.

>Еще надо подумать над тем, как прозрачно реализовать создание большого числа компонентов. Например реализовать массив структур, т.е. при создании компонента создается необходимая структура, а пользователю возвращается только указатель на нее и дальнейшее взаимодействие с компонентом происходит через указатель.

Предлагаю массив из структур.При изменении состояния мыши или клавиатуры происходит передача указателя на структуру, находящуюся в массиве, компоненту.Он смотрит, активизирован ли данный компонент мышью или клавиатурой - или нет.Если активизирован, то происходит взаимодействие.
Это действие в цикле проделывается со всеми компонентами массива.

Интересно, что скажет <Lrz> по поводу всего этого.


Top
   
 Post subject:
PostPosted: Thu Feb 22, 2007 2:34 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Quote:
Параметры компоненту можно передавать ввиде указателя на структуру.Структура специфична для каждого вида компонентов.Я предлагаю передавать указатель на структуру через стек.

Поддерживаю, у меня в нынешней реализации указатель на информационную структуру передается через edi и смещением можно добраться до любого значения.
Вот пример:
Code:
macro version_op           ;для совместимости со старыми версиями optionbox все цвета задаются ручками
{
op_struc_size=26
option_group equ [edi]
op_left equ [edi+4]    ;координата начала рисования по х
op_top equ [edi+6]   ;координата начала рисования по у
op_color equ [edi+8]
op_border_color equ [edi+12] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
op_text_color equ   [edi+16];[edi+4]  ;цвет текста
op_text_ptr equ [edi+20]    ;указатель на начало текстовой строки
op_text_length equ [edi+24] ;длина надписи (2^64 такой длины может быть текст)
}

macro   version_op1        ;продвинутая версия, использует цвета скина.
{
op_struc_size=14
option_group equ [edi]
op_left equ [edi+4]    ;координата начала рисования по х
op_top equ [edi+6]   ;координата начала рисования по у
op_color equ [sc.work] ;
op_border_color equ [sc.work_graph] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
op_text_color equ   [sc.work_text];[edi+4]  ;цвет текста
op_text_ptr equ [edi+8]    ;указатель на начало текстовой строки
op_text_length equ [edi+12] ;длина надписи (2^64 такой длины может быть текст)
}

И обработчик
Code:
macro draw_option_boxes start,end   ;рисовать чек боксы
{
   mov   edi,start         ;Указатель на начало данных чек боксов т.е. на начало данных первого чекбокса
   mov   ecx,((end-start)/op_struc_size) ;Количество чек боксов
@@:
   call   option_box.draw                  ;Отобразить чек бокс
   add   edi,op_struc_size               ;Указатель на последующие чек боксы  т.е. +28
   loop   @b   ;прыгнуть если в ecx/cx значение не 0 на верхнюю @@
}

Создание компонента: Как я понимаю. Создаем компонент копируем из DLL в выделеную память функции и потом передаем этим функциям параметры, а они уже обрабатывают их. Создание компонента в этом случае - инициализация памяти, копирование и передача параметров, начальная прорисовка компонента. Удаление это просто особождение памяти, выделеная для копирования функций обработки. Т.е удаление занимается отдельная функция. Хотя в большинстве случаев она просто будет срабатывать при завершении приложения, просто отдавая системе всю свободную память. Еще очень важно все свои данные компоненты хранят отдельно от кода. Т.е. необходимо добиться что бы один код обрабатывал сколь угодно компонентов, на пример как это сделано в checkbox,editbox,optionbox(radiobatton).

3) Размеры задаются во время инициализации, как и предлагаешь ты, но так же нужно предусмотреть изменение размеров компонента, в моих компонентах, мне достаточно поменять зачения в структуре и перерисовать компонент.
4) Согласен


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 240 posts ]  Go to page Previous 1 2 3 4 516 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited