diff --git a/src/source_diff.cc b/src/source_diff.cc index 96889ce..b2a2ddf 100644 --- a/src/source_diff.cc +++ b/src/source_diff.cc @@ -13,22 +13,22 @@ void Source::DiffView::Renderer::draw_vfunc(const Cairo::RefPtr const Gdk::Rectangle &cell_area, Gtk::TextIter &start, Gtk::TextIter &end, Gsv::GutterRendererState p6) { if(start.has_tag(tag_added) || end.has_tag(tag_added)) { - cr->set_source_rgba(0.0, 1.0, 0.0, 0.5); + cr->set_source_rgba(green.get_red(), green.get_green(), green.get_blue(), green.get_alpha()); cr->rectangle(cell_area.get_x(), cell_area.get_y(), 4, cell_area.get_height()); cr->fill(); } else if(start.has_tag(tag_modified) || end.has_tag(tag_modified)) { - cr->set_source_rgba(0.9, 0.9, 0.0, 0.75); + cr->set_source_rgba(yellow.get_red(), yellow.get_green(), yellow.get_blue(), yellow.get_alpha()); cr->rectangle(cell_area.get_x(), cell_area.get_y(), 4, cell_area.get_height()); cr->fill(); } if(start.has_tag(tag_removed_below) || end.has_tag(tag_removed_below)) { - cr->set_source_rgba(1.0, 0.0, 0.0, 0.5); + cr->set_source_rgba(red.get_red(), red.get_green(), red.get_blue(), red.get_alpha()); cr->rectangle(cell_area.get_x() - 4, cell_area.get_y() + cell_area.get_height() - 2, 8, 2); cr->fill(); } if(start.has_tag(tag_removed_above) || end.has_tag(tag_removed_above)) { - cr->set_source_rgba(1.0, 0.0, 0.0, 0.5); + cr->set_source_rgba(red.get_red(), red.get_green(), red.get_blue(), red.get_alpha()); cr->rectangle(cell_area.get_x() - 4, cell_area.get_y(), 8, 2); cr->fill(); } @@ -60,6 +60,28 @@ Source::DiffView::~DiffView() { } void Source::DiffView::configure() { + // Set colors + auto &yellow = renderer->yellow; + auto &red = renderer->red; + auto &green = renderer->green; + auto normal_color = get_style_context()->get_color(Gtk::StateFlags::STATE_FLAG_NORMAL); + auto light_theme = (normal_color.get_red() + normal_color.get_green() + normal_color.get_blue()) / 3 < 0.5; + yellow.set_rgba(1.0, 1.0, 0.2); + double factor = light_theme ? 0.8 : 0.5; + yellow.set_red(normal_color.get_red() + factor * (yellow.get_red() - normal_color.get_red())); + yellow.set_green(normal_color.get_green() + factor * (yellow.get_green() - normal_color.get_green())); + yellow.set_blue(normal_color.get_blue() + factor * (yellow.get_blue() - normal_color.get_blue())); + red.set_rgba(1.0, 0.0, 0.0); + factor = light_theme ? 0.8 : 0.35; + red.set_red(normal_color.get_red() + factor * (red.get_red() - normal_color.get_red())); + red.set_green(normal_color.get_green() + factor * (red.get_green() - normal_color.get_green())); + red.set_blue(normal_color.get_blue() + factor * (red.get_blue() - normal_color.get_blue())); + green.set_rgba(0.0, 1.0, 0.0); + factor = light_theme ? 0.7 : 0.4; + green.set_red(normal_color.get_red() + factor * (green.get_red() - normal_color.get_red())); + green.set_green(normal_color.get_green() + factor * (green.get_green() - normal_color.get_green())); + green.set_blue(normal_color.get_blue() + factor * (green.get_blue() - normal_color.get_blue())); + if(Config::get().source.show_git_diff) { if(repository) return; diff --git a/src/source_diff.h b/src/source_diff.h index 49e3bd1..fa8ce6e 100644 --- a/src/source_diff.h +++ b/src/source_diff.h @@ -23,6 +23,8 @@ namespace Source { Glib::RefPtr tag_removed_below; Glib::RefPtr tag_removed_above; + Gdk::RGBA yellow, red, green; + protected: void draw_vfunc(const Cairo::RefPtr &cr, const Gdk::Rectangle &background_area, const Gdk::Rectangle &cell_area, Gtk::TextIter &start, Gtk::TextIter &end,