Page 2 of 2

Posted: Fri Jun 24, 2005 2:59 pm
by Иван Поддубный
Если кому-нибудь интересно, я выложил исходники своей кривой незаконченной GUI-библиотеки:
http://poddubny.hut1.ru

Posted: Fri Jun 24, 2005 4:53 pm
by ipr
хм... Всё конечно хорошо, но Иван, она же для С--!
Если бы для асма!...

Posted: Fri Jun 24, 2005 8:18 pm
by Иван Поддубный
Для асма нужна поддержка ООП, которой пока нет.

Posted: Fri Jun 24, 2005 8:23 pm
by ipr
Иван Поддубный wrote:Для асма нужна поддержка ООП, которой пока нет.
В том то и дело! Я например для того асм и учу, чтоб под меось покодить. А на С я и так смогу, но нет желания.

Posted: Wed Jun 29, 2005 1:58 pm
by FreGL
Вопрос немного не в тему, а больше уже относится к ООП на асме (не знаю стоит ли пока начинать новую тему, поэтому кинул сюда)

Вобщем все мы ждём выхода в свет менеджера памяти, ждём и лелеем надежду что вот вот оно появится :)...

В связи с этим возникают некоторые вопросы на счёт выделения памяти...

Самый мучительный вопрос для меня пока это - создание динамических обьектов...

Каким макаром копировать образ обьекта (которая записана в struc) в оператоиву и как с ним потом обращаться, вызывая стандартные методы и свойства?

Posted: Fri Jul 01, 2005 11:54 am
by FreGL
Вот давеча вчера ночью сидел и чесал репу, каким образом надо отлавливать фокус ввода (да и вообще фокус на текущий момент контрола под указателм мышки)... И пока ничего лучшего, чем просмотр массива , в котором занесены данные о границах контролов (т.е. площадь, какую они занимают на форме)

Первое что мне помешало, так это невипительный БАГ в эмуляторе Халявина, версия 0.33... на десятой функции (отлов события) указатель команд улетает в ниибенную даль без ведомых причин... в MeOSEmul всё работает нормально, за исключением шрифтов (кто подскажет как с этим бороться? Вместо символов выдаются прямоугольники со всяким бредом :( )

Вобщем идея такова у меня - юзер водит мышью, соответственно меняются её координаты, в текущий момент мышь может находиться тока над одним контролом, поэтому надо проверить в теккущий момент какому контролу она принадлежит...
что бы не вызывать каждый раз метод всех контролов .CheckFocus , как это я делал раньше, я создаю массив (в идеале будет список), в котором будут храниться структуры вида GControl:
struc TRect ;описание прямоугольника
{
.X1 dw 0
.Y1 dw 0
.X2 dw 0
.Y2 dw 0
}

struc GControl
{
.ID dw 0 ;идентификатор контрола
; .Focus db 0 ; признак активного фокуса
.Area TRect
.Activate dd 0; указатель на функцию активации контрола (подсветка, выступ, подчёркивание и т.п.)
.DefaultAction dd 0 ;указатель на функцию по умолчанию (при клике: ввод текста, перемещение и т.п.)
}

Вобщем допустим есть процедуры типа
1)RegisterControl - регистрируется текущий контрол в массиве
2)UnregisterControl - удаляется из него
3)CheckActiveFocus - проверка по массиву, в области которого контрола находится указатель мышки, заносится в переменную ActiveControl...

Вобщем выложу ниже наброски, но пока они не рабочие (не до конца), если есть возможность что то улучшить или прооптимизировать, пишите нижу я обязательно прочту!
И ещё, можно ли с массивами работать через строковые регистры edi и esi командами lods movs scas? (проблема в том что массив не просто байтовый, а осстоит из структур)... На С-- переходить не сильно хоцца ИМХО смысл МеОСи и его фичи просто отпадает...

И так мои наброски

Code: Select all

struc	TRect
	{
		.X1	dw	0
		.Y1	dw	0
		.X2	dw	0
		.Y2	dw	0
	}


struc	GControl
	{	.C_START:
		.ID		dw	0
		.Focus		db	0
		.Area		TRect
		.Activate	dd	0	;pointer
		.DefaultAction	dd	0	;pointer
		.C_END:
	}

Control 	GControl


Cursor		dw	0
Registered	dw	0	;iteration

XMouse		dw	0	;temporarely here...
YMouse		dw	0	;Will be used Evt.XMouse or Evt.Mouse.X instead

ControlSize = Control.C_END-Control.C_START

Components	 rb    2*(ControlSize)	;  Array of Components [1..MaxCount] MaxCount=...? List is better, but now i haven't it


RegisterControl:
	;19 байт на структуру
	inc	   [Registered]   ;i=i+1
	mov	   ebx,Components	;загоняем указатель на массив компонент
	xor	   edx,edx		;очищаем переменный регистр
	mov	   dx,[Control.ID]	;ID
	mov	   word [ebx+Components+Cursor+0],dx ;записываем слово (ID)
	mov	   dl,[Control.Focus]
	mov	   byte [ebx+Components+Cursor+2],dl ;записываем байт (бит еденица или ноль - тип булев) признак фокуса
	mov	   dx,[Control.Area.X1]
	shl	   edx,16
	mov	   dx,[Control.Area.Y1]
	mov	   dword [ebx+Components+Cursor+2+1],edx ; записали верхнюю точку прямоугольника области контрола
	mov	   dx,[Control.Area.X2]
	shl	   edx,16
	mov	   dx,[Control.Area.Y2]
	mov	   dword [ebx+Components+Cursor+2+1+4],edx ; записали нижнюю точку прямоугольника области контрола
	mov	   edx,[Control.Activate]
	mov	   dword [ebx+Components+Cursor+2+1+4+4],edx ; записали адрес обработчика события активации контрола
	mov	   edx,[Control.DefaultAction]
	mov	   dword [ebx+Components+Cursor+2+1+4+4+4],edx ; записали адрес обработчика события поумолчанию (текст, флажок, скролл и тп)
	mov	   eax,dword [Registered]
	mov	   edx,[ControlSize]
	add	   eax,dword [Cursor]
ret

FocusLoop:
	.I	   dw	0
	xor	   eax,eax
	mov	   ebx,Components
	mov	   cx,[Registered]
	.@@BeginScanControlFocus:
	inc	   [.I]
	mov	   eax,dword  [.I]
	mov	   edx,[ControlSize]
	mul	   edx
	mov	   dx,word [ebx+eax+3]
	;проверка  X>=Х1?
	;...
	cmp	   [E.XMouse],dx
	jnge	   .@@NotInArea
	mov	   dx,word [ebx+eax+3+2]
	;проверка  Y>=Y1?
	cmp	   [E.YMouse],dx
	jnge	   .@@NotInArea
	mov	   dx,word [ebx+eax+3+2+2]
	;X<=X2?
	cmp	   [E.XMouse],dx
	jnle	   .@@NotInArea
	mov	   dx,word [ebx+eax+3+2+2+2]
	cmp	   [E.YMouse],dx
	jnle	   .@@NotInArea
	;Y<=Y2?
	;now cursor in Area of Control, must call .Activate (highlight for example)
	mov	   edx,[ebx+eax+3+2+2+2+2] ;get pointer to .Activate method
	cmp	   edx,0
	je	   .@@NotInArea
	call	   edx	;call .Activate
	.@@NotInArea:
	loop	   .@@BeginScanControlFocus
	.@@EndScanning:
ret

Posted: Sun Jul 17, 2005 1:44 pm
by FreGL
вобщем не решил себе трахать мозги и программить контролы на С-- (это конечно не идеал, но хотяб так на первое время, тем более скорее всего все они будут в динамических либах)..
кто знает как связаться с Иваном Поддубным? за основу взял его контролы, иедя понятно не пока не до конца, хотелось бы с ним побеседовать.. если кто знает его координаты типа аси и прочего просьба скинуть мне на асю 166399000...

Posted: Fri Aug 19, 2005 1:16 pm
by Guest
Здравствулте! все. Я читаю эти форумы на немного дней и я заметил эту резьбу здесь поэтому я думал я вывесит некоторые подобные идеи.
http://babelfish.altavista.com/.../Project:Gui/Widgets/Widget_Manager

Я надеюсь что легко увидеть я пытаюсь сделать. Я надеюсь текст переводит наилучшим образом достаточно. Я использую переводчика (меня могу прочитать английскую язык только) поэтому я хотел был бы знать вы думаете этого проекта. Мнения, идеи, оптимизирования... все радушны. Будет моим первым проектом агрегата поэтому я могу некоторая помощь но я не иметь идеи совсем работаться вне в моем разуме до v1.0.

Posted: Fri Aug 19, 2005 1:42 pm
by Paizle
огорченно

Я не уверен почему то соединение не работает. Вы можете перевести эту страницу

http://menuet.homelinux.net/Project:Gui ... et_Manager

путем использование

http://babelfish.altavista.com

Posted: Fri Aug 19, 2005 2:46 pm
by Guest
Paizle
Babel Fish - very poor translator. I transferred this phrase with its aid and I think you wonderfully you see as it it mangles words. We little that is what understood from your previous communication, but from the soul they laughed...

Posted: Fri Aug 19, 2005 9:17 pm
by Paizle
I can see from the translation I am reading now that my post is a bit mangled. Here is my post in English... basically

Hi all.

I have been reading these forums for the past few days now (not long). I noticed that this thread is a bit is on a related topic so I will post some similar ideas.

http://menuet.homelinux.net/Project:Gui ... et_Manager

I hope the text can be translated well enough for you too understand. I have been using a translator for these forums (I read English only) and I wanted to know what you think of this project.

Opinions, ideas, optimizations... all are welcome. This will be my first project in assembly so I may need some help, however I have the ideas worked out mostly, right up until version 1.0

Posted: Thu Aug 25, 2005 5:35 pm
by EXIS
Всем здрасти! Я вернулся, работу над 3D я пока отложу до лучших времен

Вообще со времен работы русских с МЕОС было собранно много отечественных ГУИ, даже я когда-то этим занимался
правда исходники сейчас утеряны. Хотелось бы узнать желательно в этой теме кто какие ГУИ сейчас разрабатывает
на каком языке и какие приемущества имеются? Что касается динамического ГУИ это я думаю реализуемо даже на асме...
А что такое ООП???

Posted: Fri Aug 26, 2005 11:12 am
by FreGL
А что такое ООП???
Интересный вопрос... :) - это же святая святых програминга - ОбьектноОриентированноеПрограммирование

По теме, чтото иссякло желание этим заниматься в силу сырости оси

Posted: Fri Aug 26, 2005 12:23 pm
by EXIS
Ну я скоро выложу пример нового динамического (в виде динамического стека) ГУЙ на асме
Помню когда-то с Немом мы делали nobodybasic помоему правда потом я утерял исходники
ща взялся заново, получилось нечто по хоже но уже лучше
Только мне кажется в ядре не хватает функций... например
как мне кажется очень! нужен новый тип кнопок который реагирует не на клик , а на просто нажатие...
еще интересует вопрос что делать с входящими событиями events?

Вот мой план:
с перересовкой все просто просто перересовываются все компоненты в окне
событья клавы поступают в компонент на который наведен фокус
нажатие кнопки предается компоненту которму эта кнопка пренадлежит

что делать с событиями от мыши и от ipc я пока не думал...

Кроме того окно я думаю не стоит считать за компонент вообще.

вот сырая версия ГУЙ можете кидат помидоры
http://www.deck4.narod.ru/-V-GUI.rar

Posted: Sat Aug 27, 2005 2:27 pm
by EXIS
Архив обновлен теперь можно удалять компоненты
таблица состоит из input боксов (это не новый компонент)

Новое обновление теперь можно навести на компонент фокус с помощью TAB или мыши и удалить его нажатием на кнопку FocDel. Кроме того решены проблемы с динамическим стеком, теперь можно, удалять вставлять блоки памяти без глюков.
Начата работа над проекцией компонента на канву, но так как текст невозможно отобразить на канву, то проекция будет не полноценна. Я думаю требуется в вести в ядро или в GFX дрова от mike.dld спец функции которые будут выводит примитивы не только на экран но и на канву.

устаревший скриншот
Image