@@ -20,12 +20,50 @@ <h1>FarColor</h1>
2020</ div >
2121
2222< pre class =syntax >
23+ struct rgba
24+ {
25+ unsigned char
26+ r,
27+ g,
28+ b,
29+ a;
30+ };
31+
32+ struct color_index
33+ {
34+ unsigned char
35+ i,
36+ reserved0,
37+ reserved1,
38+ a;
39+ };
40+
2341struct FarColor
2442{
25- FARCOLORFLAGS Flags;
26- COLORREF ForegroundColor;
27- COLORREF BackgroundColor;
28- void *Reserved;
43+ FARCOLORFLAGS Flags;
44+ union
45+ {
46+ COLORREF ForegroundColor;
47+ struct color_index ForegroundIndex;
48+ struct rgba ForegroundRGBA;
49+ };
50+ union
51+ {
52+ COLORREF BackgroundColor;
53+ struct color_index BackgroundIndex;
54+ struct rgba BackgroundRGBA;
55+ };
56+ union
57+ {
58+ COLORREF UnderlineColor;
59+ struct color_index UnderlineIndex;
60+ struct rgba UnderlineRGBA;
61+ };
62+ DWORD Reserved;
63+ // ...
64+ UNDERLINE_STYLE GetUnderline() const {/* ... */}
65+ FarColor& SetUnderline(UNDERLINE_STYLE UnderlineStyle) {/* ... */}
66+ // ... кроме того определён ряд других хелперов, полное определение см. в plugin.hpp
2967};
3068</ pre >
3169
@@ -34,37 +72,182 @@ <h3>Элементы</h3>
3472 < div class =dfn > Flags</ div >
3573 < div class =dfndescr > Может быть комбинацией следующих значений (тип < a name ="FARCOLORFLAGS "> FARCOLORFLAGS</ a > ):
3674 < table class ="cont ">
37- < tr class ="cont "> < th class ="cont " width ="40% "> Флаг</ th > < th class ="cont " width ="60% "> Описание</ th > </ tr >
38- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_FG_INDEX "> FCF_FG_INDEX</ a > </ td >
39- < td class ="cont " width ="60% "> цвет символа задан индексом в стандартной палитре NT (0 - 15) или VT100 (16 - 255)</ td > </ tr >
40- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_BG_INDEX "> FCF_BG_INDEX</ a > </ td >
41- < td class ="cont " width ="60% "> цвет фона символа задан индексом в стандартной палитре NT (0 - 15) или VT100 (16 - 255)</ td > </ tr >
42- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_FG_BOLD "> FCF_FG_BOLD</ a > </ td >
43- < td class ="cont " width ="60% "> расширенные атрибуты, задан стиль: "жирный" символ</ td > </ tr >
44- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_FG_ITALIC "> FCF_FG_ITALIC</ a > </ td >
45- < td class ="cont " width ="60% "> расширенные атрибуты, задан стиль: "наклонный" символ</ td > </ tr >
46- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_FG_UNDERLINE "> FCF_FG_UNDERLINE</ a > </ td >
47- < td class ="cont " width ="60% "> расширенные атрибуты, задан стиль: "подчеркнутый" символ</ td > </ tr >
48- < tr class ="cont "> < td class ="cont " width ="40% "> < a name ="FCF_NONE "> FCF_NONE</ a > </ td >
49- < td class ="cont " width ="60% "> нулевой флаг</ td > </ tr >
75+ < tr >
76+ < th > Флаг</ th >
77+ < th > Описание</ th >
78+ </ tr >
79+ < tr >
80+ < td > < a name ="FCF_FG_INDEX "> FCF_FG_INDEX</ a > </ td >
81+ < td > цвет символа задан индексом</ td >
82+ </ tr >
83+ < tr >
84+ < td > < a name ="FCF_BG_INDEX "> FCF_BG_INDEX</ a > </ td >
85+ < td > цвет фона символа задан индексом</ td >
86+ </ tr >
87+ < tr >
88+ < td > < a name ="FCF_FG_UNDERLINE_INDEX "> FCF_FG_UNDERLINE_INDEX</ a > </ td >
89+ < td > цвет подчёркивания задан индексом</ td >
90+ </ tr >
91+ < tr >
92+ < td > < a name ="FCF_INHERIT_STYLE "> FCF_INHERIT_STYLE</ a > </ td >
93+ < td >
94+ "Наследовать" расширенные атрибуты; используется в группах раскраски файлов, в цвете выделения, курсора,
95+ и в раскраске редактора, потенциально - и в других местах
96+ </ td >
97+ </ tr >
98+ < tr >
99+ < td > < a name ="FCF_NONE "> FCF_NONE</ a > </ td >
100+ < td > нулевой флаг</ td >
101+ </ tr >
102+ </ table >
103+ </ div >
104+ < div class =dfndescr > Расширенные атрибуты, задающие стиль (см. также < em > Замечания</ em > ):
105+ < table class ="cont ">
106+ < tr >
107+ < th scope ="col "> Флаг</ th >
108+ < th scope ="col "> Описание</ th >
109+ </ tr >
110+ < tr >
111+ < td > < a name ="FCF_FG_BLINK "> FCF_FG_BLINK</ a > </ td >
112+ < td > "мигающий"</ td >
113+ </ tr >
114+ < tr >
115+ < td > < a name ="FCF_FG_BOLD "> FCF_FG_BOLD</ a > </ td >
116+ < td > "жирный" (или "яркий")</ td >
117+ </ tr >
118+ < tr >
119+ < td > < a name ="FCF_FG_FAINT "> FCF_FG_FAINT</ a > </ td >
120+ < td > "блёклый"</ td >
121+ </ tr >
122+ < tr >
123+ < td > < a name ="FCF_INVERSE "> FCF_INVERSE</ a > </ td >
124+ < td > "инверсный" ("негатив")</ td >
125+ </ tr >
126+ < tr >
127+ < td > < a name ="FCF_FG_INVISIBLE "> FCF_FG_INVISIBLE</ a > </ td >
128+ < td > "невидимый" ("скрытый")</ td >
129+ </ tr >
130+ < tr >
131+ < td > < a name ="FCF_FG_ITALIC "> FCF_FG_ITALIC</ a > </ td >
132+ < td > "наклонный" ("курсив")</ td >
133+ </ tr >
134+ < tr >
135+ < td > < a name ="FCF_FG_OVERLINE "> FCF_FG_OVERLINE</ a > </ td >
136+ < td > "надчёркнутый"</ td >
137+ </ tr >
138+ < tr >
139+ < td > < a name ="FCF_FG_STRIKEOUT "> FCF_FG_INVISIBLE</ a > </ td >
140+ < td > "зачёркнутый"</ td >
141+ </ tr >
142+ < tr >
143+ < td > < a name ="FCF_FG_U_DATA0 "> FCF_FG_U_DATA0</ a > , < a name ="FCF_FG_U_DATA1 "> FCF_FG_U_DATA1</ a > ,
144+ < a name ="FCF_FG_U_DATA2 "> FCF_FG_U_DATA2</ a > </ td >
145+ < td >
146+ < p > "подчёркнутый"; стиль подчёркивания определяется комбинацией значений этих трёх битов.
147+ < p > Для работы со стилями подчёркивания предусмотрены хелперы < a name ="GetUnderline "> GetUnderline()</ a > и
148+ < a name ="SetUnderline "> SetUnderline()</ a > .
149+ < p > Возможные стили подчёркивания (перечисление < a name ="UNDERLINE_STYLE "> UNDERLINE_STYLE</ a > ):
150+ < a name ="UNDERLINE_NONE "> UNDERLINE_NONE</ a > , < a name ="UNDERLINE_SINGLE "> UNDERLINE_SINGLE</ a > ,
151+ < a name ="UNDERLINE_DOUBLE "> UNDERLINE_DOUBLE</ a > , < a name ="UNDERLINE_CURLY "> UNDERLINE_CURLY</ a > ,
152+ < a name ="UNDERLINE_DOT "> UNDERLINE_DOT</ a > , < a name ="UNDERLINE_DASH "> UNDERLINE_DASH</ a > .
153+ </ td >
154+ </ tr >
50155 </ table >
51156 </ div >
52- < div class =dfn > ForegroundColor</ div >
53- < div class =dfndescr > Цвет символа в формате < code > 0xAABBGGRR</ code > или индекс < code > 0xAA000000</ code > - < code > 0xAA0000FF</ code > , если установлен флаг FCF_FG_INDEX.</ div >
54- < div class =dfn > BackgroundColor</ div >
55- < div class =dfndescr > Цвет символа в формате < code > 0xAABBGGRR</ code > или индекс < code > 0xAA000000</ code > - < code > 0xAA0000FF</ code > , если установлен флаг FCF_BG_INDEX.</ div >
157+ < div class =dfndescr > Маски:
158+ < table class ="cont ">
159+ < tr >
160+ < th scope ="col "> Флаг</ th >
161+ < th scope ="col "> Описание</ th >
162+ </ tr >
163+ < tr >
164+ < td > < a name ="FCF_INDEXMASK "> FCF_INDEXMASK</ a > </ td >
165+ < td > FCF_FG_INDEX | FCF_BG_INDEX | FCF_FG_UNDERLINE_INDEX</ td >
166+ </ tr >
167+ < tr >
168+ < td > < a name ="FCF_FG_UNDERLINE_MASK "> FCF_FG_UNDERLINE_MASK</ a > </ td >
169+ < td > FCF_FG_U_DATA0 | FCF_FG_U_DATA1 | FCF_FG_U_DATA2</ td >
170+ </ tr >
171+ < tr >
172+ < td > < a name ="FCF_RAWATTR_MASK "> FCF_RAWATTR_MASK</ a > </ td >
173+ < td > < a href ="https://learn.microsoft.com/windows/console/char-info-str "> LVB</ a > console attributes</ td >
174+ </ tr >
175+ < tr >
176+ < td > < a name ="FCF_STYLE_MASK "> FCF_STYLE_MASK</ a > </ td >
177+ < td > объединение всех расширенных атрибутов</ td >
178+ </ tr >
179+ </ table >
180+ </ div >
181+ < div class =dfn > ForegroundIndex | ForegroundRGBA | ForegroundColor</ div >
182+ < div class =dfndescr >
183+ Цвет символа может быть представлен в виде структур < code > color_index</ code > , < code > rgba</ code >
184+ или типа < code > COLORREF</ code > , в зависимости от флага FCF_FG_INDEX:
185+ < ul >
186+ < li > Если флаг установлен, то значение соответствует типу < code > color_index</ code > ,
187+ где < code > i</ code > это индекс в палитре (см. < em > Замечания</ em > ),
188+ < code > a</ code > - Alpha-канал, определяющий степень прозрачности,
189+ от полностью прозрачного < code > 00</ code > до совсем непрозрачного < code > FF</ code > .
190+ </ li >
191+ < li > Если флаг снят, то значение соответствует типу < code > rgba</ code > , где < code > a</ code > - Alpha-канал,
192+ а < code > r</ code > , < code > g</ code > , < code > b</ code > - красный, зелёный, и синий каналы в цветовом пространстве RGB,
193+ со значениями от < code > 00</ code > до < code > FF</ code > .
194+ </ li >
195+ < li > Значение типа < code > COLORREF</ code > можно использовать в обоих случаях:
196+ < ul >
197+ < li > при установленном флаге: значение в формате < code > 0xAA000000</ code > - < code > 0xAA0000FF</ code > ,
198+ где младший байт представляет собой индекс в палитре, а старший (< code > AA</ code > ) - Alpha-канал.
199+ </ li >
200+ < li > при снятом флаге: значение в формате < code > 0xAABBGGRR</ code > , где < code > AA</ code > - Alpha-канал,
201+ а < code > RR</ code > , < code > GG</ code > , < code > BB</ code > - красный, зелёный, и синий каналы.
202+ </ li >
203+ </ ul >
204+ </ li >
205+ </ ul >
206+ < p class =note > < img src ="../../images/note.gif " alt ="Внимание! " width ="10 " height ="10 "> Внимание!</ p >
207+ < ul class =note >
208+ < li > В данный момент прозрачность поддерживается не везде.
209+ Чтобы в будущем избежать неприятных сюрпризов, всегда устанавливайте Alpha-канал
210+ (старший байт значения < code > COLORREF</ code > ) в < code > 0xFF</ code > .
211+ </ li >
212+ </ ul >
213+ < p class =note > < img src ="../../images/note.gif " alt ="Примечание " width ="10 " height ="10 "> Примечание</ p >
214+ < ul class =note >
215+ < li > Для комфортной работы со структурами также предусмотрен ряд хелперов, см.
216+ < a href ="https://github.com/FarGroup/FarManager/blob/master/plugins/common/unicode/plugin.hpp "> plugin.hpp</ a > .
217+ </ li >
218+ </ ul >
219+ </ div >
220+ < div class =dfn > BackgroundIndex | BackgroundRGBA | BackgroundColor</ div >
221+ < div class =dfndescr > Цвет фона символа, в зависимости от флага FCF_BG_INDEX, формат тот же что у Foreground*.</ div >
222+ < div class =dfn > UnderlineIndex | UnderlineRGBA | UnderlineColor</ div >
223+ < div class =dfndescr > Цвет подчёркивания, в зависимости от флага FCF_FG_UNDERLINE_INDEX, формат тот же что у Foreground*.</ div >
56224 < div class =dfn > Reserved</ div >
57225 < div class =dfndescr > Не используется и должен быть установлен в 0.</ div >
58226</ div >
59227
60228< h3 > Замечания</ h3 >
61229< div class =descr >
62- При формировании цвета для стандартной консоли Windows обязательно указывайте флаги < code > FCF_FG_INDEX</ code > и < code > FCF_BG_INDEX</ code > .
63- </ div >
230+ < p > При использовании цветов из палитры обязательно указывайте флаги < code > FCF_FG_INDEX</ code > , < code > FCF_BG_INDEX</ code >
231+ (и < code > FCF_FG_UNDERLINE_INDEX </ code > , если используется подчёркивание).
64232
65- < div class =descr >
66- Старший байт в ForegroundColor и BackgroundColor определяет степень прозрачности цвета, от полностью прозрачного (00) до полностью непрозрачного (FF).
67- В данный момент прозрачность поддерживается не везде. Во избежание неприятных сюрпризов в будущем всегда устанавливайте старший байт в < code > 0xFF</ code > .
233+ < p > Стандартные цвета консоли Windows представляют собой палитру из 16 цветов, с индексами 0 - 15.
234+
235+ < p > Также можно использовать цвета из палитры VT100 (16 - 255).
236+ В этом случае значения (16 - 231) кодируются как 36R+6G+B, где уровень каждого из основных цветов 0-5,
237+ а последние 24 значения (232 - 255) используются для оттенков серого.
238+
239+ < p class =note > < img src ="../../images/note.gif " alt ="Внимание! " width ="10 " height ="10 "> Внимание!</ p >
240+ < ul class =note >
241+ < li > Гарантированно везде работает только стандартная 16-цветная палитра.
242+ Поддержка всего остального условна и определяется вашим терминалом.
243+ </ li >
244+ < li > Расширенные (RGB) цвета и стили требуют рендеринга на основе
245+ < a href ="https://learn.microsoft.com/windows/console/classic-vs-vt "> Virtual Terminal</ a > ,
246+ который можно включить в настройках интерфейса. Если он не включен или если ваш
247+ терминал не поддерживает цвета RGB, то цвета будут аппроксимированы до ближайших
248+ индексов консольной палитры.
249+ </ li >
250+ </ ul >
68251</ div >
69252
70253< div class =see > Смотрите также:</ div >
0 commit comments