Add commands to edit color and add color rendering in terminal teapot
Now the foreground and background color can be set and displayed in either user interfaces, which finishes off #21. Closes #21.
This commit is contained in:
parent
06938ec494
commit
253062e906
@ -341,6 +341,7 @@ static void do_attribute(Sheet *cursheet, Key action)
|
|||||||
line_msg(_("Cell attribute:"),_("Cell is locked"));
|
line_msg(_("Cell attribute:"),_("Cell is locked"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ColorAspect ca = FOREGROUND;
|
||||||
switch ((int)action)
|
switch ((int)action)
|
||||||
{
|
{
|
||||||
case ADJUST_CENTER: ++adj; /* drop through */
|
case ADJUST_CENTER: ++adj; /* drop through */
|
||||||
@ -373,12 +374,7 @@ static void do_attribute(Sheet *cursheet, Key action)
|
|||||||
/* 5 -- set precision */ /*{{{*/
|
/* 5 -- set precision */ /*{{{*/
|
||||||
case ADJUST_PRECISION:
|
case ADJUST_PRECISION:
|
||||||
{
|
{
|
||||||
size_t ex,offx;
|
int n = getprecision(fcell);
|
||||||
int n;
|
|
||||||
|
|
||||||
offx=0;
|
|
||||||
ex=0;
|
|
||||||
n = getprecision(fcell);
|
|
||||||
const char* prompt = _("Precision for block:");
|
const char* prompt = _("Precision for block:");
|
||||||
if (onecell) prompt = _("Precision for cell:");
|
if (onecell) prompt = _("Precision for cell:");
|
||||||
int c = line_numedit(&n, prompt);
|
int c = line_numedit(&n, prompt);
|
||||||
@ -388,6 +384,22 @@ static void do_attribute(Sheet *cursheet, Key action)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*}}}*/
|
/*}}}*/
|
||||||
|
/* Set a color */ /*{{{*/
|
||||||
|
case ADJUST_BACKGROUND:
|
||||||
|
ca = BACKGROUND;
|
||||||
|
/* FALL THROUGH */
|
||||||
|
case ADJUST_FOREGROUND: {
|
||||||
|
int n = getcolor(fcell, ca);
|
||||||
|
const char* prompt = _("%s for block:");
|
||||||
|
if (onecell) prompt = _("%s for cell:");
|
||||||
|
char pbuf[256];
|
||||||
|
sprintf(pbuf, prompt, ColorAspect_Name[ca]);
|
||||||
|
int c = line_numedit(&n, pbuf);
|
||||||
|
if (c < 0) return;
|
||||||
|
for (ALL_LOCS_IN_REGION(cursheet,w))
|
||||||
|
changed = setcolor(cursheet, w, ca, (ColorNum)n) || changed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
/* 6 -- shadow */ /*{{{*/
|
/* 6 -- shadow */ /*{{{*/
|
||||||
case ADJUST_SHADOW:
|
case ADJUST_SHADOW:
|
||||||
{
|
{
|
||||||
@ -1443,6 +1455,8 @@ int do_sheetcmd(Sheet *cursheet, Key c, int moveonly)
|
|||||||
case ADJUST_SHADOW:
|
case ADJUST_SHADOW:
|
||||||
case ADJUST_BOLD:
|
case ADJUST_BOLD:
|
||||||
case ADJUST_UNDERLINE:
|
case ADJUST_UNDERLINE:
|
||||||
|
case ADJUST_FOREGROUND:
|
||||||
|
case ADJUST_BACKGROUND:
|
||||||
case ADJUST_TRANSPARENT:
|
case ADJUST_TRANSPARENT:
|
||||||
case ADJUST_LABEL:
|
case ADJUST_LABEL:
|
||||||
case ADJUST_LOCK:
|
case ADJUST_LOCK:
|
||||||
|
@ -85,7 +85,9 @@ typedef enum {
|
|||||||
FILL_BLOCK = -58,
|
FILL_BLOCK = -58,
|
||||||
ADJUST_DECIMAL = -59,
|
ADJUST_DECIMAL = -59,
|
||||||
ADJUST_COMPACT = -60,
|
ADJUST_COMPACT = -60,
|
||||||
ADJUST_HEXACT = -61
|
ADJUST_HEXACT = -61,
|
||||||
|
ADJUST_FOREGROUND = -62,
|
||||||
|
ADJUST_BACKGROUND = -63
|
||||||
} Key;
|
} Key;
|
||||||
|
|
||||||
extern int do_sheetcmd(Sheet *cursheet, Key c, int moveonly);
|
extern int do_sheetcmd(Sheet *cursheet, Key c, int moveonly);
|
||||||
|
@ -731,6 +731,21 @@ DEFSETTER(igncell, bool, ignored);
|
|||||||
DEFSETTER(setfltformat, FloatFormat, fform);
|
DEFSETTER(setfltformat, FloatFormat, fform);
|
||||||
DEFSETTER(setprecision, int, precision);
|
DEFSETTER(setprecision, int, precision);
|
||||||
|
|
||||||
|
/* sadly color has an extra argument */
|
||||||
|
bool setcolor(Sheet *sheet, const Location at, ColorAspect asp, ColorNum col)
|
||||||
|
{
|
||||||
|
assert(sheet != (Sheet*)0);
|
||||||
|
bool isnew = false;
|
||||||
|
Cell* thecell = initcellofsheet(sheet, at, &isnew);
|
||||||
|
if (isnew) sheet->changed = true;
|
||||||
|
if (thecell->aspect[asp] != col) {
|
||||||
|
thecell->aspect[asp] = col;
|
||||||
|
sheet->changed = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return isnew;
|
||||||
|
}
|
||||||
|
|
||||||
/* clk -- clock cell */ /*{{{*/
|
/* clk -- clock cell */ /*{{{*/
|
||||||
void clk(Sheet *sheet, const Location at)
|
void clk(Sheet *sheet, const Location at)
|
||||||
{
|
{
|
||||||
|
@ -100,6 +100,7 @@ bool setadjust(Sheet *sheet, const Location at, Adjust adjust);
|
|||||||
bool shadow(Sheet *sheet, const Location at, bool yep);
|
bool shadow(Sheet *sheet, const Location at, bool yep);
|
||||||
bool bold(Sheet *sheet, const Location at, bool yep);
|
bool bold(Sheet *sheet, const Location at, bool yep);
|
||||||
bool underline(Sheet *sheet, const Location at, bool yep);
|
bool underline(Sheet *sheet, const Location at, bool yep);
|
||||||
|
bool setcolor(Sheet *sheet, const Location at, ColorAspect asp, ColorNum col);
|
||||||
bool lockcell(Sheet *sheet, const Location at, bool yep);
|
bool lockcell(Sheet *sheet, const Location at, bool yep);
|
||||||
bool maketrans(Sheet *sheet, const Location at, bool yep);
|
bool maketrans(Sheet *sheet, const Location at, bool yep);
|
||||||
bool igncell(Sheet *sheet, const Location at, bool yep);
|
bool igncell(Sheet *sheet, const Location at, bool yep);
|
||||||
|
@ -117,12 +117,15 @@ static int do_attribute(Sheet *cursheet)
|
|||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
const char *typemenu[] =
|
const char *typemenu[] =
|
||||||
{ _("bB)old"), _("uU)nderline"), NULL };
|
{ _("bB)old"), _("uU)nderline"),
|
||||||
|
_("fF)oreground"), _("kBack)ground"), NULL };
|
||||||
switch (c = line_menu(prompt, typemenu, 0))
|
switch (c = line_menu(prompt, typemenu, 0))
|
||||||
{
|
{
|
||||||
case -2: case -1: c = K_INVALID; break;
|
case -2: case -1: c = K_INVALID; break;
|
||||||
case 0: c = ADJUST_BOLD; break;
|
case 0: c = ADJUST_BOLD; break;
|
||||||
case 1: c = ADJUST_UNDERLINE; break;
|
case 1: c = ADJUST_UNDERLINE; break;
|
||||||
|
case 2: c = ADJUST_FOREGROUND; break;
|
||||||
|
case 3: c = ADJUST_BACKGROUND; break;
|
||||||
default: assert(0);
|
default: assert(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -530,6 +533,17 @@ void redraw_sheet(Sheet *sheet)
|
|||||||
}
|
}
|
||||||
else realsize=size;
|
else realsize=size;
|
||||||
ms = getmarkstate(sheet);
|
ms = getmarkstate(sheet);
|
||||||
|
int usecp = 0;
|
||||||
|
ColorNum fg = getcolor(cell, FOREGROUND);
|
||||||
|
ColorNum bg = getcolor(cell, BACKGROUND);
|
||||||
|
while (usecp < curcp) {
|
||||||
|
unsigned short pfg, pbg;
|
||||||
|
pair_content(usecp, &pfg, &pbg);
|
||||||
|
if (fg == pfg && bg == pbg) break;
|
||||||
|
++usecp;
|
||||||
|
}
|
||||||
|
if (usecp == curcp) init_pair(curcp++, fg, bg);
|
||||||
|
wcolor_set(stdscr, usecp, NULL);
|
||||||
invert =
|
invert =
|
||||||
(ms != UNMARKED) && loc_in_box(tmp, sheet->mark1, sheet->mark2);
|
(ms != UNMARKED) && loc_in_box(tmp, sheet->mark1, sheet->mark2);
|
||||||
if (x == sheet->cur[X] && (y-header+sheet->offy) == sheet->cur[Y])
|
if (x == sheet->cur[X] && (y-header+sheet->offy) == sheet->cur[Y])
|
||||||
@ -540,6 +554,7 @@ void redraw_sheet(Sheet *sheet)
|
|||||||
(void)mvwaddstr(stdscr,sheet->oriy+y,sheet->orix+width,buf+cutoff);
|
(void)mvwaddstr(stdscr,sheet->oriy+y,sheet->orix+width,buf+cutoff);
|
||||||
for (fill=mbslen(buf+cutoff); fill<realsize; ++fill)
|
for (fill=mbslen(buf+cutoff); fill<realsize; ++fill)
|
||||||
(void)waddch(stdscr,(chtype)(unsigned char)' ');
|
(void)waddch(stdscr,(chtype)(unsigned char)' ');
|
||||||
|
wcolor_set(stdscr, 0, NULL);
|
||||||
wstandend(stdscr);
|
wstandend(stdscr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -554,7 +554,17 @@ class MainWindow {open}
|
|||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
label {&Precision...}
|
label {&Precision...}
|
||||||
user_data ADJUST_PRECISION
|
user_data ADJUST_PRECISION
|
||||||
xywh {0 0 36 21} shortcut 0x80070 divider
|
xywh {0 0 36 21} shortcut 0x80070
|
||||||
|
}
|
||||||
|
MenuItem {} {
|
||||||
|
label {&Foreground...}
|
||||||
|
user_data ADJUST_FOREGROUND
|
||||||
|
xywh {0 0 36 21}
|
||||||
|
}
|
||||||
|
MenuItem {} {
|
||||||
|
label {&Background...}
|
||||||
|
user_data ADJUST_BACKGROUND
|
||||||
|
xywh {0 0 36 21} divider
|
||||||
}
|
}
|
||||||
menuitem dec {
|
menuitem dec {
|
||||||
label {&Decimal}
|
label {&Decimal}
|
||||||
|
Loading…
Reference in New Issue
Block a user