@@ -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,194 @@ <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+ < thead >
76+ < tr >
77+ < th scope ="col "> Флаг</ th >
78+ < th scope ="col "> Описание</ th >
79+ </ tr >
80+ </ thead >
81+ < tbody >
82+ < tr >
83+ < td > < a name ="FCF_FG_INDEX "> FCF_FG_INDEX</ abbr > </ a > </ td >
84+ < td > цвет символа задан индексом</ td >
85+ </ tr >
86+ < tr >
87+ < td > < a name ="FCF_BG_INDEX "> FCF_BG_INDEX</ abbr > </ a > </ td >
88+ < td > цвет фона символа задан индексом</ td >
89+ </ tr >
90+ < tr >
91+ < td > < a name ="FCF_FG_UNDERLINE_INDEX "> FCF_FG_UNDERLINE_INDEX</ a > </ td >
92+ < td > цвет подчёркивания задан индексом</ td >
93+ </ tr >
94+ < tr >
95+ < td > < a name ="FCF_INHERIT_STYLE "> FCF_INHERIT_STYLE</ a > </ td >
96+ < td >
97+ "Наследовать" расширенные атрибуты; используется в группах раскраски файлов, в цвете выделения, курсора,
98+ и в раскраске редактора, потенциально - и в других местах
99+ </ td >
100+ </ tr >
101+ < tr >
102+ < td > < a name ="FCF_NONE "> FCF_NONE</ a > </ td >
103+ < td > нулевой флаг</ td >
104+ </ tr >
105+ </ tbody >
106+ </ table >
107+ </ div >
108+ < div class =dfndescr > Расширенные атрибуты, задающие стиль (см. также < em > Замечания</ em > ):
109+ < table class ="cont ">
110+ < thead >
111+ < tr >
112+ < th scope ="col "> Флаг</ th >
113+ < th scope ="col "> Описание</ th >
114+ </ tr >
115+ </ thead >
116+ < tbody >
117+ < tr >
118+ < td > < a name ="FCF_FG_BLINK "> FCF_FG_BLINK</ abbr > </ a > </ td >
119+ < td > "мигающий"</ td >
120+ </ tr >
121+ < tr >
122+ < td > < a name ="FCF_FG_BOLD "> FCF_FG_BOLD</ abbr > </ a > </ td >
123+ < td > "жирный" (или "яркий")</ td >
124+ </ tr >
125+ < tr >
126+ < td > < a name ="FCF_FG_FAINT "> FCF_FG_FAINT</ a > </ td >
127+ < td > "блёклый"</ td >
128+ </ tr >
129+ < tr >
130+ < td > < a name ="FCF_INVERSE "> FCF_INVERSE</ a > </ td >
131+ < td > "инверсный" ("негатив")</ td >
132+ </ tr >
133+ < tr >
134+ < td > < a name ="FCF_FG_INVISIBLE "> FCF_FG_INVISIBLE</ a > </ td >
135+ < td > "невидимый" ("скрытый")</ td >
136+ </ tr >
137+ < tr >
138+ < td > < a name ="FCF_FG_ITALIC "> FCF_FG_ITALIC</ a > </ td >
139+ < td > "наклонный" ("курсив")</ td >
140+ </ tr >
141+ < tr >
142+ < td > < a name ="FCF_FG_OVERLINE "> FCF_FG_OVERLINE</ a > </ td >
143+ < td > "надчёркнутый"</ td >
144+ </ tr >
145+ < tr >
146+ < td > < a name ="FCF_FG_STRIKEOUT "> FCF_FG_INVISIBLE</ a > </ td >
147+ < td > "зачёркнутый"</ td >
148+ </ tr >
149+ < tr >
150+ < td > < a name ="FCF_FG_U_DATA0 "> FCF_FG_U_DATA0</ a > , < a name ="FCF_FG_U_DATA1 "> FCF_FG_U_DATA1</ a > ,
151+ < a name ="FCF_FG_U_DATA2 "> FCF_FG_U_DATA2</ a > </ td >
152+ < td >
153+ < p > "подчёркнутый"; стиль подчёркивания определяется комбинацией значений этих трёх битов.
154+ < p > Для работы со стилями подчёркивания предусмотрены хелперы < a name ="GetUnderline "> GetUnderline()</ a > и
155+ < a name ="SetUnderline "> SetUnderline()</ a > .
156+ < p > Возможные стили подчёркивания (< a name ="UNDERLINE_STYLE "> enum UNDERLINE_STYLE</ a > ):
157+ < a name ="UNDERLINE_NONE "> UNDERLINE_NONE</ a > , < a name ="UNDERLINE_SINGLE "> UNDERLINE_SINGLE</ a > ,
158+ < a name ="UNDERLINE_DOUBLE "> UNDERLINE_DOUBLE</ a > , < a name ="UNDERLINE_CURLY "> UNDERLINE_CURLY</ a > ,
159+ < a name ="UNDERLINE_DOT "> UNDERLINE_DOT</ a > , < a name ="UNDERLINE_DASH "> UNDERLINE_DASH</ a > .
160+ </ td >
161+ </ tr >
162+ </ tbody >
50163 </ table >
51164 </ 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 >
165+ < div class =dfndescr > Маски:
166+ < table class ="cont ">
167+ < thead >
168+ < tr >
169+ < th scope ="col "> Флаг</ th >
170+ < th scope ="col "> Описание</ th >
171+ </ tr >
172+ </ thead >
173+ < tbody >
174+ < tr >
175+ < td > < a name ="FCF_INDEXMASK "> FCF_INDEXMASK</ abbr > </ a > </ td >
176+ < td > FCF_FG_INDEX | FCF_BG_INDEX | FCF_FG_UNDERLINE_INDEX</ td >
177+ </ tr >
178+ < tr >
179+ < td > < a name ="FCF_FG_UNDERLINE_MASK "> FCF_FG_UNDERLINE_MASK</ abbr > </ a > </ td >
180+ < td > FCF_FG_U_DATA0 | FCF_FG_U_DATA1 | FCF_FG_U_DATA2</ td >
181+ </ tr >
182+ < tr >
183+ < td > < a name ="FCF_RAWATTR_MASK "> FCF_RAWATTR_MASK</ a > </ td >
184+ < td > < a href ="https://learn.microsoft.com/windows/console/char-info-str "> LVB</ a > console attributes</ td >
185+ </ tr >
186+ < tr >
187+ < td > < a name ="FCF_STYLE_MASK "> FCF_STYLE_MASK</ a > </ td >
188+ < td > объединение всех расширенных атрибутов</ td >
189+ </ tr >
190+ </ tbody >
191+ </ table >
192+ </ div >
193+ </ div >
194+ < div class =dfn > ForegroundIndex | ForegroundRGBA | ForegroundColor</ div >
195+ < div class =dfndescr >
196+ Цвет символа может быть представлен в виде < code > color_index</ code > , < code > rgba</ code > или < code > COLORREF</ code > ,
197+ в зависимости от флага FCF_FG_INDEX:
198+ < ul >
199+ < li > Если флаг установлен, то значение соответствует типу < code > color_index</ code > ,
200+ где < code > i</ code > это индекс в палитре (см. < em > Замечания</ em > ),
201+ < code > a</ code > - Alpha-канал, определяющий степень прозрачности,
202+ от полностью прозрачного < code > 00</ code > до совсем непрозрачного < code > FF</ code > .
203+ </ li >
204+ < li > Если флаг снят, то значение соответствует типу < code > rgba</ code > , где < code > a</ code > - Alpha-канал,
205+ а < code > r</ code > , < code > g</ code > , < code > b</ code > - красный, зелёный, и синий каналы в цветовом пространстве RGB,
206+ со значениями от < code > 00</ code > до < code > FF</ code > .
207+ </ li >
208+ < li > Значение типа < code > COLORREF</ code > можно использовать в обоих случаях:
209+ < ul >
210+ < li > при установленном флаге: значение в формате < code > 0xAA000000</ code > - < code > 0xAA0000FF</ code > ,
211+ где младший байт представляет собой индекс в палитре, а старший (< code > AA</ code > ) - Alpha-канал.
212+ </ li >
213+ < li > при снятом флаге: значение в формате < code > 0xAABBGGRR</ code > , где < code > AA</ code > - Alpha-канал,
214+ а < code > RR</ code > , < code > GG</ code > , < code > BB</ code > - красный, зелёный, и синий каналы.
215+ </ li >
216+ </ ul >
217+ </ li >
218+ </ ul >
219+ < p class =note > < img src ="../../images/note.gif " alt ="Внимание! " width ="10 " height ="10 "> Внимание!</ p >
220+ < ul class =note >
221+ < li > В данный момент прозрачность поддерживается не везде.
222+ Чтобы в будущем избежать неприятных сюрпризов, всегда устанавливайте Alpha-канал
223+ (старший байт значения < code > COLORREF</ code > ) в < code > 0xFF</ code > .</ a >
224+ </ li >
225+ </ ul >
226+ < p class =note > < img src ="../../images/note.gif " alt ="Примечание " width ="10 " height ="10 "> Примечание</ p >
227+ < ul class =note >
228+ < li > Для комфортной работы со структурами также предусмотрен ряд хелперов, см.
229+ < a href ="https://github.com/FarGroup/FarManager/blob/master/plugins/common/unicode/plugin.hpp "> plugin.hpp</ a > .
230+ </ li >
231+ </ ul >
232+ </ div >
233+ < div class =dfn > BackgroundIndex | BackgroundRGBA | BackgroundColor</ div >
234+ < div class =dfndescr > Цвет фона символа, в зависимости от флага FCF_BG_INDEX, формат тот же что у Foreground*.</ div >
235+ < div class =dfn > UnderlineIndex | UnderlineRGBA | UnderlineColor</ div >
236+ < div class =dfndescr > Цвет подчёркивания, в зависимости от флага FCF_FG_UNDERLINE_INDEX, формат тот же что у Foreground*.</ div >
56237 < div class =dfn > Reserved</ div >
57238 < div class =dfndescr > Не используется и должен быть установлен в 0.</ div >
58239</ div >
59240
60241< h3 > Замечания</ h3 >
61242< div class =descr >
62- При формировании цвета для стандартной консоли Windows обязательно указывайте флаги < code > FCF_FG_INDEX</ code > и < code > FCF_BG_INDEX</ code > .
63- </ div >
243+ < p > При использовании цветов из палитры обязательно указывайте флаги < code > FCF_FG_INDEX</ code > , < code > FCF_BG_INDEX</ code >
244+ (и < code > FCF_FG_UNDERLINE_INDEX </ code > , если используется подчёркивание).
64245
65- < div class =descr >
66- Старший байт в ForegroundColor и BackgroundColor определяет степень прозрачности цвета, от полностью прозрачного (00) до полностью непрозрачного (FF).
67- В данный момент прозрачность поддерживается не везде. Во избежание неприятных сюрпризов в будущем всегда устанавливайте старший байт в < code > 0xFF</ code > .
246+ < p > Стандартные цвета консоли Windows представляют собой палитру из 16 цветов, с индексами 0 - 15.
247+
248+ < p > Также можно использовать цвета из палитры VT100 (16 - 255).
249+ В этом случае значения (16 - 231) кодируются как 36R+6G+B, где уровень каждого из основных цветов 0-5,
250+ а последние 24 значения (232 - 255) используются для оттенков серого.
251+
252+ < p class =note > < img src ="../../images/note.gif " alt ="Внимание! " width ="10 " height ="10 "> Внимание!</ p >
253+ < ul class =note >
254+ < li > Гарантированно везде работает только стандартная 16-цветная палитра.
255+ Поддержка всего остального условна и определяется вашим терминалом.
256+ </ li >
257+ < li > Расширенные (RGB) цвета и стили требуют рендеринга на основе
258+ < a href ="https://learn.microsoft.com/windows/console/classic-vs-vt "> Virtual Terminal</ a > ,
259+ который можно включить в настройках интерфейса. Если он не включен или если ваш
260+ терминал не поддерживает цвета RGB, то цвета будут аппроксимированы до ближайших
261+ индексов консольной палитры.
262+ </ li >
68263</ div >
69264
70265< div class =see > Смотрите также:</ div >
0 commit comments