ECTL_ADDCOLOR - добавить флаг ECF_AUTODELETE
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
ECTL_ADDCOLOR - добавить флаг ECF_AUTODELETE
Нельзя ли добавить флаг ECF_TEMPORARY, чтобы плагину не надо было вести учёт, что он там раньше раскрашивал в редакторе, а чтобы Фар сам удалял добавленный цвет после очередной перерисовки? То-есть, при перерисовке Фар использует данный цвет, затем проверяет наличие флага ECF_TEMPORARY, и если флаг установлен, Фар этот цвет удаляет.
Last edited by Shmuel on Fri 17 Oct, 2014 10:40, edited 1 time in total.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Думаю, дельное предложение. Только, наверное, Фар должен удалять *перед* очередной перерисовкой (вызова события)? Ну или это внутренние детали, Фару видней, когда это правильно сделать.
В частности, в Фарнет так и сделано, в каком-то смысле. По умолчанию модули-рисовальщики или скрипты PowerShell только добавляют цвета по требованию ядра Фарнет. А ядро само все эти цвета удаляет. И вроде еще ни разу не понадобилось действовать "не по умолчанию". Итого, авторам модулей-рисовальщиков получается меньше хлопот.
В частности, в Фарнет так и сделано, в каком-то смысле. По умолчанию модули-рисовальщики или скрипты PowerShell только добавляют цвета по требованию ядра Фарнет. А ядро само все эти цвета удаляет. И вроде еще ни разу не понадобилось действовать "не по умолчанию". Итого, авторам модулей-рисовальщиков получается меньше хлопот.
- zg
- zero-gravity
- Posts: 6038
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
если фар удалять будет всё таки перед очередной перерисовкоой, а точнее даже перед очередным ee_redraw, то нет.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Сделано в 4134.
Поскольку с данной областью кода Фара я ознакомился только сегодня, возможна неоптимальность внесённых изменений.
Новый флаг назван ECF_AUTODELETE.
Поскольку с данной областью кода Фара я ознакомился только сегодня, возможна неоптимальность внесённых изменений.
Новый флаг назван ECF_AUTODELETE.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Да, похоже тут не только неоптимальность. Удаляются автоматически только цветовые области, видимые на экране.
А делать цикл по всем строкам приведёт к тормозам на больших файлах.
Стоит это оставить как есть или откатить?
А делать цикл по всем строкам приведёт к тормозам на больших файлах.
Стоит это оставить как есть или откатить?
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
"All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection."А делать цикл по всем строкам приведёт к тормозам на больших файлах.
Храни цвета с ECF_AUTODELETE в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
Возможно, это также потребует более масштабных изменений.
Как есть - это с утечками памяти, что ли?Стоит это оставить как есть или откатить?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Я бы не назвал это утечками, скорее отложенным, не немедленным, удалением. Хотя можно рассматривать и как утечки.DrKnS wrote:Как есть - это с утечками памяти, что ли?Стоит это оставить как есть или откатить?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Просматривается более простое решение:DrKnS wrote:Храни цвета с ECF_AUTODELETE в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
1. Перед посылкой плагинам EE_REDRAW запоминать верхнюю и нижнюю границы видимой области экрана, предварительно удалив цветовые сегменты с ECF_AUTODELETE в предыдущей запомненной видимой области.
2. Разрешать плагинам добавление цветовых сегментов с флагом ECF_AUTODELETE только в видимую область экрана. Иначе ECTL_ADDCOLOR будет возвращать FALSE.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета. Для многих плагинов подойдут временные, наверняка.
Имя ECF_TEMPORARY лучше отражает суть, учитывая такой подход.
Имя ECF_TEMPORARY лучше отражает суть, учитывая такой подход.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
К сожалению (только сейчас осознал) это решение не учитывает вставку и удаление строк или блоков. Эти операции сделают прежнюю запомненную видимую область невалидной.NightRoman wrote:Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета.
Да, всё сложнее, чем казалось поначалу.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Пожалуй. Но хоть какой-то механизм для упрощения жизни плагинам было бы лучше иметь, чем никакого. Он может совершенствоваться, по мере наличия желания и сил.
В Фарнет, вероятно, сделано, как сейчас с ECF_AUTODELETE, с неудаленными сразу автоматически цветами за пределами экрана. Наверняка это неоптимально. Но кого волнует на практике?
В Фарнет, вероятно, сделано, как сейчас с ECF_AUTODELETE, с неудаленными сразу автоматически цветами за пределами экрана. Наверняка это неоптимально. Но кого волнует на практике?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке? Удалять все цвета (потенциально долго) или только с текущего экрана (остаются неудаленные за пределами)?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Это правда. Наверное, пока оставлю как есть (никто ведь не заставляет пользоваться новым флагом).NightRoman wrote:И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке?
- Alexey Samlyukov
- Posts: 1765
- Joined: Tue 15 Mar, 2005 17:28
- Been thanked: 7 times
- Contact:
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
>ECF_AUTODELETE
друзья, не забывайте обновлять ньюсы в энциклопедии. у меня нет возможности это делать.
друзья, не забывайте обновлять ньюсы в энциклопедии. у меня нет возможности это делать.