[gitg] Use theme bg/fg colors for selection
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Use theme bg/fg colors for selection
- Date: Sun, 20 Dec 2015 12:18:46 +0000 (UTC)
commit 1c4ea3543e2e327f7adf71df3f18cee6f593068b
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Sun Dec 20 13:13:11 2015 +0100
Use theme bg/fg colors for selection
libgitg/gitg-diff-view-file.vala | 51 +++++++++++++++++++++++++++++++------
1 files changed, 42 insertions(+), 9 deletions(-)
---
diff --git a/libgitg/gitg-diff-view-file.vala b/libgitg/gitg-diff-view-file.vala
index 025df56..6a40326 100644
--- a/libgitg/gitg-diff-view-file.vala
+++ b/libgitg/gitg-diff-view-file.vala
@@ -36,6 +36,7 @@ class Gitg.DiffViewFile : Gtk.Grid
private Gtk.SourceView d_sourceview_hunks;
private string d_selection_category = "selection";
+ private Gtk.TextTag d_selection_tag;
private uint d_added;
private uint d_removed;
@@ -161,13 +162,18 @@ class Gitg.DiffViewFile : Gtk.Grid
d_sourceview_hunks.realize.connect(() => {
update_cursor(Gdk.CursorType.LEFT_PTR);
});
+
d_sourceview_hunks.notify["state-flags"].connect(() => {
update_cursor(Gdk.CursorType.LEFT_PTR);
});
+
+ d_selection_tag = d_sourceview_hunks.buffer.create_tag("selection");
}
d_sourceview_hunks.set_border_window_size(Gtk.TextWindowType.TOP, 1);
+ d_sourceview_hunks.style_updated.connect(update_theme);
+
var settings = Gtk.Settings.get_default();
settings.notify["gtk-application-prefer-dark-theme"].connect(update_theme);
update_theme();
@@ -197,20 +203,33 @@ class Gitg.DiffViewFile : Gtk.Grid
if (settings.gtk_application_prefer_dark_theme)
{
- selection_attributes.background = Gdk.RGBA() { red = 52.0 / 255.0, green = 101.0 /
255.0, blue = 164.0 / 255.0, alpha = 1.0 };
header_attributes.background = Gdk.RGBA() { red = 224.0 / 255.0, green = 239.0 /
255.0, blue = 1.0, alpha = 1.0 };
added_attributes.background = Gdk.RGBA() { red = 164.0 / 255.0, green = 0.0, blue =
0.0, alpha = 1.0 };
removed_attributes.background = Gdk.RGBA() { red = 78.0 / 255.0, green = 154.0 /
255.0, blue = 6.0 / 255.0, alpha = 1.0 };
}
else
{
- selection_attributes.background = Gdk.RGBA() { red = 168.0 / 255.0, green = 207.0 /
255.0, blue = 214.0 / 255.0, alpha = 1.0 };
header_attributes.background = Gdk.RGBA() { red = 224.0 / 255.0, green = 239.0 /
255.0, blue = 1.0, alpha = 1.0 };
added_attributes.background = Gdk.RGBA() { red = 220.0 / 255.0, green = 1.0, blue =
220.0 / 255.0, alpha = 1.0 };
removed_attributes.background = Gdk.RGBA() { red = 1.0, green = 220.0 / 255.0, blue =
220.0 / 255.0, alpha = 1.0 };
}
+ var context = d_sourceview_hunks.get_style_context();
+
+ Gdk.RGBA theme_selected_bg_color, theme_selected_fg_color;
+
+ if (context.lookup_color("theme_selected_bg_color", out theme_selected_bg_color))
+ {
+ selection_attributes.background = theme_selected_bg_color;
+ }
+
+ if (context.lookup_color("theme_selected_fg_color", out theme_selected_fg_color))
+ {
+ d_selection_tag.foreground_rgba = theme_selected_fg_color;
+ }
+
d_sourceview_hunks.set_mark_attributes(d_selection_category, selection_attributes, 0);
+
d_sourceview_hunks.set_mark_attributes("header", header_attributes, 0);
d_sourceview_hunks.set_mark_attributes("added", added_attributes, 0);
d_sourceview_hunks.set_mark_attributes("removed", removed_attributes, 0);
@@ -256,6 +275,10 @@ class Gitg.DiffViewFile : Gtk.Grid
var win = text_view.get_window(Gtk.TextWindowType.TEXT);
int x, y, width, height;
+ // To silence unassigned iter warning
+ var dummy_iter = Gtk.TextIter();
+ iter = dummy_iter;
+
width = win.get_width();
height = win.get_height();
@@ -280,18 +303,27 @@ class Gitg.DiffViewFile : Gtk.Grid
var text_view = d_sourceview_hunks as Gtk.TextView;
var buffer = text_view.get_buffer() as Gtk.SourceBuffer;
- start.order(end);
+ Gtk.TextIter real_start, real_end;
- while (start.get_line() <= end.get_line())
- {
- start.set_line_offset(0);
+ real_start = start;
+ real_end = end;
- if (get_line_is_diff(start))
+ real_start.order(real_end);
+ real_start.set_line_offset(0);
+
+ while (real_start.get_line() <= real_end.get_line())
+ {
+ if (get_line_is_diff(real_start))
{
- buffer.create_source_mark(null, d_selection_category, start);
+ buffer.create_source_mark(null, d_selection_category, real_start);
+
+ var line_end = real_start;
+ line_end.forward_to_line_end();
+
+ buffer.apply_tag(d_selection_tag, real_start, line_end);
}
- if (!start.forward_line())
+ if (!real_start.forward_line())
{
break;
}
@@ -312,6 +344,7 @@ class Gitg.DiffViewFile : Gtk.Grid
real_end.forward_to_line_end();
buffer.remove_source_marks(real_start, real_end, d_selection_category);
+ buffer.remove_tag(d_selection_tag, real_start, real_end);
}
private bool d_is_selecting;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]