RGB — работа с цветами консоли

Разработка Far.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Latest post of the previous page:

Сравни настройки цветов и раскраску файлов.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

Предлагается следующее:

Добавить в FARCOLORFLAGS флажки

Code: Select all

	FCF_FG_24BIT  = 0x0000000000000004ULL,
	FCF_BG_4BIT  = 0x0000000000000008ULL,
Наверное, имеет смысл добавить также маски

Code: Select all

	FCF_FG_MASK  = FCF_FG_4BIT|FCF_FG_24BIT,
	FCF_BG_MASK  = FCF_BG_4BIT|FCF_BG_24BIT,
И вопрос: Transparent (например для foreground) - это ((FarColor.Flags & FCF_FG_MASK) == 0)?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Не.
Если FCF_<B|F>G_4BIT не указан, то подразумевается 32-битный цвет.
А уровень прозрачности лежит в HIBYTE(HIWORD(Color))
Т.е. у нас ARGB.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

A==0xFF - это обычно полностью непрозрачный цвет (в ARGB).
Как я понял, в фаре наоборот?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

Как на счет добавления флагов
Italic/Bold/Underline?
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: RGB — работа с цветами консоли

Post by HaRT »

Maximus5 wrote:Italic/Bold/Underline?
А ещё strikethrough и blinking. :blum:
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Maximus5 wrote:A==0xFF - это обычно полностью непрозрачный цвет (в ARGB).
Как я понял, в фаре наоборот?
Да.
Как на счет добавления флагов
Italic/Bold/Underline?
Пусть будут.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: RGB — работа с цветами консоли

Post by zg »

DrKnS wrote:
Maximus5 wrote:A==0xFF - это обычно полностью непрозрачный цвет (в ARGB).
Как я понял, в фаре наоборот?
Да.
а сейчас реально где-то прозрачность используется? может нормально сделать, как везде?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Сейчас только в раскраске файлов.
Перевернуть можно, только надо ли?
Тогда придется при описании каждого обычного, непрозрачного цвета явно указывать, что он непрозрачный.
Как бы лишняя работа.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

Dll-ка приаттачена, можно прикручивать.
Для тестов ConEmu не нужен, длл-ка вполне работает в обычной консоли (в 4битах ест-но).
Last edited by Maximus5 on Sat 30 Jul, 2011 14:55, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: RGB — работа с цветами консоли

Post by zg »

DrKnS wrote:Сейчас только в раскраске файлов.
Перевернуть можно, только надо ли?
Тогда придется при описании каждого обычного, непрозрачного цвета явно указывать, что он непрозрачный.
Как бы лишняя работа.
макрос
#define RGB32(r,g,b) ((r)|((g)<<8)|((b)<<16)|0xff000000)
в plugin.hpp, не?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Maximus5 wrote:Dll-ка приаттачена, можно прикручивать.
Far в аттаче. Ищет console.dll в стандартных местах.
Release.32.vc.7z
(871.71 KiB) Downloaded 112 times
dll надо поправить:
void CommitOutput() -> bool Commit()
<G|S>etTextAttributes должны ожидать указатель на ОДИН FarColor.
и добавить BOOL ClearExtraRegions(const FarColor* Color) для очистки всего буфера по cls при "far /w"
zg wrote:макрос
#define RGB32(r,g,b) ((r)|((g)<<8)|((b)<<16)|0xff000000)
в plugin.hpp, не?
Логично.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

DrKnS wrote:void CommitOutput() -> bool Commit()
Может все-таки "BOOL Commit()"?
DrKnS wrote:<G|S>etTextAttributes должны ожидать указатель на ОДИН FarColor.
Хм? Если usecase для SetTextAttributes с одним указателем я могу понять, например, приведение всего видимого (да?) экрана к определенному цвету фона/текста.
То вот смысл GetTextAttributes (с одиим параметром == указателю на ОДИН FarColor) до меня не доходит. Чего он делать должен?
DrKnS wrote:и добавить BOOL ClearExtraRegions(const FarColor* Color) для очистки всего буфера по cls при "far /w"
Не понял, что должна делать ClearExtraRegions. Может лучше добавить параметр SMALL_RECT* в <G|S>etTextAttributes, не? Мало ли где и что "залить" захочется?
DrKnS wrote:
zg wrote:макрос
#define RGB32(r,g,b) ((r)|((g)<<8)|((b)<<16)|0xff000000)
в plugin.hpp, не?
Логично.
То есть делаем "правильный" ARGB?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: RGB — работа с цветами консоли

Post by DrKnS »

Maximus5 wrote:Может все-таки "BOOL Commit()"?
Да, конечно.
Хм? Если usecase для SetTextAttributes с одним указателем я могу понять, например, приведение всего видимого (да?) экрана к определенному цвету фона/текста.
То вот смысл GetTextAttributes (с одиим параметром == указателю на ОДИН FarColor) до меня не доходит. Чего он делать должен?
Юзкейс понят неправильно.
Это не "всего видимого экрана", это "цвет по умолчанию". То, что соответствует "Screen Text" и "Screen Background" в свойствах консоли. То, что задаётся командой color в cmd.exe. То, что будет использовано если в консоль просто писать по printf/std::cout/WriteConsole, без явного указания цвета. Так понятнее?
Не понял, что должна делать ClearExtraRegions. Может лучше добавить параметр SMALL_RECT* в <G|S>etTextAttributes, не? Мало ли где и что "залить" захочется?
Она должна очищать невидимые участки буфера, недоступные фару:

Хотя, возможно, логичнее будет вынести в dll FillOutputAttribute и FillOutputCharacter.
То есть делаем "правильный" ARGB?
Ага.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: RGB — работа с цветами консоли

Post by Maximus5 »

Новая dll-ка для выложенного far.exe. Вроде что-то начинает работать.
<G|S>etTextAttributes пока не переделывал, только учел, что они один Color на вход принимают
Transparent тоже пока не переворачивал, я так понял, собранный фар еще по старому работает


Вопросы
1. При задании нового элемента в Hilightings, Far передает в GetColorDialog структуру заполненную 0-ми. Что с ней делать - непонятно. Сам фар, если Flags!=(FCF_FG_4BIT|FCF_BG_4BIT) тупо показывает стандартный белый (или серый?) текст на черном фоне. Но мне-то что делать? Такие флаги вполне валидны в TrueColor.
2. Вообще, с Hilighings что-то глючит. На новой конфигурации пытаюсь править стандартный элемент "*.exe,*.com,*.bat,*.cmd,%PATHEXT%". В диалоге цвет отображается правильно, но в панелях почему-то . Файлы 0.cmd и backup.cmd должны быть с красным цветом текста, а почему-то отображается белый. И в WriteOutput вроде приходит 4битный цвет, а не тот, который настроен.
3. На счет имени dll-ки. Есть предложение, для 64битного фара искать и загружать "Console64.dll". Так удобнее поставлять пользователю комплект целиком.
Attachments
Console.110730.7z
(6.02 KiB) Downloaded 106 times
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: RGB — работа с цветами консоли

Post by Alexey Samlyukov »

там просто транспарент выставляется, галку скинь.
Post Reply

Return to “Development”