summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-03-06 20:25:23 +0100
committerMaxime Coste <frrrwww@gmail.com>2013-03-06 20:28:02 +0100
commitf677d4ba32ea09aa9de2d5efd3407e842995c292 (patch)
tree6e20e677432e799b94169a161a5bded36729384b
parent594ee65949aebafef5848c458bcbb7093c204360 (diff)
Use a ColorPair in DisplayAtoms instead of separate fg/bg colors
-rw-r--r--src/color.hh2
-rw-r--r--src/color_registry.hh2
-rw-r--r--src/display_buffer.cc3
-rw-r--r--src/display_buffer.hh7
-rw-r--r--src/highlighters.cc22
-rw-r--r--src/ncurses.cc30
-rw-r--r--src/remote.cc7
7 files changed, 31 insertions, 42 deletions
diff --git a/src/color.hh b/src/color.hh
index 61a57153..21676fe6 100644
--- a/src/color.hh
+++ b/src/color.hh
@@ -17,6 +17,8 @@ enum class Color : char
White
};
+using ColorPair = std::pair<Color, Color>;
+
}
#endif // color_hh_INCLUDED
diff --git a/src/color_registry.hh b/src/color_registry.hh
index 711ff204..4b6256fc 100644
--- a/src/color_registry.hh
+++ b/src/color_registry.hh
@@ -9,8 +9,6 @@
namespace Kakoune
{
-using ColorPair = std::pair<Color, Color>;
-
class ColorRegistry : public Singleton<ColorRegistry>
{
public:
diff --git a/src/display_buffer.cc b/src/display_buffer.cc
index bdd7d68a..dbc3a596 100644
--- a/src/display_buffer.cc
+++ b/src/display_buffer.cc
@@ -30,8 +30,7 @@ void DisplayLine::optimize()
auto& atom = *atom_it;
auto& next_atom = *next_atom_it;
- if (atom.fg_color == next_atom.fg_color and
- atom.bg_color == next_atom.bg_color and
+ if (atom.colors == next_atom.colors and
atom.attribute == next_atom.attribute and
atom.content.type() == AtomContent::BufferRange and
next_atom.content.type() == AtomContent::BufferRange and
diff --git a/src/display_buffer.hh b/src/display_buffer.hh
index ef00a19b..3879a31e 100644
--- a/src/display_buffer.hh
+++ b/src/display_buffer.hh
@@ -110,15 +110,14 @@ private:
struct DisplayAtom
{
- Color fg_color;
- Color bg_color;
+ ColorPair colors;
Attribute attribute;
AtomContent content;
DisplayAtom(AtomContent content)
- : content(std::move(content)), attribute(Normal),
- fg_color(Color::Default), bg_color(Color::Default) {}
+ : content{std::move(content)}, attribute{Normal},
+ colors{Color::Default, Color::Default} {}
};
class DisplayLine
diff --git a/src/highlighters.cc b/src/highlighters.cc
index aec305e2..c7238bfe 100644
--- a/src/highlighters.cc
+++ b/src/highlighters.cc
@@ -81,10 +81,7 @@ public:
continue;
highlight_range(display_buffer, match[n].first, match[n].second, true,
- [&](DisplayAtom& atom) {
- atom.fg_color = col_it->second->first;
- atom.bg_color = col_it->second->second;
- });
+ [&](DisplayAtom& atom) { atom.colors = *col_it->second; });
}
}
}
@@ -257,8 +254,7 @@ void show_line_numbers(DisplayBuffer& display_buffer)
char buffer[10];
snprintf(buffer, 10, format, (int)line.buffer_line() + 1);
DisplayAtom atom = DisplayAtom(AtomContent(buffer));
- atom.fg_color = Color::Black;
- atom.bg_color = Color::White;
+ atom.colors = { Color::Black, Color::White };
line.insert(line.begin(), std::move(atom));
}
}
@@ -272,12 +268,12 @@ void highlight_selections(const SelectionList& selections, DisplayBuffer& displa
BufferIterator begin = forward ? sel.first() : utf8::next(sel.last());
BufferIterator end = forward ? sel.last() : utf8::next(sel.first());
- Color fg_color = (i == selections.size() - 1) ? Color::Cyan : Color::Black;
- Color bg_color = (i == selections.size() - 1) ? Color::Blue : Color::Blue;
+ ColorPair colors = (i == selections.size() - 1) ? ColorPair{ Color::Cyan, Color::Blue }
+ : ColorPair{ Color::Black, Color::Blue };
highlight_range(display_buffer, begin, end, false,
- [&](DisplayAtom& atom) { atom.fg_color = fg_color; atom.bg_color = bg_color; });
+ [&](DisplayAtom& atom) { atom.colors = colors; });
highlight_range(display_buffer, sel.last(), utf8::next(sel.last()), false,
- [](DisplayAtom& atom) { atom.fg_color = Color::Black; atom.bg_color = Color::White; });
+ [](DisplayAtom& atom) { atom.colors = { Color::Black, Color::White}; });
}
}
@@ -301,8 +297,7 @@ void expand_unprintable(DisplayBuffer& display_buffer)
highlight_range(display_buffer,
it.underlying_iterator(), (it+1).underlying_iterator(),
true, [&str](DisplayAtom& atom){ atom.content.replace(str);
- atom.bg_color = Color::Red;
- atom.fg_color = Color::Black; });
+ atom.colors = { Color::Red, Color::Black }; });
}
}
}
@@ -329,8 +324,7 @@ public:
{
const bool flagged = contains(lines, (int)line.buffer_line() + 1);
DisplayAtom atom{AtomContent(flagged ? m_flag : empty)};
- atom.fg_color = Color::Blue;
- atom.bg_color = Color::Cyan;
+ atom.colors = { Color::Blue, Color::Cyan };
line.insert(line.begin(), std::move(atom));
}
}
diff --git a/src/ncurses.cc b/src/ncurses.cc
index 36a40712..feda76a3 100644
--- a/src/ncurses.cc
+++ b/src/ncurses.cc
@@ -43,34 +43,32 @@ static int nc_color(Color color)
}
}
-static int get_color_pair(Color fg_color, Color bg_color)
+static int get_color_pair(const ColorPair& colors)
{
- static std::map<std::pair<Color, Color>, int> colorpairs;
+ static std::map<ColorPair, int> colorpairs;
static int next_pair = 1;
- std::pair<Color, Color> colorpair(fg_color, bg_color);
-
- auto it = colorpairs.find(colorpair);
+ auto it = colorpairs.find(colors);
if (it != colorpairs.end())
return it->second;
else
{
- init_pair(next_pair, nc_color(fg_color), nc_color(bg_color));
- colorpairs[colorpair] = next_pair;
+ init_pair(next_pair, nc_color(colors.first), nc_color(colors.second));
+ colorpairs[colors] = next_pair;
return next_pair++;
}
}
-static void set_color(Color fg_color, Color bg_color)
+static void set_color(const ColorPair colors)
{
static int current_pair = -1;
if (current_pair != -1)
attroff(COLOR_PAIR(current_pair));
- if (fg_color != Color::Default or bg_color != Color::Default)
+ if (colors.first != Color::Default or colors.second != Color::Default)
{
- current_pair = get_color_pair(fg_color, bg_color);
+ current_pair = get_color_pair(colors);
attron(COLOR_PAIR(current_pair));
}
}
@@ -101,8 +99,8 @@ NCursesUI::NCursesUI()
use_default_colors();
ESCDELAY=25;
- m_menu_fg = get_color_pair(Color::Blue, Color::Cyan);
- m_menu_bg = get_color_pair(Color::Cyan, Color::Blue);
+ m_menu_fg = get_color_pair({ Color::Blue, Color::Cyan });
+ m_menu_bg = get_color_pair({ Color::Cyan, Color::Blue });
signal(SIGWINCH, on_term_resize);
signal(SIGINT, on_sigint);
@@ -175,7 +173,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
set_attribute(A_BLINK, atom.attribute & Blink);
set_attribute(A_BOLD, atom.attribute & Bold);
- set_color(atom.fg_color, atom.bg_color);
+ set_color(atom.colors);
String content = atom.content.content();
if (content[content.length()-1] == '\n' and
@@ -200,7 +198,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
set_attribute(A_REVERSE, 0);
set_attribute(A_BLINK, 0);
set_attribute(A_BOLD, 0);
- set_color(Color::Blue, Color::Default);
+ set_color({ Color::Blue, Color::Default });
for (;line_index < m_dimensions.line; ++line_index)
{
move((int)line_index, 0);
@@ -208,7 +206,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
addch('~');
}
- set_color(Color::Cyan, Color::Default);
+ set_color({ Color::Cyan, Color::Default });
draw_status();
CharCount status_len = mode_line.char_length();
// only draw mode_line if it does not overlap one status line
@@ -461,7 +459,7 @@ void NCursesUI::info_show(const String& content, const DisplayCoord& anchor, Men
m_info_win = newwin((int)size.line, (int)size.column,
(int)pos.line, (int)pos.column);
- wbkgd(m_info_win, COLOR_PAIR(get_color_pair(Color::Black, Color::Yellow)));
+ wbkgd(m_info_win, COLOR_PAIR(get_color_pair({ Color::Black, Color::Yellow })));
wmove(m_info_win, 0, 0);
addutf8str(m_info_win, Utf8Iterator(content.begin()),
Utf8Iterator(content.end()));
diff --git a/src/remote.cc b/src/remote.cc
index f82837df..f46a0487 100644
--- a/src/remote.cc
+++ b/src/remote.cc
@@ -70,8 +70,8 @@ public:
void write(const DisplayAtom& atom)
{
- write(atom.fg_color);
- write(atom.bg_color);
+ write(atom.colors.first);
+ write(atom.colors.second);
write(atom.attribute);
write(atom.content.content());
}
@@ -144,8 +144,7 @@ DisplayAtom read<DisplayAtom>(int socket)
Color bg_color = read<Color>(socket);
Attribute attribute = read<Attribute>(socket);
DisplayAtom atom(AtomContent(read<String>(socket)));
- atom.fg_color = fg_color;
- atom.bg_color = bg_color;
+ atom.colors = { fg_color, bg_color };
atom.attribute = attribute;
return atom;
}