OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 01 Апрель, 2023 23:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 316 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16
Автор Сообщение
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 17 Март, 2023 09:46 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3595
arisu писал(а):
но ведь и не мешает! ;-)

Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 17 Март, 2023 10:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3595
arisu писал(а):
я сделал так: ввёл в StdWindows.Window булеву переменную `isRoot`. она делает ровно ничего, просто существует. API позволяет назначить какое-то окно главным (у всех остальных окон тогда этот флажок сбрасывается). чисто информационная штука, кроме как посмотреть на неё и установить StdWindows больше с ней ничего не делает, всё остальное — на усмотрение кода приложения. можно использовать флажок, можно не использовать. соответственно, StdConfig для рут-окна этот флажок ставит апи-вызовом, и дальше я могу его проверять. а если кто-то не поставит — ну, не поставит, ничего страшного. надо бы документировать будет его потом, да и всё. впрочем, StdWindows вообще не документированы, увы. (это не претензия, это сожаление. я может постараюсь как-нибудь скелет документации сделать.)

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

Про документацию. Со StdWindows история незаконченная, так как у нас с Антоном в процессе работы разошлись мнения. Он тяготеет к тому, чтобы снизить использование Windows, заменяя это на вызовы StdWindows, а я же вижу StdWindows как реализацию интерфейса, а вызовы надо делать также через Windows. Его аргументы заключались в том, что может существовать единовременно несколько фабрик, и поэтому обращение через одну фабрику не сделает обход всех окон всех фабрик. Однако в 2.0 такой ситуации не возникает, так как предполагается существование только одной фабрики после загрузки системы. Так оно как-то всегда было и сейчас остаётся. Так что и документация пока может быть с пометкой, что сам модуль ещё не зафиксирован в своём виде, так как не был подвержен какой-то ревизии сообществом.


Вот пример, как можно понять, что в окне прикреплено меню сверху. Тогда вы все окна в которых есть меню, сможете обновить.
Код:
MODULE CheckMainWindow;

IMPORT Windows, StdDocuments, StdMenus, Views, Models, Services, Log;

PROCEDURE Do*;
VAR
   w: Windows.Window; t: Views.Title;
   m: Models.Model; c: StdDocuments.Context;
   find: BOOLEAN;
   type: ARRAY 64 OF CHAR;
BEGIN
   w := Windows.dir.First();
   WHILE w # NIL DO
      w.GetTitle(t);
      IF w.doc IS StdDocuments.Document THEN
         m := w.doc.ThisView().context.ThisModel();
         IF m IS StdDocuments.Model THEN
            c := m(StdDocuments.Model).First();
            find := FALSE;
            WHILE (c # NIL) & ~find DO
               Services.GetTypeName(c.view, type);
               IF type = "StdMenus.LineView" THEN
                  find := TRUE
               END;
               c := m(StdDocuments.Model).Next(c)
            END;
            IF find THEN
               Log.String(t); Log.Ln;
            END;
         END;
      END;
      
      w := Windows.dir.Next(w)
   END;
   
END Do;

END CheckMainWindow.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 17 Март, 2023 11:17 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
про несколько мониторов: я, признаться, не вижу ни одной причины иметь два «главных» окна в одном процессе. что возможно — это хорошо. но на практике — зачем?

про перебор… спасбо, да. я могу, конечно, так заглядывать внутрь. но мне это категорически не нравится: это ведь тоже хак. к тому же никто не мешает всунуть меню и в «подокно». ну да, это вряд ли будет работать как задумывалось, но в теории-то можно! ;-) нужен API `StdWindows.IsDetached()` — я себе его таки сделал.

про StdWindows: я вижу, что там ещё оно не очень утряслось. но документация всё равно будет полезна, а то иначе без чтения исходников положительно ничего более-менее нетривиального и связаного с окнами не написать.

вообще, мне тоже не нравится, что StdWindows, по сути, занимается дублированием Windows. я тоже не вижу причины иметь разные фабрики — но, возможно, я чего-то не учёл тут. однако скорее всего в LC я рано или поздно займусь чисткой этого всего, и сделаю работу с окнами через Windows: мне так кажется правильней.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 17 Март, 2023 11:20 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
Иван Денисов писал(а):
arisu писал(а):
но ведь и не мешает! ;-)

Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями.
когда мы ходим во внешние библиотеки с подобными функциями, то про строгую типизацию можно смело забыть всё равно. если бы в интерфейсных модулях можно было иметь код и не высовывать наружу variadics — то да: можно было бы наделать скрытых импортов, и высунуть типизированое. но так нельзя, и проще добавить "…". а совместимость вниз с 1.7 всё равно уже поломана, чего тут переживать-то… как вариант — разрешить "…" только в интерфейсных модулях.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Суббота, 18 Март, 2023 03:40 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
продублирую и здесь:

мой компилятор, кстати, можно (и нужно, я считаю) полностью утаскивать в mainline, достаточно поменять `inCP := FALSE;` на `inCP := TRUE;` в `DevCPP.Module`. совместимость почти полная, исключение ровно одно: проверка на отсутствующие RETURN более строгая. утаскивать затем, что у меня точно есть багфиксы к оригиналу, которых в mainline нет (а какие точно — я уже не помню). заодно в майнлайне появится ассемблер для X86, приятная фича.

для утаскивания надо будет `UP.` поубирать, просто заменой на пустые строки, а также перевести обратно с моего SubsManager на StdLibrarian. в общем, мелочи.

DevAnalyzer тоже, с теми же изменениями (и я там докинул пару опциональных фич — типа не квакать про обращение к «неинициализированым глобалам» — это обычно false alarm).

а вот выборочно лучше оттуда ничего не переносить, если брать — то всё вместе. форматы ocf/osf я не менял, так что оно безопасно.

а! если соберётесь забирать — то мне надо будет вернуть поддержку COM обратно. лучше, в общем, если согласны — скажите мне, я тогда начну адаптацию к mainline сам. просто если нет, то я не буду париться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Суббота, 18 Март, 2023 08:04 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3595
arisu писал(а):
продублирую и здесь:

мой компилятор, кстати, можно (и нужно, я считаю) полностью утаскивать в mainline, достаточно поменять `inCP := FALSE;` на `inCP := TRUE;` в `DevCPP.Module`. совместимость почти полная, исключение ровно одно: проверка на отсутствующие RETURN более строгая. утаскивать затем, что у меня точно есть багфиксы к оригиналу, которых в mainline нет (а какие точно — я уже не помню). заодно в майнлайне появится ассемблер для X86, приятная фича.

для утаскивания надо будет `UP.` поубирать, просто заменой на пустые строки, а также перевести обратно с моего SubsManager на StdLibrarian. в общем, мелочи.

DevAnalyzer тоже, с теми же изменениями (и я там докинул пару опциональных фич — типа не квакать про обращение к «неинициализированым глобалам» — это обычно false alarm).

а вот выборочно лучше оттуда ничего не переносить, если брать — то всё вместе. форматы ocf/osf я не менял, так что оно безопасно.

а! если соберётесь забирать — то мне надо будет вернуть поддержку COM обратно. лучше, в общем, если согласны — скажите мне, я тогда начну адаптацию к mainline сам. просто если нет, то я не буду париться.

Так не делается, надо точно знать какие изменения для чего, чтобы в описании к коммитам было понятно. Также изменения любые могут привести к багам так что надо внимательно проверять, особенно в компиляторе. Опциональные фичи усложняют компилятор, поэтому также не ясно зачем ваши эксперименты переносить.

Чтобы было понятно больше про политику подготовки 2.0 - там приоритет на минимальном количестве изменений от 1.7.2. Чтобы сообщество приняло новую версию все изменения должны быть описаны, поэтому их должно быть минимальное количество. Все изменения либо решают какую-то проблему (падения сбои, нестабильность), либо связаны с поддержкой ранее выбранных существенных нововведений:
1. Плиточный интерфейс
2. Поддержка кросс-платформенной компиляции и сборки
3. Поддержка растров
4. Библиотекарь
5. Три уровня виртуальной файловой системы
Если есть какие-то исключения из этих правил, то это исключения, и количество таких изменений надо уменьшать, может что-то и назад откатить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Суббота, 18 Март, 2023 08:23 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
когда я правил ошибки — я ещё не делал коммитов, так что увы. да и мало коммиты помогут, потому что довольно часто переформатирую код, и иногда даже рефакторю, не особо переживая по поводу красивой коммит-истории. однако иногда я вместо рефактора наоборот: дублирую код, чтобы можно было более-менее формально доказать, что нововведения ничего не сломают и даже не активируются, если мы в режиме CP.

впрочем, это тот случай, когда я не только не настаиваю, но даже очень рад, что не надо: мне совершенно не хочется возвращать обратно COM. у себя я его из Kernel тоже выкусил, пришлось бы вести две версии кода: CP2 для LC, и CP2 для mainline.

баги, кстати, я в том числе собирал и по форуму центра: в майнлайне — на удивление — не все они были починены. я предложил забирать весь компилятор как раз потому, что я вряд ли смогу сейчас выбрать из моего кода только багфиксы: взять весь компилятор сильно проще. добавление расширений языка в mainline вообще не было целью, это сайд-эффект был бы. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 23 Март, 2023 03:55 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
пересадил багфиксы компилятора с форума центра, которые нашёл по своему коду, на мастер от тринадцатого марта. там у каждого есть ссылка на тему, откуда взято, так что можно свериться с источником. вроде бы ничего в процессе напортачить не. никаких улучшений, чисто багфиксы, которые просто не попали в форк/1.7, хотя должны были.


Вложения:
devpatches.7z [39.29 КБ]
Скачиваний: 8
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 27 Март, 2023 22:02 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
кстати, в HostPorts/Lin явная ошибка в `DrawingBuf()`: оно там пытается взять map и прочее, а это не надо. то есть, вот этот код:
Код:
         IF (rd.port.map # NIL) & (rd.port.gc # NIL) THEN (* buffered drawing *)
            map := rd.port.map; gc := rd.port.gc; Gdk.gdk_gc_ref(gc)
         ELSE (* unbuffered drawing *)
            map := rd.port.da.window; gc := Gdk.gdk_gc_new(map)
         END;
он неправильный код. его надо заменить на:
Код:
map := rd.port.da.window; gc := Gdk.gdk_gc_new(map);
а потому что map возникает в `SaveRect()`, и содержит в себе ту самую сохранённую область, в которую рисовать уж точно не надо. и в `MarkRect()` надо выкинуть условие в начале, и заменить на `map := rd.port.da.window;`.

это очевидный обломок старого кода двойной буферизации, который есть в фолде в `OpenBuffer()`. недосмотрели, не всё убрали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Вторник, 28 Март, 2023 06:18 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib):
Код:
CONST
   True* = 1;
   False* = 2;
нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 00:05 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3595
arisu писал(а):
эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib):
Код:
CONST
   True* = 1;
   False* = 2;
нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.

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

Спасибо, что заметили огреху. Поправлю в следующем же коммите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 06:38 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
на наше счастье оно практически нигде не используется. вы простите, если что, то выше не наезд был, то шутка был. после того как я час рыл свой код и пытался понять, что же в нём не так. пошутил как смог. ;-) так-то я понимаю, как такое получается, сам иногда при трансляции enum-ов и define так косячу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 07:33 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3595
arisu писал(а):
потому что map возникает в `SaveRect()`, и содержит в себе ту самую сохранённую область, в которую рисовать уж точно не надо. и в `MarkRect()` надо выкинуть условие в начале, и заменить на `map := rd.port.da.window;`.

это очевидный обломок старого кода двойной буферизации, который есть в фолде в `OpenBuffer()`. недосмотрели, не всё убрали.

в SaveRect идет map райдера, так что там другая переменная.

в OpenBuffer и CloseBuffer была произведена замена, а в селекторах старый вариант.

Изначально у Оберон микросистемс был такой вариант

Код:
   PROCEDURE (p: Port) OpenBuffer* (l, t, r, b: INTEGER);
      (*VAR rect: Gdk.GdkRectangle;*)
   BEGIN
      ASSERT(p.da # NIL, 20);
      IF l < 0 THEN l := 0 END;
      IF t < 0 THEN t := 0 END;
      IF r > p.w THEN r := p.w END;
      IF b > p.h THEN b := p.h END;
      IF (l < r) & (t < b) THEN
         p.bl := l; p.bt := t; p.br := r; p.bb := b;
         p.map := Gdk.gdk_pixmap_new(p.da.window, p.w, p.h , -1);
         p.gc := Gdk.gdk_gc_new(p.map)
      END
   END OpenBuffer;
      
   PROCEDURE (p: Port) CloseBuffer*;
   BEGIN
      IF p.map # NIL THEN
         Gdk.gdk_draw_drawable(p.da.window, p.da.style.white_gc, p.map, p.bl, p.bt, p.bl, p.bt, p.br - p.bl, p.bb - p.bt);
         Gdk.gdk_drawable_unref(p.map);
         p.map := NIL;
         Gdk.gdk_gc_unref(p.gc);
         p.gc := NIL
      END
   END CloseBuffer;


Антон заменил на

Код:
PROCEDURE (p: Port) OpenBuffer* (l, t, r, b: INTEGER);
      VAR rect: Gdk.GdkRectangle;
   BEGIN    (* Gtk-based double buffering *)
      rect.x := l; rect.y := t; rect.width := r - l; rect.height := b - t;
      Gdk.gdk_window_begin_paint_rect(p.da.window, SYSTEM.ADR(rect))
      
   END OpenBuffer;
      
   PROCEDURE (p: Port) CloseBuffer*;
   BEGIN Gdk.gdk_window_end_paint(p.da.window);
   END CloseBuffer;


Поэтому, действительно, будет логично подчистить код, и убрать это поле map из записи порта, и селекторый тоже убрать, оставив только новый вариант.

Утверждаем ли мы такую замену? Новый вариант всем устраивает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 11:12 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
Иван Денисов писал(а):
в SaveRect идет map райдера, так что там другая переменная.
а, действительно, прошу прощения. значит, я ошибся, никакого бага нет, просто мёртвый код болтается.

gc тоже из порта можно нюкнуть, btw.

про себя скажу, что вариант двойной буферизации от А.А. у меня лично отлично работает. полагаю, у остальных тоже (раз никто претензий особо не высказывал ;-), так что старый хранить явно не надо.


Последний раз редактировалось arisu Среда, 29 Март, 2023 11:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 11:16 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4668
Откуда: Россия, Орёл
Иван Денисов писал(а):
Утверждаем ли мы такую замену? Новый вариант всем устраивает?

А почему он должен не устраивать, если работает? Это же привязка к системе, а не основные интерфейсы ББ.
Другое дело, что GTK2 скоро окончательно похоронят.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 29 Март, 2023 11:20 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 586
Борис Рюмшин писал(а):
Другое дело, что GTK2 скоро окончательно похоронят.
«мы работаем над этим!» ;-) когда я закончу с рендером в LC, то можно будет переехать на чистую Xlib — это и есть цель. и можно будет пересадить это всё обратно на mainline.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 316 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2023, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB