*****************************************************************************/
enum { OFF = 0, ON = 1 };
-typedef struct { int fg, bg; } CPair;
+enum { /* Color Names */
+ Red, Green, Yellow, Blue, Purple, Aqua, Orange,
+ EditBg, EditFg, EditSel, EditCsr,
+ TagsBg, TagsFg, TagsSel, TagsCsr,
+ ScrollBg, ScrollFg,
+ VerBdr, HorBdr,
+ ClrCount
+};
extern char *TagString, *FontString;
-extern CPair Colors[28];
-extern int Palette[16];
+extern int Palette[ClrCount];
extern int WinWidth, WinHeight, LineSpacing, Timeout, TabWidth, ScrollBy,
ClickTime, MaxScanDist, Syntax, CopyIndent, TrimOnSave, ExpandTabs, DosLineFeed;
-enum { /* Color Variables */
- ClrScrollNor = 0, ClrGutterNor, ClrGutterSel, ClrStatusNor, ClrTagsNor,
- ClrTagsSel, ClrTagsCsr, ClrEditNor, ClrEditSel, ClrEditCsr, ClrEditRul,
- ClrBorders,
- SynNormal, SynComment, SynConstant, SynString, SynChar, SynNumber,
- SynBoolean, SynFloat, SynVariable, SynFunction, SynKeyword, SynOperator,
- SynPreProc, SynType, SynStatement, SynSpecial
-};
size_t x, y;
size_t height, width;
size_t csrx, csry;
- CPair clrnor, clrsel, clrcsr;
View view;
} Region;
ExpandTabs = ON,
DosLineFeed = OFF;
-int Palette[16] = {
- 0xFF1d2021,
- 0xFF3c3836,
- 0xFF504945,
- 0xFF665c54,
- 0xFFbdae93,
- 0xFFd5c4a1,
- 0xFFebdbb2,
- 0xFFfbf1c7,
- 0xFFfb4934,
- 0xFFfe8019,
- 0xFFfabd2f,
- 0xFFb8bb26,
- 0xFF8ec07c,
- 0xFF83a598,
- 0xFFd3869b,
- 0xFFd65d0e
+int Palette[ClrCount] = {
+ [Red] = 0xFFfb4934, // Red
+ [Green] = 0xFFb8bb26, // Green
+ [Yellow] = 0xFFfabd2f, // Yellow
+ [Blue] = 0xFF83a598, // Blue
+ [Purple] = 0xFF93869b, // Purple
+ [Aqua] = 0xFF8ec07c, // Aqua
+ [Orange] = 0xFFfe8019, // Orange
+ [EditBg] = 0xFF1d2021, // Edit region background
+ [EditFg] = 0xFFd5c4a1, // Edit region text
+ [EditSel] = 0xFF504945, // Edit region selection
+ [EditCsr] = 0xFFfbf1c7, // Edit region cursor
+ [TagsBg] = 0xFF3c3836, // Tags region background
+ [TagsFg] = 0xFFd5c4a1, // Tags region text
+ [TagsSel] = 0xFF504945, // Tags region selection
+ [TagsCsr] = 0xFFfbf1c7, // Tags region cursor
+ [ScrollBg] = 0xFF665c54, // Scroll region background
+ [ScrollFg] = 0xFF1d2021, // Scroll region foreground
+ [VerBdr] = 0xFF665c54, // Vertical border
+ [HorBdr] = 0xFF665c54, // Horizontal border
};
-CPair Colors[28] = {
- /* UI Colors */
- [ClrScrollNor] = { .bg = 3, .fg = 0 },
- [ClrGutterNor] = { .bg = 1, .fg = 4 },
- [ClrGutterSel] = { .bg = 2, .fg = 7 },
- [ClrStatusNor] = { .bg = 0, .fg = 5 },
- [ClrTagsNor] = { .bg = 1, .fg = 5 },
- [ClrTagsSel] = { .bg = 2, .fg = 5 },
- [ClrTagsCsr] = { .bg = 0, .fg = 7 },
- [ClrEditNor] = { .bg = 0, .fg = 5 },
- [ClrEditSel] = { .bg = 2, .fg = 5 },
- [ClrEditCsr] = { .bg = 0, .fg = 7 },
- [ClrEditRul] = { .bg = 0, .fg = 1 },
- [ClrBorders] = { .bg = 3, .fg = 3 },
- /* Syntax Colors */
- [SynNormal] = { .fg = 5 },
- [SynComment] = { .fg = 3 },
- [SynConstant] = { .fg = 14 },
- [SynNumber] = { .fg = 14 },
- [SynBoolean] = { .fg = 14 },
- [SynFloat] = { .fg = 14 },
- [SynString] = { .fg = 10 },
- [SynChar] = { .fg = 10 },
- [SynPreProc] = { .fg = 8 },
- [SynType] = { .fg = 13 },
- [SynKeyword] = { .fg = 8 },
- [SynStatement] = { .fg = 15 },
- [SynFunction] = { .fg = 13 },
- [SynVariable] = { .fg = 8 },
- [SynSpecial] = { .fg = 15 },
- [SynOperator] = { .fg = 12 },
-};
+
for (int i = 0; i < SCROLL; i++)
view_init(&(Regions[i].view), NULL);
x11_init();
+ Keys = bindings;
CurrFont = x11_font_load(FontString);
- Regions[SCROLL].clrnor = Colors[ClrScrollNor];
- Regions[TAGS].clrnor = Colors[ClrTagsNor];
- Regions[TAGS].clrsel = Colors[ClrTagsSel];
- Regions[TAGS].clrcsr = Colors[ClrTagsCsr];
- Regions[EDIT].clrnor = Colors[ClrEditNor];
- Regions[EDIT].clrsel = Colors[ClrEditSel];
- Regions[EDIT].clrcsr = Colors[ClrEditCsr];
-
View* view = win_view(TAGS);
view->buffer.gapstart = view->buffer.bufstart;
view->buffer.gapend = view->buffer.bufend;
view_putstr(view, TagString);
view_selprev(view); // clear the selection
buf_logclear(&(view->buffer));
-
- Keys = bindings;
}
void win_save(char* path) {
view_resize(editview, Regions[EDIT].height / fheight, Regions[EDIT].width / fwidth);
}
-static void draw_view(int i, int width, int height) {
- int clr_hbor = Colors[ClrBorders].bg;
- int clr_vbor = Colors[ClrBorders].bg;
+static void draw_view(int i, int width, int height, int bg, int fg, int csr, int sel) {
size_t fheight = x11_font_height(CurrFont);
size_t fwidth = x11_font_width(CurrFont);
View* view = win_view(i);
- x11_draw_rect(Regions[i].clrnor.bg, 0, Regions[i].y - 3, width, Regions[i].height + 8);
- x11_draw_rect(clr_hbor, 0, Regions[i].y - 3, width, 1);
+ x11_draw_rect(bg, 0, Regions[i].y - 3, width, Regions[i].height + 8);
+ x11_draw_rect(HorBdr, 0, Regions[i].y - 3, width, 1);
for (size_t line = 0, y = 0; y < view->nrows; y++) {
Row* row = view_getrow(view, y);
draw_glyphs(Regions[i].x, Regions[i].y + ((y+1) * fheight), row->cols, row->rlen, row->len);
}
/* place the cursor on screen */
if (Regions[i].csrx != SIZE_MAX && Regions[i].csry != SIZE_MAX) {
- x11_draw_rect(
- Regions[i].clrcsr.fg,
+ x11_draw_rect(csr,
Regions[i].x + (Regions[i].csrx * fwidth),
Regions[i].y + (Regions[i].csry * fheight),
1, fheight);
size_t fwidth = x11_font_width(CurrFont);
layout(width, height);
- int clrtagnor = (Regions[TAGS].clrnor.bg << 8 | Regions[TAGS].clrnor.fg);
- int clrtagsel = (Regions[TAGS].clrsel.bg << 8 | Regions[TAGS].clrsel.fg);
+ int clrtagnor = (TagsBg << 8 | TagsFg);
+ int clrtagsel = (TagsSel << 8 | TagsFg);
view_update(win_view(TAGS), clrtagnor, clrtagsel, &(Regions[TAGS].csrx), &(Regions[TAGS].csry));
- int clreditnor = (Regions[EDIT].clrnor.bg << 8 | Regions[EDIT].clrnor.fg);
- int clreditsel = (Regions[EDIT].clrsel.bg << 8 | Regions[EDIT].clrsel.fg);
+ int clreditnor = (EditBg << 8 | EditFg);
+ int clreditsel = (EditSel << 8 | EditFg);
view_update(win_view(EDIT), clreditnor, clreditsel, &(Regions[EDIT].csrx), &(Regions[EDIT].csry));
/* calculate and update scroll region */
double scroll_off = ((double)vbeg / (double)bend);
ScrollOffset = scroll_off, ScrollVisible = scroll_vis;
- draw_view(TAGS, width, height);
- draw_view(EDIT, width, height);
+ draw_view(TAGS, width, height, TagsBg, TagsFg, TagsCsr, TagsSel);
+ draw_view(EDIT, width, height, EditBg, EditFg, EditCsr, EditSel);
/* draw the scroll region */
size_t thumbreg = (Regions[SCROLL].height - Regions[SCROLL].y + 9);
size_t thumboff = (size_t)((thumbreg * ScrollOffset) + (Regions[SCROLL].y - 2));
size_t thumbsz = (size_t)(thumbreg * ScrollVisible);
if (thumbsz < 5) thumbsz = 5;
- CPair clr_scroll = Colors[ClrScrollNor];
- x11_draw_rect(Colors[ClrBorders].bg, Regions[SCROLL].width, Regions[SCROLL].y - 2, 1, Regions[SCROLL].height);
- x11_draw_rect(clr_scroll.bg, 0, Regions[SCROLL].y - 2, Regions[SCROLL].width, thumbreg);
- x11_draw_rect(clr_scroll.fg, 0, thumboff, Regions[SCROLL].width, thumbsz);
+ x11_draw_rect(VerBdr, Regions[SCROLL].width, Regions[SCROLL].y - 2, 1, Regions[SCROLL].height);
+ x11_draw_rect(ScrollBg, 0, Regions[SCROLL].y - 2, Regions[SCROLL].width, thumbreg);
+ x11_draw_rect(ScrollFg, 0, thumboff, Regions[SCROLL].width, thumbsz);
}
static void draw_glyphs(size_t x, size_t y, UGlyph* glyphs, size_t rlen, size_t ncols) {