From: Michael D. Lowis Date: Sat, 31 Mar 2018 01:58:50 +0000 (-0400) Subject: reworked color palette handling X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=9fd3d22b8ac97d8c7d71e2878726edaafc507b0f;p=projs%2Ftide.git reworked color palette handling --- diff --git a/inc/edit.h b/inc/edit.h index 8f173a7..0dbec9c 100644 --- a/inc/edit.h +++ b/inc/edit.h @@ -185,18 +185,16 @@ void job_start(char** cmd, char* data, size_t ndata, View* dest); *****************************************************************************/ 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 -}; diff --git a/inc/win.h b/inc/win.h index d07027f..b4a40cf 100644 --- a/inc/win.h +++ b/inc/win.h @@ -24,7 +24,6 @@ typedef struct { size_t x, y; size_t height, width; size_t csrx, csry; - CPair clrnor, clrsel, clrcsr; View view; } Region; diff --git a/lib/config.c b/lib/config.c index a3a588c..c4833ee 100644 --- a/lib/config.c +++ b/lib/config.c @@ -30,54 +30,26 @@ int /* Integer config options */ 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 }, -}; + diff --git a/lib/x11.c b/lib/x11.c index 43ce8b2..cc60f9f 100644 --- a/lib/x11.c +++ b/lib/x11.c @@ -134,15 +134,8 @@ void win_init(KeyBinding* bindings) { 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; @@ -150,8 +143,6 @@ void win_init(KeyBinding* bindings) { view_putstr(view, TagString); view_selprev(view); // clear the selection buf_logclear(&(view->buffer)); - - Keys = bindings; } void win_save(char* path) { @@ -760,22 +751,19 @@ static void layout(int width, int height) { 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); @@ -787,11 +775,11 @@ static void redraw(int width, int height) { 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 */ @@ -805,18 +793,17 @@ static void redraw(int width, int height) { 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) {